agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
rtu.h File Reference
Include dependency graph for rtu.h:

Go to the source code of this file.

Data Structures

struct  _zrtos_vfs_module_modbus_rtu_inode_t
 

Macros

#define ZRTOS_VFS_MODULE_MODBUS_RTU__CFG_RESPONSE_TIMEOUT_US   1000000
 

Typedefs

typedef struct _zrtos_vfs_module_modbus_rtu_inode_t zrtos_vfs_module_modbus_rtu_inode_t
 

Enumerations

enum  zrtos_vfs_module_modbus_rtu_ioctl_t {
  ZRTOS_VFS_MODULE_MODBUS_RTU_IOCTL__GET_RX_ERROR_COUNT,
  ZRTOS_VFS_MODULE_MODBUS_RTU_IOCTL__GET_TX_ERROR_COUNT
}
 

Functions

static void zrtos_vfs_module_modbus_rtu__crc (void *callback_args, uint8_t ch)
 
static uint16_t zrtos_vfs_module_modbus_rtu__crc_str (uint8_t *data, size_t len)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__cmp_crc (uint16_t crc, uint16_t crc_msg)
 
void zrtos_vfs_module_modbus_rtu__on_recv_timeout (void *thiz)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_send (void *callback_data)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_recv (void *callback_data)
 
bool zrtos_vfs_module_modbus_rtu_inode__init (zrtos_vfs_module_modbus_rtu_inode_t *thiz, zrtos_vfs_module_uart_inode_t *uart, char *timeout_path)
 
zrtos_msg_queue_tzrtos_vfs_module_modbus_rtu_inode__get_msg_queue_in (zrtos_vfs_module_modbus_rtu_inode_t *thiz)
 
zrtos_msg_queue_tzrtos_vfs_module_modbus_rtu_inode__get_msg_queue_out (zrtos_vfs_module_modbus_rtu_inode_t *thiz)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_read (zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_write (zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_can_read (zrtos_vfs_file_t *thiz, char *path)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_can_write (zrtos_vfs_file_t *thiz, char *path)
 
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_ioctl (zrtos_vfs_file_t *thiz, char *path, int request, va_list args)
 
 ZRTOS_VFS_PLUGIN__INIT (modbus_rtu, ZRTOS_VFS_PLUGIN__0_ON_OPEN_DEFAULT() ZRTOS_VFS_PLUGIN__1_ON_CLOSE_DEFAULT() ZRTOS_VFS_PLUGIN__2_ON_MOUNT_DEFAULT() ZRTOS_VFS_PLUGIN__3_ON_UMOUNT_DEFAULT() ZRTOS_VFS_PLUGIN__4_ON_READ(zrtos_vfs_module_modbus_rtu__on_read) ZRTOS_VFS_PLUGIN__5_ON_WRITE(zrtos_vfs_module_modbus_rtu__on_write) ZRTOS_VFS_PLUGIN__6_ON_CAN_READ(zrtos_vfs_module_modbus_rtu__on_can_read) ZRTOS_VFS_PLUGIN__7_ON_CAN_WRITE(zrtos_vfs_module_modbus_rtu__on_can_write) ZRTOS_VFS_PLUGIN__8_ON_SEEK_DEFAULT() ZRTOS_VFS_PLUGIN__9_ON_IOCTL(zrtos_vfs_module_modbus_rtu__on_ioctl))
 

Macro Definition Documentation

◆ ZRTOS_VFS_MODULE_MODBUS_RTU__CFG_RESPONSE_TIMEOUT_US

#define ZRTOS_VFS_MODULE_MODBUS_RTU__CFG_RESPONSE_TIMEOUT_US   1000000

Definition at line 23 of file rtu.h.

Typedef Documentation

◆ zrtos_vfs_module_modbus_rtu_inode_t

Enumeration Type Documentation

◆ zrtos_vfs_module_modbus_rtu_ioctl_t

Enumerator
ZRTOS_VFS_MODULE_MODBUS_RTU_IOCTL__GET_RX_ERROR_COUNT 
ZRTOS_VFS_MODULE_MODBUS_RTU_IOCTL__GET_TX_ERROR_COUNT 

Definition at line 26 of file rtu.h.

Function Documentation

◆ zrtos_vfs_module_modbus_rtu__cmp_crc()

zrtos_error_t zrtos_vfs_module_modbus_rtu__cmp_crc ( uint16_t  crc,
uint16_t  crc_msg 
)

Definition at line 68 of file rtu.h.

71  {
72  return crc == crc_msg
75  ;
76 }
Successful program execution status.
Definition: error.h:22
I/O error.
Definition: error.h:29
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__crc()

static void zrtos_vfs_module_modbus_rtu__crc ( void *  callback_args,
uint8_t  ch 
)
static

Definition at line 43 of file rtu.h.

43  {
44  uint16_t *crc_ptr = ZRTOS_CAST(uint16_t*,callback_args);
45  uint16_t crc = *crc_ptr;
46 
47  crc ^= (uint16_t)ch;
48 
49  for(size_t i = 8; i--;){
50  bool tmp = (crc & 0x0001) != 0;
51  crc >>= 1;
52  if(tmp){
53  crc ^= 0xA001;
54  }
55  }
56 
57  *crc_ptr = crc;
58 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__crc_str()

static uint16_t zrtos_vfs_module_modbus_rtu__crc_str ( uint8_t data,
size_t  len 
)
static

Definition at line 60 of file rtu.h.

60  {
61  uint16_t crc = 0xffff;
62  while(len--){
64  }
65  return crc;
66 }
static void zrtos_vfs_module_modbus_rtu__crc(void *callback_args, uint8_t ch)
Definition: rtu.h:43
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_can_read()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_can_read ( zrtos_vfs_file_t thiz,
char *  path 
)

Definition at line 332 of file rtu.h.

335  {
339  thiz
340  )
341  );
342 
346  ;
347 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
Try again.
Definition: error.h:35
zrtos_msg_queue_t msg_queue_in
Definition: rtu.h:32
bool zrtos_msg_queue__is_empty(zrtos_msg_queue_t *thiz)
Definition: msg_queue.h:55
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
Successful program execution status.
Definition: error.h:22
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_can_write()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_can_write ( zrtos_vfs_file_t thiz,
char *  path 
)

Definition at line 349 of file rtu.h.

352  {
353  return ZRTOS_ERROR__SUCCESS;
354 }
Successful program execution status.
Definition: error.h:22
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_ioctl()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_ioctl ( zrtos_vfs_file_t thiz,
char *  path,
int  request,
va_list  args 
)

Definition at line 356 of file rtu.h.

361  {
366  thiz
367  )
368  );
369 
372  ,request
373  )){
376  args
378  );
379  *ret = &mod->rx_error_count;
380  break;
383  args
385  );
386  *ret = &mod->tx_error_count;
387  break;
388  default:
389  ret = ZRTOS_ERROR__INVAL;
390  break;
391  }
392 
393  return ret;
394 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
#define ZRTOS_CAST__REINTERPRET(type, value)
Definition: cast.h:19
zrtos_error_count_t rx_error_count
Definition: rtu.h:34
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
Successful program execution status.
Definition: error.h:22
Invalid argument.
Definition: error.h:46
zrtos_error_count_t tx_error_count
Definition: rtu.h:35
zrtos_vfs_module_modbus_rtu_ioctl_t
Definition: rtu.h:26
zrtos_error_t
Definition: error.h:20
#define zrtos_va__arg(ap, type)
Definition: va.h:21
Here is the call graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_read()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_read ( zrtos_vfs_file_t thiz,
char *  path,
void *  buf,
size_t  len,
zrtos_vfs_offset_t  offset,
size_t out 
)

Definition at line 253 of file rtu.h.

260  {
261  zrtos_error_t ret;
265  thiz
266  )
267  );
268 
269  ret = zrtos_msg_queue__get(
270  &mod->msg_queue_in
271  ,buf
272  ,len
273  ,out
274  );
275 
276  return ret;
277 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
zrtos_msg_queue_t msg_queue_in
Definition: rtu.h:32
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
zrtos_error_t
Definition: error.h:20
zrtos_error_t zrtos_msg_queue__get(zrtos_msg_queue_t *thiz, void *data, size_t len, size_t *outlen)
Definition: msg_queue.h:140
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_recv()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_recv ( void *  callback_data)

Definition at line 167 of file rtu.h.

169  {
170  zrtos_error_t ret;
173  ,callback_data
174  );
175 
176  ret = zrtos_vfs_fd__ioctl(
177  thiz->timeout_fd
178  ,(char*)""
180  );
181 
182  return ret;
183 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
zrtos_error_t zrtos_vfs_fd__ioctl(zrtos_vfs_fd_t thiz, char *path, int request,...)
Definition: vfs_fd.h:254
zrtos_error_t
Definition: error.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_recv_timeout()

void zrtos_vfs_module_modbus_rtu__on_recv_timeout ( void *  thiz)

Definition at line 78 of file rtu.h.

80  {
84  thiz
85  )
86  );
89  size_t cbuffer_length = zrtos_cbuffer__get_length(cbuffer);
90 
91  if(cbuffer_length > 0){
92  if(cbuffer_length >= 4){
93  uint16_t crc = 0xffff;
94  uint16_t crc_msg;
95  zrtos_error_t ret;
97 
99 
101  cbuffer
102  ,cbuffer_length-2
104  ,&crc
105  );
106 
108  &mod->msg_queue_in
109  ,cbuffer_length-2
110  )))
112  &mod->msg_queue_in
113  ,cbuffer
114  ,cbuffer_length-2
115  )))
117  cbuffer
118  ,crc_msg
119  ,2
120  ,&outlen
121  )))
123  crc
124  ,crc_msg
125  )))
126  ){
127  break;
128  }else{
130  &mod->msg_queue_in
131  ,&txn
132  );
133  }
134  }else{
135  ret = ZRTOS_ERROR__IO;
136  }
137 
139  }
140 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
void zrtos_msg_queue__start_write_transaction(zrtos_msg_queue_t *thiz, zrtos_msg_queue_write_transaction_t *txn)
Definition: msg_queue.h:33
zrtos_error_t zrtos_msg_queue__put_length(zrtos_msg_queue_t *thiz, size_t len)
Definition: msg_queue.h:59
zrtos_cbuffer_t * zrtos_vfs_module_uart_inode__get_cbuffer_in(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:244
zrtos_error_t zrtos_cbuffer__get_ex(zrtos_cbuffer_t *thiz, void *data, size_t len, size_t *outlen)
Definition: cbuffer.h:336
zrtos_error_t zrtos_vfs_module_modbus_rtu__cmp_crc(uint16_t crc, uint16_t crc_msg)
Definition: rtu.h:68
zrtos_error_t zrtos_error_count__add(zrtos_error_count_t *thiz, zrtos_error_t err)
Definition: error_count.h:30
zrtos_error_count_t rx_error_count
Definition: rtu.h:34
zrtos_msg_queue_t msg_queue_in
Definition: rtu.h:32
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
bool zrtos_error__is_success(zrtos_error_t thiz)
Definition: error.h:152
size_t zrtos_cbuffer__get_length(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:401
void zrtos_msg_queue__rollback_write_transaction(zrtos_msg_queue_t *thiz, zrtos_msg_queue_write_transaction_t *txn)
Definition: msg_queue.h:44
static void zrtos_vfs_module_modbus_rtu__crc(void *callback_args, uint8_t ch)
Definition: rtu.h:43
zrtos_vfs_module_uart_inode_t * uart
Definition: rtu.h:36
zrtos_error_t zrtos_msg_queue__put_cbuffer_data(zrtos_msg_queue_t *thiz, zrtos_cbuffer_t *data, size_t length)
Definition: msg_queue.h:100
I/O error.
Definition: error.h:29
zrtos_error_t
Definition: error.h:20
zrtos_error_t zrtos_cbuffer__hash(zrtos_cbuffer_t *thiz, size_t length, void(*callback)(void *callback_args, uint8_t ch), void *callback_args)
Definition: cbuffer.h:245
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_send()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_send ( void *  callback_data)

Definition at line 142 of file rtu.h.

144  {
148  ,callback_data
149  );
150  size_t outlen;
151 
156  &thiz->msg_queue_out
157  ,thiz->uart->cbuffer_out
159  ,&outlen
160  );
161  zrtos_error_count__add(&mod->tx_error_count,ret);
162  }
163 
164  return ret;
165 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
bool zrtos_cbuffer__is_empty(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:357
zrtos_error_t zrtos_msg_queue__pipe_next_message_to_cbuffer(zrtos_msg_queue_t *thiz, zrtos_cbuffer_t *dest, size_t len, size_t *outlen)
Definition: msg_queue.h:180
void zrtos_arch__delay_microseconds(uint16_t us)
Definition: atmega2560.h:296
zrtos_error_t zrtos_error_count__add(zrtos_error_count_t *thiz, zrtos_error_t err)
Definition: error_count.h:30
#define ZRTOS_TYPES__SIZE_MAX
Definition: types.h:170
bool zrtos_msg_queue__is_empty(zrtos_msg_queue_t *thiz)
Definition: msg_queue.h:55
Successful program execution status.
Definition: error.h:22
zrtos_msg_queue_t msg_queue_out
Definition: rtu.h:33
zrtos_cbuffer_t cbuffer_out
Definition: uart/uart.h:204
zrtos_vfs_module_timeout_microseconds_t timeout_frame_us
Definition: rtu.h:38
zrtos_vfs_module_uart_inode_t * uart
Definition: rtu.h:36
zrtos_error_t
Definition: error.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu__on_write()

zrtos_error_t zrtos_vfs_module_modbus_rtu__on_write ( zrtos_vfs_file_t thiz,
char *  path,
void *  buf,
size_t  len,
zrtos_vfs_offset_t  offset,
size_t out 
)

Definition at line 279 of file rtu.h.

286  {
287  zrtos_error_t ret;
291  thiz
292  )
293  );
294  uint16_t crc = zrtos_vfs_module_modbus_rtu__crc_str(buf,len);
296 
298 
300  &mod->msg_queue_out
301  ,buf
302  ,len+2
303  ,out
304  )))
306  &mod->msg_queue_out
307  ,buf
308  ,len
309  ,out
310  )))
312  &mod->msg_queue_out
313  ,&crc
314  ,2
315  ,out
316  )))
318  &mod->msg_queue_out
319  )))
320  ){
321  ret = rtos_vfs_module_modbus_rtu__on_send(mod);
322  }else{
324  &mod->msg_queue_out
325  ,&txn
326  );
327  }
328 
329  return ret;
330 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
void zrtos_msg_queue__start_write_transaction(zrtos_msg_queue_t *thiz, zrtos_msg_queue_write_transaction_t *txn)
Definition: msg_queue.h:33
static uint16_t zrtos_vfs_module_modbus_rtu__crc_str(uint8_t *data, size_t len)
Definition: rtu.h:60
zrtos_error_t zrtos_msg_queue__put_length(zrtos_msg_queue_t *thiz, size_t len)
Definition: msg_queue.h:59
zrtos_error_t zrtos_msg_queue__put_data(zrtos_msg_queue_t *thiz, void *data, size_t len)
Definition: msg_queue.h:77
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
bool zrtos_error__is_success(zrtos_error_t thiz)
Definition: error.h:152
zrtos_msg_queue_t msg_queue_out
Definition: rtu.h:33
void zrtos_msg_queue__rollback_write_transaction(zrtos_msg_queue_t *thiz, zrtos_msg_queue_write_transaction_t *txn)
Definition: msg_queue.h:44
zrtos_error_t zrtos_msg_queue__put_end(zrtos_msg_queue_t *thiz)
Definition: msg_queue.h:93
zrtos_error_t
Definition: error.h:20
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_vfs_module_modbus_rtu_inode__get_msg_queue_in()

zrtos_msg_queue_t* zrtos_vfs_module_modbus_rtu_inode__get_msg_queue_in ( zrtos_vfs_module_modbus_rtu_inode_t thiz)

Definition at line 241 of file rtu.h.

243  {
244  return &thiz->msg_queue_in;
245 }
zrtos_msg_queue_t msg_queue_in
Definition: rtu.h:32

◆ zrtos_vfs_module_modbus_rtu_inode__get_msg_queue_out()

zrtos_msg_queue_t* zrtos_vfs_module_modbus_rtu_inode__get_msg_queue_out ( zrtos_vfs_module_modbus_rtu_inode_t thiz)

Definition at line 247 of file rtu.h.

249  {
250  return &thiz->msg_queue_out;
251 }
zrtos_msg_queue_t msg_queue_out
Definition: rtu.h:33

◆ zrtos_vfs_module_modbus_rtu_inode__init()

bool zrtos_vfs_module_modbus_rtu_inode__init ( zrtos_vfs_module_modbus_rtu_inode_t thiz,
zrtos_vfs_module_uart_inode_t uart,
char *  timeout_path 
)

Definition at line 185 of file rtu.h.

189  {
190  zrtos_error_t ret;
192 
193  thiz->uart = uart;
196  thiz->uart->callback_data = thiz;
199  1750
200  ,char_transmission_us*3+char_transmission_us/2
201  );
202 
203  ret = zrtos_vfs_fd__open(timeout_path,&thiz->timeout_fd,0);
204  if(zrtos_error__is_success(ret)){
205  ret = zrtos_vfs_fd__ioctl(
206  thiz->timeout_fd
207  ,(char*)""
210  ,thiz
211  );
212  if(zrtos_error__is_success(ret)){
213  ret = zrtos_vfs_fd__ioctl(
214  thiz->timeout_fd
215  ,(char*)""
218  ,thiz
219  );
220  if(zrtos_error__is_success(ret)){
223  if(zrtos_msg_queue__init(&thiz->msg_queue_in)){
224  if(zrtos_msg_queue__init(&thiz->msg_queue_out)){
225  return true;
226  }
227  zrtos_msg_queue__deinit(&thiz->msg_queue_in);
228  }
230  }
232  }
234  }
235  }
236  }
237 
238  return false;
239 }
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_recv(void *callback_data)
Definition: rtu.h:167
zrtos_error_t zrtos_vfs_fd__open(char *path, zrtos_vfs_fd_t *thiz, void *file_ctx)
Definition: vfs_fd.h:70
zrtos_error_t zrtos_vfs_fd__close(zrtos_vfs_fd_t thiz)
Definition: vfs_fd.h:77
zrtos_vfs_module_uart_callback_t on_send
Definition: uart/uart.h:209
void zrtos_vfs_module_modbus_rtu__on_recv_timeout(void *thiz)
Definition: rtu.h:78
zrtos_error_t zrtos_vfs_fd__ioctl(zrtos_vfs_fd_t thiz, char *path, int request,...)
Definition: vfs_fd.h:254
bool zrtos_error_count__init(zrtos_error_count_t *thiz)
Definition: error_count.h:20
zrtos_error_t zrtos_vfs_module_modbus_rtu__on_send(void *callback_data)
Definition: rtu.h:142
zrtos_error_count_t rx_error_count
Definition: rtu.h:34
zrtos_msg_queue_t msg_queue_in
Definition: rtu.h:32
bool zrtos_error__is_success(zrtos_error_t thiz)
Definition: error.h:152
#define ZRTOS_TYPES__MIN(a, b)
Definition: types.h:78
zrtos_vfs_module_uart_callback_t on_recv
Definition: uart/uart.h:210
zrtos_msg_queue_t msg_queue_out
Definition: rtu.h:33
zrtos_vfs_module_timeout_microseconds_t timeout_frame_us
Definition: rtu.h:38
zrtos_vfs_module_timeout_microseconds_t timeout_response_us
Definition: rtu.h:39
zrtos_vfs_module_uart_inode_t * uart
Definition: rtu.h:36
zrtos_error_count_t tx_error_count
Definition: rtu.h:35
uint16_t zrtos_vfs_module_timeout_microseconds_t
Definition: timeout.h:24
#define ZRTOS_VFS_MODULE_MODBUS_RTU__CFG_RESPONSE_TIMEOUT_US
Definition: rtu.h:23
void zrtos_error_count__deinit(zrtos_error_count_t *thiz)
Definition: error_count.h:26
zrtos_error_t
Definition: error.h:20
zrtos_vfs_module_timeout_microseconds_t zrtos_vfs_module_uart__get_char_transmission_time(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:282
Here is the call graph for this function:

◆ ZRTOS_VFS_PLUGIN__INIT()