BLE: Increase mtu (#837)
* Incease mtu & buffer size * bt: process mtu size in RPC callbacks Co-authored-by: Tony Freeman <tonyfreeman@users.noreply.github.com> Co-authored-by: gornekich <n.gorbadey@gmail.com>
This commit is contained in:
		
							parent
							
								
									f0aed7e583
								
							
						
					
					
						commit
						c6cb6ae810
					
				| @ -132,9 +132,9 @@ static void bt_rpc_send_bytes_callback(void* context, uint8_t* bytes, size_t byt | |||||||
|     size_t bytes_sent = 0; |     size_t bytes_sent = 0; | ||||||
|     while(bytes_sent < bytes_len) { |     while(bytes_sent < bytes_len) { | ||||||
|         size_t bytes_remain = bytes_len - bytes_sent; |         size_t bytes_remain = bytes_len - bytes_sent; | ||||||
|         if(bytes_remain > FURI_HAL_BT_SERIAL_PACKET_SIZE_MAX) { |         if(bytes_remain > bt->max_packet_size) { | ||||||
|             furi_hal_bt_serial_tx(&bytes[bytes_sent], FURI_HAL_BT_SERIAL_PACKET_SIZE_MAX); |             furi_hal_bt_serial_tx(&bytes[bytes_sent], bt->max_packet_size); | ||||||
|             bytes_sent += FURI_HAL_BT_SERIAL_PACKET_SIZE_MAX; |             bytes_sent += bt->max_packet_size; | ||||||
|         } else { |         } else { | ||||||
|             furi_hal_bt_serial_tx(&bytes[bytes_sent], bytes_remain); |             furi_hal_bt_serial_tx(&bytes[bytes_sent], bytes_remain); | ||||||
|             bytes_sent += bytes_remain; |             bytes_sent += bytes_remain; | ||||||
|  | |||||||
| @ -139,7 +139,7 @@ | |||||||
| /**
 | /**
 | ||||||
|  * Maximum supported ATT_MTU size |  * Maximum supported ATT_MTU size | ||||||
|  */ |  */ | ||||||
| #define CFG_BLE_MAX_ATT_MTU             (251) | #define CFG_BLE_MAX_ATT_MTU             (489) | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Size of the storage area for Attribute values |  * Size of the storage area for Attribute values | ||||||
|  | |||||||
| @ -184,17 +184,31 @@ bool serial_svc_is_started() { | |||||||
|     return serial_svc != NULL; |     return serial_svc != NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool serial_svc_update_tx(uint8_t* data, uint8_t data_len) { | bool serial_svc_update_tx(uint8_t* data, uint16_t data_len) { | ||||||
|     if(data_len > SERIAL_SVC_DATA_LEN_MAX) { |     if(data_len > SERIAL_SVC_DATA_LEN_MAX) { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|     tBleStatus result = aci_gatt_update_char_value(serial_svc->svc_handle, | 
 | ||||||
|                                         serial_svc->tx_char_handle, |     for(uint16_t remained = data_len; remained > 0;) { | ||||||
|  |         uint8_t value_len = MIN(SERIAL_SVC_CHAR_VALUE_LEN_MAX, remained); | ||||||
|  |         uint16_t value_offset = data_len - remained; | ||||||
|  |         remained -= value_len; | ||||||
|  | 
 | ||||||
|  |         tBleStatus result  = aci_gatt_update_char_value_ext( | ||||||
|                                         0, |                                         0, | ||||||
|  |                                         serial_svc->svc_handle, | ||||||
|  |                                         serial_svc->tx_char_handle, | ||||||
|  |                                         remained ? 0x00 : 0x02, | ||||||
|                                         data_len, |                                         data_len, | ||||||
|                                         data); |                                         value_offset, | ||||||
|  |                                         value_len, | ||||||
|  |                                         data + value_offset); | ||||||
|  | 
 | ||||||
|         if(result) { |         if(result) { | ||||||
|             FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result); |             FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result); | ||||||
|  |             return false; | ||||||
|         } |         } | ||||||
|     return result != BLE_STATUS_SUCCESS; |     } | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdbool.h> | #include <stdbool.h> | ||||||
| 
 | 
 | ||||||
| #define SERIAL_SVC_DATA_LEN_MAX (248) | #define SERIAL_SVC_DATA_LEN_MAX (486) | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| @ -36,7 +36,7 @@ void serial_svc_stop(); | |||||||
| 
 | 
 | ||||||
| bool serial_svc_is_started(); | bool serial_svc_is_started(); | ||||||
| 
 | 
 | ||||||
| bool serial_svc_update_tx(uint8_t* data, uint8_t data_len); | bool serial_svc_update_tx(uint8_t* data, uint16_t data_len); | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|  | |||||||
| @ -139,7 +139,7 @@ | |||||||
| /**
 | /**
 | ||||||
|  * Maximum supported ATT_MTU size |  * Maximum supported ATT_MTU size | ||||||
|  */ |  */ | ||||||
| #define CFG_BLE_MAX_ATT_MTU             (251) | #define CFG_BLE_MAX_ATT_MTU             (489) | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Size of the storage area for Attribute values |  * Size of the storage area for Attribute values | ||||||
|  | |||||||
| @ -184,17 +184,31 @@ bool serial_svc_is_started() { | |||||||
|     return serial_svc != NULL; |     return serial_svc != NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool serial_svc_update_tx(uint8_t* data, uint8_t data_len) { | bool serial_svc_update_tx(uint8_t* data, uint16_t data_len) { | ||||||
|     if(data_len > SERIAL_SVC_DATA_LEN_MAX) { |     if(data_len > SERIAL_SVC_DATA_LEN_MAX) { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|     tBleStatus result = aci_gatt_update_char_value(serial_svc->svc_handle, | 
 | ||||||
|                                         serial_svc->tx_char_handle, |     for(uint16_t remained = data_len; remained > 0;) { | ||||||
|  |         uint8_t value_len = MIN(SERIAL_SVC_CHAR_VALUE_LEN_MAX, remained); | ||||||
|  |         uint16_t value_offset = data_len - remained; | ||||||
|  |         remained -= value_len; | ||||||
|  | 
 | ||||||
|  |         tBleStatus result  = aci_gatt_update_char_value_ext( | ||||||
|                                         0, |                                         0, | ||||||
|  |                                         serial_svc->svc_handle, | ||||||
|  |                                         serial_svc->tx_char_handle, | ||||||
|  |                                         remained ? 0x00 : 0x02, | ||||||
|                                         data_len, |                                         data_len, | ||||||
|                                         data); |                                         value_offset, | ||||||
|  |                                         value_len, | ||||||
|  |                                         data + value_offset); | ||||||
|  | 
 | ||||||
|         if(result) { |         if(result) { | ||||||
|             FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result); |             FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result); | ||||||
|  |             return false; | ||||||
|         } |         } | ||||||
|     return result != BLE_STATUS_SUCCESS; |     } | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,7 +3,8 @@ | |||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdbool.h> | #include <stdbool.h> | ||||||
| 
 | 
 | ||||||
| #define SERIAL_SVC_DATA_LEN_MAX (248) | #define SERIAL_SVC_DATA_LEN_MAX (486) | ||||||
|  | #define SERIAL_SVC_CHAR_VALUE_LEN_MAX (243) | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| @ -36,7 +37,7 @@ void serial_svc_stop(); | |||||||
| 
 | 
 | ||||||
| bool serial_svc_is_started(); | bool serial_svc_is_started(); | ||||||
| 
 | 
 | ||||||
| bool serial_svc_update_tx(uint8_t* data, uint8_t data_len); | bool serial_svc_update_tx(uint8_t* data, uint16_t data_len); | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 tonyfreeman
						tonyfreeman