From 978f93ec3d94aa8468369c569f5317ce2b325082 Mon Sep 17 00:00:00 2001 From: Eduard Iten Date: Fri, 9 Jan 2026 15:48:30 +0100 Subject: [PATCH] Changed Service and Characteristics --- firmware/libs/ble_mgmt/src/ble_mgmt.c | 74 ++++++++++++++++----------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/firmware/libs/ble_mgmt/src/ble_mgmt.c b/firmware/libs/ble_mgmt/src/ble_mgmt.c index 02f0db9..d2e3388 100644 --- a/firmware/libs/ble_mgmt/src/ble_mgmt.c +++ b/firmware/libs/ble_mgmt/src/ble_mgmt.c @@ -13,20 +13,34 @@ LOG_MODULE_REGISTER(ble_mgmt, CONFIG_BLE_MGMT_LOG_LEVEL); /** - * Basis UUID: 03afe2cf-6c64-4a22-9289-c3ae820cbcxx + * Basis UUID: 03afe2cf-6c64-4a22-9289-c3ae820cXXXX + * Alias-Stellen: Byte 12 & 13 */ + #define LT_UUID_BASE_VAL \ - BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc00) + BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c0000) -#define BT_UUID_LT_SERVICE BT_UUID_DECLARE_128(LT_UUID_BASE_VAL) -#define BT_UUID_LT_NAME_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc01)) -#define BT_UUID_LT_PANID_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc02)) -#define BT_UUID_LT_CHAN_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc03)) -#define BT_UUID_LT_EXTPAN_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc04)) -#define BT_UUID_LT_NETKEY_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc05)) -#define BT_UUID_LT_NETNAME_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc06)) -#define BT_UUID_LT_NODES_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820cbc07)) +/* ========================================================================== + SERVICE 1: PROVISIONING (0x10XX) + ========================================================================== */ +#define BT_UUID_LT_PROV_SERVICE BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1000)) +#define BT_UUID_LT_PROV_NAME_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1001)) +#define BT_UUID_LT_PROV_PANID_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1002)) +#define BT_UUID_LT_PROV_CHAN_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1003)) +#define BT_UUID_LT_PROV_EXTPAN_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1004)) +#define BT_UUID_LT_PROV_NETKEY_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1005)) +#define BT_UUID_LT_PROV_NETNAME_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1006)) +#define BT_UUID_LT_PROV_NODES_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c1007)) + +/* ========================================================================== + SERVICE 2: GAME (0x20XX) + ========================================================================== */ +#define BT_UUID_LT_GAME_SERVICE BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c2000)) + +#define BT_UUID_LT_GAME_CONFIG_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c2001)) +#define BT_UUID_LT_GAME_COMMAND_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c2002)) +#define BT_UUID_LT_GAME_LOG_DATA_CHAR BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x03afe2cf, 0x6c64, 0x4a22, 0x9289, 0xc3ae820c2003)) /* --- GATT Callbacks --- */ static ssize_t read_lasertag_val(struct bt_conn *conn, const struct bt_gatt_attr *attr, @@ -35,26 +49,26 @@ static ssize_t read_lasertag_val(struct bt_conn *conn, const struct bt_gatt_attr const char *val_ptr = NULL; size_t val_len = 0; - if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NAME_CHAR) == 0) { + if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NAME_CHAR) == 0) { val_ptr = lasertag_get_device_name(); val_len = strlen(val_ptr); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PANID_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_PANID_CHAR) == 0) { static uint16_t pan_id; pan_id = lasertag_get_thread_pan_id(); val_ptr = (char *)&pan_id; val_len = sizeof(pan_id); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_CHAN_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_CHAN_CHAR) == 0) { static uint8_t chan; chan = lasertag_get_thread_channel(); val_ptr = (char *)&chan; val_len = sizeof(chan); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_EXTPAN_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_EXTPAN_CHAR) == 0) { val_ptr = (char *)lasertag_get_thread_ext_pan_id(); val_len = 8; - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NETKEY_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NETKEY_CHAR) == 0) { val_ptr = (char *)lasertag_get_thread_network_key(); val_len = 16; - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NETNAME_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NETNAME_CHAR) == 0) { val_ptr = lasertag_get_thread_network_name(); val_len = strlen(val_ptr); } @@ -66,21 +80,21 @@ static ssize_t write_lasertag_val(struct bt_conn *conn, const struct bt_gatt_att const void *buf, uint16_t len, uint16_t offset, uint8_t flags) { int rc = 0; - if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NAME_CHAR) == 0) { + if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NAME_CHAR) == 0) { rc = lasertag_set_device_name(buf, len); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PANID_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_PANID_CHAR) == 0) { if (len != 2) return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); rc = lasertag_set_thread_pan_id(*(uint16_t*)buf); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_CHAN_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_CHAN_CHAR) == 0) { if (len != 1) return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); rc = lasertag_set_thread_channel(*(uint8_t*)buf); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_EXTPAN_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_EXTPAN_CHAR) == 0) { if (len != 8) return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); rc = lasertag_set_thread_ext_pan_id(buf); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NETKEY_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NETKEY_CHAR) == 0) { if (len != 16) return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); rc = lasertag_set_thread_network_key(buf); - } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_NETNAME_CHAR) == 0) { + } else if (bt_uuid_cmp(attr->uuid, BT_UUID_LT_PROV_NETNAME_CHAR) == 0) { rc = lasertag_set_thread_network_name(buf, len); } @@ -105,46 +119,46 @@ static ssize_t write_discover_cmd(struct bt_conn *conn, const struct bt_gatt_att /* Service Definition */ BT_GATT_SERVICE_DEFINE(provisioning_svc, - BT_GATT_PRIMARY_SERVICE(BT_UUID_LT_SERVICE), + BT_GATT_PRIMARY_SERVICE(BT_UUID_LT_PROV_SERVICE), /* Gerätename */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_NAME_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_NAME_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Thread PAN ID */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_PANID_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_PANID_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Thread Kanal */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_CHAN_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_CHAN_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Extended PAN ID */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_EXTPAN_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_EXTPAN_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Netzwerk Key */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_NETKEY_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_NETKEY_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Thread Netzwerk Name */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_NETNAME_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_NETNAME_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_lasertag_val, write_lasertag_val, NULL), /* Knoten-Liste / Discovery Trigger */ - BT_GATT_CHARACTERISTIC(BT_UUID_LT_NODES_CHAR, + BT_GATT_CHARACTERISTIC(BT_UUID_LT_PROV_NODES_CHAR, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_discovered_nodes, write_discover_cmd, NULL),