Modbus Vault v1.0
Loading...
Searching...
No Matches
rs485_driver.h File Reference

RS485 passive sniffer (RX-only) driver. More...

#include "driver/uart.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
Include dependency graph for rs485_driver.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  rs485_driver_event_t
 RS485 driver event structure. More...
 
struct  rs485_driver_config_t
 RS485 driver configuration structure. More...
 
struct  rs485_driver_t
 RS485 driver type structure. More...
 

Macros

#define RS485_DRIVER_TASK_NAME   ("RS485_DRV")
 
#define RS485_DRIVER_TASK_STACK_DEPTH   (4096U)
 
#define RS485_DRIVER_TASK_PRIORITY   (16U)
 
#define RS485_DRIVER_TASK_CPU_AFFINITY   (0U)
 
#define RS485_DRIVER_TASK_BUFFER_SIZE   (256U)
 
#define RS485_DRIVER_TASK_NOTIFY_STOP_BIT   (1U << 0U)
 

Enumerations

enum  rs485_driver_event_flags_t { RS485_DRIVER_EVENT_FLAG_DATA = (1U << 0) , RS485_DRIVER_EVENT_FLAG_RX_TIMEOUT = (1U << 1) , RS485_DRIVER_EVENT_FLAG_OVERFLOW = (1U << 2) , RS485_DRIVER_EVENT_FLAG_PARITY = (1U << 3) }
 RS485 driver event flags enum. More...
 

Functions

esp_err_t rs485_driver_init (rs485_driver_t *rs485_drv_ptr, const rs485_driver_config_t *config_ptr)
 Initialize RS485 driver.
 
uint8_t rs485_driver_get_bits_count (rs485_driver_t *rs485_drv_ptr)
 Get frame bits count.
 
void rs485_driver_deinit (rs485_driver_t *rs485_drv_ptr)
 De-initialize RS485 driver.
 

Detailed Description

RS485 passive sniffer (RX-only) driver.

Author
Abanoub Salah
  • Does not transmit or control DE/RE lines
  • Passively listens to bus traffic using UART RX
  • Provide a task that provide events as they come to provided callback

Macro Definition Documentation

◆ RS485_DRIVER_TASK_BUFFER_SIZE

#define RS485_DRIVER_TASK_BUFFER_SIZE   (256U)

Event buffer size

◆ RS485_DRIVER_TASK_CPU_AFFINITY

#define RS485_DRIVER_TASK_CPU_AFFINITY   (0U)

CPU affinity

◆ RS485_DRIVER_TASK_NAME

#define RS485_DRIVER_TASK_NAME   ("RS485_DRV")

Task name

◆ RS485_DRIVER_TASK_NOTIFY_STOP_BIT

#define RS485_DRIVER_TASK_NOTIFY_STOP_BIT   (1U << 0U)

Task stop bit

◆ RS485_DRIVER_TASK_PRIORITY

#define RS485_DRIVER_TASK_PRIORITY   (16U)

Priority

◆ RS485_DRIVER_TASK_STACK_DEPTH

#define RS485_DRIVER_TASK_STACK_DEPTH   (4096U)

Stack depth

Enumeration Type Documentation

◆ rs485_driver_event_flags_t

RS485 driver event flags enum.

Enumerator
RS485_DRIVER_EVENT_FLAG_DATA 

Data flag

RS485_DRIVER_EVENT_FLAG_RX_TIMEOUT 

Rx timeout flag

RS485_DRIVER_EVENT_FLAG_OVERFLOW 

Overflow flag

RS485_DRIVER_EVENT_FLAG_PARITY 

Parity flag

Function Documentation

◆ rs485_driver_deinit()

void rs485_driver_deinit ( rs485_driver_t rs485_drv_ptr)

De-initialize RS485 driver.

Parameters
rs485_drv_ptrPointer to RS485 driver structure
Here is the caller graph for this function:

◆ rs485_driver_get_bits_count()

uint8_t rs485_driver_get_bits_count ( rs485_driver_t rs485_drv_ptr)

Get frame bits count.

Parameters
rs485_drv_ptrPointer to RS485 driver structure
Returns
uint8_t Frame bits count
Note
Only call this function after driver initialization otherwise return is unpredictable
Here is the caller graph for this function:

◆ rs485_driver_init()

esp_err_t rs485_driver_init ( rs485_driver_t rs485_drv_ptr,
const rs485_driver_config_t config_ptr 
)

Initialize RS485 driver.

Parameters
rs485_drv_ptrPointer to RS485 driver structure
config_ptrPointer to RS485 driver configuration structure
Returns
esp_err_t Initialize result
Return values
ESP_OKInitialize success
ESP_FAILInitialize fail
ESP_ERR_INVALID_ARGProvided invalid argument(s)
ESP_ERR_NO_MEMNo available memory for resource allocation
Note
  • Driver doesn't use Tx pin as it act as a sniffer only
    • Pin is set as UART_PIN_NO_CHANGE
    • Mode is set to UART_MODE_RS485_APP_CTRL
UART RX FIFO FULL threshold is set to 128. For typical Modbus 8 to 256 Bytes is typical 128 characters is a practical value in-between and less than driver's event data buffer
UART RX timeout threshold is set to 4 closest integer to 3.5 characters Inter-frame timeout of practical Modbus transaction
Here is the call graph for this function:
Here is the caller graph for this function: