Lydia - Printhead
TransactionSerial< rxBufSize > Struct Template Reference

#include <ModbusMaster.h>

Inheritance diagram for TransactionSerial< rxBufSize >:
[legend]

Public Types

enum  Result : uint8_t { Result::success = 0x00, Result::timeout = 0xE0, Result::busy = 0xE1 }
 

Public Member Functions

void attachPostTransmit (Callback< void()> f)
 
void attachPreTransmit (Callback< void()> f)
 
void rxCompleteHandler ()
 
void rxHandler ()
 
void setTimeout (std::chrono::milliseconds t)
 
void timeoutHandler ()
 
void transact (uint8_t *txBuf, int txLen, Callback< void(Result)> cb)
 
 TransactionSerial (EventQueue *queue, PinName txPin, PinName rxPin, int baud, std::chrono::microseconds frameDelim, std::chrono::milliseconds rxTimeout=50ms)
 

Public Attributes

Callback< void(Result)> complete = NULL
 
std::chrono::microseconds frameDelim
 
Timeout frameTimeout
 
Callback< void()> postTransmit = NULL
 
Callback< void()> preTransmit = NULL
 
EventQueue * queue
 
uint8_t rxBuf [rxBufSize] = {}
 
size_t rxIdx = 0
 
std::chrono::milliseconds rxTimeout
 
int timeoutEvent = 0
 
Semaphore txnLock
 

Detailed Description

template<size_t rxBufSize>
struct TransactionSerial< rxBufSize >

Definition at line 5 of file ModbusMaster.h.

Member Enumeration Documentation

◆ Result

template<size_t rxBufSize>
enum TransactionSerial::Result : uint8_t
strong
Enumerator
success 
timeout 
busy 

Definition at line 6 of file ModbusMaster.h.

6  : uint8_t {
7  success = 0x00,
8  timeout = 0xE0,
9  busy = 0xE1,
10  };

Constructor & Destructor Documentation

◆ TransactionSerial()

template<size_t rxBufSize>
TransactionSerial< rxBufSize >::TransactionSerial ( EventQueue *  queue,
PinName  txPin,
PinName  rxPin,
int  baud,
std::chrono::microseconds  frameDelim,
std::chrono::milliseconds  rxTimeout = 50ms 
)
inline

Definition at line 26 of file ModbusMaster.h.

33  : SerialBase(txPin, rxPin, baud),
34  queue(queue),
35  txnLock(1, 1),
38  }

Member Function Documentation

◆ attachPostTransmit()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::attachPostTransmit ( Callback< void()>  f)
inline

Definition at line 42 of file ModbusMaster.h.

42 { postTransmit = f; };

◆ attachPreTransmit()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::attachPreTransmit ( Callback< void()>  f)
inline

Definition at line 41 of file ModbusMaster.h.

41 { preTransmit = f; };

◆ rxCompleteHandler()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::rxCompleteHandler ( )
inline

Definition at line 61 of file ModbusMaster.h.

61  {
62  attach(NULL);
63  queue->cancel(timeoutEvent);
64  txnLock.release();
66  }

◆ rxHandler()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::rxHandler ( )
inline

Definition at line 44 of file ModbusMaster.h.

44  {
45  if(!readable()) return;
46  if(rxIdx >= rxBufSize) rxIdx = 0;
47  lock();
48  rxBuf[rxIdx++] = _base_getc();
49  unlock();
50  frameTimeout.attach([this]() {
51  queue->call([this]() {
52  if(txnLock.try_acquire()) { // Guard rx outside txn
53  txnLock.release();
54  return;
55  }
57  });
58  }, frameDelim);
59  }

◆ setTimeout()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::setTimeout ( std::chrono::milliseconds  t)
inline

Definition at line 40 of file ModbusMaster.h.

40 { rxTimeout = t; };

◆ timeoutHandler()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::timeoutHandler ( )
inline

Definition at line 68 of file ModbusMaster.h.

68  {
69  attach(NULL);
70  frameTimeout.detach();
71  txnLock.release();
73  }

◆ transact()

template<size_t rxBufSize>
void TransactionSerial< rxBufSize >::transact ( uint8_t *  txBuf,
int  txLen,
Callback< void(Result)>  cb 
)
inline

Definition at line 75 of file ModbusMaster.h.

75  {
76  if (!txnLock.try_acquire()) return cb(Result::busy);
77  rxIdx = 0;
78  complete = cb;
79  timeoutEvent = queue->call_in(rxTimeout, [this]() { timeoutHandler(); });
80  if (preTransmit) preTransmit();
81  write(txBuf, txLen, [this](int e){
82  attach([this](){ rxHandler(); });
83  if(postTransmit) queue->call(postTransmit);
84  }, SERIAL_EVENT_TX_COMPLETE);
85  }

Member Data Documentation

◆ complete

template<size_t rxBufSize>
Callback<void(Result)> TransactionSerial< rxBufSize >::complete = NULL

Definition at line 24 of file ModbusMaster.h.

◆ frameDelim

template<size_t rxBufSize>
std::chrono::microseconds TransactionSerial< rxBufSize >::frameDelim

Definition at line 17 of file ModbusMaster.h.

◆ frameTimeout

template<size_t rxBufSize>
Timeout TransactionSerial< rxBufSize >::frameTimeout

Definition at line 14 of file ModbusMaster.h.

◆ postTransmit

template<size_t rxBufSize>
Callback<void()> TransactionSerial< rxBufSize >::postTransmit = NULL

Definition at line 23 of file ModbusMaster.h.

◆ preTransmit

template<size_t rxBufSize>
Callback<void()> TransactionSerial< rxBufSize >::preTransmit = NULL

Definition at line 22 of file ModbusMaster.h.

◆ queue

template<size_t rxBufSize>
EventQueue* TransactionSerial< rxBufSize >::queue

Definition at line 12 of file ModbusMaster.h.

◆ rxBuf

template<size_t rxBufSize>
uint8_t TransactionSerial< rxBufSize >::rxBuf[rxBufSize] = {}

Definition at line 19 of file ModbusMaster.h.

◆ rxIdx

template<size_t rxBufSize>
size_t TransactionSerial< rxBufSize >::rxIdx = 0

Definition at line 18 of file ModbusMaster.h.

◆ rxTimeout

template<size_t rxBufSize>
std::chrono::milliseconds TransactionSerial< rxBufSize >::rxTimeout

Definition at line 16 of file ModbusMaster.h.

◆ timeoutEvent

template<size_t rxBufSize>
int TransactionSerial< rxBufSize >::timeoutEvent = 0

Definition at line 20 of file ModbusMaster.h.

◆ txnLock

template<size_t rxBufSize>
Semaphore TransactionSerial< rxBufSize >::txnLock

Definition at line 13 of file ModbusMaster.h.


The documentation for this struct was generated from the following file:
TransactionSerial::Result::busy
@ busy
TransactionSerial::rxBuf
uint8_t rxBuf[rxBufSize]
Definition: ModbusMaster.h:19
TransactionSerial::Result::timeout
@ timeout
TransactionSerial::txnLock
Semaphore txnLock
Definition: ModbusMaster.h:13
TransactionSerial::queue
EventQueue * queue
Definition: ModbusMaster.h:12
TransactionSerial::frameDelim
std::chrono::microseconds frameDelim
Definition: ModbusMaster.h:17
TransactionSerial::rxHandler
void rxHandler()
Definition: ModbusMaster.h:44
TransactionSerial::rxIdx
size_t rxIdx
Definition: ModbusMaster.h:18
TransactionSerial::frameTimeout
Timeout frameTimeout
Definition: ModbusMaster.h:14
TransactionSerial::timeoutEvent
int timeoutEvent
Definition: ModbusMaster.h:20
TransactionSerial::preTransmit
Callback< void()> preTransmit
Definition: ModbusMaster.h:22
TransactionSerial::rxTimeout
std::chrono::milliseconds rxTimeout
Definition: ModbusMaster.h:16
TransactionSerial::timeoutHandler
void timeoutHandler()
Definition: ModbusMaster.h:68
TransactionSerial::rxCompleteHandler
void rxCompleteHandler()
Definition: ModbusMaster.h:61
TransactionSerial::Result::success
@ success
TransactionSerial::postTransmit
Callback< void()> postTransmit
Definition: ModbusMaster.h:23
TransactionSerial::complete
Callback< void(Result)> complete
Definition: ModbusMaster.h:24