mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-13 04:13:54 +00:00
hfp: place call with number
This commit is contained in:
parent
25ec4d39d5
commit
daf14d5808
@ -640,7 +640,7 @@ extern "C" {
|
||||
#define HFP_SUBEVENT_START_RINGINIG 0x0A
|
||||
#define HFP_SUBEVENT_STOP_RINGINIG 0x0B
|
||||
#define HFP_SUBEVENT_CALL_TERMINATED 0x0C
|
||||
|
||||
#define HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER 0x0D
|
||||
|
||||
|
||||
|
||||
|
19
src/hfp.c
19
src/hfp.c
@ -204,6 +204,17 @@ void hfp_emit_event(hfp_callback_t callback, uint8_t event_subtype, uint8_t valu
|
||||
(*callback)(event, sizeof(event));
|
||||
}
|
||||
|
||||
void hfp_emit_string_event(hfp_callback_t callback, uint8_t event_subtype, const char * value){
|
||||
if (!callback) return;
|
||||
uint8_t event[24];
|
||||
event[0] = HCI_EVENT_HFP_META;
|
||||
event[1] = sizeof(event) - 2;
|
||||
event[2] = event_subtype;
|
||||
int size = sizeof(value) < sizeof(event) - 4? sizeof(value) : sizeof(event) - 4;
|
||||
strncpy((char*)&event[3], value, size);
|
||||
(*callback)(event, sizeof(event));
|
||||
}
|
||||
|
||||
static void hfp_emit_audio_connection_established_event(hfp_callback_t callback, uint8_t value, uint16_t sco_handle){
|
||||
if (!callback) return;
|
||||
uint8_t event[6];
|
||||
@ -613,6 +624,10 @@ static hfp_command_t parse_command(const char * line_buffer, int isHandsFree){
|
||||
return HFP_CMD_CALL_ANSWERED;
|
||||
}
|
||||
|
||||
if (strncmp(line_buffer+offset, HFP_CALL_PHONE_NUMBER, strlen(HFP_CALL_PHONE_NUMBER)) == 0){
|
||||
return HFP_CMD_CALL_PHONE_NUMBER;
|
||||
}
|
||||
|
||||
if (strncmp(line_buffer+offset, HFP_CHANGE_IN_BAND_RING_TONE_SETTING, strlen(HFP_CHANGE_IN_BAND_RING_TONE_SETTING)) == 0){
|
||||
return HFP_CMD_CHANGE_IN_BAND_RING_TONE_SETTING;
|
||||
}
|
||||
@ -861,6 +876,10 @@ void hfp_parse(hfp_connection_t * context, uint8_t byte, int isHandsFree){
|
||||
|
||||
case HFP_PARSER_CMD_SEQUENCE: // parse comma separated sequence, ignore breacktes
|
||||
switch (context->command){
|
||||
case HFP_CMD_CALL_PHONE_NUMBER:
|
||||
context->place_call_with_number = (char *)context->line_buffer;
|
||||
log_info("hfp parse HFP_CMD_CALL_PHONE_NUMBER %s", context->place_call_with_number);
|
||||
break;
|
||||
case HFP_CMD_CHANGE_IN_BAND_RING_TONE_SETTING:
|
||||
value = atoi((char *)&context->line_buffer[0]);
|
||||
context->remote_supported_features = store_bit(context->remote_supported_features, HFP_AGSF_IN_BAND_RING_TONE, value);
|
||||
|
@ -118,6 +118,7 @@ extern "C" {
|
||||
#define HFP_CALL_ANSWERED "ATA"
|
||||
#define HFP_HANG_UP_CALL "+CHUP"
|
||||
#define HFP_CHANGE_IN_BAND_RING_TONE_SETTING "+BSIR"
|
||||
#define HFP_CALL_PHONE_NUMBER "ATD"
|
||||
|
||||
#define HFP_OK "OK"
|
||||
#define HFP_ERROR "ERROR"
|
||||
@ -159,7 +160,8 @@ typedef enum {
|
||||
HFP_CMD_CALL_ANSWERED,
|
||||
HFP_CMD_AG_ANSWER_CALL,
|
||||
HFP_CMD_HANG_UP_CALL,
|
||||
HFP_CMD_CHANGE_IN_BAND_RING_TONE_SETTING
|
||||
HFP_CMD_CHANGE_IN_BAND_RING_TONE_SETTING,
|
||||
HFP_CMD_CALL_PHONE_NUMBER
|
||||
} hfp_command_t;
|
||||
|
||||
typedef enum {
|
||||
@ -411,8 +413,11 @@ typedef struct hfp_connection {
|
||||
uint8_t run_call_state_machine;
|
||||
uint8_t change_in_band_ring_tone_setting;
|
||||
uint8_t ag_ring;
|
||||
|
||||
char * place_call_with_number;
|
||||
timer_source_t hfp_timeout;
|
||||
|
||||
|
||||
} hfp_connection_t;
|
||||
|
||||
// UTILS_START : TODO move to utils
|
||||
@ -426,6 +431,7 @@ int store_bit(uint32_t bitmap, int position, uint8_t value);
|
||||
void hfp_create_sdp_record(uint8_t * service, uint16_t service_uuid, int rfcomm_channel_nr, const char * name);
|
||||
void hfp_handle_hci_event(hfp_callback_t callback, uint8_t packet_type, uint8_t *packet, uint16_t size);
|
||||
void hfp_emit_event(hfp_callback_t callback, uint8_t event_subtype, uint8_t value);
|
||||
void hfp_emit_string_event(hfp_callback_t callback, uint8_t event_subtype, const char * value);
|
||||
|
||||
hfp_connection_t * get_hfp_connection_context_for_rfcomm_cid(uint16_t cid);
|
||||
hfp_connection_t * get_hfp_connection_context_for_bd_addr(bd_addr_t bd_addr);
|
||||
|
@ -1007,10 +1007,13 @@ static void hfp_handle_rfcomm_data(uint8_t packet_type, uint16_t channel, uint8_
|
||||
context->command = HFP_CMD_NONE;
|
||||
hfp_ag_call_sm(HFP_AG_INCOMING_CALL_ACCEPTED_BY_HF, context);
|
||||
break;
|
||||
case HFP_CMD_HANG_UP_CALL:
|
||||
case HFP_CMD_HANG_UP_CALL:
|
||||
context->command = HFP_CMD_NONE;
|
||||
context->ok_pending = 1;
|
||||
hfp_ag_call_sm(HFP_AG_TERMINATE_CALL_BY_HF, context);
|
||||
case HFP_CMD_CALL_PHONE_NUMBER:
|
||||
hfp_emit_string_event(hfp_callback, HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER, context->place_call_with_number);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user