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);
*/
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 */
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);
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)
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;
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;
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: {
}
-/*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 */
}
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;
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 */