From 784f980171851282a594e7efe1ef1784c5a9486e Mon Sep 17 00:00:00 2001 From: himanshu Date: Mon, 25 Nov 2019 17:36:30 +0530 Subject: [PATCH] Adapt the device update connection mode functionality into BT-HAL framework. Change-Id: Ib0c6acd26aa11ab5aa4178610c374c2079231982 Signed-off-by: himanshu --- .../services/bt-request-handler.c | 25 +++++++++++ .../services/device/bt-service-core-device.c | 51 ++++++++++++++++++++++ .../services/include/bt-service-core-device.h | 2 + 3 files changed, 78 insertions(+) diff --git a/bt-service-adaptation/services/bt-request-handler.c b/bt-service-adaptation/services/bt-request-handler.c index 4c1dd26..b5670c7 100644 --- a/bt-service-adaptation/services/bt-request-handler.c +++ b/bt-service-adaptation/services/bt-request-handler.c @@ -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, ¶meters); + 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, diff --git a/bt-service-adaptation/services/device/bt-service-core-device.c b/bt-service-adaptation/services/device/bt-service-core-device.c index dc7337d..55c1cea 100644 --- a/bt-service-adaptation/services/device/bt-service-core-device.c +++ b/bt-service-adaptation/services/device/bt-service-core-device.c @@ -59,6 +59,20 @@ #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, diff --git a/bt-service-adaptation/services/include/bt-service-core-device.h b/bt-service-adaptation/services/include/bt-service-core-device.h index a5b0ac7..24615e7 100755 --- a/bt-service-adaptation/services/include/bt-service-core-device.h +++ b/bt-service-adaptation/services/include/bt-service-core-device.h @@ -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 */ -- 2.7.4