Adapt the device update connection mode functionality into BT-HAL framework. 70/218570/2
authorhimanshu <h.himanshu@samsung.com>
Mon, 25 Nov 2019 12:06:30 +0000 (17:36 +0530)
committerhimanshu <h.himanshu@samsung.com>
Tue, 26 Nov 2019 06:44:36 +0000 (12:14 +0530)
Change-Id: Ib0c6acd26aa11ab5aa4178610c374c2079231982
Signed-off-by: himanshu <h.himanshu@samsung.com>
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/device/bt-service-core-device.c
bt-service-adaptation/services/include/bt-service-core-device.h

index 4c1dd26..b5670c7 100644 (file)
@@ -900,6 +900,31 @@ int __bt_bluez_request(int function_name,
                result = _bt_set_white_list(&address, address_type, is_add);
                break;
         }
+       case BT_UPDATE_LE_CONNECTION_MODE: {
+               char *sender = NULL;
+               bluetooth_device_address_t remote_address = { { 0 } };
+               bluetooth_le_connection_param_t parameters = { 0 };
+               bluetooth_le_connection_mode_t mode = BLUETOOTH_LE_CONNECTION_MODE_BALANCED;
+
+               __bt_service_get_parameters(in_param1, &remote_address,
+                               sizeof(bluetooth_device_address_t));
+               __bt_service_get_parameters(in_param2, &mode,
+                               sizeof(bluetooth_le_connection_mode_t));
+
+               result = _bt_get_le_connection_parameter(mode, &parameters);
+               if (result != BLUETOOTH_ERROR_NONE)
+                       break;
+
+               sender = (char *)g_dbus_method_invocation_get_sender(context);
+
+               result = _bt_le_connection_update(sender,
+                               remote_address.addr,
+                               parameters.interval_min,
+                               parameters.interval_max,
+                               parameters.latency,
+                               parameters.timeout);
+               break;
+       }
        case BT_SET_MANUFACTURER_DATA: {
                bluetooth_manufacturer_data_t m_data = { 0 };
                __bt_service_get_parameters(in_param1,
index dc7337d..55c1cea 100644 (file)
 #define MAX_BOND_RETRY_COUNT 3
 #define BT_PASSKEY_MAX_LENGTH 4
 
+#define BT_LE_CONN_PARAM_DEFAULT_SUPERVISION_TIMEOUT    6000    /* msec */
+
+#define BT_LE_CONN_PARAM_BALANCED_MIN_INTERVAL  30      /* msec */
+#define BT_LE_CONN_PARAM_BALANCED_MAX_INTERVAL  50      /* msec */
+#define BT_LE_CONN_PARAM_BALANCED_SLAVE_LATENCY 0       /* event */
+
+#define BT_LE_CONN_PARAM_LOW_LATENCY_MIN_INTERVAL       10      /* msec */
+#define BT_LE_CONN_PARAM_LOW_LATENCY_MAX_INTERVAL       30      /* msec */
+#define BT_LE_CONN_PARAM_LOW_LATENCY_SLAVE_LATENCY      0       /* event */
+
+#define BT_LE_CONN_PARAM_LOW_POWER_MIN_INTERVAL         80      /* msec */
+#define BT_LE_CONN_PARAM_LOW_POWER_MAX_INTERVAL         100     /* msec */
+#define BT_LE_CONN_PARAM_LOW_POWER_SLAVE_LATENCY        2       /* event */
+
 /* Bonding Info structure */
 typedef struct {
        int result;
@@ -2400,6 +2414,43 @@ int _bt_remove_le_conn_param_info(const char *address, const char *sender)
        return BLUETOOTH_ERROR_NONE;
 }
 
+int _bt_get_le_connection_parameter(bluetooth_le_connection_mode_t mode,
+               bluetooth_le_connection_param_t *param)
+{
+       if (param == NULL)
+               return BLUETOOTH_ERROR_INVALID_PARAM;
+
+       memset(param, 0x00, sizeof(bluetooth_le_connection_param_t));
+
+       switch (mode) {
+       case BLUETOOTH_LE_CONNECTION_MODE_BALANCED:
+               param->interval_min = BT_LE_CONN_PARAM_BALANCED_MIN_INTERVAL;
+               param->interval_max = BT_LE_CONN_PARAM_BALANCED_MAX_INTERVAL;
+               param->latency = BT_LE_CONN_PARAM_BALANCED_SLAVE_LATENCY;
+               param->timeout = BT_LE_CONN_PARAM_DEFAULT_SUPERVISION_TIMEOUT;
+               break;
+
+       case BLUETOOTH_LE_CONNECTION_MODE_LOW_LATENCY:
+               param->interval_min = BT_LE_CONN_PARAM_LOW_LATENCY_MIN_INTERVAL;
+               param->interval_max = BT_LE_CONN_PARAM_LOW_LATENCY_MAX_INTERVAL;
+               param->latency = BT_LE_CONN_PARAM_LOW_LATENCY_SLAVE_LATENCY;
+               param->timeout = BT_LE_CONN_PARAM_DEFAULT_SUPERVISION_TIMEOUT;
+               break;
+
+       case BLUETOOTH_LE_CONNECTION_MODE_LOW_POWER:
+               param->interval_min = BT_LE_CONN_PARAM_LOW_POWER_MIN_INTERVAL;
+               param->interval_max = BT_LE_CONN_PARAM_LOW_POWER_MAX_INTERVAL;
+               param->latency = BT_LE_CONN_PARAM_LOW_POWER_SLAVE_LATENCY;
+               param->timeout = BT_LE_CONN_PARAM_DEFAULT_SUPERVISION_TIMEOUT;
+               break;
+
+       default:
+               BT_ERR("Unhandled mode : %d", mode);
+               break;
+       }
+
+       return BLUETOOTH_ERROR_NONE;
+}
 
 int _bt_le_connection_update(const char *sender,
                unsigned char *device_address,
index a5b0ac7..24615e7 100755 (executable)
@@ -121,6 +121,8 @@ int _bt_unset_pin_code(bluetooth_device_address_t *device_address);
 
 int _bt_disconnect_device(bluetooth_device_address_t *device_addr);
 
+int _bt_get_le_connection_parameter(bluetooth_le_connection_mode_t mode,
+               bluetooth_le_connection_param_t *param);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */