42 #include <HardwareSerial.h> 76 IFd(
void *buffer,
int bufferSize)
77 : m_buffer((uint8_t *)buffer)
78 , m_bufferSize(bufferSize)
82 virtual ~
IFd() =
default;
106 int write(
const char *buf,
int size);
126 int run_rx(
const void *data,
int len);
150 int run_tx(
void *data,
int max_size);
200 m_onReceive = on_receive;
218 m_onConnectEvent = on_connect;
238 m_sendTimeout = timeout;
247 m_userData = userData;
274 virtual void onReceive(uint8_t addr, uint8_t *pdata,
int size)
276 IPacket pkt((
char *)pdata, size);
279 m_onReceive(m_userData, addr, pkt);
289 virtual void onSend(uint8_t addr,
const uint8_t *pdata,
int size)
291 IPacket pkt((
char *)pdata, size);
294 m_onSend(m_userData, addr, pkt);
305 if ( m_onConnectEvent )
306 m_onConnectEvent(m_userData, addr, connected);
314 uint8_t *m_buffer =
nullptr;
316 hdlc_crc_t m_crc = HDLC_CRC_DEFAULT;
319 int m_bufferSize = 0;
322 uint16_t m_sendTimeout = 0;
325 uint8_t m_window = 3;
328 void (*m_onReceive)(
void *userData, uint8_t addr,
IPacket &pkt) =
nullptr;
331 void (*m_onSend)(
void *userData, uint8_t addr,
IPacket &pkt) =
nullptr;
334 void (*m_onConnectEvent)(
void *userData, uint8_t addr,
bool connected) =
nullptr;
337 void *m_userData =
nullptr;
340 static void onReceiveInternal(
void *handle, uint8_t addr, uint8_t *pdata,
int size);
343 static void onSendInternal(
void *handle, uint8_t addr,
const uint8_t *pdata,
int size);
346 static void onConnectEventInternal(
void *handle, uint8_t addr,
bool connected);
354 template <
int S>
class Fd:
public IFd 380 , m_allocated(reinterpret_cast<uintptr_t *>(m_buffer))
387 delete[] m_allocated;
391 uintptr_t *m_allocated =
nullptr;
void begin()
Initializes protocol internal variables.
Definition: TinyProtocolFd.cpp:59
Definition: tiny_fd_int.h:103
int run_tx(write_block_cb_t write_func)
Attempts to send out data via write_func function.
Definition: TinyProtocolFd.cpp:116
void setConnectEventCallback(void(*on_connect)(void *userData, uint8_t addr, bool connected)=nullptr)
Sets connect/disconnect callback.
Definition: TinyProtocolFd.h:216
This is Tiny protocol implementation for microcontrollers.
Describes packet entity and provides API methods to manipulate the packet.
Definition: TinyPacket.h:56
#define TINY_ALIGNED_STRUCT
This macro is used internally for aligning the structures.
Definition: tiny_types.h:113
virtual void onReceive(uint8_t addr, uint8_t *pdata, int size)
Method called by hdlc protocol upon receiving new frame.
Definition: TinyProtocolFd.h:274
This is class, which allocates buffers statically.
Definition: TinyProtocolFd.h:354
bool enableCrc16()
Enables CRC 16-bit field in the protocol.
Definition: TinyProtocolFd.cpp:154
void end()
Resets protocol state.
Definition: TinyProtocolFd.cpp:78
int(* read_block_cb_t)(void *pdata, void *buffer, int size)
The function reads data from communication channel.
Definition: tiny_types.h:185
tiny_fd_handle_t getHandle()
Returns low-level handle for full duplex protocol.
Definition: TinyProtocolFd.h:253
FdD(int size)
Creates instance of Full duplex protocol with dynamically allocated buffer.
Definition: TinyProtocolFd.h:378
void disableCrc()
Disable CRC field in the protocol.
Definition: TinyProtocolFd.cpp:138
IFd class encapsulates Full Duplex Protocol functionality.
Definition: TinyProtocolFd.h:67
void setWindowSize(uint8_t window)
Sets desired window size.
Definition: TinyProtocolFd.h:227
void setReceiveCallback(void(*on_receive)(void *userData, uint8_t addr, IPacket &pkt)=nullptr)
Sets receive callback for incoming messages.
Definition: TinyProtocolFd.h:198
void setSendCallback(void(*on_send)(void *userData, uint8_t addr, IPacket &pkt)=nullptr)
Sets send callback for outgoing messages.
Definition: TinyProtocolFd.h:207
IFd(void *buffer, int bufferSize)
Initializes IFd object.
Definition: TinyProtocolFd.h:76
int(* write_block_cb_t)(void *pdata, const void *buffer, int size)
The function writes data to communication channel port.
Definition: tiny_types.h:174
This is special class for Full Duplex protocol, which allocates buffers dynamically.
Definition: TinyProtocolFd.h:371
void setUserData(void *userData)
Sets user data to pass to callbacks.
Definition: TinyProtocolFd.h:245
virtual void onSend(uint8_t addr, const uint8_t *pdata, int size)
Method called by hdlc protocol upon sending next frame.
Definition: TinyProtocolFd.h:289
Definition: TinySerial.cpp:22
This is Tiny Full-Duplex protocol implementation for microcontrollers.
int write(const char *buf, int size)
Sends data block over communication channel.
Definition: TinyProtocolFd.cpp:85
int getStatus()
Returns status of the protocol.
Definition: TinyProtocolFd.h:261
void setSendTimeout(uint16_t timeout)
Sets send timeout in milliseconds.
Definition: TinyProtocolFd.h:236
bool enableCrc32()
Enables CRC 32-bit field in the protocol.
Definition: TinyProtocolFd.cpp:160
virtual void onConnectEvent(uint8_t addr, bool connected)
Method called by fd protocol when connect/disconnect event takes place.
Definition: TinyProtocolFd.h:303
bool enableCheckSum()
Enables CRC 8-bit field in the protocol.
Definition: TinyProtocolFd.cpp:148
#define TINY_ALIGN_STRUCT_VALUE
This macro is used internally for aligning the structures.
Definition: tiny_types.h:108
void enableCrc(hdlc_crc_t crc)
Enables CRC by specified bit-size.
Definition: TinyProtocolFd.cpp:143
int run_rx(const void *data, int len)
Processes incoming rx data, specified by a user.
Definition: TinyProtocolFd.cpp:95
int tiny_fd_get_status(tiny_fd_handle_t handle)
Returns status of the connection.
Definition: tiny_fd.c:997