static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), /* Custom power service UUID 9C10C448-3082-44CD-853D-08266C070BE5 */ BT_DATA_BYTES(BT_DATA_UUID128_ALL, 0xE5, 0x0B, 0x07, 0x6C, 0x26, 0x08, 0x3D, 0x85, 0xCD, 0x44, 0x82, 0x30, 0x48, 0xC4, 0x10, 0x9C) }; static struct bt_data sd[] = { BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN) }; /* Power Service variables */ /* Service UUID 9C10C448-3082-44CD-853D-08266C070BE5 */ static struct bt_uuid_128 power_uuid = BT_UUID_INIT_128( 0xE5, 0x0B, 0x07, 0x6C, 0x26, 0x08, 0x3D, 0x85, 0xCD, 0x44, 0x82, 0x30, 0x48, 0xC4, 0x10, 0x9C); /* Characteristic UUID of consumption power 71C9E918-8302-47AA-89D3-7BF67152237A */ static struct bt_uuid_128 consumption_power_uuid = BT_UUID_INIT_128( 0x7A, 0x23, 0x52, 0x71, 0xF6, 0x7B, 0xD3, 0x89, 0xAA, 0x47, 0x02, 0x83, 0x18, 0xE9, 0xC9, 0x71); /* Characteristic UUID of solar power 0609E802-AFD2-4D56-B61C-12BA1F80CCB6 */ static struct bt_uuid_128 solar_power_uuid = BT_UUID_INIT_128( 0xB6, 0xCC, 0x80, 0x1F, 0xBA, 0x12, 0x1C, 0xB6, 0x56, 0x4D, 0xD2, 0xAF, 0x02, 0xE8, 0x09, 0x06); static struct bt_gatt_attr attrs[] = { BT_GATT_PRIMARY_SERVICE(&power_uuid),
return bt_gatt_attr_read(conn, attr, buf, len, offset, value, strlen(value)); } static ssize_t read_manuf(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) { const char *value = attr->user_data; return bt_gatt_attr_read(conn, attr, buf, len, offset, value, strlen(value)); } /* Custom Service Variables */ static struct bt_uuid_128 vnd_uuid = BT_UUID_INIT_128( 0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static struct bt_uuid_128 vnd_enc_uuid = BT_UUID_INIT_128( 0xf1, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static struct bt_uuid_128 vnd_auth_uuid = BT_UUID_INIT_128( 0xf2, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static uint8_t vnd_value[] = { 'V', 'e', 'n', 'd', 'o', 'r' }; static ssize_t read_vnd(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {
#include <bluetooth/uuid.h> #include <bluetooth/gatt.h> #include <gatt/gap.h> #include <gatt/hrs.h> #include <gatt/dis.h> #include <gatt/bas.h> #include <gatt/cts.h> #define DEVICE_NAME "Test peripheral" #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) #define HEART_RATE_APPEARANCE 0x0341 /* Custom Service Variables */ static struct bt_uuid_128 vnd_uuid = BT_UUID_INIT_128( 0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static struct bt_uuid_128 vnd_enc_uuid = BT_UUID_INIT_128( 0xf1, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static struct bt_uuid_128 vnd_auth_uuid = BT_UUID_INIT_128( 0xf2, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static uint8_t vnd_value[] = { 'V', 'e', 'n', 'd', 'o', 'r' }; static ssize_t read_vnd(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {
err = bt_gatt_unsubscribe(default_conn, &subscribe_params); if (err) { printk("Unsubscribe failed (err %d)\n", err); } else { printk("Unsubscribe success\n"); } /* Clear subscribe_params to reuse it */ memset(&subscribe_params, 0, sizeof(subscribe_params)); return 0; } /* Custom Service Variables */ static struct bt_uuid_128 vnd_uuid = BT_UUID_INIT_128( 0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static struct bt_uuid_128 vnd_auth_uuid = BT_UUID_INIT_128( 0xf2, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static const struct bt_uuid_128 vnd_long_uuid1 = BT_UUID_INIT_128( 0xf3, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static const struct bt_uuid_128 vnd_long_uuid2 = BT_UUID_INIT_128( 0xde, 0xad, 0xfa, 0xce, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x12); static uint8_t vnd_value[] = { 'V', 'e', 'n', 'd', 'o', 'r' }; static ssize_t read_vnd(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)