hfp remove status field from events

This commit is contained in:
Milanka Ringwald 2016-02-18 17:00:56 +01:00
parent 65fd5e57ee
commit 352dca4473
9 changed files with 87 additions and 96 deletions

View File

@ -679,9 +679,8 @@ extern "C" {
#define HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_ESTABLISHED 0x01
/**
* @format 11
* @format 1
* @param subevent_code
* @param status 0 == OK
*/
#define HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_RELEASED 0x02
@ -693,9 +692,8 @@ extern "C" {
#define HFP_SUBEVENT_AUDIO_CONNECTION_ESTABLISHED 0x03
/**
* @format 11
* @format 1
* @param subevent_code
* @param status 0 == OK
*/
#define HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED 0x04
@ -707,9 +705,8 @@ extern "C" {
#define HFP_SUBEVENT_COMPLETE 0x05
/**
* @format 1111T
* @format 111T
* @param subevent_code
* @param status
* @param indicator_index
* @param indicator_status
* @param indicator_name
@ -719,7 +716,6 @@ extern "C" {
/**
* @format 1111T
* @param subevent_code
* @param status
* @param network_operator_mode
* @param network_operator_format
* @param network_operator_name
@ -741,74 +737,67 @@ extern "C" {
#define HFP_SUBEVENT_CODECS_CONNECTION_COMPLETE 0x09
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_START_RINGINIG 0x0A
#define HFP_SUBEVENT_START_RINGINIG 0x0A
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_STOP_RINGINIG 0x0B
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_CALL_TERMINATED 0x0C
/**
* @format 11T
* @format 1T
* @param subevent_code
* @param status
* @param number
*/
#define HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER 0x0D
#define HFP_SUBEVENT_REDIAL_LAST_NUMBER 0x0E
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG 0x0F
#define HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG 0x0E
/**
* @format 11T
* @format 1T
* @param subevent_code
* @param status
* @param number
*/
#define HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG 0x10
#define HFP_SUBEVENT_NUMBER_FOR_VOICE_TAG 0x0F
/**
* @format 11T
* @format 1T
* @param subevent_code
* @param status
* @param dtmf code
*/
#define HFP_SUBEVENT_TRANSMIT_DTMF_CODES 0x11
#define HFP_SUBEVENT_TRANSMIT_STATUS_OF_CURRENT_CALL 0x12
#define HFP_SUBEVENT_CALL_ANSWERED 0x13
#define HFP_SUBEVENT_TRANSMIT_DTMF_CODES 0x10
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_CONFERENCE_CALL 0x14
#define HFP_SUBEVENT_CALL_ANSWERED 0x11
/**
* @format 11
* @format 1
* @param subevent_code
* @param status
*/
#define HFP_SUBEVENT_RING 0x15
#define HFP_SUBEVENT_CONFERENCE_CALL 0x12
/**
* @format 1
* @param subevent_code
*/
#define HFP_SUBEVENT_RING 0x13
/**
* @format 111
@ -816,7 +805,7 @@ extern "C" {
* @param status
* @param gain
*/
#define HFP_SUBEVENT_SPEAKER_VOLUME 0x16
#define HFP_SUBEVENT_SPEAKER_VOLUME 0x14
/**
* @format 111
@ -824,30 +813,27 @@ extern "C" {
* @param status
* @param gain
*/
#define HFP_SUBEVENT_MICROPHONE_VOLUME 0x17
#define HFP_SUBEVENT_MICROPHONE_VOLUME 0x15
/**
* @format 111T
* @format 11T
* @param subevent_code
* @param status
* @param type
* @param number
*/
#define HFP_SUBEVENT_CALL_WAITING_NOTIFICATION 0x18
#define HFP_SUBEVENT_CALL_WAITING_NOTIFICATION 0x16
/**
* @format 111T
* @format 11T
* @param subevent_code
* @param status
* @param type
* @param number
*/
#define HFP_SUBEVENT_CALLING_LINE_INDETIFICATION_NOTIFICATION 0x19
#define HFP_SUBEVENT_CALLING_LINE_INDETIFICATION_NOTIFICATION 0x17
/**
* @format 1111111T
* @format 111111T
* @param subevent_code
* @param status
* @param clcc_idx
* @param clcc_dir
* @param clcc_status
@ -855,7 +841,7 @@ extern "C" {
* @param bnip_type
* @param bnip_number
*/
#define HFP_SUBEVENT_ENHANCED_CALL_STATUS 0x1A
#define HFP_SUBEVENT_ENHANCED_CALL_STATUS 0x18
/**
* @format 111T
@ -864,15 +850,14 @@ extern "C" {
* @param bnip_type
* @param bnip_number
*/
#define HFP_SUBEVENT_SUBSCRIBER_NUMBER_INFORMATION 0x1B
#define HFP_SUBEVENT_SUBSCRIBER_NUMBER_INFORMATION 0x19
/**
* @format 11T
* @format 1T
* @param subevent_code
* @param status
* @param value
*/
#define HFP_SUBEVENT_RESPONSE_AND_HOLD_STATUS 0x1C
#define HFP_SUBEVENT_RESPONSE_AND_HOLD_STATUS 0x1A
// ANCS Client
#define ANCS_CLIENT_CONNECTED 0xF0

View File

@ -196,6 +196,15 @@ int join_bitmap(char * buffer, int buffer_size, uint32_t values, int values_nr){
return offset;
}
void hfp_emit_simple_event(hfp_callback_t callback, uint8_t event_subtype){
if (!callback) return;
uint8_t event[3];
event[0] = HCI_EVENT_HFP_META;
event[1] = sizeof(event) - 2;
event[2] = event_subtype;
(*callback)(event, sizeof(event));
}
void hfp_emit_event(hfp_callback_t callback, uint8_t event_subtype, uint8_t value){
if (!callback) return;
uint8_t event[4];
@ -615,7 +624,7 @@ void hfp_handle_hci_event(hfp_callback_t callback, uint8_t packet_type, uint8_t
break;
}
hfp_emit_event(callback, HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_RELEASED, 0);
hfp_emit_simple_event(callback, HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_RELEASED);
remove_hfp_connection_context(hfp_connection);
break;
@ -635,7 +644,7 @@ void hfp_handle_hci_event(hfp_callback_t callback, uint8_t packet_type, uint8_t
hfp_connection->sco_handle = 0;
hfp_connection->release_audio_connection = 0;
hfp_connection->state = HFP_SERVICE_LEVEL_CONNECTION_ESTABLISHED;
hfp_emit_event(callback, HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED, 0);
hfp_emit_simple_event(callback, HFP_SUBEVENT_AUDIO_CONNECTION_RELEASED);
break;
}
break;

View File

@ -623,6 +623,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_simple_event(hfp_callback_t callback, uint8_t event_subtype);
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);

View File

@ -852,7 +852,7 @@ static void hfp_ag_hf_start_ringing(hfp_connection_t * hfp_connection){
hfp_connection->ag_ring = 1;
hfp_connection->ag_send_clip = hfp_gsm_clip_type() && hfp_connection->clip_enabled;
hfp_connection->call_state = HFP_CALL_RINGING;
hfp_emit_event(hfp_callback, HFP_SUBEVENT_START_RINGINIG, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_START_RINGINIG);
}
}
@ -860,7 +860,7 @@ static void hfp_ag_hf_stop_ringing(hfp_connection_t * hfp_connection){
hfp_connection->ag_ring = 0;
hfp_connection->ag_send_clip = 0;
hfp_timeout_stop(hfp_connection);
hfp_emit_event(hfp_callback, HFP_SUBEVENT_STOP_RINGINIG, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_STOP_RINGINIG);
}
static void hfp_ag_trigger_incoming_call(void){
@ -1009,7 +1009,7 @@ static void hfp_ag_trigger_terminate_call(void){
hfp_connection->release_audio_connection = 1;
hfp_run_for_context(hfp_connection);
}
hfp_emit_event(hfp_callback, HFP_SUBEVENT_CALL_TERMINATED, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_CALL_TERMINATED);
}
static void hfp_ag_set_callsetup_indicator(){
@ -1077,7 +1077,7 @@ static int call_setup_state_machine(hfp_connection_t * hfp_connection){
hfp_connection->ag_send_clip = hfp_gsm_clip_type() && hfp_connection->clip_enabled;
hfp_connection->call_state = HFP_CALL_RINGING;
hfp_connection->call_state = HFP_CALL_RINGING;
hfp_emit_event(hfp_callback, HFP_SUBEVENT_START_RINGINIG, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_START_RINGINIG);
break;
case HFP_CALL_W4_AUDIO_CONNECTION_FOR_ACTIVE:
if (hfp_connection->state != HFP_AUDIO_CONNECTION_ESTABLISHED) return 0;
@ -1173,7 +1173,7 @@ static void hfp_ag_call_sm(hfp_ag_call_event_t event, hfp_connection_t * hfp_con
hfp_gsm_handle_event(HFP_AG_HELD_CALL_JOINED_BY_AG);
hfp_ag_set_callheld_indicator();
hfp_ag_transfer_callheld_state();
hfp_emit_event(hfp_callback, HFP_SUBEVENT_CONFERENCE_CALL, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_CONFERENCE_CALL);
break;
default:
break;
@ -1549,7 +1549,7 @@ static void hfp_ag_call_sm(hfp_ag_call_event_t event, hfp_connection_t * hfp_con
hfp_gsm_handle_event(HFP_AG_CALL_HOLD_ADD_HELD_CALL);
hfp_ag_set_callheld_indicator();
hfp_connection->ag_indicators_status_update_bitmap = store_bit(hfp_connection->ag_indicators_status_update_bitmap, callheld_indicator_index, 1);
hfp_emit_event(hfp_callback, HFP_SUBEVENT_CONFERENCE_CALL, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_CONFERENCE_CALL);
}
hfp_connection->call_state = HFP_CALL_ACTIVE;
break;
@ -1847,7 +1847,7 @@ static void hfp_handle_rfcomm_data(uint8_t packet_type, uint16_t channel, uint8_
break;
case HFP_CMD_HF_REQUEST_PHONE_NUMBER:
hfp_connection->command = HFP_CMD_NONE;
hfp_emit_event(hfp_callback, HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG);
break;
case HFP_CMD_TURN_OFF_EC_AND_NR:
hfp_connection->command = HFP_CMD_NONE;

View File

@ -91,6 +91,20 @@ void hfp_hf_register_packet_handler(hfp_callback_t callback){
hfp_callback = callback;
}
static void hfp_hf_emit_subscriber_information(hfp_callback_t callback, uint8_t event_subtype, uint8_t status, uint8_t bnip_type, const char * bnip_number){
if (!callback) return;
uint8_t event[31];
event[0] = HCI_EVENT_HFP_META;
event[1] = sizeof(event) - 2;
event[2] = event_subtype;
event[3] = status;
event[4] = bnip_type;
int size = (strlen(bnip_number) < sizeof(event) - 6) ? strlen(bnip_number) : sizeof(event) - 6;
strncpy((char*)&event[5], bnip_number, size);
event[5 + size] = 0;
(*callback)(event, sizeof(event));
}
static void hfp_hf_emit_type_and_number(hfp_callback_t callback, uint8_t event_subtype, uint8_t bnip_type, const char * bnip_number){
if (!callback) return;
uint8_t event[30];
@ -356,17 +370,16 @@ static int hfp_hf_send_clcc(uint16_t cid){
return send_str_over_rfcomm(cid, buffer);
}
static void hfp_emit_ag_indicator_event(hfp_callback_t callback, int status, hfp_ag_indicator_t indicator){
static void hfp_emit_ag_indicator_event(hfp_callback_t callback, hfp_ag_indicator_t indicator){
if (!callback) return;
uint8_t event[6+HFP_MAX_INDICATOR_DESC_SIZE+1];
uint8_t event[5+HFP_MAX_INDICATOR_DESC_SIZE+1];
event[0] = HCI_EVENT_HFP_META;
event[1] = sizeof(event) - 2;
event[2] = HFP_SUBEVENT_AG_INDICATOR_STATUS_CHANGED;
event[3] = status;
event[4] = indicator.index;
event[5] = indicator.status;
strncpy((char*)&event[6], indicator.name, HFP_MAX_INDICATOR_DESC_SIZE);
event[6+HFP_MAX_INDICATOR_DESC_SIZE] = 0;
event[3] = indicator.index;
event[4] = indicator.status;
strncpy((char*)&event[5], indicator.name, HFP_MAX_INDICATOR_DESC_SIZE);
event[5+HFP_MAX_INDICATOR_DESC_SIZE] = 0;
(*callback)(event, sizeof(event));
}
@ -376,9 +389,9 @@ static void hfp_emit_network_operator_event(hfp_callback_t callback, hfp_network
event[0] = HCI_EVENT_HFP_META;
event[1] = sizeof(event) - 2;
event[2] = HFP_SUBEVENT_NETWORK_OPERATOR_CHANGED;
event[4] = network_operator.mode;
event[5] = network_operator.format;
strcpy((char*)&event[6], network_operator.name);
event[3] = network_operator.mode;
event[4] = network_operator.format;
strcpy((char*)&event[5], network_operator.name);
(*callback)(event, sizeof(event));
}
@ -962,7 +975,7 @@ static void hfp_handle_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8
case HFP_CMD_GET_SUBSCRIBER_NUMBER_INFORMATION:
hfp_connection->command = HFP_CMD_NONE;
// printf("Subscriber Number: number %s, type %u\n", hfp_connection->bnip_number, hfp_connection->bnip_type);
hfp_hf_emit_type_and_number(hfp_callback, HFP_SUBEVENT_SUBSCRIBER_NUMBER_INFORMATION, hfp_connection->bnip_type, hfp_connection->bnip_number);
hfp_hf_emit_subscriber_information(hfp_callback, HFP_SUBEVENT_SUBSCRIBER_NUMBER_INFORMATION, 0, hfp_connection->bnip_type, hfp_connection->bnip_number);
break;
case HFP_CMD_RESPONSE_AND_HOLD_STATUS:
hfp_connection->command = HFP_CMD_NONE;
@ -1018,7 +1031,7 @@ static void hfp_handle_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8
hfp_hf_switch_on_ok(hfp_connection);
break;
case HFP_CMD_RING:
hfp_emit_event(hfp_callback, HFP_SUBEVENT_RING, 0);
hfp_emit_simple_event(hfp_callback, HFP_SUBEVENT_RING);
break;
case HFP_CMD_TRANSFER_AG_INDICATOR_STATUS:
for (i = 0; i < hfp_connection->ag_indicators_nr; i++){
@ -1031,7 +1044,7 @@ static void hfp_handle_rfcomm_event(uint8_t packet_type, uint16_t channel, uint8
hfp_call_status = (hfp_call_status_t) hfp_connection->ag_indicators[i].status;
}
hfp_connection->ag_indicators[i].status_changed = 0;
hfp_emit_ag_indicator_event(hfp_callback, 0, hfp_connection->ag_indicators[i]);
hfp_emit_ag_indicator_event(hfp_callback, hfp_connection->ag_indicators[i]);
break;
}
}

View File

@ -362,8 +362,7 @@ void packet_handler(uint8_t * event, uint16_t event_size){
if (event[3]
&& event[2] != HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER
&& event[2] != HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG
&& event[2] != HFP_SUBEVENT_TRANSMIT_DTMF_CODES
&& event[2] != HFP_SUBEVENT_TRANSMIT_STATUS_OF_CURRENT_CALL){
&& event[2] != HFP_SUBEVENT_TRANSMIT_DTMF_CODES){
printf("ERROR, status: %u\n", event[3]);
return;
}

View File

@ -394,14 +394,6 @@ void simulate_test_sequence(hfp_test_item_t * test_item){
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_SPEAKER_VOLUME
&& event[2] != HFP_SUBEVENT_MICROPHONE_VOLUME){
printf("ERROR, status: %u\n", event[3]);
return;
}
switch (event[2]) {
case HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_ESTABLISHED:
@ -443,10 +435,10 @@ void packet_handler(uint8_t * event, uint16_t event_size){
printf("HFP AG HFP_SUBEVENT_COMPLETE.\n");
break;
case HFP_SUBEVENT_AG_INDICATOR_STATUS_CHANGED:
printf("AG_INDICATOR_STATUS_CHANGED, AG indicator '%s' (index: %d) to: %d\n", (const char*) &event[6], event[4], event[5]);
printf("AG_INDICATOR_STATUS_CHANGED, AG indicator '%s' (index: %d) to: %d\n", (const char*) &event[5], event[3], event[4]);
break;
case HFP_SUBEVENT_NETWORK_OPERATOR_CHANGED:
printf("NETWORK_OPERATOR_CHANGED, operator mode: %d, format: %d, name: %s\n", event[4], event[5], (char *) &event[6]);
printf("NETWORK_OPERATOR_CHANGED, operator mode: %d, format: %d, name: %s\n", event[3], event[4], (char *) &event[5]);
break;
case HFP_SUBEVENT_EXTENDED_AUDIO_GATEWAY_ERROR:
if (event[4])

View File

@ -599,8 +599,7 @@ static void packet_handler(uint8_t * event, uint16_t event_size){
if (event[3]
&& event[2] != HFP_SUBEVENT_PLACE_CALL_WITH_NUMBER
&& event[2] != HFP_SUBEVENT_ATTACH_NUMBER_TO_VOICE_TAG
&& event[2] != HFP_SUBEVENT_TRANSMIT_DTMF_CODES
&& event[2] != HFP_SUBEVENT_TRANSMIT_STATUS_OF_CURRENT_CALL){
&& event[2] != HFP_SUBEVENT_TRANSMIT_DTMF_CODES){
printf("ERROR, status: %u\n", event[3]);
return;
}

View File

@ -467,14 +467,7 @@ static void packet_handler(uint8_t * event, uint16_t event_size){
return;
}
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_SPEAKER_VOLUME
&& event[2] != HFP_SUBEVENT_MICROPHONE_VOLUME){
printf("ERROR, status: %u\n", event[3]);
return;
}
switch (event[2]) {
case HFP_SUBEVENT_SERVICE_LEVEL_CONNECTION_ESTABLISHED:
printf("Service level connection established.\n\n");
@ -500,10 +493,10 @@ static void packet_handler(uint8_t * event, uint16_t event_size){
}
break;
case HFP_SUBEVENT_AG_INDICATOR_STATUS_CHANGED:
printf("AG_INDICATOR_STATUS_CHANGED, AG indicator '%s' (index: %d) to: %d\n", (const char*) &event[6], event[4], event[5]);
printf("AG_INDICATOR_STATUS_CHANGED, AG indicator '%s' (index: %d) to: %d\n", (const char*) &event[5], event[3], event[4]);
break;
case HFP_SUBEVENT_NETWORK_OPERATOR_CHANGED:
printf("NETWORK_OPERATOR_CHANGED, operator mode: %d, format: %d, name: %s\n", event[4], event[5], (char *) &event[6]);
printf("NETWORK_OPERATOR_CHANGED, operator mode: %d, format: %d, name: %s\n", event[3], event[4]], (char *) &event[5]);
break;
case HFP_SUBEVENT_EXTENDED_AUDIO_GATEWAY_ERROR:
if (event[4])