[FL-3376] Fixed GATT attribute order (#2776)
* hal: gatt: swapped rx/tx serial chars order * hal: gatt: reordered HID attrs to maintain previous order Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									b6dbf25f85
								
							
						
					
					
						commit
						5334a0ab92
					
				| @ -330,6 +330,7 @@ static void gap_init_svc(Gap* gap) { | |||||||
|     if(status) { |     if(status) { | ||||||
|         FURI_LOG_E(TAG, "Failed updating name characteristic: %d", status); |         FURI_LOG_E(TAG, "Failed updating name characteristic: %d", status); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     uint8_t gap_appearence_char_uuid[2] = { |     uint8_t gap_appearence_char_uuid[2] = { | ||||||
|         gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8}; |         gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8}; | ||||||
|     status = aci_gatt_update_char_value( |     status = aci_gatt_update_char_value( | ||||||
|  | |||||||
| @ -22,6 +22,10 @@ typedef struct { | |||||||
| 
 | 
 | ||||||
| static_assert(sizeof(HidSvcReportId) == sizeof(uint16_t), "HidSvcReportId must be 2 bytes"); | static_assert(sizeof(HidSvcReportId) == sizeof(uint16_t), "HidSvcReportId must be 2 bytes"); | ||||||
| 
 | 
 | ||||||
|  | static const Service_UUID_t hid_svc_uuid = { | ||||||
|  |     .Service_UUID_16 = HUMAN_INTERFACE_DEVICE_SERVICE_UUID, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static bool | static bool | ||||||
|     hid_svc_char_desc_data_callback(const void* context, const uint8_t** data, uint16_t* data_len) { |     hid_svc_char_desc_data_callback(const void* context, const uint8_t** data, uint16_t* data_len) { | ||||||
|     const HidSvcReportId* report_id = context; |     const HidSvcReportId* report_id = context; | ||||||
| @ -148,18 +152,15 @@ static SVCCTL_EvtAckStatus_t hid_svc_event_handler(void* event) { | |||||||
| void hid_svc_start() { | void hid_svc_start() { | ||||||
|     tBleStatus status; |     tBleStatus status; | ||||||
|     hid_svc = malloc(sizeof(HIDSvc)); |     hid_svc = malloc(sizeof(HIDSvc)); | ||||||
|     Service_UUID_t svc_uuid = {}; |  | ||||||
| 
 | 
 | ||||||
|     // Register event handler
 |     // Register event handler
 | ||||||
|     SVCCTL_RegisterSvcHandler(hid_svc_event_handler); |     SVCCTL_RegisterSvcHandler(hid_svc_event_handler); | ||||||
|     // Add service
 |  | ||||||
|     svc_uuid.Service_UUID_16 = HUMAN_INTERFACE_DEVICE_SERVICE_UUID; |  | ||||||
|     /**
 |     /**
 | ||||||
|      *  Add Human Interface Device Service |      *  Add Human Interface Device Service | ||||||
|      */ |      */ | ||||||
|     status = aci_gatt_add_service( |     status = aci_gatt_add_service( | ||||||
|         UUID_TYPE_16, |         UUID_TYPE_16, | ||||||
|         &svc_uuid, |         &hid_svc_uuid, | ||||||
|         PRIMARY_SERVICE, |         PRIMARY_SERVICE, | ||||||
|         2 + /* protocol mode */ |         2 + /* protocol mode */ | ||||||
|             (4 * HID_SVC_INPUT_REPORT_COUNT) + (3 * HID_SVC_OUTPUT_REPORT_COUNT) + |             (4 * HID_SVC_INPUT_REPORT_COUNT) + (3 * HID_SVC_OUTPUT_REPORT_COUNT) + | ||||||
| @ -170,10 +171,12 @@ void hid_svc_start() { | |||||||
|         FURI_LOG_E(TAG, "Failed to add HID service: %d", status); |         FURI_LOG_E(TAG, "Failed to add HID service: %d", status); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     for(size_t i = 0; i < HidSvcGattCharacteristicCount; i++) { |     // Maintain previously defined characteristic order
 | ||||||
|         flipper_gatt_characteristic_init( |     flipper_gatt_characteristic_init( | ||||||
|             hid_svc->svc_handle, &hid_svc_chars[i], &hid_svc->chars[i]); |         hid_svc->svc_handle, | ||||||
|     } |         &hid_svc_chars[HidSvcGattCharacteristicProtocolMode], | ||||||
|  |         &hid_svc->chars[HidSvcGattCharacteristicProtocolMode]); | ||||||
|  | 
 | ||||||
|     uint8_t protocol_mode = 1; |     uint8_t protocol_mode = 1; | ||||||
|     flipper_gatt_characteristic_update( |     flipper_gatt_characteristic_update( | ||||||
|         hid_svc->svc_handle, |         hid_svc->svc_handle, | ||||||
| @ -215,6 +218,12 @@ void hid_svc_start() { | |||||||
|                 &hid_report_chars[report_type_idx].chars[report_idx]); |                 &hid_report_chars[report_type_idx].chars[report_idx]); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // Setup remaining characteristics
 | ||||||
|  |     for(size_t i = HidSvcGattCharacteristicReportMap; i < HidSvcGattCharacteristicCount; i++) { | ||||||
|  |         flipper_gatt_characteristic_init( | ||||||
|  |             hid_svc->svc_handle, &hid_svc_chars[i], &hid_svc->chars[i]); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool hid_svc_update_report_map(const uint8_t* data, uint16_t len) { | bool hid_svc_update_report_map(const uint8_t* data, uint16_t len) { | ||||||
|  | |||||||
| @ -10,24 +10,14 @@ | |||||||
| #define TAG "BtSerialSvc" | #define TAG "BtSerialSvc" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     SerialSvcGattCharacteristicTx = 0, |     SerialSvcGattCharacteristicRx = 0, | ||||||
|     SerialSvcGattCharacteristicRx, |     SerialSvcGattCharacteristicTx, | ||||||
|     SerialSvcGattCharacteristicFlowCtrl, |     SerialSvcGattCharacteristicFlowCtrl, | ||||||
|     SerialSvcGattCharacteristicStatus, |     SerialSvcGattCharacteristicStatus, | ||||||
|     SerialSvcGattCharacteristicCount, |     SerialSvcGattCharacteristicCount, | ||||||
| } SerialSvcGattCharacteristicId; | } SerialSvcGattCharacteristicId; | ||||||
| 
 | 
 | ||||||
| static const FlipperGattCharacteristicParams serial_svc_chars[SerialSvcGattCharacteristicCount] = { | static const FlipperGattCharacteristicParams serial_svc_chars[SerialSvcGattCharacteristicCount] = { | ||||||
|     [SerialSvcGattCharacteristicTx] = |  | ||||||
|         {.name = "TX", |  | ||||||
|          .data_prop_type = FlipperGattCharacteristicDataFixed, |  | ||||||
|          .data.fixed.length = SERIAL_SVC_DATA_LEN_MAX, |  | ||||||
|          .uuid.Char_UUID_128 = SERIAL_SVC_TX_CHAR_UUID, |  | ||||||
|          .uuid_type = UUID_TYPE_128, |  | ||||||
|          .char_properties = CHAR_PROP_READ | CHAR_PROP_INDICATE, |  | ||||||
|          .security_permissions = ATTR_PERMISSION_AUTHEN_READ, |  | ||||||
|          .gatt_evt_mask = GATT_DONT_NOTIFY_EVENTS, |  | ||||||
|          .is_variable = CHAR_VALUE_LEN_VARIABLE}, |  | ||||||
|     [SerialSvcGattCharacteristicRx] = |     [SerialSvcGattCharacteristicRx] = | ||||||
|         {.name = "RX", |         {.name = "RX", | ||||||
|          .data_prop_type = FlipperGattCharacteristicDataFixed, |          .data_prop_type = FlipperGattCharacteristicDataFixed, | ||||||
| @ -38,6 +28,16 @@ static const FlipperGattCharacteristicParams serial_svc_chars[SerialSvcGattChara | |||||||
|          .security_permissions = ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE, |          .security_permissions = ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE, | ||||||
|          .gatt_evt_mask = GATT_NOTIFY_ATTRIBUTE_WRITE, |          .gatt_evt_mask = GATT_NOTIFY_ATTRIBUTE_WRITE, | ||||||
|          .is_variable = CHAR_VALUE_LEN_VARIABLE}, |          .is_variable = CHAR_VALUE_LEN_VARIABLE}, | ||||||
|  |     [SerialSvcGattCharacteristicTx] = | ||||||
|  |         {.name = "TX", | ||||||
|  |          .data_prop_type = FlipperGattCharacteristicDataFixed, | ||||||
|  |          .data.fixed.length = SERIAL_SVC_DATA_LEN_MAX, | ||||||
|  |          .uuid.Char_UUID_128 = SERIAL_SVC_TX_CHAR_UUID, | ||||||
|  |          .uuid_type = UUID_TYPE_128, | ||||||
|  |          .char_properties = CHAR_PROP_READ | CHAR_PROP_INDICATE, | ||||||
|  |          .security_permissions = ATTR_PERMISSION_AUTHEN_READ, | ||||||
|  |          .gatt_evt_mask = GATT_DONT_NOTIFY_EVENTS, | ||||||
|  |          .is_variable = CHAR_VALUE_LEN_VARIABLE}, | ||||||
|     [SerialSvcGattCharacteristicFlowCtrl] = |     [SerialSvcGattCharacteristicFlowCtrl] = | ||||||
|         {.name = "Flow control", |         {.name = "Flow control", | ||||||
|          .data_prop_type = FlipperGattCharacteristicDataFixed, |          .data_prop_type = FlipperGattCharacteristicDataFixed, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 hedger
						hedger