semf
canhardware.cpp
Go to the documentation of this file.
1
12
13namespace semf
14{
15void CanHardware::write(const uint8_t data[], size_t dataSize)
16{
17 SEMF_INFO("data %p, size is %u", data, dataSize);
18 if (m_isBusyWriting)
19 {
20 SEMF_ERROR("is busy");
21 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Write_IsBusy)));
22 return;
23 }
24 if (data == nullptr)
25 {
26 SEMF_ERROR("data is nullptr");
27 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Write_DataIsNullptr)));
28 return;
29 }
30 if (dataSize == 0)
31 {
32 SEMF_ERROR("size is 0");
33 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Write_DataSizeIsZero)));
34 return;
35 }
36
37 m_isBusyWriting = true;
38 writeHardware(data, dataSize);
39}
40
41void CanHardware::read(uint8_t buffer[], size_t bufferSize)
42{
43 if (buffer == nullptr)
44 {
45 SEMF_ERROR("data is nullptr");
46 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Read_DataIsNullptr)));
47 return;
48 }
49 if (bufferSize == 0)
50 {
51 SEMF_ERROR("size is 0");
52 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Read_DataSizeIsZero)));
53 return;
54 }
55 setReadBuffer(buffer, bufferSize);
56}
57
59{
60 return false;
61}
62
64{
65 return m_isBusyWriting;
66}
67
69{
70 SEMF_INFO("request");
71 if (m_isBusyWriting)
72 {
73 SEMF_ERROR("is busy");
74 error(Error(kSemfClassId, static_cast<uint8_t>(ErrorCode::Request_IsBusy)));
75 return;
76 }
77 m_isBusyWriting = true;
79}
80
82{
83 m_isBusyWriting = isBusy;
84}
85
87{
88 m_isBusyWriting = false;
89 SEMF_INFO("data written");
91}
92
94{
95 SEMF_INFO("data available");
97}
98
100{
101 m_isBusyWriting = false;
102 SEMF_ERROR("error");
103 error(thrown);
104}
105
107{
109}
110} /* namespace semf */
void write(const uint8_t data[], size_t dataSize) override
For writing data, dataWritten signal will be emitted after successful write.
Definition: canhardware.cpp:15
void onError(Error thrown)
Is called if an error occurred by hardware read or write access. Will emit error signal.
Definition: canhardware.cpp:99
void read(uint8_t buffer[], size_t bufferSize) override
For setting the read buffer. This has be done for getting a dataAvailable signal for handling the dat...
Definition: canhardware.cpp:41
bool isBusyWriting() const override
Communication hardware is busy writing at the moment.
Definition: canhardware.cpp:63
virtual void requestHardware()=0
virtual void setReadBuffer(uint8_t buffer[], size_t bufferSize)=0
Sets the read buffer for having the possibility to handle the received data.
virtual void writeHardware(const uint8_t data[], size_t dataSize)=0
Hardware will write data.
bool isBusyReading() const override
Communication hardware is busy reading at the moment.
Definition: canhardware.cpp:58
void setBusyWriting(bool isBusy)
Sets the busy flag for writing.
Definition: canhardware.cpp:81
void request() override
Definition: canhardware.cpp:68
Signal dataRequested
Definition: can.h:55
Class for representing errors. Every error should have a unique source code. As a user feel encourage...
Definition: error.h:22
Signal< Error > error
Definition: communication.h:64
#define SEMF_ERROR(...)
Definition: debug.h:39
#define SEMF_INFO(...)
Definition: debug.h:41