This is an automated email from the ASF dual-hosted git repository. mlaz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push: new e09e754 Added system id characteristic to DIS. new 0abceec Merge pull request #444 from mlaz/dis_sysid e09e754 is described below commit e09e75414ee7f387b5ffb3bfac3901fc95f2189a Author: Miguel Azevedo <miguella...@gmail.com> AuthorDate: Fri May 31 20:19:51 2019 +0100 Added system id characteristic to DIS. --- .../dis/include/services/dis/ble_svc_dis.h | 8 ++ nimble/host/services/dis/src/ble_svc_dis.c | 107 ++++++++++++++------- nimble/host/services/dis/syscfg.yml | 45 +++++---- 3 files changed, 107 insertions(+), 53 deletions(-) diff --git a/nimble/host/services/dis/include/services/dis/ble_svc_dis.h b/nimble/host/services/dis/include/services/dis/ble_svc_dis.h index 1d16d39..d095e95 100644 --- a/nimble/host/services/dis/include/services/dis/ble_svc_dis.h +++ b/nimble/host/services/dis/include/services/dis/ble_svc_dis.h @@ -35,6 +35,7 @@ */ #define BLE_SVC_DIS_UUID16 0x180A +#define BLE_SVC_DIS_CHR_UUID16_SYSTEM_ID 0x2A23 #define BLE_SVC_DIS_CHR_UUID16_MODEL_NUMBER 0x2A24 #define BLE_SVC_DIS_CHR_UUID16_SERIAL_NUMBER 0x2A25 #define BLE_SVC_DIS_CHR_UUID16_FIRMWARE_REVISION 0x2A26 @@ -76,6 +77,11 @@ struct ble_svc_dis_data { * Represent the name of the manufacturer of the device. */ const char *manufacturer_name; + /** + * System ID. + * Represent the System Id of the device. + */ + const char *system_id; }; /** @@ -101,5 +107,7 @@ const char *ble_svc_dis_software_revision(void); int ble_svc_dis_software_revision_set(const char *value); const char *ble_svc_dis_manufacturer_name(void); int ble_svc_dis_manufacturer_name_set(const char *value); +const char *ble_svc_dis_system_id(void); +int ble_svc_dis_system_id_set(const char *value); #endif diff --git a/nimble/host/services/dis/src/ble_svc_dis.c b/nimble/host/services/dis/src/ble_svc_dis.c index e6e8531..0079a04 100644 --- a/nimble/host/services/dis/src/ble_svc_dis.c +++ b/nimble/host/services/dis/src/ble_svc_dis.c @@ -31,6 +31,7 @@ struct ble_svc_dis_data ble_svc_dis_data = { .hardware_revision = MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT), .software_revision = MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT), .manufacturer_name = MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT), + .system_id = MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_DEFAULT), }; /* Access function */ @@ -39,7 +40,8 @@ struct ble_svc_dis_data ble_svc_dis_data = { (MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM) >= 0) || \ - (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) + (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) static int ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); @@ -98,6 +100,15 @@ static const struct ble_gatt_svc_def ble_svc_dis_defs[] = { MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM), }, { #endif +#if (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) + /*** Characteristic: System Id */ + .uuid = BLE_UUID16_DECLARE(BLE_SVC_DIS_CHR_UUID16_SYSTEM_ID), + .access_cb = ble_svc_dis_access, + .flags = BLE_GATT_CHR_F_READ | + MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM), + }, { +#endif + 0, /* No more characteristics in this service */ }, } }, @@ -116,7 +127,8 @@ static const struct ble_gatt_svc_def ble_svc_dis_defs[] = { (MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM) >= 0) || \ (MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM) >= 0) || \ - (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) + (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) || \ + (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) static int ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) @@ -127,72 +139,82 @@ ble_svc_dis_access(uint16_t conn_handle, uint16_t attr_handle, switch(uuid) { #if (MYNEWT_VAL(BLE_SVC_DIS_MODEL_NUMBER_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_MODEL_NUMBER: - info = ble_svc_dis_data.model_number; + info = ble_svc_dis_data.model_number; #ifdef MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_NAME_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_MODEL_NUMBER_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_MODEL_NUMBER_DEFAULT); + } #endif - break; + break; #endif #if (MYNEWT_VAL(BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_SERIAL_NUMBER: - info = ble_svc_dis_data.serial_number; + info = ble_svc_dis_data.serial_number; #ifdef MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT); + } #endif - break; + break; #endif #if (MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_FIRMWARE_REVISION: - info = ble_svc_dis_data.firmware_revision; + info = ble_svc_dis_data.firmware_revision; #ifdef MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT); + } #endif - break; + break; #endif #if (MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_HARDWARE_REVISION: - info = ble_svc_dis_data.hardware_revision; + info = ble_svc_dis_data.hardware_revision; #ifdef MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT); + } #endif - break; + break; #endif #if (MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_SOFTWARE_REVISION: - info = ble_svc_dis_data.software_revision; + info = ble_svc_dis_data.software_revision; #ifdef MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT); + } #endif - break; + break; #endif #if (MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM) >= 0) case BLE_SVC_DIS_CHR_UUID16_MANUFACTURER_NAME: - info = ble_svc_dis_data.manufacturer_name; + info = ble_svc_dis_data.manufacturer_name; #ifdef MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT - if (info == NULL) { - info = MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT); - } + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT); + } #endif - break; + break; +#endif +#if (MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_READ_PERM) >= 0) + case BLE_SVC_DIS_CHR_UUID16_SYSTEM_ID: + info = ble_svc_dis_data.system_id; +#ifdef MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_DEFAULT + if (info == NULL) { + info = MYNEWT_VAL(BLE_SVC_DIS_SYSTEM_ID_DEFAULT); + } +#endif + break; #endif default: - assert(0); - return BLE_ATT_ERR_UNLIKELY; + assert(0); + return BLE_ATT_ERR_UNLIKELY; } if (info != NULL) { - int rc = os_mbuf_append(ctxt->om, info, strlen(info)); - return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; + int rc = os_mbuf_append(ctxt->om, info, strlen(info)); + return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; } return 0; @@ -277,6 +299,19 @@ ble_svc_dis_manufacturer_name_set(const char *value) return 0; } +const char * +ble_svc_dis_system_id(void) +{ + return ble_svc_dis_data.system_id; +} + +int +ble_svc_dis_system_id_set(const char *value) +{ + ble_svc_dis_data.system_id = value; + return 0; +} + /** * Initialize the DIS package. */ diff --git a/nimble/host/services/dis/syscfg.yml b/nimble/host/services/dis/syscfg.yml index 0f45b28..b306d3b 100644 --- a/nimble/host/services/dis/syscfg.yml +++ b/nimble/host/services/dis/syscfg.yml @@ -29,8 +29,8 @@ syscfg.defs: BLE_SVC_DIS_MODEL_NUMBER_READ_PERM: description: > Defines permissions for reading "Model Number" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. value: 0 BLE_SVC_DIS_MODEL_NUMBER_DEFAULT: description: > @@ -40,9 +40,9 @@ syscfg.defs: BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM: description: > Defines permissions for reading "Serial Number" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. - value: MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT: description: > Defines a default value for "Serial number" if not set with @@ -51,9 +51,9 @@ syscfg.defs: BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM: description: > Defines permissions for reading "Hardware Revision" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. - value: MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT: description: > Defines a default value for "Hardware revision" if not set with @@ -62,9 +62,9 @@ syscfg.defs: BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM: description: > Defines permissions for reading "Firmware Revision" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. - value: MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT: description: > Defines a default value for "Software revision" if not set with @@ -73,9 +73,9 @@ syscfg.defs: BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM: description: > Defines permissions for reading "Software Revision" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. - value: MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT: description: > Defines a default value for "Software revision" if not set with @@ -84,14 +84,25 @@ syscfg.defs: BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM: description: > Defines permissions for reading "Manufacturer name" characteristics. - Can be set to MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM or use - the possible values defined in BLE_SVC_DIS_DEFAULT_READ_PERM. - value: MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT: description: > Defines a default value for "Manufacturer name" if not set with 'ble_svc_dis_manufacturer_name_set'. value: NULL + BLE_SVC_DIS_SYSTEM_ID_READ_PERM: + description: > + Defines permissions for reading "System ID" characteristics. + Can be set to BLE_SVC_DIS_DEFAULT_READ_PERM or use any of the + possible values defined for that setting. + value: MYNEWT_VAL(BLE_SVC_DIS_DEFAULT_READ_PERM) + BLE_SVC_DIS_SYSTEM_ID_DEFAULT: + description: > + Defines a default value for "System ID" if not set with + 'ble_svc_dis_manufacturer_name_set'. + value: NULL BLE_SVC_DIS_SYSINIT_STAGE: description: > Sysinit stage for the device information BLE service.