agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
uart/uart.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 ykat UG (haftungsbeschraenkt) - All Rights Reserved
3  *
4  * Permission for non-commercial use is hereby granted,
5  * free of charge, without warranty of any kind.
6  */
7 #ifndef ZRTOS_VFS_MODULE_UART_H
8 #define ZRTOS_VFS_MODULE_UART_H
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 
14 #include <zrtos/vfs_plugin.h>
15 #include <zrtos/cbuffer.h>
16 #include <zrtos/binary.h>
17 #include <zrtos/types.h>
18 #include <zrtos/error_count.h>
19 #include <zrtos/va.h>
20 
22 
23 //#define ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED
24 
25 typedef enum{
29 
30 typedef enum{
32 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED
33  ,ZRTOS_VFS_MODULE_UART_BAUDRATE__DOUBLE_SPEED = 1
34 #endif
48 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED
49  ,ZRTOS_VFS_MODULE_UART_BAUDRATE__MASK = (~((uint32_t)1))
50 #endif
53 
54 typedef enum{
66 
71  )
76  )
81  )
86  )
87 
92  )
97  )
102  )
107  )
108 
113  )
118  )
123  )
128  )
129 
134  )
139  )
144  )
149  )
150 
155  )
160  )
165  )
170  )
171 
176  )
181  )
186  )
191  )
192 
195 
197 
199  struct _zrtos_vfs_module_uart_inode_t *args
200 );
201 
208  zrtos_vfs_module_uart_mode_t mode;
213 
215  return ZRTOS_ERROR__SUCCESS;
216 }
217 
221  ,zrtos_vfs_module_uart_mode_t mode
222 ){
223  thiz->baudrate = baudrate;
224  thiz->mode = mode;
227 
230  if(zrtos_cbuffer__init(&thiz->cbuffer_in)){
231  if(zrtos_cbuffer__init(&thiz->cbuffer_out)){
232  return true;
233  }
235  }
237  }
239  }
240 
241  return false;
242 }
243 
246 ){
247  return &thiz->cbuffer_in;
248 }
249 
252 ){
253  return &thiz->cbuffer_out;
254 }
255 
258 ){
259 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED
260  return thiz->baudrate & ZRTOS_VFS_MODULE_UART_BAUDRATE__MASK;
261 #else
262  return thiz->baudrate;
263 #endif
264 }
265 
268 ){
269 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED
270  return (thiz->baudrate & ZRTOS_VFS_MODULE_UART_BAUDRATE__DOUBLE_SPEED) > 0;
271 #else
272  return false;
273 #endif
274 }
275 
276 zrtos_vfs_module_uart_mode_t zrtos_vfs_module_uart_inode__get_mode(
278 ){
279  return thiz->mode;
280 }
281 
284 ){
285  return 11 * 1000000 / (
287  * (
289  ? 2
290  : 1
291  )
292  );
293 }
294 
296  zrtos_vfs_file_t *thiz
297  ,char *path
298  ,void *buf
299  ,size_t len
300  ,zrtos_vfs_offset_t offset
301  ,size_t *out
302 ){
306  thiz
307  )
308  );
309  return zrtos_cbuffer__get_ex(
310  &mod->cbuffer_in
311  ,buf
312  ,len
313  ,out
314  );
315 }
316 
318  zrtos_vfs_file_t *thiz
319  ,char *path
320  ,void *buf
321  ,size_t len
322  ,zrtos_vfs_offset_t offset
323  ,size_t *out
324 ){
328  thiz
329  )
330  );
331  return zrtos_cbuffer__put_ex(
332  &mod->cbuffer_out
333  ,1
334  ,out
335  ,buf
336  ,len
337  );
338 }
339 
341  zrtos_vfs_file_t *thiz
342 ){
346  thiz
347  )
348  );
349  return zrtos_cbuffer__can_read(&mod->cbuffer_in);
350 }
351 
353  zrtos_vfs_file_t *thiz
354 ){
358  thiz
359  )
360  );
362 }
363 
365  zrtos_vfs_file_t *thiz
366  ,char *path
367  ,int request
368  ,va_list args
369 ){
374  thiz
375  )
376  );
377  zrtos_error_count_t **out;
378 
379  switch(ZRTOS_CAST(
380  zrtos_vfs_module_uart_ioctl_t
381  ,request
382  )){
384  out = zrtos_va__arg_ptr(
385  args
387  );
388  *out = &mod->rx_error_count;
389  break;
391  out = zrtos_va__arg_ptr(
392  args
394  );
395  *out = &mod->tx_error_count;
396  break;
397  default:
398  ret = ZRTOS_ERROR__INVAL;
399  break;
400  }
401 
402  return ret;
403 }
404 /*
405 ZRTOS_VFS_PLUGIN__INIT(uart,
406  ZRTOS_VFS_PLUGIN__ON_READ(zrtos_vfs_module_uart__on_read)
407  ZRTOS_VFS_PLUGIN__ON_WRITE(zrtos_vfs_module_uart__on_write)
408  ZRTOS_VFS_PLUGIN__ON_CAN_READ(zrtos_vfs_module_uart__on_can_read)
409  ZRTOS_VFS_PLUGIN__ON_CAN_WRITE(zrtos_vfs_module_uart__on_can_write)
410 );
411 */
412 
413 #ifdef __cplusplus
414 }
415 #endif
416 #endif
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
#define ZRTOS_TYPES__UINT32_MIN
Definition: types.h:185
zrtos_vfs_module_uart_baudrate_t baudrate
Definition: uart/uart.h:207
#define ZRTOS_TYPES__UINT8_MIN
Definition: types.h:181
struct _zrtos_vfs_module_uart_inode_t zrtos_vfs_module_uart_inode_t
size_t zrtos_vfs_offset_t
Definition: vfs_plugin.h:49
#define ZRTOS_BINARY__00000111
Definition: binary.h:54
zrtos_error_t zrtos_cbuffer__can_read(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:373
zrtos_vfs_module_uart_callback_t on_send
Definition: uart/uart.h:209
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_uart__on_read(zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
Definition: uart/uart.h:295
zrtos_vfs_module_uart_mode_t mode
Definition: uart/uart.h:208
void zrtos_cbuffer__deinit(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:140
#define ZRTOS_BINARY__00000011
Definition: binary.h:50
#define ZRTOS_BINARY__00001000
Definition: binary.h:55
#define ZRTOS_BINARY__00000001
Definition: binary.h:48
zrtos_error_t zrtos_vfs_module_uart__on_can_write(zrtos_vfs_file_t *thiz)
Definition: uart/uart.h:352
zrtos_vfs_module_uart_ioctl_t
Definition: uart/uart.h:25
zrtos_vfs_module_uart_mode_t
Definition: uart/uart.h:54
bool zrtos_error_count__init(zrtos_error_count_t *thiz)
Definition: error_count.h:20
bool zrtos_vfs_module_uart_inode__is_double_speed(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:266
zrtos_error_count_t rx_error_count
Definition: uart/uart.h:205
zrtos_error_t(* zrtos_vfs_module_uart_callback_t)(struct _zrtos_vfs_module_uart_inode_t *args)
Definition: uart/uart.h:198
zrtos_error_t zrtos_vfs_module_uart__on_can_read(zrtos_vfs_file_t *thiz)
Definition: uart/uart.h:340
bool zrtos_vfs_module_uart_inode__init(zrtos_vfs_module_uart_inode_t *thiz, zrtos_vfs_module_uart_baudrate_t baudrate, zrtos_vfs_module_uart_mode_t mode)
Definition: uart/uart.h:218
zrtos_vfs_module_uart_mode_t zrtos_vfs_module_uart_inode__get_mode(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:276
#define ZRTOS_BINARY__00100000
Definition: binary.h:79
void * zrtos_vfs_file__get_inode_data(zrtos_vfs_file_t *thiz)
Definition: vfs_file.h:191
zrtos_error_t zrtos_vfs_module_uart__on_write(zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
Definition: uart/uart.h:317
zrtos_vfs_module_uart_callback_t on_recv
Definition: uart/uart.h:210
Successful program execution status.
Definition: error.h:22
zrtos_cbuffer_t cbuffer_out
Definition: uart/uart.h:204
#define zrtos_va__arg_ptr(ap, type)
Definition: va.h:26
Invalid argument.
Definition: error.h:46
zrtos_vfs_module_uart_baudrate_t
Definition: uart/uart.h:30
zrtos_error_t zrtos_vfs_module_uart_inode__callback(zrtos_vfs_module_uart_inode_t *args)
Definition: uart/uart.h:214
#define ZRTOS_BINARY__00000010
Definition: binary.h:49
zrtos_error_t zrtos_cbuffer__put_ex(zrtos_cbuffer_t *thiz, size_t len, size_t *outlen,...)
Definition: cbuffer.h:278
zrtos_cbuffer_t cbuffer_in
Definition: uart/uart.h:203
uint16_t zrtos_vfs_module_timeout_microseconds_t
Definition: timeout.h:24
#define ZRTOS_BINARY__00110000
Definition: binary.h:95
bool zrtos_cbuffer__init(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:115
zrtos_vfs_module_uart_baudrate_t zrtos_vfs_module_uart_inode__get_baudrate(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:256
zrtos_error_t zrtos_vfs_module_uart__on_ioctl(zrtos_vfs_file_t *thiz, char *path, int request, va_list args)
Definition: uart/uart.h:364
void zrtos_error_count__deinit(zrtos_error_count_t *thiz)
Definition: error_count.h:26
#define ZRTOS_TYPES__UINT8_MAX
Definition: types.h:182
zrtos_error_t
Definition: error.h:20
#define ZRTOS_TYPES__UINT32_MAX
Definition: types.h:186
zrtos_error_t zrtos_cbuffer__can_write(zrtos_cbuffer_t *thiz)
Definition: cbuffer.h:415
#define ZRTOS_BINARY__00000000
Definition: binary.h:47
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
zrtos_error_count_t tx_error_count
Definition: uart/uart.h:206
zrtos_cbuffer_t * zrtos_vfs_module_uart_inode__get_cbuffer_out(zrtos_vfs_module_uart_inode_t *thiz)
Definition: uart/uart.h:250