BLE add RPC Version characteristic (#1035)
* ble: add rpc version to device info service * protobuf: update protobuf submodule with new version * protobuf: update protobuf version
This commit is contained in:
		
							parent
							
								
									b86a400a82
								
							
						
					
					
						commit
						72925fae1c
					
				| @ -1,3 +1,3 @@ | ||||
| #pragma once | ||||
| #define PROTOBUF_MAJOR_VERSION 0 | ||||
| #define PROTOBUF_MINOR_VERSION 1 | ||||
| #define PROTOBUF_MINOR_VERSION 2 | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| Subproject commit 93b9cf3af76664a27646494341a63281a9022740 | ||||
| Subproject commit 232e7e9a50b12a95f950fabb515204775e51b04a | ||||
| @ -3,15 +3,20 @@ | ||||
| #include "ble.h" | ||||
| 
 | ||||
| #include <furi.h> | ||||
| #include <m-string.h> | ||||
| #include <protobuf_version.h> | ||||
| 
 | ||||
| #define TAG "BtDevInfoSvc" | ||||
| 
 | ||||
| #define DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE (10) | ||||
| 
 | ||||
| typedef struct { | ||||
|     uint16_t service_handle; | ||||
|     uint16_t man_name_char_handle; | ||||
|     uint16_t serial_num_char_handle; | ||||
|     uint16_t firmware_rev_char_handle; | ||||
|     uint16_t software_rev_char_handle; | ||||
|     uint16_t rpc_version_char_handle; | ||||
| } DevInfoSvc; | ||||
| 
 | ||||
| static DevInfoSvc* dev_info_svc = NULL; | ||||
| @ -22,6 +27,9 @@ static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET); | ||||
| static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM | ||||
|                                                            " " BUILD_DATE; | ||||
| 
 | ||||
| static const uint8_t dev_info_rpc_version_uuid[] = | ||||
|     {0x33, 0xa9, 0xb5, 0x3e, 0x87, 0x5d, 0x1a, 0x8e, 0xc8, 0x47, 0x5e, 0xae, 0x6d, 0x66, 0xf6, 0x03}; | ||||
| 
 | ||||
| void dev_info_svc_start() { | ||||
|     dev_info_svc = malloc(sizeof(DevInfoSvc)); | ||||
|     tBleStatus status; | ||||
| @ -29,7 +37,7 @@ void dev_info_svc_start() { | ||||
|     // Add Device Information Service
 | ||||
|     uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID; | ||||
|     status = aci_gatt_add_service( | ||||
|         UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle); | ||||
|         UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 11, &dev_info_svc->service_handle); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status); | ||||
|     } | ||||
| @ -95,6 +103,20 @@ void dev_info_svc_start() { | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add software revision char: %d", status); | ||||
|     } | ||||
|     status = aci_gatt_add_char( | ||||
|         dev_info_svc->service_handle, | ||||
|         UUID_TYPE_128, | ||||
|         (const Char_UUID_t*)dev_info_rpc_version_uuid, | ||||
|         DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE, | ||||
|         CHAR_PROP_READ, | ||||
|         ATTR_PERMISSION_AUTHEN_READ, | ||||
|         GATT_DONT_NOTIFY_EVENTS, | ||||
|         10, | ||||
|         CHAR_VALUE_LEN_CONSTANT, | ||||
|         &dev_info_svc->rpc_version_char_handle); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add rpc version characteristic: %d", status); | ||||
|     } | ||||
| 
 | ||||
|     // Update characteristics
 | ||||
|     status = aci_gatt_update_char_value( | ||||
| @ -133,6 +155,18 @@ void dev_info_svc_start() { | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to update software revision char: %d", status); | ||||
|     } | ||||
|     string_t rpc_version; | ||||
|     string_init_printf(rpc_version, "%d.%d", PROTOBUF_MAJOR_VERSION, PROTOBUF_MINOR_VERSION); | ||||
|     status = aci_gatt_update_char_value( | ||||
|         dev_info_svc->service_handle, | ||||
|         dev_info_svc->rpc_version_char_handle, | ||||
|         0, | ||||
|         strlen(string_get_cstr(rpc_version)), | ||||
|         (uint8_t*)string_get_cstr(rpc_version)); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to update rpc version char: %d", status); | ||||
|     } | ||||
|     string_clear(rpc_version); | ||||
| } | ||||
| 
 | ||||
| void dev_info_svc_stop() { | ||||
| @ -159,6 +193,11 @@ void dev_info_svc_stop() { | ||||
|         if(status) { | ||||
|             FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status); | ||||
|         } | ||||
|         status = | ||||
|             aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->rpc_version_char_handle); | ||||
|         if(status) { | ||||
|             FURI_LOG_E(TAG, "Failed to delete rpc version char: %d", status); | ||||
|         } | ||||
|         // Delete service
 | ||||
|         status = aci_gatt_del_service(dev_info_svc->service_handle); | ||||
|         if(status) { | ||||
|  | ||||
| @ -3,15 +3,20 @@ | ||||
| #include "ble.h" | ||||
| 
 | ||||
| #include <furi.h> | ||||
| #include <m-string.h> | ||||
| #include <protobuf_version.h> | ||||
| 
 | ||||
| #define TAG "BtDevInfoSvc" | ||||
| 
 | ||||
| #define DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE (10) | ||||
| 
 | ||||
| typedef struct { | ||||
|     uint16_t service_handle; | ||||
|     uint16_t man_name_char_handle; | ||||
|     uint16_t serial_num_char_handle; | ||||
|     uint16_t firmware_rev_char_handle; | ||||
|     uint16_t software_rev_char_handle; | ||||
|     uint16_t rpc_version_char_handle; | ||||
| } DevInfoSvc; | ||||
| 
 | ||||
| static DevInfoSvc* dev_info_svc = NULL; | ||||
| @ -22,6 +27,9 @@ static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET); | ||||
| static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM | ||||
|                                                            " " BUILD_DATE; | ||||
| 
 | ||||
| static const uint8_t dev_info_rpc_version_uuid[] = | ||||
|     {0x33, 0xa9, 0xb5, 0x3e, 0x87, 0x5d, 0x1a, 0x8e, 0xc8, 0x47, 0x5e, 0xae, 0x6d, 0x66, 0xf6, 0x03}; | ||||
| 
 | ||||
| void dev_info_svc_start() { | ||||
|     dev_info_svc = malloc(sizeof(DevInfoSvc)); | ||||
|     tBleStatus status; | ||||
| @ -29,7 +37,7 @@ void dev_info_svc_start() { | ||||
|     // Add Device Information Service
 | ||||
|     uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID; | ||||
|     status = aci_gatt_add_service( | ||||
|         UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle); | ||||
|         UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 11, &dev_info_svc->service_handle); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status); | ||||
|     } | ||||
| @ -95,6 +103,20 @@ void dev_info_svc_start() { | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add software revision char: %d", status); | ||||
|     } | ||||
|     status = aci_gatt_add_char( | ||||
|         dev_info_svc->service_handle, | ||||
|         UUID_TYPE_128, | ||||
|         (const Char_UUID_t*)dev_info_rpc_version_uuid, | ||||
|         DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE, | ||||
|         CHAR_PROP_READ, | ||||
|         ATTR_PERMISSION_AUTHEN_READ, | ||||
|         GATT_DONT_NOTIFY_EVENTS, | ||||
|         10, | ||||
|         CHAR_VALUE_LEN_CONSTANT, | ||||
|         &dev_info_svc->rpc_version_char_handle); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to add rpc version characteristic: %d", status); | ||||
|     } | ||||
| 
 | ||||
|     // Update characteristics
 | ||||
|     status = aci_gatt_update_char_value( | ||||
| @ -133,6 +155,18 @@ void dev_info_svc_start() { | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to update software revision char: %d", status); | ||||
|     } | ||||
|     string_t rpc_version; | ||||
|     string_init_printf(rpc_version, "%d.%d", PROTOBUF_MAJOR_VERSION, PROTOBUF_MINOR_VERSION); | ||||
|     status = aci_gatt_update_char_value( | ||||
|         dev_info_svc->service_handle, | ||||
|         dev_info_svc->rpc_version_char_handle, | ||||
|         0, | ||||
|         strlen(string_get_cstr(rpc_version)), | ||||
|         (uint8_t*)string_get_cstr(rpc_version)); | ||||
|     if(status) { | ||||
|         FURI_LOG_E(TAG, "Failed to update rpc version char: %d", status); | ||||
|     } | ||||
|     string_clear(rpc_version); | ||||
| } | ||||
| 
 | ||||
| void dev_info_svc_stop() { | ||||
| @ -159,6 +193,11 @@ void dev_info_svc_stop() { | ||||
|         if(status) { | ||||
|             FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status); | ||||
|         } | ||||
|         status = | ||||
|             aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->rpc_version_char_handle); | ||||
|         if(status) { | ||||
|             FURI_LOG_E(TAG, "Failed to delete rpc version char: %d", status); | ||||
|         } | ||||
|         // Delete service
 | ||||
|         status = aci_gatt_del_service(dev_info_svc->service_handle); | ||||
|         if(status) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 gornekich
						gornekich