@@ -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