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;
64 }
typedef SProtoNimblePrphIOBindImdsObjid;
73 }
typedef SProtoNimblePrphIOBindImds;
75 CProtoNimblePrphImds(
const SObjectCfg::SObjectCfgItem *item, IProtoNimblePrphCb *cb_);
77 ~CProtoNimblePrphImds()
override;
84 static uint32_t cfgIdIOBindImdsCfgObj(uint8_t type)
86 return ((type & IMDS_OBJCFG_TYPE_MASK) << IMDS_OBJCFG_TYPE_SHIFT);
89 static uint8_t cfgIdIOBindImdsCfgObjTypeGet(uint32_t val)
91 return (val >> IMDS_OBJCFG_TYPE_SHIFT) & IMDS_OBJCFG_TYPE_MASK;
94 static uint32_t cfgIdIOBindImdsExt(uint8_t kind, uint8_t size)
96 return ((kind & IMDS_EXTCFG_KIND_MASK) << IMDS_EXTCFG_KIND_SHIFT) |
97 ((size & IMDS_EXTCFG_SIZE_MASK) << IMDS_EXTCFG_SIZE_SHIFT);
100 static uint8_t cfgIdIOBindImdsExtKindGet(uint32_t val)
102 return (val >> IMDS_EXTCFG_KIND_SHIFT) & IMDS_EXTCFG_KIND_MASK;
105 static uint8_t cfgIdIOBindImdsExtSizeGet(uint32_t val)
107 return (val >> IMDS_EXTCFG_SIZE_SHIFT) & IMDS_EXTCFG_SIZE_MASK;
110 static uint32_t cfgIdIOBindImdsCfg0(uint8_t size)
112 return ((size & IMDS_CFG0_SIZE_MASK) << IMDS_CFG0_SIZE_SHIFT);
115 static uint8_t cfgIdIOBindImdsCfg0SizeGet(uint32_t val)
117 return (val >> IMDS_CFG0_SIZE_SHIFT) & IMDS_CFG0_SIZE_MASK;
120 static uint32_t cfgIdIOBindImdsCfg1(uint8_t res)
125 static uint32_t cfgIdIOBindImdsCfg2(uint8_t res)
134 struct ble_gatt_svc_def svc;
135 std::map<const SObjectId::ObjectId, uint8_t>
141 char userDescription[IMDS_USER_DESCRIPTION_MAX];
148 uint8_t data[IMDS_USER_DESCRIPTION_MAX];
151 std::map<const SObjectId::ObjectId, SImdsMeta> ioMetaMap;
153#ifdef CONFIG_DAWN_IO_NOTIFY
154 static int notifierCb(
void *priv, io_ddata_t *data);
157 template<
typename T,
size_t WriteBytes = sizeof(T)>
158 static int callback(uint16_t conn_handle,
159 uint16_t attr_handle,
160 struct ble_gatt_access_ctxt *ctxt,
163 static int descriptorCb(uint16_t conn_handle,
164 uint16_t attr_handle,
165 struct ble_gatt_access_ctxt *ctxt,
171 void configureDesc(
const SObjectCfg::SObjectCfgItem *item);
172 void allocObject(
const SProtoNimblePrphIOBindImdsObjid &obj,
const uint32_t *ext);