Skip to content

Commit 18b9b9d

Browse files
ziyikgiwon-nam
authored andcommitted
framework/src/ble_manager: Add disconnect casue on callback
-Add disconnect cause on callback -Modify disconnect handle to pass disconnect cause to application callback -Modify examples to support the disconnect cause on the callback
1 parent 516b6d0 commit 18b9b9d

File tree

13 files changed

+74
-32
lines changed

13 files changed

+74
-32
lines changed

apps/examples/ble_rmc/ble_rmc_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ static void ble_device_scanned_cb_for_connect(ble_scanned_device *scanned_device
142142
}
143143
}
144144

145-
static void ble_device_disconnected_cb(ble_client_ctx *ctx)
145+
static void ble_device_disconnected_cb(ble_client_ctx *ctx, uint16_t cause)
146146
{
147-
RMC_LOG(RMC_CLIENT_TAG, "'%s' is called[ID : %d]\n", __FUNCTION__, ctx->conn_handle);
147+
RMC_LOG(RMC_CLIENT_TAG, "'%s' is called[ID : %d] cause: %d\n", __FUNCTION__, ctx->conn_handle, cause);
148148
return;
149149
}
150150

apps/examples/ble_tester/ble_tester_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ static void ble_device_scanned_cb_without_filter(ble_scanned_device *scanned_dev
186186
return;
187187
}
188188

189-
static void ble_device_disconnected_cb(ble_client_ctx *ctx)
189+
static void ble_device_disconnected_cb(ble_client_ctx *ctx, uint16_t cause)
190190
{
191191
RMC_LOG(RMC_CLIENT_TAG, "'%s' is called[%p]\n", __FUNCTION__, ctx);
192192
g_is_conn = 0;

apps/examples/testcase/ta_tc/ble_manager/itc/itc_blemanager_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static void ble_device_scanned_cb(ble_scanned_device *scanned_device)
7979
);
8080
}
8181

82-
static void ble_device_disconnected_cb(ble_client_ctx *ctx)
82+
static void ble_device_disconnected_cb(ble_client_ctx *ctx, uint16_t cause)
8383
{
8484
printf("client disconnected callback received\n");
8585
ITC_FUNC_SIGNAL;

apps/examples/testcase/ta_tc/ble_manager/utc/utc_blemanager_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static void ble_device_scanned_cb(ble_scanned_device *scanned_device)
7070
return;
7171
}
7272

73-
static void ble_device_disconnected_cb(ble_client_ctx *ctx)
73+
static void ble_device_disconnected_cb(ble_client_ctx *ctx, uint16_t cause)
7474
{
7575
printf("client disconnected callback received\n");
7676
g_client_connected = BEVT_DISCONNECTED;

framework/include/ble_manager/ble_client.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ typedef struct {
7070
bool auto_connect;
7171
} ble_client_ctx;
7272

73-
typedef void(*ble_client_device_disconnected_cb)(ble_client_ctx *ctx);
73+
typedef void(*ble_client_device_disconnected_cb)(ble_client_ctx *ctx, uint16_t cause);
7474
typedef void(*ble_client_device_connected_cb)(ble_client_ctx *ctx, ble_device_connected* connected_device);
7575
typedef void(*ble_client_operation_notification_cb)(ble_client_ctx *ctx, ble_attr_handle attr_handle, ble_data* read_result);
7676
typedef void (*ble_client_operation_indication_cb)(ble_client_ctx *ctx, ble_attr_handle attr_handle, ble_data* read_result);

framework/src/ble_manager/ble_manager_state.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ static void _event_caller(int evt_pri, void *data) {
126126
} break;
127127
case BLE_EVT_CLIENT_DISCONNECT: {
128128
ble_client_device_disconnected_cb callback = msg->param[0];
129-
callback(msg->param[1]);
129+
trble_conn_handle conn = *(trble_conn_handle *)(msg->param[2]);
130+
uint16_t error = *(uint16_t *)(msg->param[2] + sizeof(trble_conn_handle));
131+
callback(msg->param[1], error);
130132
} break;
131133
case BLE_EVT_CLIENT_DISPLAY_PASSKEY: {
132134
ble_client_passkey_display_cb callback = msg->param[0];
@@ -1283,8 +1285,6 @@ ble_result_e blemgr_handle_request(blemgr_msg_s *msg)
12831285
ctx_connecting = &g_client_table[i];
12841286
}
12851287
}
1286-
free(msg->param);
1287-
12881288
if (ctx == NULL) {
12891289
if (ctx_connecting == NULL) {
12901290
BLE_LOG_ERROR("[BLEMGR] fail to find disconnected client. (conn_handle : %u)\n", data);
@@ -1316,7 +1316,7 @@ ble_result_e blemgr_handle_request(blemgr_msg_s *msg)
13161316
}
13171317

13181318
if (priv_state != BLE_CLIENT_AUTOCONNECTING && ctx->callbacks.disconnected_cb) {
1319-
memcpy(queue_msg.param, (void*[]){ctx->callbacks.disconnected_cb, ctx, NULL}, sizeof(void*) * queue_msg.count);
1319+
memcpy(queue_msg.param, (void*[]){ctx->callbacks.disconnected_cb, ctx, msg->param}, sizeof(void*) * queue_msg.count);
13201320
ble_queue_enque(BLE_QUEUE_EVT_PRI_HIGH, &queue_msg);
13211321
}
13221322
} break;

os/board/rtl8720e/src/component/bluetooth/example/ble_central/central.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ static rtk_bt_evt_cb_ret_t ble_tizenrt_central_gap_app_callback(uint8_t evt_code
147147
role = disconn_ind->role ? "slave" : "master";
148148
dbg("[APP] Disconnected, reason: 0x%x, handle: %d, role: %s, remote device: %s\r\n",
149149
disconn_ind->reason, disconn_ind->conn_handle, role, le_addr);
150-
151-
client_init_parm->trble_device_disconnected_cb(disconn_ind->conn_handle);
150+
151+
client_init_parm->trble_device_disconnected_cb(disconn_ind->conn_handle, disconn_ind->reason);
152152

153153
if(ble_client_connect_is_running)
154154
ble_client_connect_is_running = 0;

os/board/rtl8720e/src/component/bluetooth/example/ble_scatternet/scatternet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ static rtk_bt_evt_cb_ret_t ble_tizenrt_scatternet_gap_app_callback(uint8_t evt_c
240240
role = disconn_ind->role ? "slave" : "master";
241241
dbg("[APP] Disconnected, reason: 0x%x, handle: %d, role: %s, remote device: %s\r\n",
242242
disconn_ind->reason, disconn_ind->conn_handle, role, le_addr);
243-
client_init_parm->trble_device_disconnected_cb(disconn_ind->conn_handle);
243+
client_init_parm->trble_device_disconnected_cb(disconn_ind->conn_handle, disconn_ind->reason);
244244

245245
if(ble_client_connect_is_running)
246246
ble_client_connect_is_running = 0;

os/board/rtl8721csm/src/component/common/bluetooth/realtek/sdk/example/ble_central/ble_tizenrt_central_client_app.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,13 @@ void ble_tizenrt_central_handle_callback_msg(T_TIZENRT_APP_CALLBACK_MSG callback
181181
if(ble_tizenrt_write_no_rsp_sem != NULL)
182182
os_mutex_give(ble_tizenrt_write_no_rsp_sem);
183183

184-
trble_conn_handle disconnected = (uint32_t) callback_msg.u.buf;
185-
client_init_parm->trble_device_disconnected_cb(disconnected);
184+
trble_device_disconnected *disconnected_dev = callback_msg.u.buf;
185+
if(disconnected_dev) {
186+
client_init_parm->trble_device_disconnected_cb(disconnected_dev->conn_handle, disconnected_dev->cause);
187+
os_mem_free(disconnected_dev);
188+
} else {
189+
debug_print("Disconnected parameter is NULL \n");
190+
}
186191
}
187192
break;
188193

@@ -583,10 +588,15 @@ void ble_tizenrt_central_app_handle_conn_state_evt(uint8_t conn_id, T_GAP_CONN_S
583588
if (g_master_link_num){
584589
g_master_link_num --;
585590
}
586-
uint32_t connid = (uint32_t) conn_id;
587-
if(ble_tizenrt_central_send_callback_msg(BLE_TIZENRT_DISCONNECTED_MSG, (void *) connid) == false)
588-
{
589-
debug_print("callback msg send fail \n");
591+
trble_device_disconnected *disconnected_dev = os_mem_alloc(0, sizeof(trble_device_disconnected));
592+
if (disconnected_dev) {
593+
disconnected_dev->conn_handle = (trble_conn_handle) conn_id;
594+
disconnected_dev->cause = disc_cause;
595+
if (ble_tizenrt_scatternet_send_callback_msg(BLE_TIZENRT_DISCONNECTED_MSG, disconnected_dev) == false) {
596+
debug_print("callback msg send fail \n");
597+
}
598+
} else {
599+
debug_print("Memory allocation failed \n");
590600
}
591601
memset(&ble_tizenrt_central_app_link_table[conn_id], 0, sizeof(BLE_TIZENRT_APP_LINK));
592602
}

os/board/rtl8721csm/src/component/common/bluetooth/realtek/sdk/example/ble_scatternet/ble_tizenrt_scatternet_app.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,16 @@ void ble_tizenrt_scatternet_handle_callback_msg(T_TIZENRT_APP_CALLBACK_MSG callb
195195
os_mutex_give(ble_tizenrt_write_sem);
196196
if(ble_tizenrt_write_no_rsp_sem != NULL)
197197
os_mutex_give(ble_tizenrt_write_no_rsp_sem);
198-
trble_conn_handle disconnected = (uint32_t) callback_msg.u.buf;
199-
client_init_parm->trble_device_disconnected_cb(disconnected);
198+
trble_device_disconnected *disconnected_dev = callback_msg.u.buf;
199+
if (disconnected_dev) {
200+
dbg("conn_handle %d, cause %d \n", disconnected_dev->conn_handle, disconnected_dev->cause);
201+
client_init_parm->trble_device_disconnected_cb(disconnected_dev->conn_handle, disconnected_dev->cause);
202+
os_mem_free(disconnected_dev);
203+
} else {
204+
debug_print("Disconnected parameter is NULL \n");
205+
}
200206
}
201-
break;
207+
break;
202208

203209
case BLE_TIZENRT_NOTIFICATION_MSG:
204210
{
@@ -818,13 +824,18 @@ void ble_tizenrt_scatternet_app_handle_conn_state_evt(uint8_t conn_id, T_GAP_CON
818824
}
819825
} else {
820826
if (ble_tizenrt_scatternet_app_link_table[conn_id].role == GAP_LINK_ROLE_MASTER)
821-
if (g_master_link_num){
827+
if (g_master_link_num) {
822828
g_master_link_num --;
823829
}
824-
uint32_t connid = (uint32_t) conn_id;
825-
if(ble_tizenrt_scatternet_send_callback_msg(BLE_TIZENRT_DISCONNECTED_MSG, (void *) connid) == false)
826-
{
827-
debug_print("callback msg send fail \n");
830+
trble_device_disconnected *disconnected_dev = os_mem_alloc(0, sizeof(trble_device_disconnected));
831+
if (disconnected_dev) {
832+
disconnected_dev->conn_handle = (trble_conn_handle) conn_id;
833+
disconnected_dev->cause = disc_cause;
834+
if (ble_tizenrt_scatternet_send_callback_msg(BLE_TIZENRT_DISCONNECTED_MSG, disconnected_dev) == false) {
835+
debug_print("callback msg send fail \n");
836+
}
837+
} else {
838+
debug_print("Memory allocation failed \n");
828839
}
829840
}
830841
memset(&ble_tizenrt_scatternet_app_link_table[conn_id], 0, sizeof(BLE_TIZENRT_SCATTERNET_APP_LINK));

0 commit comments

Comments
 (0)