X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-oal%2Foal-adapter-mgr.c;h=3853d185747b402e4425de8c3d4a234bfd5648a0;hb=df1220bbcf62737d9791e94760011b5757614261;hp=3d403f5d16f7d35c5559a8e2a5adb2067c240287;hpb=903550eca85844b370e51c56ea8ee22595f7389e;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-oal/oal-adapter-mgr.c b/bt-oal/oal-adapter-mgr.c index 3d403f5..3853d18 100644 --- a/bt-oal/oal-adapter-mgr.c +++ b/bt-oal/oal-adapter-mgr.c @@ -71,7 +71,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,6 +79,8 @@ 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 = { @@ -106,6 +108,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 }; @@ -153,7 +157,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 +356,35 @@ 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; + + API_TRACE(); + + 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_INFO("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 +407,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 +561,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; @@ -655,6 +729,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) { @@ -718,6 +811,78 @@ oal_status_t adapter_ble_multi_adv_disable(int instance_id) return OAL_STATUS_SUCCESS; } +oal_status_t adapter_set_le_static_random_address(int enable) +{ + int ret; + + CHECK_OAL_INITIALIZED(); + API_TRACE("%d", enable); + +#ifdef TIZEN_BT_HAL + ret = blued_api->set_le_static_random_address((enable ? 1 : 0)); + if (ret != BT_STATUS_SUCCESS) + BT_ERR("Static address set failed: [%s]", status2string(ret)); + ret = convert_to_oal_status(ret); +#else + BT_INFO("Not Supported"); + ret = OAL_STATUS_NOT_SUPPORT; +#endif + + 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)); + + ret = blued_api->adapter_le_set_white_list((bt_bdaddr_t*)device_address, address_type, is_add); + if (ret != BT_STATUS_SUCCESS) { + if(is_add) + BT_ERR("Add to White List Failed: [%s]",status2string(ret)); + else + BT_ERR("Remove from White List Failed: [%s]",status2string(ret)); + } + ret = convert_to_oal_status(ret); + 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) @@ -860,6 +1025,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; @@ -879,6 +1056,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; @@ -949,3 +1136,18 @@ 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; + + BT_DBG("+"); + + event_data = g_new0(uint8_t, 1); + *event_data = error_code; + + send_event(OAL_EVENT_CONTROLLER_ERROR_RECEIVED, + (gpointer)event_data, sizeof(uint8_t)); + + BT_DBG("-"); +}