This commit is contained in:
Matthias Ringwald 2016-03-03 12:06:48 +01:00
commit 4651e1ae77
4 changed files with 52 additions and 29 deletions

View File

@ -282,6 +282,9 @@ void hfp_reset_context_flags(hfp_connection_t * hfp_connection){
hfp_connection->codec_confirmed = 0;
hfp_connection->establish_audio_connection = 0;
hfp_connection->call_waiting_notification_enabled = 0;
hfp_connection->command = HFP_CMD_NONE;
hfp_connection->enable_status_update_for_ag_indicators = 0xFF;
}
static hfp_connection_t * create_hfp_connection_context(){
@ -296,9 +299,8 @@ static hfp_connection_t * create_hfp_connection_context(){
hfp_connection->parser_state = HFP_PARSER_CMD_HEADER;
hfp_connection->command = HFP_CMD_NONE;
hfp_connection->negotiated_codec = 0;
hfp_connection->enable_status_update_for_ag_indicators = 0xFF;
hfp_reset_context_flags(hfp_connection);
linked_list_add(&hfp_connections, (linked_item_t*)hfp_connection);
return hfp_connection;

View File

@ -559,6 +559,7 @@ typedef struct hfp_connection {
uint8_t ag_send_clip;
uint8_t ag_echo_and_noise_reduction;
uint8_t ag_activate_voice_recognition;
uint8_t ag_notify_incoming_call_waiting;
uint8_t send_subscriber_number;
uint8_t next_subscriber_number_to_send;

View File

@ -219,7 +219,7 @@ static int hfp_ag_send_phone_number_for_voice_tag_cmd(uint16_t cid){
static int hfp_ag_send_call_waiting_notification(uint16_t cid){
char buffer[50];
sprintf(buffer, "\r\n+CCWA: \"%s\",%u\r\n", hfp_gsm_clip_number(), hfp_gsm_clip_type());
sprintf(buffer, "\r\n%s: \"%s\",%u\r\n", HFP_ENABLE_CALL_WAITING_NOTIFICATION, hfp_gsm_clip_number(), hfp_gsm_clip_type());
return send_str_over_rfcomm(cid, buffer);
}
@ -1605,6 +1605,12 @@ static void hfp_run_for_context(hfp_connection_t *hfp_connection){
return;
}
if (hfp_connection->ag_notify_incoming_call_waiting){
hfp_connection->ag_notify_incoming_call_waiting = 0;
hfp_ag_send_call_waiting_notification(hfp_connection->rfcomm_cid);
return;
}
if (hfp_connection->command == HFP_CMD_UNKNOWN){
hfp_connection->ok_pending = 0;
hfp_connection->send_error = 0;
@ -2245,4 +2251,11 @@ void hfp_ag_clear_last_dialed_number(void){
hfp_gsm_clear_last_dialed_number();
}
void hfp_ag_notify_incoming_call_waiting(bd_addr_t bd_addr){
hfp_connection_t * hfp_connection = get_hfp_connection_context_for_bd_addr(bd_addr);
if (!hfp_connection->call_waiting_notification_enabled) return;
hfp_connection->ag_notify_incoming_call_waiting = 1;
hfp_run_for_context(hfp_connection);
}

View File

@ -220,6 +220,13 @@ void hfp_ag_set_battery_level(int level);
*/
void hfp_ag_clear_last_dialed_number(void);
/*
* @brief Notify the HF that an incoming call is waiting
* during an ongoing call. The notification will be sent only if the HF has
* has previously enabled the "Call Waiting notification" in the AG.
* @param bd_addr Bluetooth address of the HF
*/
void hfp_ag_notify_incoming_call_waiting(bd_addr_t bd_addr);
// Voice Recognition
@ -231,85 +238,85 @@ void hfp_ag_clear_last_dialed_number(void);
void hfp_ag_activate_voice_recognition(bd_addr_t bd_addr, int activate);
/*
* @brief
* @brief Send a phone number back to the HF.
* @param bd_addr Bluetooth address of the HF
* @param number
* @param phone_number
*/
void hfp_ag_send_phone_number_for_voice_tag(bd_addr_t bd_addr, const char * number);
void hfp_ag_send_phone_number_for_voice_tag(bd_addr_t bd_addr, const char * phone_number);
/*
* @brief
* @brief Reject sending a phone number to the HF.
* @param bd_addr Bluetooth address of the HF
*/
void hfp_ag_reject_phone_number_for_voice_tag(bd_addr_t bd_addr);
// Cellular Actions
/**
* @brief
*/
void hfp_ag_incoming_call(void);
/**
* @brief number is stored.
* @brief Store phone number with initiated call.
* @param type
* @param number
*/
void hfp_ag_set_clip(uint8_t type, const char * number);
// Cellular Actions
/**
* @brief
* @brief Pass the accept incoming call event to the AG.
*/
void hfp_ag_incoming_call(void);
/**
* @brief Pass the reject outgoing call event to the AG.
*/
void hfp_ag_outgoing_call_rejected(void);
/**
* @brief
* @brief Pass the accept outgoing call event to the AG.
*/
void hfp_ag_outgoing_call_accepted(void);
/**
* @brief
* @brief Pass the outgoing call ringing event to the AG.
*/
void hfp_ag_outgoing_call_ringing(void);
/**
* @brief
* @brief Pass the outgoing call established event to the AG.
*/
void hfp_ag_outgoing_call_established(void);
/**
* @brief
* @brief Pass the call droped event to the AG.
*/
void hfp_ag_call_dropped(void);
/*
* @brief
* @param status
* @brief Set network registration status.
* @param status 0 - not registered, 1 - registered
*/
void hfp_ag_set_registration_status(int status);
/*
* @brief
* @param strength
* @brief Set network signal strength.
* @param strength [0-5]
*/
void hfp_ag_set_signal_strength(int strength);
/*
* @brief
* @param status
* @brief Set roaming status.
* @param status 0 - no roaming, 1 - roaming active
*/
void hfp_ag_set_roaming_status(int status);
/*
* @brief
* @brief Set subcriber number information, e.g. the phone number
* @param numbers
* @param numbers_count
*/
void hfp_ag_set_subcriber_number_information(hfp_phone_number_t * numbers, int numbers_count);
/*
* @brief Called by cellular unit after a DTMF code was transmitted, so that the next one can be emitted
* @brief Called by cellular unit after a DTMF code was transmitted, so that the next one can be emitted.
* @param bd_addr Bluetooth address of the HF
*/
void hfp_ag_send_dtmf_code_done(bd_addr_t bd_addr);