static handle_stack_msg av_event_cb = NULL;
static handle_stack_msg a2dp_sink_event_cb = NULL;
static handle_stack_msg hf_event_cb = NULL;
+static handle_stack_msg hf_client_event_cb = NULL;
static handle_stack_msg avrcp_ctrl_event_cb = NULL;
static handle_stack_msg avrcp_tg_event_cb = NULL;
static handle_stack_msg gatt_event_cb = NULL;
static void __bt_hal_send_device_trusted_profile_changed_event(uint32_t trust_val, const char *address);
static void __bt_hal_handle_adv_report(GVariant *msg, const char *path);
static void __bt_hal_handle_gatts_mtu_changed_event(char *address, int mtu);
+static void __bt_hal_send_hf_client_connection_state_event(gboolean connected, const char *address);
static gboolean __bt_hal_discovery_finished_cb(gpointer user_data)
if (flight_mode != TRUE) {
ERR("Ignore the event");
return;
- }
- else {
+ } else {
ERR("Flight Mode == TRUE");
}
} else {
} else if (state == BT_HAL_PROFILE_STATE_CONNECTING) {
DBG("A2DP Sink Profile state changed: BT_HAL_PROFILE_STATE_CONNECTING");
}
- } else if (strncmp(profile_uuid, HFP_HF_UUID, strlen(HFP_HF_UUID)) == 0) {
+ } else if (strcmp(profile_uuid, HFP_HF_UUID) == 0) {
if (state == BT_HAL_PROFILE_STATE_CONNECTING)
DBG("HFP Profile state changed: BT_PROFILE_STATE_CONNECTING");
else if (state == BT_HAL_PROFILE_STATE_CONNECTED) {
} else {
ERR("HFP Profile state: Invalid");
}
+ } else if (strncmp(profile_uuid, HFP_AG_UUID, strlen(HFP_AG_UUID)) == 0) {
+ if (state == BT_HAL_PROFILE_STATE_CONNECTING)
+ DBG("HFP Client Profile state changed: BT_PROFILE_STATE_CONNECTING");
+ else if (state == BT_HAL_PROFILE_STATE_CONNECTED) {
+ DBG("HFP Client Profile state changed: BT_PROFILE_STATE_CONNECTED");
+ __bt_hal_send_hf_client_connection_state_event(TRUE, address);
+ } else if (state == BT_HAL_PROFILE_STATE_DISCONNECTED) {
+ DBG("HFP Client Profile state changed: BT_PROFILE_STATE_DISCONNECTED");
+ __bt_hal_send_hf_client_connection_state_event(FALSE, address);
+ } else if (state == BT_HAL_PROFILE_STATE_DISCONNECTING) {
+ DBG("HFP Client Profile state changed: BT_PROFILE_STATE_DISCONNECTING");
+ } else {
+ ERR("HFP Client Profile state: Invalid");
+ }
} else if ((strncmp(profile_uuid, AVRCP_TARGET_UUID, strlen(AVRCP_TARGET_UUID)) == 0)) {
if (state == BT_HAL_PROFILE_STATE_CONNECTED) {
DBG("AVRCP Controller Profile state changed: BT_HAL_PROFILE_STATE_CONNECTED");
hf_event_cb(HAL_EV_HANDSFREE_CONN_STATE, &ev, sizeof(ev));
}
+/* HF(Client Role) Profile Events */
+static void __bt_hal_send_hf_client_connection_state_event(gboolean connected,
+ const char *address)
+{
+ struct hal_ev_hf_client_conn_state ev;
+
+ if (connected == TRUE)
+ INFO("HF Client Profile Connected for address [%s]", address);
+ else
+ INFO("HF Client Profile DisConnected for address [%s]", address);
+
+ ev.state = (connected == TRUE) ?
+ HAL_EV_HF_CLIENT_CONN_STATE_CONNECTED :
+ HAL_EV_HF_CLIENT_CONN_STATE_DISCONNECTED;
+
+ _bt_hal_convert_addr_string_to_type(ev.bdaddr, address);
+
+ if (!hf_client_event_cb)
+ ERR("HF Client event handler not registered");
+ else
+ hf_client_event_cb(HAL_EV_HF_CLIENT_CONN_STATE, &ev, sizeof(ev));
+}
+
void _bt_hal_register_event_handler_cb(bt_hal_module_e module, handle_stack_msg cb)
{
switch (module) {
case HAL_HF_AG:
hf_event_cb = cb;
break;
+ case HAL_HF_CLIENT:
+ hf_client_event_cb = cb;
+ break;
case HAL_AVRCP_TG:
avrcp_tg_event_cb = cb;
break;
case HAL_HF_AG:
hf_event_cb = NULL;
break;
+ case HAL_HF_CLIENT:
+ hf_client_event_cb = NULL;
+ break;
case HAL_AVRCP_TG:
avrcp_tg_event_cb = NULL;
break;