Fix the issue that can not send device event
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / oal-adapter-mgr.c
index 4022dc6..d0a2f6d 100644 (file)
@@ -59,6 +59,7 @@ static void cb_adapter_discovery_state_changed(bt_discovery_state_t state);
 static void cb_adapter_device_found(int num_properties, bt_property_t *properties);
 static void cb_adapter_properties(bt_status_t status,
                int num_properties, bt_property_t *properties);
+static void cb_adapter_profile_connected_devices(uint8_t count, uint8_t bdaddr_list[][6]);
 extern void cb_device_properties(bt_status_t status, bt_bdaddr_t *bd_addr,
                int num_properties, bt_property_t *properties);
 extern void cb_device_bond_state_changed(bt_status_t status, bt_bdaddr_t *bd_addr,
@@ -71,7 +72,7 @@ extern void cb_device_ssp_request(bt_bdaddr_t *bd_addr, bt_bdname_t *bdname, uin
 extern void cb_device_authorize_request(bt_bdaddr_t *remote_bd_addr, bt_service_id_t service_d);
 extern void cb_device_trust_state_changed(bt_bdaddr_t *remote_bd_addr, bt_device_trust_state_t trusted);
 #ifdef TIZEN_BT_HAL
-extern void cb_socket_conn_authorize_request(bt_bdaddr_t *remote_bd_addr, bt_uuid_t *uuid);
+extern void cb_socket_conn_authorize_request(bt_bdaddr_t *remote_bd_addr, bt_uuid_t *uuid, uint8_t *name, uint8_t *path, uint32_t fd);
 static void cb_ble_state_change(bt_state_t status);
 extern void cb_device_le_conn_state_changed(bt_status_t status, bt_bdaddr_t *bd_addr,
                bt_le_conn_state_t state);
@@ -79,12 +80,15 @@ extern void cb_device_trusted_profiles_changed(bt_bdaddr_t *bd_addr, uint32_t tr
 extern void cb_rssi_monitor_state_changed(bt_bdaddr_t *bd_addr, int32_t link_type, uint8_t state);
 extern void cb_rssi_alert(bt_bdaddr_t *bd_addr, int32_t link_type, int32_t alert_type, int32_t rssi);
 extern void cb_raw_rssi_received(bt_bdaddr_t *bd_addr, int32_t link_type, int32_t rssi);
+extern void cb_dbfw_plus_info_received(unsigned char *data, uint32_t length, uint8_t event_code);
+extern void cb_controller_error_received(uint8_t error_code);
 #endif
 
 static bt_callbacks_t callbacks = {
        .size = sizeof(callbacks),
        .adapter_state_changed_cb = cb_adapter_state_change,
        .adapter_properties_cb = cb_adapter_properties,
+       .adapter_profile_connected_devices_cb = cb_adapter_profile_connected_devices,
        .remote_device_properties_cb = cb_device_properties,
        .device_found_cb = cb_adapter_device_found,
        .discovery_state_changed_cb = cb_adapter_discovery_state_changed,
@@ -106,6 +110,8 @@ static bt_callbacks_t callbacks = {
        .rssi_monitor_state_changed_cb = cb_rssi_monitor_state_changed,
        .rssi_alert_cb = cb_rssi_alert,
        .raw_rssi_received_cb = cb_raw_rssi_received,
+       .dbfw_plus_info_received_cb = cb_dbfw_plus_info_received,
+       .controller_error_received_cb = cb_controller_error_received,
 #endif
 };
 
@@ -139,11 +145,15 @@ void adapter_mgr_cleanup(void)
 #ifdef TIZEN_BT_HAL
 int oal_set_adapter_request_state(int enable)
 {
+       CHECK_OAL_INITIALIZED();
+
        return blued_api->set_hal_adapter_request_state(enable);
 }
 
 int oal_set_le_request_state(int enable)
 {
+       CHECK_OAL_INITIALIZED();
+
        return blued_api->set_hal_le_request_state(enable);
 }
 #endif
@@ -153,7 +163,13 @@ oal_status_t adapter_enable(void)
        int ret = BT_STATUS_SUCCESS;
 
        API_TRACE();
-       CHECK_OAL_INITIALIZED();
+
+       if (blued_api == NULL) {
+               BT_INFO("Stack is initializing, so pending enable");
+               g_timeout_add(200, retry_enable_adapter, NULL);
+               return OAL_STATUS_PENDING;
+       }
+
        if (OAL_STATUS_SUCCESS != hw_is_module_ready()) {
                g_timeout_add(200, retry_enable_adapter, NULL);
                return OAL_STATUS_PENDING;
@@ -346,6 +362,33 @@ oal_status_t adapter_get_powered_status(gboolean *status)
        return ret;
 }
 
+oal_status_t adapter_get_energy_info(uint32_t *tx_time, uint32_t *rx_time,
+                                       uint32_t *idle_time, uint32_t *energy_used)
+{
+       int ret;
+
+       CHECK_OAL_INITIALIZED();
+
+       OAL_CHECK_PARAMETER(tx_time, return);
+       OAL_CHECK_PARAMETER(rx_time, return);
+       OAL_CHECK_PARAMETER(idle_time, return);
+       OAL_CHECK_PARAMETER(energy_used, return);
+
+       BT_DBG("Get Adapter Energy Info");
+
+#ifdef TIZEN_BT_HAL
+       ret = blued_api->get_adapter_energy_info(tx_time, rx_time, idle_time, energy_used);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("get_adapter_energy_info failed: [%s]", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+#else
+       BT_INFO("Not Supported");
+       ret = OAL_STATUS_NOT_SUPPORT;
+#endif
+       return ret;
+}
+
 oal_status_t adapter_reset(void)
 {
        int ret;
@@ -368,6 +411,24 @@ oal_status_t adapter_reset(void)
        return ret;
 }
 
+oal_status_t adapter_recover(void)
+{
+       int result;
+
+       API_TRACE();
+
+       CHECK_OAL_INITIALIZED();
+       BT_INFO("Adapter Recover");
+
+       result = blued_api->recover();
+       if (result != BT_STATUS_SUCCESS) {
+               BT_ERR("Adapter Recover Failed: [%s]", status2string(result));
+               return convert_to_oal_status(result);
+       }
+
+       return result;
+}
+
 oal_status_t adapter_start_inquiry(unsigned short duration)
 {
        int ret;
@@ -504,6 +565,23 @@ oal_status_t adapter_get_name(void)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t adapter_get_connectable(void)
+{
+       int ret;
+
+       CHECK_OAL_INITIALIZED();
+
+       API_TRACE();
+
+       ret = blued_api->get_adapter_property(BT_PROPERTY_ADAPTER_SCAN_MODE);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("get_adapter_property failed: [%s]", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+
+       return OAL_STATUS_SUCCESS;
+}
+
 oal_status_t adapter_set_name(char * name)
 {
        int ret;
@@ -592,6 +670,23 @@ oal_status_t adapter_get_bonded_devices(void)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t adapter_get_profile_connected_devices(const char *profile_uuid)
+{
+       int ret;
+
+       CHECK_OAL_INITIALIZED();
+
+       API_TRACE();
+
+       ret = blued_api->get_profile_connected_devices(profile_uuid);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("get_profile_connected_devices failed: [%s]", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+
+       return OAL_STATUS_SUCCESS;
+}
+
 static oal_status_t set_scan_mode(bt_scan_mode_t mode)
 {
        bt_property_t prop;
@@ -655,6 +750,25 @@ oal_status_t adapter_set_discoverable_timeout(int timeout)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t adapter_ble_set_filter_policy(int filter_policy)
+{
+       int ret = OAL_STATUS_SUCCESS;
+
+       CHECK_OAL_INITIALIZED();
+       API_TRACE();
+
+       BT_DBG("Filter policy applied is [%d]", filter_policy);
+
+       ret = gatts_set_filter_policy(filter_policy);
+
+       if (ret != OAL_STATUS_SUCCESS) {
+               BT_ERR("gatts_set_filter_policy: [%d]", ret);
+               return ret;
+       }
+
+       return OAL_STATUS_SUCCESS;
+}
+
 oal_status_t adapter_ble_multi_adv_update(int Ins_id, int min_intv, int max_intv,
                        int adv_type, int chnl_map, int tx_power, int timeout_s)
 {
@@ -738,15 +852,30 @@ oal_status_t adapter_set_le_static_random_address(int enable)
        return ret;
 }
 
+oal_status_t adapter_set_manufacturer_data(oal_manufacturer_data_t *m_data)
+{
+       int ret;
+
+       CHECK_OAL_INITIALIZED();
+       API_TRACE();
+
+       OAL_CHECK_PARAMETER(m_data, return);
+       ret = blued_api->adapter_le_set_manufacturer_data((bt_manufacturer_data_t*)m_data);
+       if (ret != BT_STATUS_SUCCESS)
+               BT_ERR("Setting manufacturer data Failed: [%s]",status2string(ret));
+
+       ret = convert_to_oal_status(ret);
+       return ret;
+}
+
 oal_status_t adapter_set_white_list(bt_address_t *device_address, int address_type, bool is_add)
 {
        int ret;
        bdstr_t bdstr;
 
        CHECK_OAL_INITIALIZED();
-       API_TRACE();
 
-       BT_INFO("BT remote device Address: %s", bdt_bd2str(device_address, &bdstr));
+       BT_INFO("BT remote device Address: %s", bdt_bd2str(device_address, &bdstr) + 12);
 
        ret = blued_api->adapter_le_set_white_list((bt_bdaddr_t*)device_address, address_type, is_add);
        if (ret != BT_STATUS_SUCCESS) {
@@ -759,6 +888,21 @@ oal_status_t adapter_set_white_list(bt_address_t *device_address, int address_ty
        return ret;
 }
 
+oal_status_t adapter_ble_set_privacy(int set_privacy)
+{
+       int res;
+
+       CHECK_OAL_INITIALIZED();
+       API_TRACE();
+
+       res = blued_api->adapter_le_set_privacy(set_privacy);
+       if (res != BT_STATUS_SUCCESS)
+               BT_ERR("Setting LE Privacy Failed: [%s]", status2string(res));
+       res = convert_to_oal_status(res);
+
+       return res;
+}
+
 static void cb_adapter_properties(bt_status_t status,
                int num_properties,
                bt_property_t *properties)
@@ -901,6 +1045,18 @@ static void cb_adapter_properties(bt_status_t status,
                                        event_data, (sizeof(event_device_list_t) + num_bonded * sizeof(bt_bdaddr_t)));
                        break;
                }
+               case BT_PROPERTY_A2DP_ROLE: {
+                       unsigned int a2dp_role;
+
+                       a2dp_role = *((uint32_t*)properties[i].val);
+
+                       BT_INFO("A2DP role: %u", a2dp_role);
+
+                       send_event(OAL_EVENT_ADAPTER_PROPERTY_A2DP_ROLE,
+                                       g_memdup(properties[i].val, sizeof(uint32_t)),
+                                       sizeof(uint32_t));
+                       break;
+               }
                case BT_PROPERTY_LOCAL_LE_FEATURES: {
                        event_adapter_le_features_t *le_features;
 
@@ -920,6 +1076,16 @@ static void cb_adapter_properties(bt_status_t status,
                                        sizeof(event_adapter_le_features_t));
                        break;
                }
+               case BT_PROPERTY_ADAPTER_LE_DISCOVERY_STARTED: {
+                       BT_INFO("LE Discovery started");
+                       send_event(OAL_EVENT_BLE_DISCOVERY_STARTED, NULL, 0);
+                       break;
+               }
+               case BT_PROPERTY_ADAPTER_LE_DISCOVERY_STOPPED: {
+                       BT_INFO("LE Discovery stopped");
+                       send_event(OAL_EVENT_BLE_DISCOVERY_STOPPED, NULL, 0);
+                       break;
+               }
                default:
                         BT_WARN("Unhandled property: %d", properties[i].type);
                         break;
@@ -927,6 +1093,19 @@ static void cb_adapter_properties(bt_status_t status,
        }
 }
 
+static void cb_adapter_profile_connected_devices(uint8_t count, uint8_t addr_list[][6])
+{
+       event_adapter_profile_connected_devices *event_data;
+       int i;
+
+       event_data = g_malloc0(sizeof(event_adapter_profile_connected_devices));
+       event_data->count = count;
+       for (i = 0; i < count; i++) {
+               memcpy(event_data->addr_list[i].addr, addr_list[i], BT_ADDRESS_BYTES_NUM);
+       }
+       send_event(OAL_EVENT_ADAPTER_PROFILE_CONNECTED_DEVICES, event_data, sizeof(event_adapter_profile_connected_devices));
+}
+
 static void cb_adapter_discovery_state_changed(bt_discovery_state_t state)
 {
        oal_event_t event;
@@ -990,3 +1169,14 @@ static void cb_adapter_device_found(int num_properties, bt_property_t *propertie
 
        BT_DBG("-");
 }
+
+void cb_controller_error_received(uint8_t error_code)
+{
+       uint8_t *event_data;
+
+       event_data = g_new0(uint8_t, 1);
+       *event_data = error_code;
+
+       send_event(OAL_EVENT_CONTROLLER_ERROR_RECEIVED,
+               (gpointer)event_data, sizeof(uint8_t));
+}