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.

Reply via email to