hfp ag: clean up command string construction

This commit is contained in:
Milanka Ringwald 2018-01-09 16:06:14 +01:00
parent 971b696e3d
commit 1cc1d9e923
2 changed files with 83 additions and 108 deletions

View File

@ -412,24 +412,16 @@ static int hfp_ag_send_retrieve_indicators_cmd_via_generator(uint16_t cid, hfp_c
static int hfp_ag_send_retrieve_indicators_status_cmd(uint16_t cid){
char buffer[40];
int offset = snprintf(buffer, sizeof(buffer), "\r\n%s:", HFP_INDICATOR);
offset += hfp_ag_indicators_status_join(buffer+offset, sizeof(buffer)-offset);
buffer[offset] = 0;
offset += hfp_ag_indicators_status_join(buffer+offset, sizeof(buffer) - offset - 9);
offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n");
buffer[offset] = 0;
return send_str_over_rfcomm(cid, buffer);
}
static int hfp_ag_send_retrieve_can_hold_call_cmd(uint16_t cid){
char buffer[40];
int offset = snprintf(buffer, sizeof(buffer), "\r\n%s:", HFP_SUPPORT_CALL_HOLD_AND_MULTIPARTY_SERVICES);
offset += hfp_ag_call_services_join(buffer+offset, sizeof(buffer)-offset);
buffer[offset] = 0;
offset += hfp_ag_call_services_join(buffer+offset, sizeof(buffer)-offset-9);
offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n");
buffer[offset] = 0;
return send_str_over_rfcomm(cid, buffer);
}
@ -441,22 +433,15 @@ static int hfp_ag_send_list_supported_generic_status_indicators_cmd(uint16_t cid
static int hfp_ag_send_retrieve_supported_generic_status_indicators_cmd(uint16_t cid){
char buffer[40];
int offset = snprintf(buffer, sizeof(buffer), "\r\n%s:(", HFP_GENERIC_STATUS_INDICATOR);
offset += hfp_hf_indicators_join(buffer+offset, sizeof(buffer)-offset);
buffer[offset] = 0;
offset += hfp_hf_indicators_join(buffer+offset, sizeof(buffer) - offset - 10);
offset += snprintf(buffer+offset, sizeof(buffer)-offset, ")\r\n\r\nOK\r\n");
buffer[offset] = 0;
return send_str_over_rfcomm(cid, buffer);
}
static int hfp_ag_send_retrieve_initital_supported_generic_status_indicators_cmd(uint16_t cid){
char buffer[40];
int offset = hfp_hf_indicators_initial_status_join(buffer, sizeof(buffer));
buffer[offset] = 0;
offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\nOK\r\n");
buffer[offset] = 0;
int offset = hfp_hf_indicators_initial_status_join(buffer, sizeof(buffer) - 7);
snprintf(buffer+offset, sizeof(buffer)-offset, "\r\nOK\r\n");
return send_str_over_rfcomm(cid, buffer);
}
@ -471,44 +456,38 @@ static int hfp_ag_send_report_network_operator_name_cmd(uint16_t cid, hfp_networ
if (strlen(op.name) == 0){
sprintf(buffer, "\r\n%s:%d,,\r\n\r\nOK\r\n", HFP_QUERY_OPERATOR_SELECTION, op.mode);
} else {
int offset = 0;
int size = sizeof(buffer);
offset += snprintf(buffer, size,"\r\n%s:%d,%d,", HFP_QUERY_OPERATOR_SELECTION, op.mode, op.format);
int offset = snprintf(buffer, size,"\r\n%s:%d,%d,", HFP_QUERY_OPERATOR_SELECTION, op.mode, op.format);
offset += snprintf(buffer + offset, 16, "%s", op.name);
offset += snprintf(buffer + offset, size - offset,"\r\n\r\nOK\r\n");
snprintf(buffer + offset, size - offset, "\r\n\r\nOK\r\n");
}
return send_str_over_rfcomm(cid, buffer);
}
static inline int hfp_ag_send_cmd_with_int(uint16_t cid, const char * cmd, uint8_t value){
char buffer[30];
sprintf(buffer, "\r\n%s:%d\r\n", cmd, value);
return send_str_over_rfcomm(cid, buffer);
}
static int hfp_ag_send_suggest_codec_cmd(uint16_t cid, uint8_t codec){
char buffer[30];
sprintf(buffer, "\r\n%s:%d\r\n", HFP_CONFIRM_COMMON_CODEC, codec);
return send_str_over_rfcomm(cid, buffer);
return hfp_ag_send_cmd_with_int(cid, HFP_CONFIRM_COMMON_CODEC, codec);
}
static int hfp_ag_send_activate_voice_recognition_cmd(uint16_t cid, uint8_t activate_voice_recognition){
char buffer[30];
sprintf(buffer, "\r\n%s: %d\r\n", HFP_ACTIVATE_VOICE_RECOGNITION, activate_voice_recognition);
return send_str_over_rfcomm(cid, buffer);
return hfp_ag_send_cmd_with_int(cid, HFP_ACTIVATE_VOICE_RECOGNITION, activate_voice_recognition);
}
static int hfp_ag_send_set_speaker_gain_cmd(uint16_t cid, uint8_t gain){
char buffer[30];
sprintf(buffer, "\r\n%s:%d\r\n", HFP_SET_SPEAKER_GAIN, gain);
return send_str_over_rfcomm(cid, buffer);
return hfp_ag_send_cmd_with_int(cid, HFP_SET_SPEAKER_GAIN, gain);
}
static int hfp_ag_send_set_microphone_gain_cmd(uint16_t cid, uint8_t gain){
char buffer[30];
sprintf(buffer, "\r\n%s:%d\r\n", HFP_SET_MICROPHONE_GAIN, gain);
return send_str_over_rfcomm(cid, buffer);
return hfp_ag_send_cmd_with_int(cid, HFP_SET_MICROPHONE_GAIN, gain);
}
static int hfp_ag_send_set_response_and_hold(uint16_t cid, int state){
char buffer[30];
sprintf(buffer, "\r\n%s: %d\r\n", HFP_RESPONSE_AND_HOLD, state);
return send_str_over_rfcomm(cid, buffer);
return hfp_ag_send_cmd_with_int(cid, HFP_RESPONSE_AND_HOLD, state);
}
static uint8_t hfp_ag_suggest_codec(hfp_connection_t *hfp_connection){
@ -1610,7 +1589,7 @@ static void hfp_ag_send_call_status(hfp_connection_t * hfp_connection, int call_
// TODO: check length of a buffer, to fit the MTU
int offset = snprintf(buffer, sizeof(buffer), "\r\n%s: %d,%d,%d,%d,%d", HFP_LIST_CURRENT_CALLS, idx, dir, status, mode, mpty);
if (number){
offset += snprintf(buffer+offset, sizeof(buffer)-offset, ", \"%s\",%u", number, type);
offset += snprintf(buffer+offset, sizeof(buffer)-offset-3, ", \"%s\",%u", number, type);
}
snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n");
log_info("hfp_ag_send_current_call_status 000 index %d, dir %d, status %d, mode %d, mpty %d, type %d, number %s", idx, dir, status,
@ -1619,11 +1598,7 @@ static void hfp_ag_send_call_status(hfp_connection_t * hfp_connection, int call_
}
static void hfp_run_for_context(hfp_connection_t *hfp_connection){
// log_info("hfp_run_for_context %p", hfp_connection);
if (!hfp_connection) return;
if (!hfp_connection->rfcomm_cid) return;
if (!rfcomm_can_send_packet_now(hfp_connection->rfcomm_cid)) {

View File

@ -2412,10 +2412,10 @@ const char * TC_AG_RHH_BV_01_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"USER:X" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV:2,0" ,
"USER:t"
};
@ -2451,12 +2451,12 @@ const char * TC_AG_RHH_BV_02_I[] = {
"RING" ,
"+CLIP: \"1234567\",129" ,
"AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:X" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV:2,0" ,
"USER:t"
};
@ -2492,11 +2492,11 @@ const char * TC_AG_RHH_BV_03_I[] = {
"RING" ,
"+CLIP: \"1234567\",129" ,
"USER:w" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV:2,1" ,
"+CIEV:3,0" ,
"USER:X" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV:2,0" ,
"USER:t"
};
@ -2530,10 +2530,10 @@ const char * TC_AG_RHH_BV_04_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"USER:b" ,
"USER:C" ,
@ -2570,10 +2570,10 @@ const char * TC_AG_RHH_BV_05_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"USER:x" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"USER:C" ,
"+CIEV:2,0" ,
"USER:t"
@ -2608,10 +2608,10 @@ const char * TC_AG_RHH_BV_06_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"AT+BTRH=2" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"OK" ,
"+CIEV:2,0" ,
"USER:t"
@ -2646,10 +2646,10 @@ const char * TC_AG_RHH_BV_07_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"USER:X" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV:2,0" ,
"USER:t"
};
@ -2683,10 +2683,10 @@ const char * TC_AG_RHH_BV_08_I[] = {
"AT+CMEE=1" ,
"OK" ,
"AT+BTRH?" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"USER:C" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV:2,0" ,
"USER:t"
};
@ -2724,7 +2724,7 @@ const char * TC_HF_RHH_BV_01_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0"
};
@ -2749,7 +2749,7 @@ const char * TC_HF_RHH_BV_02_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -2847,11 +2847,11 @@ const char * TC_HF_RHH_BV_02_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0"
};
@ -2876,7 +2876,7 @@ const char * TC_HF_RHH_BV_03_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -2974,11 +2974,11 @@ const char * TC_HF_RHH_BV_03_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3002,10 +3002,10 @@ const char * TC_HF_RHH_BV_03_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0"
};
@ -3030,7 +3030,7 @@ const char * TC_HF_RHH_BV_04_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3128,11 +3128,11 @@ const char * TC_HF_RHH_BV_04_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3156,10 +3156,10 @@ const char * TC_HF_RHH_BV_04_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3181,7 +3181,7 @@ const char * TC_HF_RHH_BV_04_I[] = {
"OK",
"+BSIR: 0" ,
"USER:{" , // "AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"+CIEV: 2,0"
};
@ -3207,7 +3207,7 @@ const char * TC_HF_RHH_BV_05_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3305,11 +3305,11 @@ const char * TC_HF_RHH_BV_05_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3333,10 +3333,10 @@ const char * TC_HF_RHH_BV_05_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3358,7 +3358,7 @@ const char * TC_HF_RHH_BV_05_I[] = {
"OK",
"+BSIR: 0" ,
"USER:{" , // "AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -3380,7 +3380,7 @@ const char * TC_HF_RHH_BV_05_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"+CIEV: 2,0"
};
@ -3405,7 +3405,7 @@ const char * TC_HF_RHH_BV_06_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3503,11 +3503,11 @@ const char * TC_HF_RHH_BV_06_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3531,10 +3531,10 @@ const char * TC_HF_RHH_BV_06_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3556,7 +3556,7 @@ const char * TC_HF_RHH_BV_06_I[] = {
"OK",
"+BSIR: 0" ,
"USER:{" , // "AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -3578,7 +3578,7 @@ const char * TC_HF_RHH_BV_06_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3600,7 +3600,7 @@ const char * TC_HF_RHH_BV_06_I[] = {
"OK",
"+BSIR: 0" ,
"USER:}" , // "AT+BTRH=2" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"OK" ,
"+CIEV: 2,0"
};
@ -3627,7 +3627,7 @@ const char * TC_HF_RHH_BV_07_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3725,11 +3725,11 @@ const char * TC_HF_RHH_BV_07_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3753,10 +3753,10 @@ const char * TC_HF_RHH_BV_07_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3778,7 +3778,7 @@ const char * TC_HF_RHH_BV_07_I[] = {
"OK",
"+BSIR: 0" ,
"USER:{" , // "AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -3800,7 +3800,7 @@ const char * TC_HF_RHH_BV_07_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3822,7 +3822,7 @@ const char * TC_HF_RHH_BV_07_I[] = {
"OK",
"+BSIR: 0" ,
"USER:}" , // "AT+BTRH=2" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -3844,7 +3844,7 @@ const char * TC_HF_RHH_BV_07_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0"
};
@ -3869,7 +3869,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3967,11 +3967,11 @@ const char * TC_HF_RHH_BV_08_I[] = {
"RING" ,
"RING" ,
"USER:]" , // "AT+BTRH=0" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"OK" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -3995,10 +3995,10 @@ const char * TC_HF_RHH_BV_08_I[] = {
"+CIEV: 3,1" ,
"RING" ,
"+CLIP: \"1234567\",129" ,
"+BTRH: 0" ,
"+BTRH:0" ,
"+CIEV: 2,1" ,
"+CIEV: 3,0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -4020,7 +4020,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"OK",
"+BSIR: 0" ,
"USER:{" , // "AT+BTRH=1" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -4042,7 +4042,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 1" ,
"+BTRH:1" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -4064,7 +4064,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"OK",
"+BSIR: 0" ,
"USER:}" , // "AT+BTRH=2" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"OK" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
@ -4086,7 +4086,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0" ,
"AT+BRSF=951" ,
"+BRSF: 511" ,
@ -4107,7 +4107,7 @@ const char * TC_HF_RHH_BV_08_I[] = {
"AT+VGS=9" ,
"OK",
"+BSIR: 0" ,
"+BTRH: 2" ,
"+BTRH:2" ,
"+CIEV: 2,0"
};