|
Dawn Framework 1.0
Universal data acquisition framework for embedded systems
|
BLE Peripheral (Slave) Protocol Implementation using NimBLE. More...
#include <prph.hxx>
Public Types | |
| enum | { CMD_RESET = 0 , CMD_TRIGGER1 = 1 , CMD_TRIGGER2 = 2 , CMD_TRIGGER3 = 3 } |
| Control command identifiers for control() More... | |
| enum | |
| Default descriptor validation failure codes. More... | |
| enum | |
| Common configuration IDs. | |
| enum | EObjectState { STATE_STOPPED = 0 , STATE_RUNNING = 1 } |
| Object operational state returned by getState() More... | |
| enum | EProtoClass { PROTO_CLASS_ANY = 0 , PROTO_CLASS_NIMBLE_PRPH = 1 , PROTO_CLASS_NXSCOPE_DUMMY = 10 , PROTO_CLASS_DUMMY = 12 , PROTO_CLASS_NXSCOPE_SERIAL = 11 , PROTO_CLASS_NXSCOPE_UDP = 13 , PROTO_CLASS_SHELL_STD = 15 , PROTO_CLASS_SHELL_SERIAL = 16 , PROTO_CLASS_SERIAL = 17 , PROTO_CLASS_MODBUS_RTU = 18 , PROTO_CLASS_MODBUS_TCP = 19 , PROTO_CLASS_CAN = 20 , PROTO_CLASS_UDP = 22 , PROTO_CLASS_IPC = 23 , PROTO_CLASS_USER_START = 510 , PROTO_CLASS_USER = 511 , PROTO_CLASS_LAST } |
| Protocol object class types. More... | |
| enum | EProtoNimblePrphCfg { } |
Public Member Functions | |
| int | configure () |
| Configure object from descriptor data. | |
| int | deinit () |
| De-initialize object. | |
| int | doStart () |
| Start implementation hook. | |
| int | doStop () |
| Stop implementation hook. | |
| bool | getCfgFlag () const |
| Check if configuration flag is set. | |
| uint16_t | getCls () const |
| Get object class field. | |
| CDescObject & | getDesc () |
| Get descriptor object for this object. | |
| uint8_t | getDtype () const |
| Get data type field. | |
| size_t | getDtypeSize () const |
| Get size of this object's data type. | |
| uint8_t | getFlags () const |
| Get type-specific flags field. | |
| SObjectId::UObjectId | getId () const |
| Get object identifier as union structure. | |
| SObjectId::ObjectId | getIdV () const |
| Get object identifier as raw 32-bit value. | |
| CIOCommon * | getIO (SObjectId::ObjectId id) |
| Get an I/O object by ID. | |
| const std::map< SObjectId::ObjectId, CIOCommon * > & | getIOMap () const |
| Get the I/O map for this object. | |
| int | getObjConfig (SObjectCfg::ObjectCfgId objcfg, uint32_t *data, size_t len) |
| Get object configuration item. | |
| CIOCommon * | getObject (SObjectId::ObjectId id) |
| Get protocol object by ID. | |
| size_t | getObjectsLen () |
| Get count of registered I/O objects. | |
| uint16_t | getPriv () const |
| Get instance/private data field. | |
| virtual EObjectState | getState () const |
| Get current operational state. | |
| uint8_t | getType () const |
| Get object type field. | |
| bool | hasThread () const |
| Check if a background thread is active. | |
| virtual int | init () |
| One-time initialize object after bindings are resolved. | |
| void | regObject (SObjectId::ObjectId id) |
| Register an I/O object for this service. | |
| int | serviceRegister (struct ble_gatt_svc_def *svc) |
| Register a GATT service with the peripheral. | |
| int | setObjConfig (SObjectCfg::ObjectCfgId objcfg, uint32_t *data, size_t len) |
| Set object configuration item. | |
| void | setObjectMapItem (SObjectId::ObjectId id, CObject *obj) |
| Set an item in the object map. | |
| int | start () |
| Start object. | |
| int | startService (int id) |
| Start a specific service. | |
| int | stop () |
| Stop object. | |
| int | stopService (int id) |
| Stop a specific service. | |
| virtual int | trigger (uint8_t cmd) |
| Execute a trigger command. | |
Static Public Member Functions | |
| static float | charScaleGet (uint16_t u) |
| Get scaling factor for a characteristic UUID. | |
| static int | descValidDefault (const uint32_t *data, size_t len) |
| Default descriptor validation method. | |
| static int | validateDesc (const uint32_t *desc, size_t len) |
| Validate entire descriptor. | |
Static Public Attributes | |
| static std::pair< uint16_t, float > | charScale [] |
| Scaling factors for GATT characteristics. | |
| static size_t | charScaleSize |
| Number of characteristic scaling entries. | |
| static uint16_t | UUID16_ACCEL = 0x2c06 |
| 16-bit UUID for Acceleration characteristic. | |
| static uint16_t | UUID16_AGGREGATE = 0x2a5a |
| 16-bit UUID for Aggregate characteristic. | |
| static uint16_t | UUID16_AIOS = 0x1815 |
| 16-bit Bluetooth SIG UUID for AIOS. | |
| static uint16_t | UUID16_ANALOG = 0x2a58 |
| 16-bit UUID for Analog characteristic. | |
| static uint16_t | UUID16_BSS = 0x183b |
| 16-bit Bluetooth SIG UUID for BSS. | |
| static uint16_t | UUID16_CURRENT = 0x2aee |
| 16-bit UUID for Electric Current characteristic. | |
| static uint16_t | UUID16_CURRENTRANGE = 0x2aef |
| 16-bit UUID for Electric Current Range characteristic. | |
| static uint16_t | UUID16_CURRENTSPEC = 0x2af0 |
| 16-bit UUID for Electric Current Specification characteristic. | |
| static uint16_t | UUID16_CURRENTSTATS = 0x2af1 |
| 16-bit UUID for Electric Current Statistics characteristic. | |
| static uint16_t | UUID16_DIGITAL = 0x2a56 |
| 16-bit UUID for Digital characteristic. | |
| static uint16_t | UUID16_ESS = 0x181a |
| 16-bit Bluetooth SIG UUID for ESS. | |
| static uint16_t | UUID16_HUM = 0x2a6f |
| 16-bit UUID for Humidity characteristic. | |
| static uint16_t | UUID16_ILLUMINANCE = 0x2afb |
| 16-bit UUID for Illuminance characteristic. | |
| static uint16_t | UUID16_IMDS = 0x185a |
| 16-bit Bluetooth SIG UUID for IMDS. | |
| static uint16_t | UUID16_PRESS = 0x2a6d |
| 16-bit UUID for Pressure characteristic. | |
| static uint16_t | UUID16_RESISTANCE = 0x272a |
| 16-bit UUID for Electric Resistance characteristic. | |
| static uint16_t | UUID16_TEMP = 0x2a6e |
| 16-bit UUID for Temperature characteristic. | |
| static uint16_t | UUID16_TWINDDIR = 0x2a71 |
| 16-bit UUID for True Wind Direction characteristic. | |
| static uint16_t | UUID16_TWINDSPEED = 0x2a70 |
| 16-bit UUID for True Wind Speed characteristic. | |
| static uint16_t | UUID16_UVIDX = 0x2a76 |
| 16-bit UUID for UV Index characteristic. | |
| static uint16_t | UUID16_VOLTAGE = 0x2b18 |
| 16-bit UUID for Voltage characteristic. | |
| static uint16_t | UUID16_VOLTAGEFREQ = 0x2be8 |
| 16-bit UUID for Voltage Frequency characteristic. | |
| static uint16_t | UUID16_VOLTAGESPEC = 0x2b19 |
| 16-bit UUID for Voltage Specification characteristic. | |
| static uint16_t | UUID16_VOLTAGESTAT = 0x2b1a |
| 16-bit UUID for Voltage Statistics characteristic. | |
| static uint32_t | UUID_ACCEL [4] = {0x2c060010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Acceleration Characteristic UUID (0x2C06). | |
| static uint32_t | UUID_AGGREGATE [4] = {0x2a5a0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Aggregate Characteristic UUID (0x2A5A). | |
| static uint32_t | UUID_AIOS [4] = {0x18150010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Automation I/O Service UUID (0x1815). | |
| static uint32_t | UUID_ANALOG [4] = {0x2a580010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Analog Characteristic UUID (0x2A58). | |
| static uint32_t | UUID_BSS [4] = {0x183b0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Binary Sensor Service UUID (0x183B). | |
| static uint32_t | UUID_CURRENT [4] = {0x2aee0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Electric Current Characteristic UUID (0x2AEE). | |
| static uint32_t | UUID_CURRENTRANGE [4] = {0x2aef0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Electric Current Range Characteristic UUID (0x2AEF). | |
| static uint32_t | UUID_CURRENTSPEC [4] = {0x2af00010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Electric Current Specification Characteristic UUID (0x2AF0). | |
| static uint32_t | UUID_CURRENTSTATS [4] = {0x2af10010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Electric Current Statistics Characteristic UUID (0x2AF1). | |
| static uint32_t | UUID_DIGITAL [4] = {0x2a560010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Digital Characteristic UUID (0x2A56). | |
| static uint32_t | UUID_ESS [4] = {0x181a0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Environmental Sensing Service UUID (0x181A). | |
| static uint32_t | UUID_HUM [4] = {0x2a6f0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Humidity Characteristic UUID (0x2A6F). | |
| static uint32_t | UUID_ILLUMINANCE [4] = {0x2afb0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Illuminance Characteristic UUID (0x2AFB). | |
| static uint32_t | UUID_IMDS [4] = {0x185a0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Industrial Measurement Device Service UUID (0x185A). | |
| static uint32_t | UUID_INPUT_TRIGGER_SET [4] |
| AIOS Input Trigger Set characteristic (0x2A57). | |
| static uint32_t | UUID_OUTPUT_TRIGGER_SET [4] |
| AIOS Output Trigger Set characteristic (0x2A5C). | |
| static uint32_t | UUID_PRESS [4] = {0x2a6d0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Pressure Characteristic UUID (0x2A6D). | |
| static uint32_t | UUID_RESISTANCE [4] = {0x272a0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Electric Resistance Characteristic UUID (0x272A). | |
| static uint32_t | UUID_TEMP [4] = {0x2a6e0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Temperature Characteristic UUID (0x2A6E). | |
| static uint32_t | UUID_TIME_TRIGGER_SET [4] |
| AIOS Time Trigger Set characteristic (0x2A3F). | |
| static uint32_t | UUID_TWINDDIR [4] = {0x2a710010, 0x7474754e, 0x694e2058, 0x454c426d} |
| True Wind Direction Characteristic UUID (0x2A71). | |
| static uint32_t | UUID_TWINDSPEED [4] = {0x2a700010, 0x7474754e, 0x694e2058, 0x454c426d} |
| True Wind Speed Characteristic UUID (0x2A70). | |
| static uint32_t | UUID_UVIDX [4] = {0x2a760010, 0x7474754e, 0x694e2058, 0x454c426d} |
| UV Index Characteristic UUID (0x2A76). | |
| static uint32_t | UUID_VOLTAGE [4] = {0x2b180010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Voltage Characteristic UUID (0x2B18). | |
| static uint32_t | UUID_VOLTAGEFREQ [4] = {0x2be80010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Voltage Frequency Characteristic UUID (0x2BE8). | |
| static uint32_t | UUID_VOLTAGESPEC [4] = {0x2b190010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Voltage Specification Characteristic UUID (0x2B19). | |
| static uint32_t | UUID_VOLTAGESTAT [4] = {0x2b1a0010, 0x7474754e, 0x694e2058, 0x454c426d} |
| Voltage Statistics Characteristic UUID (0x2B1A). | |
Protected Member Functions | |
| virtual int | onSetObjConfig (SObjectCfg::ObjectCfgId objcfg, uint32_t *data, size_t len) |
| Pre-update hook for runtime configuration writes. | |
BLE Peripheral (Slave) Protocol Implementation using NimBLE.
This class implements the BLE peripheral role using Apache NimBLE stack.
|
inherited |
Control command identifiers for control()
| Enumerator | |
|---|---|
| CMD_RESET | Reset object internal state. |
| CMD_TRIGGER1 | Object-specific trigger slot 1. |
| CMD_TRIGGER2 | Object-specific trigger slot 2. |
| CMD_TRIGGER3 | Object-specific trigger slot 3. |
Definition at line 40 of file object.hxx.
|
inherited |
Default descriptor validation failure codes.
Negative values identify which length check failed in descValidDefault().
Definition at line 314 of file object.hxx.
|
inherited |
Object operational state returned by getState()
| Enumerator | |
|---|---|
| STATE_STOPPED | Object is stopped. |
| STATE_RUNNING | Object is running. |
Definition at line 32 of file object.hxx.
|
inherited |
Protocol object class types.
Definition at line 27 of file common.hxx.
|
inlinestaticinherited |
Get scaling factor for a characteristic UUID.
Returns the scaling factor for converting raw values to proper units.
| [in] | u | 16-bit Bluetooth SIG UUID. |
Definition at line 383 of file iprph.hxx.
References dawn::IProtoNimblePrphCb::charScale, and dawn::IProtoNimblePrphCb::charScaleSize.
|
virtual |
Configure object from descriptor data.
Called during framework setup before dependency binding. Implementations should parse/validate descriptor configuration and store object settings, but avoid one-time allocations that depend on bound objects.
Reimplemented from dawn::CObject.
Definition at line 304 of file prph.cxx.
References dawn::CObject::getDesc().
|
virtual |
De-initialize object.
Clean up resources allocated during init().
Reimplemented from dawn::CObject.
|
staticinherited |
Default descriptor validation method.
Provides basic validation that only checks if descriptor lengths are correct.
| data | Descriptor data pointer. |
| len | Length of descriptor data in 32-bit words. |
Definition at line 42 of file object.cxx.
References dawn::SObjectCfg::UObjectCfgId::s, dawn::SObjectCfg::UObjectCfgId::size, and dawn::SObjectCfg::UObjectCfgId::v.
|
virtual |
Start implementation hook.
Override in derived classes instead of start().
Reimplemented from dawn::CObject.
|
virtual |
Stop implementation hook.
Override in derived classes instead of stop().
Reimplemented from dawn::CObject.
|
inherited |
Check if configuration flag is set.
Definition at line 160 of file object.cxx.
References dawn::CDescObject::getSize().
|
inherited |
Get object class field.
Definition at line 170 of file object.cxx.
References dawn::SObjectId::UObjectId::cls, and dawn::SObjectId::UObjectId::s.
|
inherited |
Get descriptor object for this object.
Definition at line 190 of file object.cxx.
|
inherited |
Get data type field.
Definition at line 175 of file object.cxx.
References dawn::SObjectId::UObjectId::dtype, and dawn::SObjectId::UObjectId::s.
|
inherited |
Get size of this object's data type.
Definition at line 195 of file object.cxx.
References dawn::SObjectId::getDtypeSize_(), and dawn::CDescObject::getObjectDtype().
|
inherited |
Get type-specific flags field.
Definition at line 180 of file object.cxx.
References dawn::SObjectId::UObjectId::flags, and dawn::SObjectId::UObjectId::s.
|
inherited |
Get object identifier as union structure.
Definition at line 150 of file object.cxx.
|
inherited |
Get object identifier as raw 32-bit value.
Definition at line 155 of file object.cxx.
References dawn::SObjectId::UObjectId::v.
|
inherited |
Get an I/O object by ID.
| id | Object ID to retrieve. |
Definition at line 41 of file bindable.cxx.
|
inherited |
Get the I/O map for this object.
Definition at line 18 of file bindable.cxx.
|
inherited |
Get object configuration item.
Retrieves configuration data for this object.
| objcfg | Configuration ID specifying which config item to retrieve. |
| data | Pointer to buffer for configuration data. |
| len | Length of buffer in 32-bit words. |
Definition at line 240 of file object.cxx.
References dawn::SObjectCfg::SObjectCfgItem::data, dawn::SObjectCfg::objectCfgGetSize(), and dawn::CDescObject::objectCfgItemId().
|
inlinevirtual |
Get protocol object by ID.
Retrieves a protocol instance by its object ID.
| [in] | id | I/O object ID. |
Implements dawn::IProtoNimblePrphCb.
Definition at line 76 of file prph.hxx.
References dawn::CBindableObject::getIO().
|
inlinevirtual |
Get count of registered I/O objects.
Implements dawn::IProtoNimblePrphCb.
Definition at line 81 of file prph.hxx.
References dawn::CBindableObject::getIOMap().
|
inherited |
Get instance/private data field.
Definition at line 185 of file object.cxx.
References dawn::SObjectId::UObjectId::priv, and dawn::SObjectId::UObjectId::s.
|
inlinevirtualinherited |
Get current operational state.
Default returns STATE_RUNNING after successful start(), STATE_STOPPED otherwise. Objects with richer states (e.g. paused) should override.
Definition at line 183 of file object.hxx.
References dawn::CObject::STATE_RUNNING, and dawn::CObject::STATE_STOPPED.
|
inherited |
Get object type field.
Definition at line 165 of file object.cxx.
References dawn::SObjectId::UObjectId::s, and dawn::SObjectId::UObjectId::type.
|
virtual |
Check if a background thread is active.
Used by Dawn's main loop to detect when clean exit is possible. Objects without a background thread must return false. Independent of operational state tracked via getState().
Reimplemented from dawn::CObject.
|
inlinevirtualinherited |
One-time initialize object after bindings are resolved.
Called once during framework setup after dependency binding. Allocate lifetime resources here (buffers, register maps, etc.).
Reimplemented in dawn::CIOAdcBase, dawn::CIODummy, dawn::CIODummyNotify, dawn::CIOEncoder, dawn::CIOEncoderIndex, dawn::CIOGpi, dawn::CIOGpo, dawn::CIOLeds, dawn::CIOPwm, dawn::CIORgbLed, dawn::CIOSysinfo, dawn::CIOSystime, dawn::CIOUname, dawn::CIOUuid, dawn::CIOVirt, dawn::CProgAdjust, dawn::CProgBitPack, dawn::CProgBitSplit, dawn::CProgBuffer, dawn::CProgCounter, dawn::CProgExpression, dawn::CProgGateway, dawn::CProgIODemux, dawn::CProgIOMux, dawn::CProgManyToOne, dawn::CProgOneToMany, dawn::CProgProcess, dawn::CProgRedirect, dawn::CProgSampling, dawn::CProgSelector, dawn::CProgSequencer, dawn::CProgSwitch, dawn::CProgToggle, dawn::CProgVecPack, dawn::CProgVecSplit, dawn::CProtoCan, dawn::CProtoIpc, dawn::CProtoModbusRtu, dawn::CProtoModbusTcp, dawn::CProtoNxscope, dawn::CProtoSerial, and dawn::CProtoUdp.
Definition at line 87 of file object.hxx.
|
inlineprotectedvirtualinherited |
Pre-update hook for runtime configuration writes.
Called by setObjConfig() before descriptor-backed storage is updated. Derived classes may validate incoming data and prepare/apply runtime side effects. Returning a negative error rejects the update.
| objcfg | Configuration ID that will be updated. |
| data | Pointer to new config words. |
| len | Number of config words. |
Reimplemented in dawn::CIOAdcStream, dawn::CIOAdcSync, and dawn::CIOPwm.
Definition at line 386 of file object.hxx.
|
inlinevirtual |
Register an I/O object for this service.
Called by services to register I/O objects.
| [in] | id | I/O object ID to register. |
Implements dawn::IProtoNimblePrphCb.
Definition at line 71 of file prph.hxx.
References dawn::CBindableObject::setObjectMapItem().
|
virtual |
Register a GATT service with the peripheral.
Called by service implementations to register their GATT service definition.
| [in] | svc | GATT service definition (from NimBLE ble_gatt_svc_def). |
Implements dawn::IProtoNimblePrphCb.
|
inherited |
Set object configuration item.
Updates a configuration item for this object.
| objcfg | Configuration ID specifying which config item to update. |
| data | Pointer to configuration data. |
| len | Length of configuration data in 32-bit words. |
Definition at line 200 of file object.cxx.
References dawn::SObjectCfg::SObjectCfgItem::data, dawn::SObjectCfg::objectCfgGetRw(), dawn::SObjectCfg::objectCfgGetSize(), dawn::CDescObject::objectCfgItemId(), and dawn::CObject::onSetObjConfig().
|
inherited |
Set an item in the object map.
| id | Object ID to set. |
| obj | Object pointer to associate with the ID. |
Definition at line 23 of file bindable.cxx.
References dawn::SObjectId::objectIdGetType(), and dawn::SObjectId::OBJTYPE_IO.
|
inlineinherited |
Start object.
Tracks operational state and calls doStart(). This phase may run many times during an object's lifetime and should not perform one-time allocation. Sets started on successful doStart() return.
Definition at line 116 of file object.hxx.
References dawn::CObject::doStart().
|
virtual |
Start a specific service.
Enables a service (makes its characteristics available to clients).
| [in] | id | Service ID from serviceRegister(). |
Implements dawn::IProtoNimblePrphCb.
Definition at line 421 of file prph.cxx.
References dawn::CProtoNimbleAdv::gapName.
|
inlineinherited |
Stop object.
Tracks operational state and calls doStop(). This phase may run many times during an object's lifetime and should not perform one-time deallocation. Always clears started regardless of doStop() return value.
Definition at line 145 of file object.hxx.
References dawn::CObject::doStop().
|
virtual |
Stop a specific service.
Disables a service (removes its characteristics from the GATT database).
| [in] | id | Service ID from serviceRegister(). |
Implements dawn::IProtoNimblePrphCb.
|
inlinevirtualinherited |
Execute a trigger command.
| cmd | Command identifier (EObjectCmd value). |
Reimplemented in dawn::CIOAdcFetch, dawn::CIOAdcStream, dawn::CIOAdcSync, dawn::CIOEncoder, dawn::CIOEncoderIndex, dawn::CIOPwm, dawn::CProgBuffer, dawn::CProgCounter, dawn::CProgProcess, dawn::CProgSequencer, dawn::CProgThresholdBase, and dawn::CProgToggle.
Definition at line 195 of file object.hxx.
|
staticinherited |
Validate entire descriptor.
Validates a descriptor binary object-by-object using default checks.
| desc | Descriptor binary pointer. |
| len | Descriptor length in 32-bit words. |
Definition at line 123 of file object.cxx.
References dawn::CObject::descValidDefault().
|
staticinherited |
Scaling factors for GATT characteristics.
Maps characteristic UUIDs to their scaling factors.
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |
|
staticinherited |