Dawn Framework 1.0
Universal data acquisition framework for embedded systems
fileio.hxx
1// dawn/include/dawn/io/fileio.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include <limits.h>
9
10#include "dawn/io/common.hxx"
11#include "dawn/porting/config.hxx"
12
13namespace dawn
14{
26class CIOFile : public CIOCommon
27{
28public:
29 enum
30 {
35 };
36
37 enum
38 {
39 IO_FILE_CFG_FIRST = 0,
42 IO_FILE_CFG_LAST = 31
43 };
44
45 explicit CIOFile(CDescObject &desc)
46 : CIOCommon(desc)
47 , fd(-1)
48 , fsize(0)
49 , perm(IO_FILE_PERM_READ)
50 , writeOnceLocked(false)
51 {
52 }
53
54 ~CIOFile() override;
55
56#ifdef CONFIG_DAWN_OBJECT_HAS_NAME
57 const char *getClassNameStr() const override
58 {
59 return "file";
60 }
61#endif
62
63 int configure() override;
64 int deinit() override;
65 int getDataImpl(IODataCmn &data, size_t len) override;
66 int setDataImpl(IODataCmn &data) override;
67 int getDataAtImpl(IODataCmn &data, size_t len, size_t offset) override;
68 int setDataAtImpl(IODataCmn &data, size_t offset) override;
69
70#ifdef CONFIG_DAWN_IO_NOTIFY
71 int getFd() const override;
72#endif
73
74 size_t getDataSize() const override;
75 size_t getDataDim() const override;
76 bool isRead() const override;
77 bool isWrite() const override;
78
79 bool isNotify() const override
80 {
81 return false;
82 }
83
84 bool isBatch() const override
85 {
86 return false;
87 }
88
89 bool isSeekable() const override
90 {
91 return true;
92 }
93
95
96 constexpr static SObjectId::ObjectId objectId(uint16_t inst)
97 {
98 return ObjectIdHelper::create(inst);
99 }
100
101 constexpr static SObjectCfg::ObjectCfgId cfgIdPath(uint16_t size)
102 {
106 false,
107 size,
109 }
110
111 constexpr static SObjectCfg::ObjectCfgId cfgIdPerm()
112 {
116 false,
117 1,
119 }
120
121private:
122 char path[PATH_MAX] = {};
123 int fd;
124 size_t fsize;
125 uint8_t perm;
126 bool writeOnceLocked;
127
128 int configureDesc(const CDescObject &desc);
129};
130} // Namespace dawn
Descriptor wrapper for individual object configuration.
Template helper for creating ObjectIDs for I/O types without timestamp support.
Definition common.hxx:303
static SObjectId::ObjectId create(uint16_t inst)
Create ObjectID with fixed data type and no timestamp.
Definition common.hxx:312
Base class for all I/O objects.
Definition common.hxx:27
virtual int getFd() const
Get file descriptor for notifications.
Definition common.hxx:425
@ IO_CLASS_FILE
File system I/O.
Definition common.hxx:109
File system I/O access.
Definition fileio.hxx:27
bool isSeekable() const
Check if IO supports partial (seekable) access.
Definition fileio.hxx:89
bool isBatch() const
Check if IO supports batch operations.
Definition fileio.hxx:84
int setDataImpl(IODataCmn &data)
Set data implementation (override in derived classes).
Definition fileio.cxx:220
@ IO_FILE_PERM_RW
Read-write.
Definition fileio.hxx:33
@ IO_FILE_PERM_WRITE
Write-only.
Definition fileio.hxx:32
@ IO_FILE_PERM_WRITE_ONCE
Write-once.
Definition fileio.hxx:34
@ IO_FILE_PERM_READ
Read-only.
Definition fileio.hxx:31
bool isNotify() const
Check if IO supports notifications.
Definition fileio.hxx:79
int getDataImpl(IODataCmn &data, size_t len)
Get data implementation (override in derived classes).
Definition fileio.cxx:190
size_t getDataDim() const
Get data vector dimension.
Definition fileio.cxx:352
int getDataAtImpl(IODataCmn &data, size_t len, size_t offset)
Get data at byte offset (override in seekable IOs).
Definition fileio.cxx:261
int deinit()
De-initialize object.
Definition fileio.cxx:179
@ IO_FILE_CFG_PATH
File path (null-terminated string, DTYPE_CHAR).
Definition fileio.hxx:40
@ IO_FILE_CFG_PERM
Permission mode (EIOFilePerm, DTYPE_UINT8).
Definition fileio.hxx:41
size_t getDataSize() const
Get data size in bytes.
Definition fileio.cxx:347
bool isWrite() const
Check if IO supports write operations.
Definition fileio.cxx:364
bool isRead() const
Check if IO supports read operations.
Definition fileio.cxx:359
int setDataAtImpl(IODataCmn &data, size_t offset)
Set data at byte offset (override in seekable IOs).
Definition fileio.cxx:291
int configure()
Configure object from descriptor data.
Definition fileio.cxx:108
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.
Definition objectcfg.hxx:60
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
@ OBJTYPE_IO
Input/Output object type.
Definition objectid.hxx:184
@ DTYPE_UINT8
Unsigned 8-bit integer (0 to 255).
Definition objectid.hxx:80
@ DTYPE_CHAR
Character/string type (null-terminated, 4-byte aligned).
Definition objectid.hxx:144
uint32_t ObjectId
ObjectID type - single 32-bit value.
Definition objectid.hxx:44