This commit is contained in:
Matthias Ringwald 2015-12-07 10:08:02 +01:00
commit cd13042dd3
8 changed files with 731 additions and 137 deletions

View File

@ -1771,6 +1771,11 @@ static void packet_handler(void * connection, uint8_t packet_type, uint16_t chan
hfp_run();
}
static void hfp_ag_set_ag_indicators(hfp_ag_indicator_t * ag_indicators, int ag_indicators_nr){
hfp_ag_indicators_nr = ag_indicators_nr;
memcpy(hfp_ag_indicators, ag_indicators, ag_indicators_nr * sizeof(hfp_ag_indicator_t));
}
void hfp_ag_init(uint16_t rfcomm_channel_nr, uint32_t supported_features,
uint8_t * codecs, int codecs_nr,
hfp_ag_indicator_t * ag_indicators, int ag_indicators_nr,
@ -1795,8 +1800,7 @@ void hfp_ag_init(uint16_t rfcomm_channel_nr, uint32_t supported_features,
hfp_codecs[i] = codecs[i];
}
hfp_ag_indicators_nr = ag_indicators_nr;
memcpy(hfp_ag_indicators, ag_indicators, ag_indicators_nr * sizeof(hfp_ag_indicator_t));
hfp_ag_set_ag_indicators(ag_indicators, ag_indicators_nr);
set_hfp_generic_status_indicators(hf_indicators, hf_indicators_nr);

View File

@ -74,6 +74,13 @@ with open (infile, 'rb') as fin:
print separator+spaces+"\""+cmd+"\"",
separator = ",\n"
else:
parts = re.match('USER:\'(.*)\'.*',packet)
if parts:
cmd = 'USER:'+parts.groups()[0]
print separator+spaces+"\""+cmd+"\"",
separator = ",\n"
except TypeError:
print "\n};\n"

View File

@ -84,6 +84,17 @@ static hfp_ag_indicator_t ag_indicators[] = {
{7, "callheld", 0, 2, 0, 1, 1, 0}
};
hfp_ag_indicator_t ag_indicators_temp[] = {
// index, name, min range, max range, status, mandatory, enabled, status changed
{1, "service", 0, 1, 1, 0, 0, 0},
{2, "call", 0, 1, 0, 1, 1, 0},
{3, "callsetup", 0, 3, 0, 1, 1, 0},
{4, "battchg", 0, 5, 3, 0, 0, 0},
{5, "signal", 0, 5, 5, 0, 0, 0},
{6, "roam", 0, 1, 0, 0, 0, 0},
{7, "callheld", 0, 2, 0, 1, 1, 0}
};
static int supported_features_with_codec_negotiation = 4079; // 0011 1110 1111
static int call_hold_services_nr = 5;
@ -107,7 +118,6 @@ static uint16_t handle = -1;
static int memory_1_enabled = 1;
static int last_number_exists = 1;
int has_more_hfp_ag_commands(){
return has_more_hfp_commands(2,2);
}
@ -302,27 +312,31 @@ static void user_command(char cmd){
}
}
void simulate_test_sequence(hfp_test_item_t * test_item){
static void simulate_test_sequence(hfp_test_item_t * test_item){
char ** test_steps = test_item->test;
printf("\nSimulate test sequence: \"%s\"\n", test_item->name);
int i = 0;
static char * previous_cmd = NULL;
while (i < test_item->len){
char * expected_cmd = test_steps[i];
int expected_cmd_len = strlen(expected_cmd);
if (strncmp(expected_cmd, "USER:", 5) == 0){
printf("\n---> USER: ");
user_command(expected_cmd[5]);
i++;
} else if (strncmp(expected_cmd, "AT", 2) == 0){
//printf("\n---> NEXT STEP receive from HF: '%s'\n", expected_cmd);
// printf("\n---> NEXT STEP receive from HF: '%s'\n", expected_cmd);
inject_hfp_command_to_ag((uint8_t*)expected_cmd, expected_cmd_len);
i++;
} else {
printf("\n---> NEXT STEP expect from AG: %s\n", expected_cmd);
while (has_more_hfp_ag_commands()){
char * ag_cmd = get_next_hfp_ag_command();
//printf("AG response verify %s == %s[%d]\n", expected_cmd, ag_cmd, expected_cmd_len);
int equal_cmds = strncmp(ag_cmd, expected_cmd, expected_cmd_len) == 0;
if (!equal_cmds){
@ -331,6 +345,8 @@ void simulate_test_sequence(hfp_test_item_t * test_item){
return;
}
printf("Verified: '%s'\n", expected_cmd);
previous_cmd = ag_cmd;
i++;
if (i < test_item->len){
expected_cmd = test_steps[i];
@ -388,6 +404,19 @@ void packet_handler(uint8_t * event, uint16_t event_size){
case HFP_CMD_CALL_ANSWERED:
//printf("HF answers call, accept call by GSM\n");
break;
case HFP_SUBEVENT_REDIAL_LAST_NUMBER:
printf("\n** Redial last number\n");
if (last_number_exists){
hfp_ag_outgoing_call_accepted();
printf("Last number exists: accept call\n");
// TODO: calling ringing right away leads to callstatus=2 being skipped. don't call for now
// hfp_ag_outgoing_call_ringing();
} else {
printf("Last number missing: reject call\n");
hfp_ag_outgoing_call_rejected();
}
break;
default:
printf("hfp_ag_client_test: event not handled %u\n", event[2]);
break;
@ -419,26 +448,43 @@ TEST_GROUP(HFPClient){
codecs_connection_established = 0;
audio_connection_established = 0;
}
void setup_hfp_service_level_connection(hfp_test_item_t * test_item){
service_level_connection_established = 0;
hfp_ag_establish_service_level_connection(device_addr);
simulate_test_sequence(test_item);
}
void setup_hfp_codecs_connection(hfp_test_item_t * test_item){
codecs_connection_established = 0;
simulate_test_sequence(test_item);
}
};
// TEST(HFPClient, PTSATATests){
// for (int i = 0; i < hfp_pts_ag_ata_tests_size(); i++){
// simulate_test_sequence(&hfp_pts_ag_ata_tests()[i]);
// TEST(HFPClient, PTSRHHTests){
// for (int i = 0; i < hfp_pts_ag_rhh_tests_size(); i++){
// simulate_test_sequence(&hfp_pts_ag_rhh_tests()[i]);
// teardown();
// }
// }
// TEST(HFPClient, PTSECCTests){
// for (int i = 0; i < hfp_pts_ag_ecc_tests_size(); i++){
// simulate_test_sequence(&hfp_pts_ag_ecc_tests()[i]);
// teardown();
// }
// }
// TEST(HFPClient, PTSECSTests){
// for (int i = 0; i < hfp_pts_ag_ecs_tests_size(); i++){
// simulate_test_sequence(&hfp_pts_ag_ecs_tests()[i]);
// teardown();
// }
// }
TEST(HFPClient, PTSTWCTests){
for (int i = 0; i < hfp_pts_ag_twc_tests_size(); i++){
simulate_test_sequence(&hfp_pts_ag_twc_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSATATests){
for (int i = 0; i < hfp_pts_ag_ata_tests_size(); i++){
simulate_test_sequence(&hfp_pts_ag_ata_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSSLCTests){
for (int i = 0; i < hfp_pts_ag_slc_tests_size(); i++){
simulate_test_sequence(&hfp_pts_ag_slc_tests()[i]);
@ -446,71 +492,6 @@ TEST(HFPClient, PTSSLCTests){
}
}
// TEST(HFPClient, HFAudioConnectionEstablishedWithCodecNegotiation){
// setup_hfp_service_level_connection(default_hfp_slc_test());
// CHECK_EQUAL(service_level_connection_established, 1);
// setup_hfp_codecs_connection(default_hfp_cc_test());
// CHECK_EQUAL(codecs_connection_established, 1);
// hfp_ag_establish_audio_connection(device_addr);
// CHECK_EQUAL(audio_connection_established, 1);
// hfp_ag_release_audio_connection(device_addr);
// CHECK_EQUAL(audio_connection_established, 0);
// }
// TEST(HFPClient, HFAudioConnectionEstablishedWithoutCodecNegotiation){
// hfp_ag_init(rfcomm_channel_nr, supported_features_without_codec_negotiation,
// codecs, sizeof(codecs),
// ag_indicators, ag_indicators_nr,
// hf_indicators, hf_indicators_nr,
// call_hold_services, call_hold_services_nr);
// setup_hfp_service_level_connection(&hfp_slc_tests()[1]);
// CHECK_EQUAL(service_level_connection_established, 1);
// setup_hfp_codecs_connection(default_hfp_cc_test());
// CHECK_EQUAL(codecs_connection_established, 1);
// hfp_ag_establish_audio_connection(device_addr);
// CHECK_EQUAL(audio_connection_established, 1);
// hfp_ag_release_audio_connection(device_addr);
// CHECK_EQUAL(audio_connection_established, 0);
// }
// TEST(HFPClient, HFCodecsConnectionEstablished){
// for (int i = 0; i < hfp_cc_tests_size(); i++){
// setup_hfp_service_level_connection(default_hfp_slc_test());
// CHECK_EQUAL(service_level_connection_established, 1);
// setup_hfp_codecs_connection(&hfp_cc_tests()[i]);
// CHECK_EQUAL(codecs_connection_established, 1);
// teardown();
// }
// }
// TEST(HFPClient, HFServiceLevelConnectionCommands){
// setup_hfp_service_level_connection(default_hfp_slc_test());
// CHECK_EQUAL(service_level_connection_established, 1);
// for (int i = 0; i < hfp_slc_cmds_tests_size(); i++){
// simulate_test_sequence(&hfp_slc_cmds_tests()[i]);
// }
// }
// TEST(HFPClient, HFServiceLevelConnectionEstablishedWithoutCodecNegotiation){
// hfp_ag_init(rfcomm_channel_nr, supported_features_without_codec_negotiation,
// codecs, sizeof(codecs),
// ag_indicators, ag_indicators_nr,
// hf_indicators, hf_indicators_nr,
// call_hold_services, call_hold_services_nr);
// setup_hfp_service_level_connection(&hfp_slc_tests()[1]);
// CHECK_EQUAL(service_level_connection_established, 1);
// }
int main (int argc, const char * argv[]){
hfp_ag_register_packet_handler(packet_handler);

View File

@ -487,6 +487,34 @@ TEST_GROUP(HFPClient){
}
};
TEST(HFPClient, PTSRHHTests){
for (int i = 0; i < hfp_pts_hf_rhh_tests_size(); i++){
simulate_test_sequence(&hfp_pts_hf_rhh_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSECCTests){
for (int i = 0; i < hfp_pts_hf_ecc_tests_size(); i++){
simulate_test_sequence(&hfp_pts_hf_ecc_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSECSTests){
for (int i = 0; i < hfp_pts_hf_ecs_tests_size(); i++){
simulate_test_sequence(&hfp_pts_hf_ecs_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSTWCTests){
for (int i = 0; i < hfp_pts_hf_twc_tests_size(); i++){
simulate_test_sequence(&hfp_pts_hf_twc_tests()[i]);
teardown();
}
}
TEST(HFPClient, PTSATATests){
for (int i = 0; i < hfp_pts_hf_ata_tests_size(); i++){
simulate_test_sequence(&hfp_pts_hf_ata_tests()[i]);
@ -501,8 +529,6 @@ TEST(HFPClient, PTSSLCTests){
}
}
int main (int argc, const char * argv[]){
hfp_hf_register_packet_handler(packet_handler);
return CommandLineTestRunner::RunAllTests(argc, argv);

View File

@ -144,7 +144,7 @@ hfp_test_item_t ic_tests[] = {
TEST_SEQUENCE(ic_test1)
};
// PTS test sequences
/* PTS test sequences - SLC Group */
const char * TC_AG_SLC_BV_01_C[] = {
"USER:a",
@ -634,7 +634,9 @@ hfp_test_item_t pts_hf_slc_tests[] = {
TEST_SEQUENCE(TC_HF_SLC_BV_10_I),
};
//// PTS ATA Group
/* PTS test sequences - ATA Group */
const char * TC_AG_ATA_BV_01_I[] = {
"USER:a",
"AT+BRSF=127" ,
@ -710,22 +712,494 @@ const char * TC_AG_ATA_BV_02_I[] = {
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:C",
"USER:A",
"USER:t",
"+CIEV:2,0"
};
hfp_test_item_t pts_ag_ata_tests[] = {
// TEST_SEQUENCE(TC_AG_ATA_BV_01_I),
// TEST_SEQUENCE(TC_AG_ATA_BV_02_I)
TEST_SEQUENCE(TC_AG_ATA_BV_01_I),
TEST_SEQUENCE(TC_AG_ATA_BV_02_I)
};
const char * TC_HF_ATA_BV_01_I[] = {
"AT+BRSF=951" ,
"+BRSF: 511" ,
"OK" ,
"AT+CIND=?" ,
"+CIND: (\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0-3)),(\"callheld\",(0-2)),(\"signal\",(0-5)),(\"roam\",(0-1)),(\"battchg\",(0-5))" ,
"OK" ,
"AT+CIND?" ,
"+CIND: 1,0,0,0,5,0,5" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD: (0,1,1x,2,2x,3,4)" ,
"OK" ,
"AT+VGM=9" ,
"AT+VGS=9" ,
"+BSIR: 0" ,
"OK" ,
"OK" ,
"+CIEV: 3,1" ,
"RING" ,
"RING" ,
"RING" ,
"USER:f", // "ATA" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"USER:B",
"+CIEV: 2,0"
};
const char * TC_HF_ATA_BV_02_I[] = {
"AT+BRSF=951" ,
"+BRSF: 511" ,
"OK" ,
"AT+CIND=?" ,
"+CIND: (\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0-3)),(\"callheld\",(0-2)),(\"signal\",(0-5)),(\"roam\",(0-1)),(\"battchg\",(0-5))" ,
"OK" ,
"AT+CIND?" ,
"+CIND: 1,0,0,0,5,0,5" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD: (0,1,1x,2,2x,3,4)" ,
"OK" ,
"AT+VGM=9" ,
"AT+VGS=9" ,
"+BSIR: 0" ,
"OK" ,
"OK" ,
"+CIEV: 3,1" ,
"RING" ,
"RING" ,
"USER:f", // "ATA" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"USER:t"
};
hfp_test_item_t pts_hf_ata_tests[] = {
// TEST_SEQUENCE(TC_HF_ATA_BV_01_I),
// TEST_SEQUENCE(TC_HF_ATA_BV_02_I)
TEST_SEQUENCE(TC_HF_ATA_BV_01_I),
TEST_SEQUENCE(TC_HF_ATA_BV_02_I)
};
//////////////
/* PTS test sequences - TWC Group */
const char * TC_AG_TWC_BV_01_I[] = {
"USER:a",
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,0,0,3,5,0,0" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"USER:c",
"+CIEV:3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"ATA" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:m",
"+CCWA: \"7654321\",129" ,
"+CIEV:3,1" ,
"AT+CHLD=0" ,
"OK" ,
"+CIEV:3,0" ,
"USER:C",
"+CIEV:2,0",
"USER:t"
};
const char * TC_AG_TWC_BV_02_I[] = {
"USER:a",
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,0,0,3,5,0,0" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"USER:c",
"+CIEV:3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"ATA" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:m",
"+CCWA: \"7654321\",129" ,
"+CIEV:3,1" ,
"AT+CHLD=1" ,
"OK" ,
"+CIEV:3,0" ,
"USER:C",
"+CIEV:2,0",
"USER:t"
};
const char * TC_AG_TWC_BV_03_I[] = {
"USER:a",
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,0,0,3,5,0,0" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"USER:c",
"+CIEV:3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"ATA" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:m",
"+CCWA: \"7654321\",129" ,
"+CIEV:3,1" ,
"AT+CHLD=2" ,
"OK" ,
"+CIEV:3,0" ,
"+CIEV:7,1" ,
"AT+CHLD=2" ,
"OK" ,
"+CIEV:7,1" ,
"AT+CHLD=1" ,
"OK" ,
"+CIEV:7,0" ,
"USER:C",
"+CIEV:2,0",
"USER:t"
};
const char * TC_AG_TWC_BV_04_I[] = {
"USER:c",
"USER:e",
"USER:m",
"USER:e",
"USER:a",
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,1,0,3,5,0,1" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"AT+CHLD=3" ,
"OK" ,
"USER:C",
"+CIEV:7,0" ,
"+CIEV:2,0",
"USER:t"
};
const char * TC_AG_TWC_BV_05_I[] = {
"USER:a" ,
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,0,0,3,5,0,0" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"USER:c" ,
"+CIEV:3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"ATA" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"AT+BLDN" ,
"+CIEV:7,2" ,
"OK" ,
"+CIEV:3,2" ,
"USER:j" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"+CIEV:7,1" ,
"AT+CHLD=1" ,
"OK" ,
"+CIEV:7,0" ,
"USER:C" ,
"+CIEV:2,0" ,
"USER:t"
};
const char * TC_AG_TWC_BV_06_I[] = {
"USER:a" ,
"AT+BRSF=127" ,
"+BRSF:4079" ,
"OK" ,
"AT+CIND=?" ,
"+CIND:(\"service\",(0,1)),(\"call\",(0,1)),(\"callsetup\",(0,3)),(\"battchg\",(0,5)),(\"signal\",(0,5)),(\"roam\",(0,1)),(\"callheld\",(0,2))" ,
"OK" ,
"AT+CIND?" ,
"+CIND:1,0,0,3,5,0,0" ,
"OK" ,
"AT+CMER=3,0,0,1" ,
"OK" ,
"AT+CHLD=?" ,
"+CHLD:(1,1x,2,2x,3)" ,
"OK" ,
"AT+VGS=9" ,
"OK" ,
"AT+VGM=9" ,
"OK" ,
"AT+CLIP=1" ,
"OK" ,
"AT+CCWA=1" ,
"OK" ,
"AT+CMEE=1" ,
"OK" ,
"USER:c" ,
"+CIEV:3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"ATA" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:m" ,
"+CCWA: \"7654321\",129" ,
"+CIEV:3,1" ,
"AT+CHLD=2" ,
"OK" ,
"+CIEV:3,0" ,
"+CIEV:7,1" ,
"AT+CHLD=4" ,
"OK" ,
"+CIEV:2,0" ,
"+CIEV:7,0" ,
"USER:B" ,
"USER:A"
};
hfp_test_item_t pts_ag_twc_tests[] = {
TEST_SEQUENCE(TC_AG_TWC_BV_01_I),
TEST_SEQUENCE(TC_AG_TWC_BV_02_I),
TEST_SEQUENCE(TC_AG_TWC_BV_03_I),
TEST_SEQUENCE(TC_AG_TWC_BV_04_I),
TEST_SEQUENCE(TC_AG_TWC_BV_05_I),
TEST_SEQUENCE(TC_AG_TWC_BV_06_I)
};
const char * TC_HF_TWC_BV_01_I[] = {
};
const char * TC_HF_TWC_BV_02_I[] = {
};
const char * TC_HF_TWC_BV_03_I[] = {
};
const char * TC_HF_TWC_BV_04_I[] = {
};
const char * TC_HF_TWC_BV_05_I[] = {
};
const char * TC_HF_TWC_BV_06_I[] = {
};
hfp_test_item_t pts_hf_twc_tests[] = {
TEST_SEQUENCE(TC_HF_TWC_BV_01_I),
TEST_SEQUENCE(TC_HF_TWC_BV_02_I),
TEST_SEQUENCE(TC_HF_TWC_BV_03_I),
TEST_SEQUENCE(TC_HF_TWC_BV_04_I),
TEST_SEQUENCE(TC_HF_TWC_BV_05_I),
TEST_SEQUENCE(TC_HF_TWC_BV_06_I)
};
/* PTS test sequences - ECS Group */
const char * TC_AG_ECS_BV_01_I[] = {};
const char * TC_AG_ECS_BV_02_I[] = {};
const char * TC_AG_ECS_BV_03_I[] = {};
hfp_test_item_t pts_ag_ecs_tests[] = {
TEST_SEQUENCE(TC_AG_ECS_BV_01_I),
TEST_SEQUENCE(TC_AG_ECS_BV_02_I),
TEST_SEQUENCE(TC_AG_ECS_BV_03_I)
};
const char * TC_HF_ECS_BV_01_I[] = {};
const char * TC_HF_ECS_BV_02_I[] = {};
const char * TC_HF_ECS_BV_03_I[] = {};
hfp_test_item_t pts_hf_ecs_tests[] = {
TEST_SEQUENCE(TC_HF_ECS_BV_01_I),
TEST_SEQUENCE(TC_HF_ECS_BV_02_I),
TEST_SEQUENCE(TC_HF_ECS_BV_03_I)
};
/* PTS test sequences - ECC Group */
const char * TC_AG_ECC_BV_01_I[] = {};
const char * TC_AG_ECC_BV_02_I[] = {};
const char * TC_AG_ECC_BV_03_I[] = {};
const char * TC_AG_ECC_BV_04_I[] = {};
hfp_test_item_t pts_ag_ecc_tests[] = {
TEST_SEQUENCE(TC_AG_ECC_BV_01_I),
TEST_SEQUENCE(TC_AG_ECC_BV_02_I),
TEST_SEQUENCE(TC_AG_ECC_BV_03_I),
TEST_SEQUENCE(TC_AG_ECC_BV_04_I)
};
const char * TC_HF_ECC_BV_01_I[] = {};
const char * TC_HF_ECC_BV_02_I[] = {};
const char * TC_HF_ECC_BV_03_I[] = {};
const char * TC_HF_ECC_BV_04_I[] = {};
hfp_test_item_t pts_hf_ecc_tests[] = {
TEST_SEQUENCE(TC_HF_ECC_BV_01_I),
TEST_SEQUENCE(TC_HF_ECC_BV_02_I),
TEST_SEQUENCE(TC_HF_ECC_BV_03_I),
TEST_SEQUENCE(TC_HF_ECC_BV_04_I)
};
/* PTS test sequences - RHH Group */
const char * TC_AG_RHH_BV_01_I[] = {};
const char * TC_AG_RHH_BV_02_I[] = {};
const char * TC_AG_RHH_BV_03_I[] = {};
const char * TC_AG_RHH_BV_04_I[] = {};
const char * TC_AG_RHH_BV_05_I[] = {};
const char * TC_AG_RHH_BV_06_I[] = {};
const char * TC_AG_RHH_BV_07_I[] = {};
const char * TC_AG_RHH_BV_08_I[] = {};
hfp_test_item_t pts_ag_rhh_tests[] = {
TEST_SEQUENCE(TC_AG_RHH_BV_01_I),
TEST_SEQUENCE(TC_AG_RHH_BV_02_I),
TEST_SEQUENCE(TC_AG_RHH_BV_03_I),
TEST_SEQUENCE(TC_AG_RHH_BV_04_I),
TEST_SEQUENCE(TC_AG_RHH_BV_05_I),
TEST_SEQUENCE(TC_AG_RHH_BV_06_I),
TEST_SEQUENCE(TC_AG_RHH_BV_07_I),
TEST_SEQUENCE(TC_AG_RHH_BV_08_I)
};
const char * TC_HF_RHH_BV_01_I[] = {};
const char * TC_HF_RHH_BV_02_I[] = {};
const char * TC_HF_RHH_BV_03_I[] = {};
const char * TC_HF_RHH_BV_04_I[] = {};
const char * TC_HF_RHH_BV_05_I[] = {};
const char * TC_HF_RHH_BV_06_I[] = {};
const char * TC_HF_RHH_BV_07_I[] = {};
const char * TC_HF_RHH_BV_08_I[] = {};
hfp_test_item_t pts_hf_rhh_tests[] = {
TEST_SEQUENCE(TC_HF_RHH_BV_01_I),
TEST_SEQUENCE(TC_HF_RHH_BV_02_I),
TEST_SEQUENCE(TC_HF_RHH_BV_03_I),
TEST_SEQUENCE(TC_HF_RHH_BV_04_I),
TEST_SEQUENCE(TC_HF_RHH_BV_05_I),
TEST_SEQUENCE(TC_HF_RHH_BV_06_I),
TEST_SEQUENCE(TC_HF_RHH_BV_07_I),
TEST_SEQUENCE(TC_HF_RHH_BV_08_I)
};
/////////
static int test_item_size = sizeof(hfp_test_item_t);
// CC
@ -747,4 +1221,29 @@ hfp_test_item_t * hfp_pts_ag_ata_tests(){ return pts_ag_ata_tests;}
int hfp_pts_hf_ata_tests_size(){ return sizeof(pts_hf_ata_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_hf_ata_tests(){ return pts_hf_ata_tests;}
// PTS - TWC Group
int hfp_pts_ag_twc_tests_size(){ return sizeof(pts_ag_twc_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_ag_twc_tests(){ return pts_ag_twc_tests;}
int hfp_pts_hf_twc_tests_size(){ return sizeof(pts_hf_twc_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_hf_twc_tests(){ return pts_hf_twc_tests;}
// PTS - ECS Group
int hfp_pts_ag_ecs_tests_size(){ return sizeof(pts_ag_ecs_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_ag_ecs_tests(){ return pts_ag_ecs_tests;}
int hfp_pts_hf_ecs_tests_size(){ return sizeof(pts_hf_ecs_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_hf_ecs_tests(){ return pts_hf_ecs_tests;}
// PTS - ECC Group
int hfp_pts_ag_ecc_tests_size(){ return sizeof(pts_ag_ecc_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_ag_ecc_tests(){ return pts_ag_ecc_tests;}
int hfp_pts_hf_ecc_tests_size(){ return sizeof(pts_hf_ecc_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_hf_ecc_tests(){ return pts_hf_ecc_tests;}
// PTS - RHH Group
int hfp_pts_ag_rhh_tests_size(){ return sizeof(pts_ag_rhh_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_ag_rhh_tests(){ return pts_ag_rhh_tests;}
int hfp_pts_hf_rhh_tests_size(){ return sizeof(pts_hf_rhh_tests)/test_item_size;}
hfp_test_item_t * hfp_pts_hf_rhh_tests(){ return pts_hf_rhh_tests;}

View File

@ -69,3 +69,27 @@ hfp_test_item_t * hfp_pts_ag_ata_tests();
int hfp_pts_hf_ata_tests_size();
hfp_test_item_t * hfp_pts_hf_ata_tests();
/* PTS test sequences - TWC Group */
int hfp_pts_ag_twc_tests_size();
hfp_test_item_t * hfp_pts_ag_twc_tests();
int hfp_pts_hf_twc_tests_size();
hfp_test_item_t * hfp_pts_hf_twc_tests();
/* PTS test sequences - ECS Group */
int hfp_pts_ag_ecs_tests_size();
hfp_test_item_t * hfp_pts_ag_ecs_tests();
int hfp_pts_hf_ecs_tests_size();
hfp_test_item_t * hfp_pts_hf_ecs_tests();
/* PTS test sequences - ECC Group */
int hfp_pts_ag_ecc_tests_size();
hfp_test_item_t * hfp_pts_ag_ecc_tests();
int hfp_pts_hf_ecc_tests_size();
hfp_test_item_t * hfp_pts_hf_ecc_tests();
/* PTS test sequences - RHH Group */
int hfp_pts_ag_rhh_tests_size();
hfp_test_item_t * hfp_pts_ag_rhh_tests();
int hfp_pts_hf_rhh_tests_size();
hfp_test_item_t * hfp_pts_hf_rhh_tests();

View File

@ -354,38 +354,38 @@ static int stdin_process(struct data_source *ds){
switch (cmd){
case 'a':
memcpy(device_addr, pts_addr, 6);
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Establish HFP service level connection to PTS module %s...\n", bd_addr_to_str(device_addr));
hfp_ag_establish_service_level_connection(device_addr);
break;
case 'A':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Release HFP service level connection.\n");
hfp_ag_release_service_level_connection(device_addr);
break;
case 'z':
memcpy(device_addr, speaker_addr, 6);
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Establish HFP service level connection to %s...\n", bd_addr_to_str(device_addr));
hfp_ag_establish_service_level_connection(device_addr);
break;
case 'Z':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Release HFP service level connection to %s...\n", bd_addr_to_str(device_addr));
hfp_ag_release_service_level_connection(device_addr);
break;
case 'b':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Establish Audio connection %s...\n", bd_addr_to_str(device_addr));
hfp_ag_establish_audio_connection(device_addr);
break;
case 'B':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Release Audio connection.\n");
hfp_ag_release_audio_connection(device_addr);
break;
case 'c':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Simulate incoming call from 1234567\n");
current_call_exists_a = 1;
current_call_status_a = HFP_ENHANCED_CALL_STATUS_INCOMING;
@ -394,7 +394,7 @@ static int stdin_process(struct data_source *ds){
hfp_ag_incoming_call();
break;
case 'm':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Simulate incoming call from 7654321\n");
current_call_exists_b = 1;
current_call_status_b = HFP_ENHANCED_CALL_STATUS_INCOMING;
@ -403,17 +403,17 @@ static int stdin_process(struct data_source *ds){
hfp_ag_incoming_call();
break;
case 'C':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Simulate terminate call\n");
hfp_ag_call_dropped();
break;
case 'd':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Report AG failure\n");
hfp_ag_report_extended_audio_gateway_error_result_code(device_addr, HFP_CME_ERROR_AG_FAILURE);
break;
case 'e':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Answer call on AG\n");
if (current_call_status_a == HFP_ENHANCED_CALL_STATUS_INCOMING){
current_call_status_a = HFP_ENHANCED_CALL_STATUS_ACTIVE;
@ -424,142 +424,142 @@ static int stdin_process(struct data_source *ds){
hfp_ag_answer_incoming_call();
break;
case 'E':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Reject call on AG\n");
hfp_ag_terminate_call();
break;
case 'f':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Disable cellular network\n");
hfp_ag_set_registration_status(0);
break;
case 'F':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Enable cellular network\n");
hfp_ag_set_registration_status(1);
break;
case 'g':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set signal strength to 0\n");
hfp_ag_set_signal_strength(0);
break;
case 'G':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set signal strength to 5\n");
hfp_ag_set_signal_strength(5);
break;
case 'h':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Disable roaming\n");
hfp_ag_set_roaming_status(0);
break;
case 'H':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Enable roaming\n");
hfp_ag_set_roaming_status(1);
break;
case 'i':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set battery level to 3\n");
hfp_ag_set_battery_level(3);
break;
case 'I':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set battery level to 5\n");
hfp_ag_set_battery_level(5);
break;
case 'j':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Answering call on remote side\n");
hfp_ag_outgoing_call_established();
break;
case 'r':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Disable in-band ring tone\n");
hfp_ag_set_use_in_band_ring_tone(0);
break;
case 'k':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Memory 1 cleared\n");
memory_1_enabled = 0;
break;
case 'K':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Memory 1 set\n");
memory_1_enabled = 1;
break;
case 'l':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Last dialed number cleared\n");
last_number_exists = 0;
break;
case 'L':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Last dialed number set\n");
last_number_exists = 1;
break;
case 'n':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Disable Voice Recognition\n");
hfp_ag_activate_voice_recognition(device_addr, 0);
break;
case 'N':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Enable Voice Recognition\n");
hfp_ag_activate_voice_recognition(device_addr, 1);
break;
case 'o':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 0 (minimum)\n");
hfp_ag_set_speaker_gain(device_addr, 0);
break;
case 'O':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 9 (default)\n");
hfp_ag_set_speaker_gain(device_addr, 9);
break;
case 'p':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 12 (higher)\n");
hfp_ag_set_speaker_gain(device_addr, 12);
break;
case 'P':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 15 (maximum)\n");
hfp_ag_set_speaker_gain(device_addr, 15);
break;
case 'q':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 0\n");
hfp_ag_set_microphone_gain(device_addr, 0);
break;
case 'Q':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 9\n");
hfp_ag_set_microphone_gain(device_addr, 9);
break;
case 's':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 12\n");
hfp_ag_set_microphone_gain(device_addr, 12);
break;
case 'S':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 15\n");
hfp_ag_set_microphone_gain(device_addr, 15);
break;
case 'R':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Enable in-band ring tone\n");
hfp_ag_set_use_in_band_ring_tone(1);
break;
case 't':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Terminate HCI connection.\n");
gap_disconnect(handle);
break;
case 'u':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("Join held call\n");
current_call_mpty = HFP_ENHANCED_CALL_MPTY_CONFERENCE_CALL;
hfp_ag_join_held_call();
@ -568,17 +568,17 @@ static int stdin_process(struct data_source *ds){
start_scan();
break;
case 'w':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("AG: Put incoming call on hold (Response and Hold)\n");
hfp_ag_hold_incoming_call();
break;
case 'x':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("AG: Accept held incoming call (Response and Hold)\n");
hfp_ag_accept_held_incoming_call();
break;
case 'X':
printf("USER:%c ", cmd);
log_info("USER:\'%c\'", cmd);
printf("AG: Reject held incoming call (Response and Hold)\n");
hfp_ag_reject_held_incoming_call();
break;

View File

@ -187,213 +187,266 @@ static int stdin_process(struct data_source *ds){
case '-':
case '+':
case '*':
log_info("USER:\'%c\'", cmd);
printf("DTMF Code: %c\n", cmd);
hfp_hf_send_dtmf_code(device_addr, cmd);
break;
case 'a':
log_info("USER:\'%c\'", cmd);
printf("Establish Service level connection to device with Bluetooth address %s...\n", bd_addr_to_str(device_addr));
hfp_hf_establish_service_level_connection(device_addr);
break;
case 'A':
log_info("USER:\'%c\'", cmd);
printf("Release Service level connection.\n");
hfp_hf_release_service_level_connection(device_addr);
break;
case 'b':
log_info("USER:\'%c\'", cmd);
printf("Establish Audio connection to device with Bluetooth address %s...\n", bd_addr_to_str(device_addr));
hfp_hf_establish_audio_connection(device_addr);
break;
case 'B':
log_info("USER:\'%c\'", cmd);
printf("Release Audio service level connection.\n");
hfp_hf_release_audio_connection(device_addr);
break;
case 'C':
log_info("USER:\'%c\'", cmd);
printf("Enable registration status update for all AG indicators.\n");
hfp_hf_enable_status_update_for_all_ag_indicators(device_addr);
case 'c':
log_info("USER:\'%c\'", cmd);
printf("Disable registration status update for all AG indicators.\n");
hfp_hf_disable_status_update_for_all_ag_indicators(device_addr);
break;
case 'D':
log_info("USER:\'%c\'", cmd);
printf("Set HFP AG registration status update for individual indicators (0111111).\n");
hfp_hf_set_status_update_for_individual_ag_indicators(device_addr, 63);
break;
case 'd':
log_info("USER:\'%c\'", cmd);
printf("Query network operator.\n");
hfp_hf_query_operator_selection(device_addr);
break;
case 'E':
log_info("USER:\'%c\'", cmd);
printf("Enable reporting of the extended AG error result code.\n");
hfp_hf_enable_report_extended_audio_gateway_error_result_code(device_addr);
break;
case 'e':
log_info("USER:\'%c\'", cmd);
printf("Disable reporting of the extended AG error result code.\n");
hfp_hf_disable_report_extended_audio_gateway_error_result_code(device_addr);
break;
case 'f':
log_info("USER:\'%c\'", cmd);
printf("Answer incoming call.\n");
hfp_hf_answer_incoming_call(device_addr);
break;
case 'F':
log_info("USER:\'%c\'", cmd);
printf("Hangup call.\n");
hfp_hf_terminate_call(device_addr);
break;
case 'G':
log_info("USER:\'%c\'", cmd);
printf("Reject call.\n");
hfp_hf_reject_call(device_addr);
break;
case 'g':
log_info("USER:\'%c\'", cmd);
printf("Query operator.\n");
hfp_hf_query_operator_selection(device_addr);
break;
case 't':
log_info("USER:\'%c\'", cmd);
printf("Terminate HCI connection.\n");
gap_disconnect(handle);
break;
case 'i':
log_info("USER:\'%c\'", cmd);
printf("Dial 1234567\n");
hfp_hf_dial_number(device_addr, "1234567");
break;
case 'I':
log_info("USER:\'%c\'", cmd);
printf("Dial 7654321\n");
hfp_hf_dial_number(device_addr, "7654321");
break;
case 'j':
log_info("USER:\'%c\'", cmd);
printf("Dial #1\n");
hfp_hf_dial_memory(device_addr,"1");
break;
case 'J':
log_info("USER:\'%c\'", cmd);
printf("Dial #99\n");
hfp_hf_dial_memory(device_addr,"99");
break;
case 'k':
log_info("USER:\'%c\'", cmd);
printf("Deactivate call waiting notification\n");
hfp_hf_deactivate_call_waiting_notification(device_addr);
break;
case 'K':
log_info("USER:\'%c\'", cmd);
printf("Activate call waiting notification\n");
hfp_hf_activate_call_waiting_notification(device_addr);
break;
case 'l':
log_info("USER:\'%c\'", cmd);
printf("Deactivate calling line notification\n");
hfp_hf_deactivate_calling_line_notification(device_addr);
break;
case 'L':
log_info("USER:\'%c\'", cmd);
printf("Activate calling line notification\n");
hfp_hf_activate_calling_line_notification(device_addr);
break;
case 'm':
log_info("USER:\'%c\'", cmd);
printf("Deactivate echo canceling and noise reduction\n");
hfp_hf_deactivate_echo_canceling_and_noise_reduction(device_addr);
break;
case 'M':
log_info("USER:\'%c\'", cmd);
printf("Activate echo canceling and noise reduction\n");
hfp_hf_activate_echo_canceling_and_noise_reduction(device_addr);
break;
case 'n':
log_info("USER:\'%c\'", cmd);
printf("Deactivate voice recognition\n");
hfp_hf_deactivate_voice_recognition_notification(device_addr);
break;
case 'N':
log_info("USER:\'%c\'", cmd);
printf("Activate voice recognition\n");
hfp_hf_activate_voice_recognition_notification(device_addr);
break;
case 'o':
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 0 (minimum)\n");
hfp_hf_set_speaker_gain(device_addr, 0);
break;
case 'O':
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 9 (default)\n");
hfp_hf_set_speaker_gain(device_addr, 9);
break;
case 'p':
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 12 (higher)\n");
hfp_hf_set_speaker_gain(device_addr, 12);
break;
case 'P':
log_info("USER:\'%c\'", cmd);
printf("Set speaker gain to 15 (maximum)\n");
hfp_hf_set_speaker_gain(device_addr, 15);
break;
case 'q':
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 0\n");
hfp_hf_set_microphone_gain(device_addr, 0);
break;
case 'Q':
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 9\n");
hfp_hf_set_microphone_gain(device_addr, 9);
break;
case 's':
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 12\n");
hfp_hf_set_microphone_gain(device_addr, 12);
break;
case 'S':
log_info("USER:\'%c\'", cmd);
printf("Set microphone gain to 15\n");
hfp_hf_set_microphone_gain(device_addr, 15);
break;
case 'u':
log_info("USER:\'%c\'", cmd);
printf("Send 'user busy' (Three-Way Call 0)\n");
hfp_hf_user_busy(device_addr);
break;
case 'U':
log_info("USER:\'%c\'", cmd);
printf("End active call and accept waiting/held call (Three-Way Call 1)\n");
hfp_hf_end_active_and_accept_other(device_addr);
break;
case 'v':
log_info("USER:\'%c\'", cmd);
printf("Swap active call and hold/waiting call (Three-Way Call 2)\n");
hfp_hf_swap_calls(device_addr);
break;
case 'V':
log_info("USER:\'%c\'", cmd);
printf("Join hold call (Three-Way Call 3)\n");
hfp_hf_join_held_call(device_addr);
break;
case 'w':
log_info("USER:\'%c\'", cmd);
printf("Connect calls (Three-Way Call 4)\n");
hfp_hf_connect_calls(device_addr);
break;
case 'W':
log_info("USER:\'%c\'", cmd);
printf("Redial\n");
hfp_hf_redial_last_number(device_addr);
break;
case 'x':
log_info("USER:\'%c\'", cmd);
printf("Request phone number for voice tag\n");
hfp_hf_request_phone_number_for_voice_tag(device_addr);
break;
case 'X':
log_info("USER:\'%c\'", cmd);
printf("Query current call status\n");
hfp_hf_query_current_call_status(device_addr);
break;
case 'y':
log_info("USER:\'%c\'", cmd);
printf("Release call with index 2\n");
hfp_hf_release_call_with_index(device_addr, 2);
break;
case 'Y':
log_info("USER:\'%c\'", cmd);
printf("Private consulation with call 2\n");
hfp_hf_private_consultation_with_call(device_addr, 2);
break;
case 'z':
memcpy(device_addr, phone_addr, 6);
log_info("USER:\'%c\'", cmd);
printf("Use iPhone %s as Audiogateway.\n", bd_addr_to_str(device_addr));
break;
case '[':
log_info("USER:\'%c\'", cmd);
printf("Query Response and Hold status (RHH ?)\n");
hfp_hf_rrh_query_status(device_addr);
break;
case ']':
log_info("USER:\'%c\'", cmd);
printf("Place call in a response and held state (RHH 0)\n");
hfp_hf_rrh_hold_call(device_addr);
break;
case '{':
log_info("USER:\'%c\'", cmd);
printf("Accept held call (RHH 1)\n");
hfp_hf_rrh_accept_held_call(device_addr);
break;
case '}':
log_info("USER:\'%c\'", cmd);
printf("Reject held call (RHH 2)\n");
hfp_hf_rrh_reject_held_call(device_addr);
break;
case '?':
log_info("USER:\'%c\'", cmd);
printf("Query Subscriber Number\n");
hfp_hf_query_subscriber_number(device_addr);
break;
case '!':
log_info("USER:\'%c\'", cmd);
printf("Update HF indicator with assigned number 1 (HFI)\n");
hfp_hf_set_hf_indicator(device_addr, 1, 1);
break;