[Adapt] Implement set adapter properties APIs 21/78021/1
authorAtul Rai <a.rai@samsung.com>
Mon, 4 Jul 2016 03:35:43 +0000 (12:35 +0900)
committerAtul Rai <a.rai@samsung.com>
Mon, 4 Jul 2016 03:35:43 +0000 (12:35 +0900)
This patch implements various set adapter property APIs
(e.g.: _bt_set_local_name, _bt_set_connectable etc.) in
bluetooth-frwk and OAL.

Change-Id: I1745f7e016d7a052e16c4ebf9cfddf76d85875a1
Signed-off-by: Atul Rai <a.rai@samsung.com>
bt-oal/include/oal-adapter-mgr.h
bt-oal/oal-adapter-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter.c
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/include/bt-service-core-adapter.h

index 8801250..27481f1 100755 (executable)
@@ -135,6 +135,18 @@ oal_status_t adapter_get_version(void);
 oal_status_t adapter_get_name(void);
 
 /**
+ * @brief Set local BT chip name
+ *
+ * @return OAL_STATUS_SUCCESS on success, otherwise a non-zero error value.
+ * @retval #OAL_STATUS_SUCCESS  Successful
+ *
+ * @pre Adapter must be enabled with adapter_enable() followed by OAL_EVENT_ADAPTER_ENABLED
+ *
+ * @see OAL_EVENT_ADAPTER_PROPERTY_NAME
+ */
+oal_status_t adapter_set_name(char * name);
+
+/**
  * @brief Sets output variable to TRUE if adapter is discoverable & connectable.
  */
 oal_status_t adapter_is_discoverable(int *p_discoverable);
@@ -161,6 +173,26 @@ oal_status_t adapter_get_discoverable_timeout(int *p_timeout);
  */
 oal_status_t adapter_get_service_uuids(void);
 
+/*
+ * @brief Set connectability of adapter
+ *
+ * @remarks     If enabled, after success event, device can connected from remote device.
+ *                      If disabled, after success event, device cannot be connected from remote device;
+ *                      neither can be found in discoveries.
+ *
+ * @details EVENT:  OAL_EVENT_ADAPTER_MODE_CONNECTABLE/OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE
+ *
+ * @return OAL_STATUS_SUCCESS on success, otherwise a non-zero error value.
+ * @retval #OAL_STATUS_SUCCESS  Successful
+ *
+ * @pre Adapter must be enabled with adapter_enable() followed by OAL_EVENT_ADAPTER_ENABLED
+ *
+ * @see  adapter_is_connectable()
+ * @see  OAL_EVENT_ADAPTER_MODE_CONNECTABLE
+ * @see  OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE
+ */
+oal_status_t adapter_set_connectable(int connectable);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 7c4fabb..c16515e 100755 (executable)
@@ -238,6 +238,30 @@ oal_status_t adapter_get_name(void)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t adapter_set_name(char * name)
+{
+       int ret;
+       bt_property_t prop;
+
+       CHECK_OAL_INITIALIZED();
+
+       OAL_CHECK_PARAMETER(name, return);
+       API_TRACE("Name: %s", name);
+
+       prop.type = BT_PROPERTY_BDNAME;
+       prop.len = strlen(name);
+       prop.val = name;
+
+       ret = blued_api->set_adapter_property(&prop);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("set_adapter_property: [%s]", status2string(ret));
+               ret = OAL_STATUS_INTERNAL_ERROR;
+       } else
+               ret = OAL_STATUS_SUCCESS;
+
+       return ret;
+}
+
 oal_status_t adapter_is_discoverable(int *p_discoverable)
 {
        OAL_CHECK_PARAMETER(p_discoverable, return);
@@ -287,6 +311,41 @@ oal_status_t adapter_get_service_uuids(void)
        return OAL_STATUS_SUCCESS;
 }
 
+static oal_status_t set_scan_mode(bt_scan_mode_t mode)
+{
+       bt_property_t prop;
+       int res;
+
+       BT_DBG("+");
+
+       CHECK_OAL_INITIALIZED();
+
+       prop.type = BT_PROPERTY_ADAPTER_SCAN_MODE;
+       prop.len = sizeof(bt_scan_mode_t);
+       prop.val = &mode;
+       res = blued_api->set_adapter_property(&prop);
+       if (res != BT_STATUS_SUCCESS) {
+               BT_ERR("set scan mode failed [%s]", status2string(res));
+               return convert_to_oal_status(res);
+       }
+
+       BT_DBG("-");
+       return OAL_STATUS_SUCCESS;
+}
+
+oal_status_t adapter_set_connectable(int connectable)
+{
+       bt_scan_mode_t mode;
+
+       API_TRACE("%d", connectable);
+
+       CHECK_OAL_INITIALIZED();
+
+       mode = connectable ? BT_SCAN_MODE_CONNECTABLE : BT_SCAN_MODE_NONE;
+
+       return set_scan_mode(mode);
+}
+
 static void cb_adapter_properties(bt_status_t status,
                                                int num_properties,
                                                bt_property_t *properties)
index 35871bb..d262e23 100644 (file)
@@ -176,6 +176,24 @@ int _bt_get_local_name(void)
        return result;
 }
 
+int _bt_set_local_name(char *local_name)
+{
+       int result = BLUETOOTH_ERROR_NONE;
+       BT_DBG("+");
+
+       retv_if(NULL == local_name, BLUETOOTH_ERROR_INVALID_PARAM);
+
+       result =  adapter_set_name(local_name);
+       if (result != OAL_STATUS_SUCCESS) {
+               BT_ERR("adapter_set_name failed: %d", result);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       } else
+               result = BLUETOOTH_ERROR_NONE;
+
+       BT_DBG("-");
+       return result;
+}
+
 int _bt_get_discoverable_mode(int *mode)
 {
        int scan_mode = 0;
@@ -210,6 +228,40 @@ int _bt_get_discoverable_mode(int *mode)
        return BLUETOOTH_ERROR_NONE;
 }
 
+gboolean _bt_is_connectable(void)
+{
+       int connectable = 0;
+       int result;
+
+       BT_DBG("+");
+
+       adapter_is_connectable(&connectable);
+       if (connectable)
+               result = TRUE;
+       else
+               result = FALSE;
+
+       BT_DBG("Connectable: [%s]", result ? "TRUE":"FALSE");
+       BT_DBG("-");
+       return result;
+}
+
+int _bt_set_connectable(gboolean connectable)
+{
+       int result = BLUETOOTH_ERROR_NONE;
+
+       BT_DBG("+");
+       result =  adapter_set_connectable(connectable);
+       if (result != OAL_STATUS_SUCCESS) {
+               BT_ERR("adapter_get_address failed: %d", result);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       } else
+               result = BLUETOOTH_ERROR_NONE;
+
+       BT_DBG("-");
+       return result;
+}
+
 int _bt_is_service_used(void)
 {
        int result;
@@ -291,15 +343,28 @@ static void __bt_adapter_event_handler(int event_type, gpointer event_data)
                break;
        }
        case OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE: {
-               BT_INFO("Adapter discoverable mode: BLUETOOTH_DISCOVERABLE_MODE_NON_CONNECTABLE");
+               gboolean connectable = FALSE;
+
+               BT_INFO("Adapter discoverable mode:"
+                       " BLUETOOTH_DISCOVERABLE_MODE_NON_CONNECTABLE");
+               _bt_send_event(BT_ADAPTER_EVENT,
+                               BLUETOOTH_EVENT_CONNECTABLE_CHANGED,
+                               g_variant_new("(b)", connectable));
                break;
        }
        case OAL_EVENT_ADAPTER_MODE_CONNECTABLE: {
-               BT_INFO("Adapter discoverable mode: BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE");
+               gboolean connectable = TRUE;
+
+               BT_INFO("Adapter discoverable mode:"
+                       " BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE");
+               _bt_send_event(BT_ADAPTER_EVENT,
+                               BLUETOOTH_EVENT_CONNECTABLE_CHANGED,
+                               g_variant_new("(b)", connectable));
                break;
        }
        case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE: {
-               BT_INFO("Adapter discoverable mode: BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE");
+               BT_INFO("Adapter discoverable mode:"
+                       " BLUETOOTH_DISCOVERABLE_MODE_GENERAL_DISCOVERABLE");
                break;
        }
        case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT: {
index 647d5c6..fea547c 100644 (file)
@@ -134,7 +134,14 @@ void _bt_free_info_from_invocation_list(invocation_info_t *req_info)
 
 }
 
-/*TODO:Following function will be used in subsequent patch, so ignore warning for now */
+static void __bt_service_get_parameters(GVariant *in_param,
+               void *value, int size)
+{
+       void *buf = NULL;
+       buf = (void *)g_variant_get_data(in_param);
+       memcpy(value, buf, size);
+}
+
 static gboolean __bt_is_sync_function(int service_function)
 {
        /*TODO: Keep adding sync methods with expect replies from bluetooth service */
@@ -422,12 +429,34 @@ int __bt_bluez_request(int function_name,
                }
                break;
        }
+       case BT_SET_LOCAL_NAME: {
+               bluetooth_device_name_t local_name = { {0} };
+               __bt_service_get_parameters(in_param1,
+                               &local_name, sizeof(bluetooth_device_name_t));
+               result = _bt_set_local_name(local_name.name);
+               break;
+       }
        case BT_GET_DISCOVERABLE_MODE: {
                int discoverable_mode = BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE;
                result = _bt_get_discoverable_mode(&discoverable_mode);
                g_array_append_vals(*out_param1, &discoverable_mode, sizeof(int));
                break;
        }
+       case BT_IS_CONNECTABLE: {
+               gboolean is_connectable = FALSE;
+
+               is_connectable = _bt_is_connectable();
+               g_array_append_vals(*out_param1, &is_connectable, sizeof(gboolean));
+               break;
+       }
+       case BT_SET_CONNECTABLE: {
+               gboolean is_connectable;
+
+               __bt_service_get_parameters(in_param1,
+                               &is_connectable, sizeof(gboolean));
+               result = _bt_set_connectable(is_connectable);
+               break;
+       }
        case BT_IS_SERVICE_USED: {
                char *uuid = NULL;
 
index 963c9d0..58d5ead 100755 (executable)
@@ -59,10 +59,16 @@ int _bt_get_local_version(void);
 
 int _bt_get_local_name(void);
 
+int _bt_set_local_name(char *local_name);
+
 int _bt_get_discoverable_mode(int *mode);
 
+gboolean _bt_is_connectable(void);
+
 int _bt_is_service_used(void);
 
+int _bt_set_connectable(gboolean connectable);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */