diff --git a/include/btstack/hci_cmds.h b/include/btstack/hci_cmds.h index 39046457a..52df1dfb6 100644 --- a/include/btstack/hci_cmds.h +++ b/include/btstack/hci_cmds.h @@ -648,6 +648,8 @@ extern "C" { #define HFP_SUBEVENT_CALL_ANSWERED 0x13 #define HFP_SUBEVENT_CONFERENCE_CALL 0x14 #define HFP_SUBEVENT_RING 0x15 +#define HFP_SUBEVENT_SPEAKER_VOLUME 0x16 +#define HFP_SUBEVENT_MICROPHONE_VOLUME 0x17 // ANCS Client #define ANCS_CLIENT_CONNECTED 0xF0 diff --git a/src/hfp_hf.c b/src/hfp_hf.c index 085f3c190..e484e1e93 100644 --- a/src/hfp_hf.c +++ b/src/hfp_hf.c @@ -843,6 +843,14 @@ static void hfp_handle_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8 } switch (context->command){ + case HFP_CMD_SET_SPEAKER_GAIN: + context->command = HFP_CMD_NONE; + hfp_emit_event(hfp_callback, HFP_SUBEVENT_SPEAKER_VOLUME, atoi((char*)context->line_buffer)); + break; + case HFP_CMD_SET_MICROPHONE_GAIN: + context->command = HFP_CMD_NONE; + hfp_emit_event(hfp_callback, HFP_SUBEVENT_MICROPHONE_VOLUME, atoi((char*)context->line_buffer)); + break; case HFP_CMD_AG_SENT_PHONE_NUMBER: context->command = HFP_CMD_NONE; hfp_emit_string_event(hfp_callback, HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG, context->bnip_number); diff --git a/test/pts/hfp_hf_test.c b/test/pts/hfp_hf_test.c index 9b60b56a6..7893dc0c0 100644 --- a/test/pts/hfp_hf_test.c +++ b/test/pts/hfp_hf_test.c @@ -357,7 +357,9 @@ static void packet_handler(uint8_t * event, uint16_t event_size){ if (event[0] != HCI_EVENT_HFP_META) return; if (event[3] && event[2] != HFP_SUBEVENT_EXTENDED_AUDIO_GATEWAY_ERROR - && event[2] != HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG){ + && event[2] != HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG + && event[2] != HFP_SUBEVENT_SPEAKER_VOLUME + && event[2] != HFP_SUBEVENT_MICROPHONE_VOLUME){ printf("ERROR, status: %u\n", event[3]); return; } @@ -401,6 +403,12 @@ static void packet_handler(uint8_t * event, uint16_t event_size){ case HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG: printf("Phone number for voice tag: %s\n", (const char *) &event[3]); break; + case HFP_SUBEVENT_SPEAKER_VOLUME: + printf("Speaker volume: %u\n", event[3]); + break; + case HFP_SUBEVENT_MICROPHONE_VOLUME: + printf("Microphone volume: %u\n", event[3]); + break; default: printf("event not handled %u\n", event[2]); break;