static void hsp_run(void){ int err; if (hs_ring_received){ hs_ring_received = 0; hs_send_button_press = 1; } if (hs_ok_received){ hs_ok_received = 0; } if (hs_send_button_press){ int err = 0; if (hsp_state == HSP_W4_USER_ACTION){ err = send_str_over_rfcomm(rfcomm_cid, HSP_HS_AT_CKPD); } else { err = send_str_over_rfcomm(rfcomm_cid, HSP_HS_BUTTON_PRESS); } if (!err) hs_send_button_press = 0; return; } switch (hsp_state){ case HSP_SDP_QUERY_RFCOMM_CHANNEL: hsp_state = HSP_W4_SDP_QUERY_COMPLETE; sdp_query_rfcomm_channel_and_name_for_uuid(remote, SDP_Headset_AG); break; case HSP_W2_CONNECT_SCO: hsp_state = HSP_W4_SCO_CONNECTED; break; case HSP_W2_DISCONNECT_SCO: hsp_state = HSP_W4_SCO_DISCONNECTED; break; case HSP_ACTIVE: if (hs_ok_received) break; if (hs_microphone_gain >= 0){ char buffer[20]; sprintf(buffer, "%s=%d\r\n", HSP_HS_MICROPHONE_GAIN, hs_microphone_gain); err = send_str_over_rfcomm(rfcomm_cid, buffer); if (!err) hs_microphone_gain = -1; break; } if (hs_speaker_gain >= 0){ char buffer[20]; sprintf(buffer, "%s=%d\r\n", HSP_HS_SPEAKER_GAIN, hs_speaker_gain); err = send_str_over_rfcomm(rfcomm_cid, buffer); if (!err) hs_speaker_gain = -1; break; } break; default: break; } }
int hfp_hs_retrieve_codec_cmd(uint16_t cid){ char buffer[30]; int offset = snprintf(buffer, sizeof(buffer), "AT%s=", HFP_AVAILABLE_CODECS); offset += join(buffer+offset, sizeof(buffer)-offset, hfp_codecs, hfp_codecs_nr); offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_hs_list_supported_generic_status_indicators_cmd(uint16_t cid){ char buffer[30]; int offset = snprintf(buffer, sizeof(buffer), "AT%s=", HFP_GENERIC_STATUS_INDICATOR); offset += join(buffer+offset, sizeof(buffer)-offset, hfp_indicators, hfp_indicators_nr); offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_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; return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_report_network_operator_name_cmd(uint16_t cid, hfp_network_opearator_t op){ char buffer[40]; if (strlen(op.name) == 0){ sprintf(buffer, "\r\n%s:%d,,\r\n\r\nOK\r\n", HFP_QUERY_OPERATOR_SELECTION, op.mode); } else { sprintf(buffer, "\r\n%s:%d,%d,%s\r\n\r\nOK\r\n", HFP_QUERY_OPERATOR_SELECTION, op.mode, op.format, op.name); } return send_str_over_rfcomm(cid, buffer); }
static void send_packet(void){ switch (hfp_service_level_connection_state){ case 1: send_str_over_rfcomm(rfcomm_cid, "\r\n+BRSF: 224\r\n\r\nOK\r\n"); hfp_service_level_connection_state++; break; default: break; } }
int hfp_ag_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 += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_retrieve_indicators_cmd(uint16_t cid, hfp_connection_t * context){ char buffer[250]; int offset = snprintf(buffer, sizeof(buffer), "\r\n%s:", HFP_INDICATOR); offset += hfp_ag_indicators_join(buffer+offset, sizeof(buffer)-offset, context); buffer[offset] = 0; offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_retrieve_can_hold_call_cmd(uint16_t cid){ char buffer[100]; 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 += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_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; printf("send %s\n", buffer+2); offset += snprintf(buffer+offset, sizeof(buffer)-offset, "\r\n\r\nOK\r\n"); buffer[offset] = 0; return send_str_over_rfcomm(cid, buffer); }
int hfp_hs_retrieve_can_hold_call_cmd(uint16_t cid){ char buffer[20]; sprintf(buffer, "AT%s=?\r\n", HFP_SUPPORT_CALL_HOLD_AND_MULTIPARTY_SERVICES); // printf("retrieve_can_hold_call %s\n", buffer); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_report_extended_audio_gateway_error(uint16_t cid, uint8_t error){ char buffer[20]; sprintf(buffer, "\r\n%s=%d\r\n", HFP_EXTENDED_AUDIO_GATEWAY_ERROR, error); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_error(uint16_t cid){ char buffer[10]; sprintf(buffer, "\r\nERROR\r\n"); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_ok(uint16_t cid){ char buffer[10]; sprintf(buffer, "\r\nOK\r\n"); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_exchange_supported_features_cmd(uint16_t cid){ char buffer[40]; sprintf(buffer, "\r\n%s:%d\r\n\r\nOK\r\n", HFP_SUPPORTED_FEATURES, hfp_supported_features); return send_str_over_rfcomm(cid, buffer); }
// When support custom commands is enabled, AG will send HSP_SUBEVENT_HS_COMMAND. // On occurance of this event, client's packet handler must send the result back // by calling hsp_hs_send_result function. int hsp_hs_send_result(char * result){ if (!hs_support_custom_indications) return 1; return send_str_over_rfcomm(rfcomm_cid, result); }
int hfp_hs_exchange_supported_features_cmd(uint16_t cid){ char buffer[20]; sprintf(buffer, "AT%s=%d\r\n", HFP_SUPPORTED_FEATURES, hfp_supported_features); // printf("exchange_supported_features %s\n", buffer); return send_str_over_rfcomm(cid, buffer); }
int hfp_hs_toggle_indicator_status_update_cmd(uint16_t cid, uint8_t activate){ char buffer[20]; sprintf(buffer, "AT%s=3,0,0,%d\r\n", HFP_ENABLE_INDICATOR_STATUS_UPDATE, activate); // printf("toggle_indicator_status_update %s\n", buffer); return send_str_over_rfcomm(cid, buffer); }
int hfp_hs_retrieve_indicators_status_cmd(uint16_t cid){ char buffer[20]; sprintf(buffer, "AT%s?\r\n", HFP_INDICATOR); // printf("retrieve_indicators_status %s\n", buffer); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_transfer_ag_indicators_status_cmd(uint16_t cid, hfp_ag_indicator_t indicator){ char buffer[20]; sprintf(buffer, "\r\n%s:%d,%d\r\n\r\nOK\r\n", HFP_TRANSFER_AG_INDICATOR_STATUS, indicator.index, indicator.status); return send_str_over_rfcomm(cid, buffer); }
int hfp_hs_list_initital_supported_generic_status_indicators_cmd(uint16_t cid){ char buffer[20]; sprintf(buffer, "AT%s?\r\n", HFP_GENERIC_STATUS_INDICATOR); // printf("list_initital_supported_generic_status_indicators %s\n", buffer); return send_str_over_rfcomm(cid, buffer); }
int hfp_ag_cmd_suggest_codec(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); }
static int hfp_ag_ring(uint16_t cid){ return send_str_over_rfcomm(cid, (char *) "\r\nRING\r\n"); }