30 constexpr static uint8_t IMDS_CFG0_SIZE_SHIFT = 0;
31 constexpr static uint8_t IMDS_CFG0_SIZE_MASK = 0b1111;
32 constexpr static uint8_t IMDS_OBJCFG_TYPE_SHIFT = 0;
33 constexpr static uint8_t IMDS_OBJCFG_TYPE_MASK = 0b1111;
34 constexpr static uint8_t IMDS_EXTCFG_KIND_SHIFT = 0;
35 constexpr static uint8_t IMDS_EXTCFG_KIND_MASK = 0xff;
36 constexpr static uint8_t IMDS_EXTCFG_SIZE_SHIFT = 8;
37 constexpr static uint8_t IMDS_EXTCFG_SIZE_MASK = 0xff;
38 constexpr static uint8_t IMDS_DESC_USER_DESCRIPTION = 1 << 0;
39 constexpr static uint8_t IMDS_USER_DESCRIPTION_MAX = 16;
41 constexpr static uint16_t UUID16_CHR_USER_DESCRIPTION = 0x2901;
66 }
typedef SProtoNimblePrphIOBindImdsObjid;
75 }
typedef SProtoNimblePrphIOBindImds;
77 CProtoNimblePrphImds(
const SObjectCfg::SObjectCfgItem *item, IProtoNimblePrphCb *cb_);
79 ~CProtoNimblePrphImds()
override;
86 static uint32_t cfgIdIOBindImdsCfgObj(uint8_t type)
88 return ((type & IMDS_OBJCFG_TYPE_MASK) << IMDS_OBJCFG_TYPE_SHIFT);
91 static uint8_t cfgIdIOBindImdsCfgObjTypeGet(uint32_t val)
93 return (val >> IMDS_OBJCFG_TYPE_SHIFT) & IMDS_OBJCFG_TYPE_MASK;
96 static uint32_t cfgIdIOBindImdsExt(uint8_t kind, uint8_t size)
98 return ((kind & IMDS_EXTCFG_KIND_MASK) << IMDS_EXTCFG_KIND_SHIFT) |
99 ((size & IMDS_EXTCFG_SIZE_MASK) << IMDS_EXTCFG_SIZE_SHIFT);
102 static uint8_t cfgIdIOBindImdsExtKindGet(uint32_t val)
104 return (val >> IMDS_EXTCFG_KIND_SHIFT) & IMDS_EXTCFG_KIND_MASK;
107 static uint8_t cfgIdIOBindImdsExtSizeGet(uint32_t val)
109 return (val >> IMDS_EXTCFG_SIZE_SHIFT) & IMDS_EXTCFG_SIZE_MASK;
112 static uint32_t cfgIdIOBindImdsCfg0(uint8_t size)
114 return ((size & IMDS_CFG0_SIZE_MASK) << IMDS_CFG0_SIZE_SHIFT);
117 static uint8_t cfgIdIOBindImdsCfg0SizeGet(uint32_t val)
119 return (val >> IMDS_CFG0_SIZE_SHIFT) & IMDS_CFG0_SIZE_MASK;
122 static uint32_t cfgIdIOBindImdsCfg1(uint8_t res)
127 static uint32_t cfgIdIOBindImdsCfg2(uint8_t res)
136 struct ble_gatt_svc_def svc;
137 std::map<const SObjectId::ObjectId, uint8_t>
143 char userDescription[IMDS_USER_DESCRIPTION_MAX];
150 uint8_t data[IMDS_USER_DESCRIPTION_MAX];
153 std::map<const SObjectId::ObjectId, SImdsMeta> ioMetaMap;
155#ifdef CONFIG_DAWN_IO_NOTIFY
156 static int notifierCb(
void *priv, io_ddata_t *data);
159 template<
typename T,
size_t WriteBytes = sizeof(T)>
160 static int callback(uint16_t conn_handle,
161 uint16_t attr_handle,
162 struct ble_gatt_access_ctxt *ctxt,
165 static int descriptorCb(uint16_t conn_handle,
166 uint16_t attr_handle,
167 struct ble_gatt_access_ctxt *ctxt,
173 void configureDesc(
const SObjectCfg::SObjectCfgItem *item);
174 void allocObject(
const SProtoNimblePrphIOBindImdsObjid &obj,
const uint32_t *ext);