10#include "dawn/common/object.hxx"
11#include "dawn/debug.hxx"
12#include "dawn/io/ddata.hxx"
13#include "dawn/io/inotifier.hxx"
14#include "dawn/io/limits.hxx"
15#include "dawn/porting/config.hxx"
29#ifdef CONFIG_DAWN_IO_HAS_STATS
49 const IOStats &getStats()
const
61 stats.write_count = 0;
62 stats.error_count = 0;
234 template<u
int16_t CLASS_ID, u
int8_t DEFAULT_DTYPE>
250#ifdef CONFIG_DAWN_IO_TIMESTAMP
256 DAWNASSERT(ts ==
false,
"ts not supported");
277#ifdef CONFIG_DAWN_IO_TIMESTAMP
283 DAWNASSERT(ts ==
false,
"ts not supported");
301 template<u
int16_t CLASS_ID, u
int8_t DEFAULT_DTYPE>
357#ifdef CONFIG_DAWN_IO_SEEKABLE
359 : (offset == 0 ?
getDataImpl(data, len) : -ENOTSUP);
361 ret = (offset == 0) ?
getDataImpl(data, len) : -ENOTSUP;
363#ifdef CONFIG_DAWN_IO_HAS_STATS
371 else if (ret != -ENOTSUP)
396#ifdef CONFIG_DAWN_IO_SEEKABLE
399 ret = (offset == 0) ?
setDataImpl(data) : -ENOTSUP;
401#ifdef CONFIG_DAWN_IO_HAS_STATS
409 else if (ret != -ENOTSUP)
507#ifdef CONFIG_DAWN_IO_NOTIFY
567 int getConfig(uint32_t cfgid, uint32_t *data,
size_t len)
583 int setConfig(uint32_t cfgid, uint32_t *data,
size_t len)
672#ifdef CONFIG_DAWN_IO_NOTIFY
679 uint8_t getNotifyType()
const
690 int getNotifyPrio()
const
701 size_t getNotifyBatch()
const
708#ifdef CONFIG_DAWN_IO_NOTIFY
711 IIONotifier *notifier;
781#ifdef CONFIG_DAWN_IO_NOTIFY
809 return this->limits.
getMin();
818 return this->limits.
getMax();
868#ifdef CONFIG_DAWN_IO_NOTIFY
873#ifdef CONFIG_DAWN_IO_HAS_STATS
Descriptor wrapper for individual object configuration.
Template helper for creating ObjectIDs for I/O types without timestamp support.
static SObjectId::ObjectId create(SObjectId::EObjectDataType dtype, uint16_t inst)
Create ObjectID with custom data type and no timestamp.
static SObjectId::ObjectId create(uint16_t inst)
Create ObjectID with fixed data type and no timestamp.
Template helper for creating ObjectIDs for I/O types.
static SObjectId::ObjectId create(bool ts, uint16_t inst)
Create ObjectID with default data type.
static SObjectId::ObjectId create(SObjectId::EObjectDataType dtype, bool ts, uint16_t inst)
Create ObjectID with custom data type.
Base class for all I/O objects.
virtual bool isWrite() const =0
Check if IO supports write operations.
static SObjectCfg::ObjectCfgId cfgIdLimitMax(uint8_t dtype, uint16_t size)
Create ConfigID for maximum I/O limits.
int getConfig(uint32_t cfgid, uint32_t *data, size_t len)
Get I/O configuration item.
int setData(IODataCmn &data, size_t offset=0)
Set data for I/O (public interface with stats tracking).
virtual bool isBatch() const =0
Check if IO supports batch operations.
size_t getCmnLimitWords()
Get number of 32-bit words in I/O limit arrays.
virtual int getDataAtImpl(IODataCmn &data, size_t len, size_t offset)
Get data at byte offset (override in seekable IOs).
int getData(IODataCmn &data, size_t len, size_t offset=0)
Get data from I/O (public interface with stats tracking).
const CIOLimits & getCmnLimits() const
Get common IO limits container.
static SObjectCfg::ObjectCfgId cfgIdLimitStep(uint8_t dtype, uint16_t size)
Create ConfigID for step I/O limits.
const uint32_t * getCmnLimitMin()
Get minimum I/O limit words.
static SObjectCfg::ObjectCfgId cfgIdCmn(bool rw, uint8_t dtype, uint8_t size, uint8_t id)
Create ConfigID for I/O common configuration.
@ IO_CFG_LIMIT_STEP
Step limit words.
@ IO_CFG_NOTIFY
Notifier configuration (type + priority)
@ IO_CFG_FIRST
First config ID.
@ IO_CFG_LIMIT_MIN
Minimum limit words.
@ IO_CFG_LAST
Last config ID.
@ IO_CFG_LIMIT_MAX
Maximum limit words.
@ IO_CFG_DEVNO
Device number configuration.
const uint32_t * getCmnLimitMax()
Get maximum I/O limit words.
static SObjectCfg::ObjectCfgId cfgIdDevno(bool rw=false)
Create ConfigID for device number configuration.
virtual bool isNotify() const =0
Check if IO supports notifications.
virtual int getFd() const
Get file descriptor for notifications.
uint64_t getTimestamp()
Get current timestamp.
virtual bool isSeekable() const
Check if IO supports partial (seekable) access.
bool isTimestamp() const
Check if I/O supports timestamp.
virtual int setDataAtImpl(IODataCmn &data, size_t offset)
Set data at byte offset (override in seekable IOs).
EIONotifyType
Notifier type enumeration.
@ IO_NOTIFY_POLL
Poll-based notifier (default)
@ IO_NOTIFY_STREAM
Stream notifier (blocking read, one per IO)
int getCmnDevno() const
Get device number for this I/O.
virtual int setDataImpl(IODataCmn &data)
Set data implementation (override in derived classes).
virtual size_t getDataDim() const =0
Get data vector dimension.
io_ddata_t * ddata_alloc(size_t batch, size_t chunk_size=0)
Allocate data buffer for this I/O.
virtual size_t getDataSize() const =0
Get data size in bytes.
EIOFlags
I/O common flags.
@ IO_FLAGS_TS
Timestamp support flag.
virtual int getDataImpl(IODataCmn &data, size_t len)
Get data implementation (override in derived classes).
virtual bool isRead() const =0
Check if IO supports read operations.
int setConfig(uint32_t cfgid, uint32_t *data, size_t len)
Set I/O configuration item.
size_t cfgCmnOffset(const SObjectCfg::SObjectCfgItem *cfg)
Get offset of configuration item in descriptor.
EIOClass
I/O object class types.
@ 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_USER_START
User-defined types start here.
@ IO_CLASS_GPI_SINGLE
Single GPIO input.
@ IO_CLASS_SENSOR_PRODUCER_LIGHT
Light publisher.
@ IO_CLASS_SENSOR_PRODUCER_CONFIG
Sensor producer configuration IDs.
@ 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_SENSOR_LIGHT
Light 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_PRODUCER_GAS
Gas publisher.
@ IO_CLASS_SENSOR_TEMPERATURE
Temperature sensor.
@ IO_CLASS_LAST
Last I/O class marker.
@ IO_CLASS_FILE
File system I/O.
@ IO_CLASS_SENSOR_PRODUCER_GYROSCOPE
Gyroscope publisher.
@ IO_CLASS_CONTROL
Control I/O.
@ IO_CLASS_BUTTONS
Button input.
@ IO_CLASS_SYSTEM_HOSTNAME
System hostname.
@ 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_DUMMY
Dummy I/O (for testing)
@ IO_CLASS_SENSOR_ACCELEROMETER
Accelerometer sensor.
@ IO_CLASS_SENSOR_RGB
RGB color sensor.
@ IO_CLASS_USER
User-defined I/O.
@ IO_CLASS_TIMESTAMP
Timestamp generator.
@ IO_CLASS_SENSOR_GYROSCOPE
Gyroscope sensor.
@ IO_CLASS_SYSTEM_UUID
UUID.
@ 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_GAS
Gas sensor.
@ IO_CLASS_SENSOR_PRODUCER_BAROMETER
Barometer publisher.
@ IO_CLASS_DESCRIPTOR
Descriptor I/O.
@ IO_CLASS_SYSTEM_RESET
System reset control.
static SObjectCfg::ObjectCfgId cfgIdLimitMin(uint8_t dtype, uint16_t size)
Create ConfigID for minimum I/O limits.
const uint32_t * getCmnLimitStep()
Get step I/O limit words.
static SObjectCfg::ObjectCfgId cfgIdNotify(bool rw=false)
Create ConfigID for notifier configuration.
Common IO runtime limits container and validator.
size_t getWords() const
Get configured limit array size in words.
const uint32_t * getMax() const
Get maximum limit words pointer.
const uint32_t * getStep() const
Get step limit words pointer.
const uint32_t * getMin() const
Get minimum limit words pointer.
Base class for all Dawn objects (IOs, Programs, Protocols).
int getObjConfig(SObjectCfg::ObjectCfgId objcfg, uint32_t *data, size_t len)
Get object configuration item.
int setObjConfig(SObjectCfg::ObjectCfgId objcfg, uint32_t *data, size_t len)
Set object configuration item.
Abstract interface for registering asynchronous I/O notification.
int(* notifier_cb_t)(void *priv, io_ddata_t *data)
Notifier callback function type.
static ObjectCfgId objectCfg(uint8_t type, uint16_t cls, uint8_t dtype, bool rw, uint16_t size, uint8_t id)
Construct 32-bit ConfigID from component fields.
uint32_t ObjectCfgId
ConfigID type - single 32-bit value.
Out-of-tree user-extension hooks for Dawn.
Base interface for I/O data buffers (static and dynamic).
Single configuration item within object.
@ OBJTYPE_IO
Input/Output object type.
EObjectDataType
Data types supported by Dawn framework.
@ DTYPE_UINT32
Unsigned 32-bit integer (0 to 4294967295).
uint32_t ObjectId
ObjectID type - single 32-bit value.
static ObjectId objectId(uint8_t type, uint16_t cls, uint8_t dtype, uint8_t flags, uint16_t priv)
Construct 32-bit ObjectID from component fields.
Heap-allocated dynamic I/O data buffer.