6#include "dawn/io/capabilities.hxx"
12#include "dawn/prog/common.hxx"
13#include "dawn/proto/common.hxx"
17int CIOCapabilities::configureDesc(
const CDescObject &desc)
23 for (i = 0; i < desc.
getSize(); i++)
37 DAWNERR(
"unsupported capabilities cfg 0x08%" PRIx32
"\n", item->
cfgid.
v);
46void CIOCapabilities::setBitmapBit(uint8_t *bitmap, uint16_t bit)
51 by =
static_cast<uint16_t
>(bit / 8u);
52 bi =
static_cast<uint16_t
>(bit % 8u);
54 if (by < CAPS_BITMAP_BYTES)
56 bitmap[by] |=
static_cast<uint8_t
>(1u << bi);
60void CIOCapabilities::buildIoBitmap()
64 ioBitmap = payloadBuf + CAPS_IO_BITMAP_OFFSET;
65 std::memset(ioBitmap, 0, CAPS_BITMAP_BYTES);
67#ifdef CONFIG_DAWN_IO_CONFIG
70#ifdef CONFIG_DAWN_IO_TRIGGER
73#ifdef CONFIG_DAWN_IO_DESCRIPTOR
76#ifdef CONFIG_DAWN_IO_CONTROL
79#ifdef CONFIG_DAWN_IO_CAPABILITIES
82#ifdef CONFIG_DAWN_IO_DESC_SELECTOR
85#ifdef CONFIG_DAWN_IO_DUMMY
88#ifdef CONFIG_DAWN_IO_TIMESTAMPIO
91#ifdef CONFIG_DAWN_IO_RANDIO
94#ifdef CONFIG_DAWN_IO_DUMMY_NOTIFY
97#ifdef CONFIG_DAWN_IO_FILE
100#ifdef CONFIG_DAWN_IO_SENSOR
121#ifdef CONFIG_DAWN_IO_SENSOR_PRODUCER
138#ifdef CONFIG_DAWN_IO_SYSINFO
142#ifdef CONFIG_DAWN_IO_BOARDCTL
147#ifdef CONFIG_DAWN_IO_UNAME
150#ifdef CONFIG_DAWN_IO_UUID
153#ifdef CONFIG_DAWN_IO_SYSTIME
156#ifdef CONFIG_DAWN_IO_GPI
159#ifdef CONFIG_DAWN_IO_GPO
162#ifdef CONFIG_DAWN_IO_BUTTONS
165#ifdef CONFIG_DAWN_IO_LEDS
168#ifdef CONFIG_DAWN_IO_RGB_LED
171#ifdef CONFIG_DAWN_IO_PWM
174#ifdef CONFIG_DAWN_IO_PULSECOUNT
177#ifdef CONFIG_DAWN_IO_ADC_FETCH
180#ifdef CONFIG_DAWN_IO_ADC_SYNC
183#ifdef CONFIG_DAWN_IO_ADC_STREAM
186#ifdef CONFIG_DAWN_IO_DAC
189#ifdef CONFIG_DAWN_IO_ENCODER
192#ifdef CONFIG_DAWN_IO_ENCODER_INDEX
195#ifdef CONFIG_DAWN_IO_VIRT
200void CIOCapabilities::buildProgBitmap()
204 progBitmap = payloadBuf + CAPS_PROG_BITMAP_OFFSET;
205 std::memset(progBitmap, 0, CAPS_BITMAP_BYTES);
207#ifdef CONFIG_DAWN_PROG_STATS_MIN
210#ifdef CONFIG_DAWN_PROG_STATS_MAX
213#ifdef CONFIG_DAWN_PROG_STATS_AVG
216#ifdef CONFIG_DAWN_PROG_STATS_SUM
219#ifdef CONFIG_DAWN_PROG_STATS_COUNT
222#ifdef CONFIG_DAWN_PROG_STATS_RMS
225#ifdef CONFIG_DAWN_PROG_SAMPLING
228#ifdef CONFIG_DAWN_PROG_DUMMY
231#ifdef CONFIG_DAWN_PROG_ADJUST
234#ifdef CONFIG_DAWN_PROG_GATEWAY
237#ifdef CONFIG_DAWN_PROG_LATEST
240#ifdef CONFIG_DAWN_PROG_REDIRECT
243#ifdef CONFIG_DAWN_PROG_MOVING_AVG
246#ifdef CONFIG_DAWN_PROG_IIR_FILTER
249#ifdef CONFIG_DAWN_PROG_THRESHOLD
252#ifdef CONFIG_DAWN_PROG_THRESHOLD_VALUE
255#ifdef CONFIG_DAWN_PROG_BUFFER
258#ifdef CONFIG_DAWN_PROG_SEQUENCER
261#ifdef CONFIG_DAWN_PROG_BITSPLIT
262 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_BITSPLIT);
264#ifdef CONFIG_DAWN_PROG_TOGGLE
265 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_TOGGLE);
267#ifdef CONFIG_DAWN_PROG_COUNTER
268 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_COUNTER);
270#ifdef CONFIG_DAWN_PROG_SWITCH
271 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_SWITCH);
273#ifdef CONFIG_DAWN_PROG_EXPRESSION
274 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_EXPRESSION);
276#ifdef CONFIG_DAWN_PROG_SELECTOR
277 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_SELECTOR);
279#ifdef CONFIG_DAWN_PROG_BITPACK
280 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_BITPACK);
282#ifdef CONFIG_DAWN_PROG_VECPACK
283 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_VECPACK);
285#ifdef CONFIG_DAWN_PROG_VECSPLIT
286 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_VECSPLIT);
288#ifdef CONFIG_DAWN_PROG_CONFIGWRITER
289 setBitmapBit(progBitmap, CProgCommon::PROG_CLASS_CONFIGWRITER);
293void CIOCapabilities::buildProtoBitmap()
295 uint8_t *protoBitmap;
297 protoBitmap = payloadBuf + CAPS_PROTO_BITMAP_OFFSET;
298 std::memset(protoBitmap, 0, CAPS_BITMAP_BYTES);
300#ifdef CONFIG_DAWN_PROTO_DUMMY
303#ifdef CONFIG_DAWN_PROTO_NIMBLE_PERIPHERAL
306#ifdef CONFIG_DAWN_PROTO_NXSCOPE_DUMMY
309#ifdef CONFIG_DAWN_PROTO_NXSCOPE_SERIAL
312#ifdef CONFIG_DAWN_PROTO_NXSCOPE_UDP
315#ifdef CONFIG_DAWN_PROTO_SHELL_PRETTY
318#ifdef CONFIG_DAWN_PROTO_SERIAL
321#ifdef CONFIG_DAWN_PROTO_MODBUS_RTU
324#ifdef CONFIG_DAWN_PROTO_MODBUS_TCP
327#ifdef CONFIG_DAWN_PROTO_CAN
330#ifdef CONFIG_DAWN_PROTO_UDP
333#ifdef CONFIG_DAWN_PROTO_IPC
336#ifdef CONFIG_DAWN_PROTO_WAKAAMA
341void CIOCapabilities::setMetaWord(uint16_t index, uint32_t value)
345 if (index >= CAPS_META_WORDS)
350 off = CAPS_META_OFFSET +
static_cast<size_t>(index) * 4u;
351 payloadBuf[off + 0] =
static_cast<uint8_t
>(value & 0xffu);
352 payloadBuf[off + 1] =
static_cast<uint8_t
>((value >> 8) & 0xffu);
353 payloadBuf[off + 2] =
static_cast<uint8_t
>((value >> 16) & 0xffu);
354 payloadBuf[off + 3] =
static_cast<uint8_t
>((value >> 24) & 0xffu);
357void CIOCapabilities::buildMetaPayload()
359 uint32_t dtypeBitmap;
360 uint32_t ioFlagsBitmap;
363 std::memset(payloadBuf + CAPS_META_OFFSET, 0, CAPS_PAYLOAD_SIZE - CAPS_META_OFFSET);
371#ifdef CONFIG_DAWN_DTYPE_BOOL
374#ifdef CONFIG_DAWN_DTYPE_INT8
377#ifdef CONFIG_DAWN_DTYPE_UINT8
380#ifdef CONFIG_DAWN_DTYPE_INT16
383#ifdef CONFIG_DAWN_DTYPE_UINT16
386#ifdef CONFIG_DAWN_DTYPE_INT32
389#ifdef CONFIG_DAWN_DTYPE_UINT32
392#ifdef CONFIG_DAWN_DTYPE_INT64
395#ifdef CONFIG_DAWN_DTYPE_UINT64
398#ifdef CONFIG_DAWN_DTYPE_FLOAT
401#ifdef CONFIG_DAWN_DTYPE_DOUBLE
404#ifdef CONFIG_DAWN_DTYPE_B16
407#ifdef CONFIG_DAWN_DTYPE_UB16
410#ifdef CONFIG_DAWN_DTYPE_CHAR
413#ifdef CONFIG_DAWN_DTYPE_BLOCK
417#ifdef CONFIG_DAWN_IO_TIMESTAMP
418 ioFlagsBitmap |= (1u << 0);
421 buildFlags |= CAPS_BUILD_OS_NUTTX;
422#ifdef CONFIG_FS_PROCFS
423 buildFlags |= CAPS_BUILD_FILESYSTEM;
425#ifdef CONFIG_DAWN_IO_NOTIFY
426 buildFlags |= CAPS_BUILD_IO_NOTIFY;
428#ifdef CONFIG_DAWN_IO_HAS_STATS
429 buildFlags |= CAPS_BUILD_IO_HAS_STATS;
431#ifdef CONFIG_DAWN_OBJECT_HAS_NAME
432 buildFlags |= CAPS_BUILD_OBJECT_HASNAME;
434#if CONFIG_DAWN_DESC_SLOTS > 1
435 buildFlags |= CAPS_BUILD_DESC_DYNAMIC;
445 setMetaWord(0, dtypeBitmap);
447 setMetaWord(2, ioFlagsBitmap);
449 setMetaWord(4, buildFlags);
451 setMetaWord(6, CONFIG_DAWN_DESC_SLOTS);
452 setMetaWord(7, CONFIG_DAWN_DESC_SLOT_SIZE);
453 setMetaWord(8, 0x1ffu);
454 setMetaWord(9, 0x1ffu);
455 setMetaWord(10, 0x1ffu);
459int CIOCapabilities::configurePayload()
461 std::memset(payloadBuf, 0,
sizeof(payloadBuf));
469size_t CIOCapabilities::copyFromBlob(uint8_t *dst,
size_t offset,
size_t len)
const
471 uint8_t hdr[CAPS_HDR_SIZE];
478 hdr[0] = CAPS_VERSION;
480 hdr[2] =
static_cast<uint8_t
>(CAPS_PAYLOAD_SIZE & 0xff);
481 hdr[3] =
static_cast<uint8_t
>((CAPS_PAYLOAD_SIZE >> 8) & 0xff);
489 if (offset < CAPS_HDR_SIZE)
492 hcopy = CAPS_HDR_SIZE - hstart;
498 std::memcpy(dst, &hdr[hstart], hcopy);
504 if (offset + copied < CAPS_HDR_SIZE)
510 pstart = offset + copied - CAPS_HDR_SIZE;
513 pcopy = CAPS_PAYLOAD_SIZE - pstart;
514 if (pcopy > (len - copied))
516 pcopy = len - copied;
521 std::memcpy(dst + copied, payloadBuf + pstart, pcopy);
529CIOCapabilities::~CIOCapabilities()
538 ret = configureDesc(
getDesc());
544 return configurePayload();
582 avail = total - offset;
584 copyFromBlob(
static_cast<uint8_t *
>(data.
getDataPtr()), offset, toCopy);
591 return CAPS_TOTAL_SIZE;
Descriptor wrapper for individual object configuration.
size_t getSize() const
Get number of configuration items for this object.
SObjectCfg::SObjectCfgItem * objectCfgItemAtOffset(size_t offset) const
Get configuration item at specified offset.
int getDataAtImpl(IODataCmn &data, size_t len, size_t offset)
Get data at byte offset (override in seekable IOs).
int deinit()
De-initialize object.
size_t getDataDim() const
Get data vector dimension.
int configure()
Configure object from descriptor data.
size_t getDataSize() const
Get data size in bytes.
int setDataImpl(IODataCmn &data)
Set data implementation (override in derived classes).
int getDataImpl(IODataCmn &data, size_t len)
Get data implementation (override in derived classes).
size_t cfgCmnOffset(const SObjectCfg::SObjectCfgItem *cfg)
Get offset of configuration item in descriptor.
@ IO_CLASS_SENSOR_PRODUCER_MAGNETICFIELD
Magnetic field publisher.
@ IO_CLASS_SENSOR_MAGNETICFIELD
Magnetic field sensor.
@ IO_CLASS_SENSOR_PRODUCER_ACCELEROMETER
Accelerometer publisher.
@ IO_CLASS_DAC
Digital-to-analog converter.
@ IO_CLASS_TRIGGER
Trigger I/O.
@ IO_CLASS_PWM
PWM output.
@ IO_CLASS_SYSTEM_RESETCAUSE
Reset cause.
@ IO_CLASS_ADC_STREAM
ADC stream (batch/high-throughput)
@ IO_CLASS_VIRT
Virtual I/O.
@ IO_CLASS_SYSTEM_UPTIME
System uptime.
@ IO_CLASS_SYSTEM_POWEROFF
Power off control.
@ IO_CLASS_GPI_SINGLE
Single GPIO input.
@ IO_CLASS_SENSOR_PRODUCER_LIGHT
Light publisher.
@ IO_CLASS_SENSOR_PRODUCER_ATEMPERATURE
Ambient temperature publisher.
@ IO_CLASS_ANY
Any I/O class.
@ IO_CLASS_SYSTEM_SYSTEMTIME
System time.
@ IO_CLASS_SENSOR_PRODUCER_HUMIDITY
Humidity publisher.
@ IO_CLASS_ENCODER_INDEX
Quadrature encoder (position+index)
@ IO_CLASS_SENSOR_PRODUCER_IR
Infrared publisher.
@ IO_CLASS_ADC_FETCH
ADC fetch (on-demand)
@ IO_CLASS_CAPABILITIES
Capabilities bitmask I/O.
@ IO_CLASS_PULSECOUNT
Finite pulse-train output.
@ IO_CLASS_SENSOR_LIGHT
Light sensor.
@ IO_CLASS_SENSOR_CO2
CO2 concentration sensor.
@ IO_CLASS_SENSOR_BAROMETER
Barometer sensor.
@ IO_CLASS_SENSOR_PRODUCER_UV
Ultraviolet publisher.
@ IO_CLASS_SENSOR_HUMIDITY
Humidity sensor.
@ IO_CLASS_SENSOR_PROXIMITY
Proximity sensor.
@ IO_CLASS_SENSOR_GNSS_TIME
GNSS UTC time (seconds since epoch)
@ IO_CLASS_SENSOR_PRODUCER_GAS
Gas publisher.
@ IO_CLASS_SENSOR_TEMPERATURE
Temperature sensor.
@ IO_CLASS_FILE
File system I/O.
@ IO_CLASS_SENSOR_PRODUCER_GYROSCOPE
Gyroscope publisher.
@ IO_CLASS_SENSOR_PRODUCER_CO2
CO2 concentration publisher.
@ IO_CLASS_CONTROL
Control I/O.
@ IO_CLASS_BUTTONS
Button input.
@ IO_CLASS_SYSTEM_HOSTNAME
System hostname.
@ IO_CLASS_SENSOR_GNSS_INFO
GNSS accuracy + DOP (eph/epv/hdop/pdop/vdop)
@ IO_CLASS_SENSOR_PRODUCER_RGB
RGB color publisher.
@ IO_CLASS_SENSOR_PRODUCER_TEMPERATURE
Temperature publisher.
@ IO_CLASS_SENSOR_UV
Ultraviolet sensor.
@ IO_CLASS_CONFIG
Configuration I/O.
@ IO_CLASS_DESC_SELECTOR
Descriptor slot selector I/O.
@ IO_CLASS_SENSOR_GNSS
GNSS position+velocity (lat/lon/alt/speed/course)
@ IO_CLASS_DUMMY
Dummy I/O (for testing)
@ IO_CLASS_SENSOR_ACCELEROMETER
Accelerometer sensor.
@ IO_CLASS_SENSOR_RGB
RGB color sensor.
@ IO_CLASS_TIMESTAMP
Timestamp generator.
@ IO_CLASS_SENSOR_GYROSCOPE
Gyroscope sensor.
@ IO_CLASS_SYSTEM_UUID
UUID.
@ IO_CLASS_SENSOR_PRODUCER_TVOC
TVOC concentration publisher.
@ IO_CLASS_SENSOR_GNSS_SATELLITES
GNSS satellites used in fix.
@ IO_CLASS_ADC_SYNC
ADC sync (HW-triggered control loop)
@ IO_CLASS_ENCODER
Quadrature encoder (position)
@ IO_CLASS_GPO_SINGLE
Single GPIO output.
@ IO_CLASS_SENSOR_IR
Infrared sensor.
@ IO_CLASS_SYSTEM_CPULOAD
CPU load.
@ IO_CLASS_SENSOR_PRODUCER_PROXIMITY
Proximity publisher.
@ IO_CLASS_SENSOR_ATEMPERATURE
Ambient temperature sensor.
@ IO_CLASS_DUMMY_NOTIFY
Timer-driven dummy IO.
@ IO_CLASS_LEDS
LED output.
@ IO_CLASS_RGBLED
RGB LED output.
@ IO_CLASS_RAND
Random number generator.
@ IO_CLASS_SENSOR_TVOC
TVOC concentration sensor.
@ IO_CLASS_SENSOR_GAS
Gas sensor.
@ IO_CLASS_SENSOR_PRODUCER_BAROMETER
Barometer publisher.
@ IO_CLASS_DESCRIPTOR
Descriptor I/O.
@ IO_CLASS_SYSTEM_RESET
System reset control.
CDescObject & getDesc()
Get descriptor object for this object.
@ PROG_CLASS_LATEST
Cache latest notified sample for fetch-based readers.
@ PROG_CLASS_MOVING_AVG
Moving average filter.
@ PROG_CLASS_IIR_FILTER
First-order IIR filter.
@ PROG_CLASS_DUMMY
Dummy program (test/helper).
@ PROG_CLASS_THRESHOLD_VALUE
Threshold comparator returning gated source value.
@ PROG_CLASS_STATS_MAX
Maximum value tracker.
@ PROG_CLASS_STATS_MIN
Minimum value tracker.
@ PROG_CLASS_GATEWAY
Protocol-to-protocol IO gateway.
@ PROG_CLASS_SEQUENCER
Periodic state sequencer.
@ PROG_CLASS_STATS_SUM
Sum accumulator.
@ PROG_CLASS_BUFFER
Notify-driven history capture buffer.
@ PROG_CLASS_SAMPLING
Periodic data sampler.
@ PROG_CLASS_THRESHOLD
Threshold and hysteresis comparator.
@ PROG_CLASS_REDIRECT
Generic input-to-output routing bridge.
@ PROG_CLASS_STATS_RMS
Running RMS (root mean square) calculator.
@ PROG_CLASS_ADJUST
Scale/offset adjustment.
@ PROG_CLASS_STATS_COUNT
Sample counter.
@ PROG_CLASS_STATS_AVG
Running average calculator.
@ PROTO_CLASS_NXSCOPE_UDP
NxScope real-time visualization (UDP interface).
@ PROTO_CLASS_MODBUS_TCP
Modbus TCP (network implementation).
@ PROTO_CLASS_MODBUS_RTU
Modbus RTU (serial implementation).
@ PROTO_CLASS_WAKAAMA
LwM2M protocol using Eclipse Wakaama.
@ PROTO_CLASS_NXSCOPE_SERIAL
NxScope real-time visualization (serial interface).
@ PROTO_CLASS_DUMMY
Dummy protocol (test/helper).
@ PROTO_CLASS_UDP
UDP-based protocol.
@ PROTO_CLASS_SERIAL
Compact binary protocol over serial port.
@ PROTO_CLASS_NIMBLE_PRPH
BLE Peripheral using Apache NimBLE stack.
@ PROTO_CLASS_IPC
FIFO-based local IPC protocol.
@ PROTO_CLASS_NXSCOPE_DUMMY
NxScope real-time visualization (dummy interface).
@ PROTO_CLASS_SHELL_STD
Interactive shell on stdin/stdout.
@ PROTO_CLASS_CAN
CAN bus protocol.
Out-of-tree user-extension hooks for Dawn.
Base interface for I/O data buffers (static and dynamic).
virtual void * getDataPtr(size_t batch=0)=0
Get pointer to data only (skips timestamp if present).
virtual size_t getDataSize()=0
Get data size in bytes.
Single configuration item within object.
UObjectCfgId cfgid
Configuration ID header (type, class, id, size, rw, dtype).
@ DTYPE_FLOAT
IEEE 754 single-precision floating point (32-bit).
@ DTYPE_INT32
Signed 32-bit integer (-2147483648 to 2147483647).
@ DTYPE_UINT8
Unsigned 8-bit integer (0 to 255).
@ DTYPE_INT16
Signed 16-bit integer (-32768 to 32767).
@ DTYPE_INT8
Signed 8-bit integer (-128 to 127).
@ DTYPE_ANY
Wildcard data type (matches any actual type).
@ DTYPE_BLOCK
Opaque block/byte-stream data type.
@ DTYPE_UINT64
Unsigned 64-bit integer.
@ DTYPE_UINT16
Unsigned 16-bit integer (0 to 65535).
@ DTYPE_UB16
Unsigned 16.16 fixed-point (32-bit).
@ DTYPE_DOUBLE
IEEE 754 double-precision floating point (64-bit).
@ DTYPE_CHAR
Character/string type (null-terminated, 4-byte aligned).
@ DTYPE_INT64
Signed 64-bit integer.
@ DTYPE_UINT32
Unsigned 32-bit integer (0 to 4294967295).
@ DTYPE_BOOL
Boolean data type (stored in 32-bit container).
@ DTYPE_B16
Signed 16.16 fixed-point (32-bit).
ObjectCfgId v
Raw 32-bit ConfigID value (for storage, comparison).
uint32_t cls
Object class (bits 21-29, max 511).
struct dawn::SObjectCfg::UObjectCfgId::@10 s
Bit-field structure for named member access.