Skip to content

Commit 8a6b2c4

Browse files
author
ice
committed
[int][bug][ble] fix serial trans client issue
Project: Bluetooth redmine: #10305, REDMINE-10305 ext-redmine: bug|feat#id [Description in detail] 1. avoid register when client is disable 2. fix multiple connection issue Affected branch: [master] Change-Id: I81b96b46d2c17d0ae94c08aba0e3d8d79cc61fc0
1 parent 63b3337 commit 8a6b2c4

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

service/ble/gatt_service/bf0_sibles_serial_trans_client.c

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ typedef struct
6262
ble_serial_client_char_t data_char;
6363
uint8_t cb_count;
6464
uint8_t is_assemable;
65-
uint16_t mtu;
65+
uint16_t mtu[MAX_CONNECTION_LINK_NUM];
6666
ble_serial_tran_export_t *cb_table;
6767
ble_serial_tran_assemable_t assemable;
6868
uint8_t conn_idx;
@@ -434,7 +434,7 @@ ble_serial_tran_error_event_t ble_serial_client_send_data(ble_serial_tran_data_t
434434
if (data == NULL || data->data == NULL)
435435
return BLE_SERIAL_TRAN_ERROR_INVALID_PARA; // Parameter error;
436436

437-
if (data->len <= env->mtu - 3 - 4)
437+
if (data->len <= env->mtu[env->conn_idx] - 3 - 4)
438438
{
439439
if ((packet = bt_mem_alloc(data->len + 4)) == NULL)
440440
return BLE_SERIAL_TRAN_ERROR_LACK_OF_MEMORY; // No enough memory
@@ -455,7 +455,7 @@ ble_serial_tran_error_event_t ble_serial_client_send_data(ble_serial_tran_data_t
455455
else
456456
{
457457
// use fragment packet
458-
uint16_t max_packet_len = env->mtu - 3;
458+
uint16_t max_packet_len = env->mtu[env->conn_idx] - 3;
459459
uint16_t single_packet_len = max_packet_len - 4;
460460

461461
packet = bt_mem_alloc(max_packet_len);
@@ -536,18 +536,24 @@ int ble_serial_client_event_handler(uint16_t event_id, uint8_t *data, uint16_t l
536536
case BLE_GAP_CONNECTED_IND:
537537
{
538538
ble_gap_connect_ind_t *ind = (ble_gap_connect_ind_t *)data;
539-
env->mtu = 23;
539+
env->mtu[env->conn_idx] = 23;
540540
break;
541541
}
542542
case SIBLES_MTU_EXCHANGE_IND:
543543
{
544544
sibles_mtu_exchange_ind_t *ind = (sibles_mtu_exchange_ind_t *)data;
545-
env->mtu = ind->mtu;
545+
env->mtu[env->conn_idx] = ind->mtu;
546546
break;
547547
}
548548
case BLE_GAP_DISCONNECTED_IND:
549549
{
550550
ble_gap_disconnected_ind_t *ind = (ble_gap_disconnected_ind_t *)data;
551+
552+
if (env->conn_idx != ind->conn_idx)
553+
{
554+
break;
555+
}
556+
551557
// clear assemable env if disconnect
552558
env->is_assemable = 0;
553559
if (env->assemable.ptr)
@@ -565,12 +571,23 @@ int ble_serial_client_event_handler(uint16_t event_id, uint8_t *data, uint16_t l
565571
}
566572

567573
env->state = BLE_SERIAL_CLIENT_STATE_IDLE;
574+
env->conn_idx = INVALID_CONN_IDX;
568575
break;
569576
}
570577
case SIBLES_SEARCH_SVC_RSP:
571578
{
572579
sibles_svc_search_rsp_t *rsp = (sibles_svc_search_rsp_t *)data;
573580

581+
if (env->state != BLE_SERIAL_CLIENT_STATE_SEARCHING)
582+
{
583+
break;
584+
}
585+
586+
if (env->conn_idx != rsp->conn_idx)
587+
{
588+
break;
589+
}
590+
574591
// rsp->svc may null
575592
if (memcmp(rsp->search_uuid, g_serial_tran_svc_uuid, rsp->search_svc_len) != 0)
576593
break;

0 commit comments

Comments
 (0)