RUI3 (RAK Unified Interface 3) - RAK4631
udrv_serial.h File Reference

Provide a hardware independent serial driver layer for API layer to use. More...

Go to the source code of this file.

Data Structures

struct  udrv_serial_api
 

Macros

#define SERIAL_NO_TIMEOUT   UINT32_MAX
 

Typedefs

typedef enum _SERIAL_STATE SERIAL_STATE
 
typedef enum _SERIAL_EVENT SERIAL_EVENT
 
typedef enum _SERIAL_WIRE_MODE_E SERIAL_WIRE_MODE_E
 
typedef enum _SERIAL_WORD_LEN_E SERIAL_WORD_LEN_E
 
typedef enum _SERIAL_STOP_BIT_E SERIAL_STOP_BIT_E
 
typedef enum _SERIAL_PARITY_E SERIAL_PARITY_E
 
typedef enum _SERIAL_PORT SERIAL_PORT
 
typedef enum _SERIAL_WLOCK_STATE SERIAL_WLOCK_STATE
 
typedef void(* SERIAL_CLI_HANDLER) (SERIAL_PORT, void *)
 

Enumerations

enum  _SERIAL_STATE {
  SERIAL_STATE_DEFAULT = 0,
  SERIAL_STATE_AT_START_1 = 1,
  SERIAL_STATE_AT_START_2 = 2,
  SERIAL_STATE_AT_START_3 = 3,
  SERIAL_STATE_BOOT_1 = 4,
  SERIAL_STATE_BOOT_2 = 5,
  SERIAL_STATE_BOOT_3 = 6,
  SERIAL_STATE_BOOT_4 = 7,
  SERIAL_STATE_ATM_1 = 8,
  SERIAL_STATE_ATM_2 = 9,
  SERIAL_STATE_ATM_3 = 10,
  SERIAL_STATE_AT_END = 11,
  SERIAL_STATE_MAX = 12
}
 
enum  _SERIAL_EVENT {
  SERIAL_EVENT_RECV_A_A_CHAR = 0,
  SERIAL_EVENT_RECV_A_T_CHAR = 1,
  SERIAL_EVENT_RECV_A_PLUS_CHAR = 2,
  SERIAL_EVENT_RECV_A_B_CHAR = 3,
  SERIAL_EVENT_RECV_A_O_CHAR = 4,
  SERIAL_EVENT_RECV_A_M_CHAR = 5,
  SERIAL_EVENT_RECV_CRLF = 6,
  SERIAL_EVENT_RECV_OTHER_CHAR = 7,
  SERIAL_EVENT_MAX = 8
}
 
enum  _SERIAL_WIRE_MODE_E {
  SERIAL_TWO_WIRE_NORMAL_MODE = 0x0,
  SERIAL_ONE_WIRE_TX_PIN_MODE = 0x1,
  SERIAL_ONE_WIRE_RX_PIN_MODE = 0x2
}
 
enum  _SERIAL_WORD_LEN_E {
  SERIAL_WORD_LEN_5 = 0x0,
  SERIAL_WORD_LEN_6 = 0x1,
  SERIAL_WORD_LEN_7 = 0x2,
  SERIAL_WORD_LEN_8 = 0x3
}
 
enum  _SERIAL_STOP_BIT_E {
  SERIAL_STOP_BIT_1 = 0x0,
  SERIAL_STOP_BIT_2 = 0x1
}
 
enum  _SERIAL_PARITY_E {
  SERIAL_PARITY_DISABLE = 0x0,
  SERIAL_PARITY_ODD = 0x1,
  SERIAL_PARITY_EVEN = 0x3,
  SERIAL_PARITY_FORCED1 = 0x5,
  SERIAL_PARITY_FORCED0 = 0x7
}
 
enum  _SERIAL_PORT {
  SERIAL_UART0 = 0,
  SERIAL_UART1,
  SERIAL_UART2,
  SERIAL_BLE0,
  SERIAL_NFC,
  SERIAL_MAX
}
 
enum  _SERIAL_WLOCK_STATE {
  SERIAL_WLOCK_OPEN = 0,
  SERIAL_WLOCK_LOCKED = 1,
  SERIAL_WLOCK_DISABLED = 2
}
 

Functions

void udrv_serial_register_onewire_handler (SERIAL_CLI_HANDLER handler)
 This API is used to register a one-wire handler. More...
 
bool is_udrv_serial_initialized (SERIAL_PORT Port)
 This API is used to check if a specified serial port is initialized. More...
 
void udrv_serial_init (SERIAL_PORT Port, uint32_t BaudRate, SERIAL_WORD_LEN_E DataBits, SERIAL_STOP_BIT_E StopBits, SERIAL_PARITY_E Parity, SERIAL_WIRE_MODE_E WireMode)
 This API is used to initialize a specified serial port. More...
 
void udrv_serial_deinit (SERIAL_PORT Port)
 This API is used to deinitialize a specified serial port. More...
 
int32_t udrv_serial_write (SERIAL_PORT Port, uint8_t const *Buffer, int32_t NumberOfBytes)
 
int32_t udrv_serial_printf (SERIAL_PORT Port, const char *fmt,...)
 This API is like printf() to format any kinds of data type into a byte sequence, and write it to a specified serial port. More...
 
int32_t udrv_serial_log_printf (const char *fmt,...)
 This API is like printf() to format any kinds of data type into a byte sequence, and write it to every serial port in AT Command Mode. More...
 
int32_t udrv_serial_read (SERIAL_PORT Port, uint8_t *Buffer, int32_t NumberOfBytes)
 This API is used to read a byte sequence from a specified serial port. More...
 
int32_t udrv_serial_peek (SERIAL_PORT Port)
 This API is used to peek a byte from a specified serial port. More...
 
void udrv_serial_flush (SERIAL_PORT Port)
 This API is used to wait a specified serial port to complete data writing. More...
 
void udrv_serial_lock (void)
 This API is used to lock a specified serial port. More...
 
void udrv_serial_unlock (void)
 This API is used to maunually unlock a specified serial port. More...
 
int32_t udrv_serial_get_passwd (char *passwd, uint32_t len)
 This API is used to get the unlock password for a specified serial port. More...
 
int32_t udrv_serial_set_passwd (const char *passwd, uint32_t len)
 This API is used to set the unlock password for a specified serial port. More...
 
SERIAL_WLOCK_STATE udrv_serial_get_lock_state (SERIAL_PORT Port)
 This API is used to get the lock state of a specified serial port. More...
 
void udrv_serial_disable (SERIAL_PORT Port)
 This API is used to disable a specified serial port. More...
 
void udrv_serial_enable (SERIAL_PORT Port)
 This API is used to enable a specified serial port. More...
 
int32_t udrv_serial_read_available (SERIAL_PORT Port)
 This API is used to get the number of bytes available for reading from the specified serial port. More...
 
uint32_t udrv_serial_get_timeout ()
 This API is used to get the timeout value for read/write/flush API. More...
 
void udrv_serial_set_timeout (uint32_t timeout)
 This API is used to set the timeout value for read/write/flush API. More...
 
void udrv_serial_suspend ()
 Suspend serial hardware before entering sleep mode. More...
 
void udrv_serial_resume ()
 Resume serial hardware after leaving sleep mode. More...
 
void serial_fallback_handler (SERIAL_PORT port, uint8_t ch)
 Let AT+BOOT and AT+ATM works in any serial mode. More...
 

Detailed Description

Provide a hardware independent serial driver layer for API layer to use.

Author
Rakwireless
Version
0.0.0
Date
2021.2

Macro Definition Documentation

◆ SERIAL_NO_TIMEOUT

#define SERIAL_NO_TIMEOUT   UINT32_MAX

Typedef Documentation

◆ SERIAL_STATE

◆ SERIAL_EVENT

◆ SERIAL_WIRE_MODE_E

◆ SERIAL_WORD_LEN_E

◆ SERIAL_STOP_BIT_E

◆ SERIAL_PARITY_E

◆ SERIAL_PORT

typedef enum _SERIAL_PORT SERIAL_PORT

◆ SERIAL_WLOCK_STATE

◆ SERIAL_CLI_HANDLER

typedef void(* SERIAL_CLI_HANDLER) (SERIAL_PORT, void *)

Enumeration Type Documentation

◆ _SERIAL_STATE

Enumerator
SERIAL_STATE_DEFAULT 
SERIAL_STATE_AT_START_1 
SERIAL_STATE_AT_START_2 
SERIAL_STATE_AT_START_3 
SERIAL_STATE_BOOT_1 
SERIAL_STATE_BOOT_2 
SERIAL_STATE_BOOT_3 
SERIAL_STATE_BOOT_4 
SERIAL_STATE_ATM_1 
SERIAL_STATE_ATM_2 
SERIAL_STATE_ATM_3 
SERIAL_STATE_AT_END 
SERIAL_STATE_MAX 

◆ _SERIAL_EVENT

Enumerator
SERIAL_EVENT_RECV_A_A_CHAR 
SERIAL_EVENT_RECV_A_T_CHAR 
SERIAL_EVENT_RECV_A_PLUS_CHAR 
SERIAL_EVENT_RECV_A_B_CHAR 
SERIAL_EVENT_RECV_A_O_CHAR 
SERIAL_EVENT_RECV_A_M_CHAR 
SERIAL_EVENT_RECV_CRLF 
SERIAL_EVENT_RECV_OTHER_CHAR 
SERIAL_EVENT_MAX 

◆ _SERIAL_WIRE_MODE_E

Enumerator
SERIAL_TWO_WIRE_NORMAL_MODE 
SERIAL_ONE_WIRE_TX_PIN_MODE 
SERIAL_ONE_WIRE_RX_PIN_MODE 

◆ _SERIAL_WORD_LEN_E

Enumerator
SERIAL_WORD_LEN_5 

Character's Word Length 5 bits.

SERIAL_WORD_LEN_6 

Character's Word Length 6 bits.

SERIAL_WORD_LEN_7 

Character's Word Length 7 bits.

SERIAL_WORD_LEN_8 

Character's Word Length 8 bits.

◆ _SERIAL_STOP_BIT_E

Enumerator
SERIAL_STOP_BIT_1 

One stop bit will be transmitted.

SERIAL_STOP_BIT_2 

Two stop bits (1.5 with 5-bit data) will be transmitted.

◆ _SERIAL_PARITY_E

Enumerator
SERIAL_PARITY_DISABLE 

No parity bit is transmitted nor expected.

SERIAL_PARITY_ODD 

The number of bits including the parity bit must be odd.

SERIAL_PARITY_EVEN 

The number of bits including the parity bit must be even.

SERIAL_PARITY_FORCED1 

The parity bit is sent as/checked to be 1.

SERIAL_PARITY_FORCED0 

The parity bit is sent as/checked to be 0.

◆ _SERIAL_PORT

Enumerator
SERIAL_UART0 
SERIAL_UART1 
SERIAL_UART2 
SERIAL_BLE0 
SERIAL_NFC 
SERIAL_MAX 

◆ _SERIAL_WLOCK_STATE

Enumerator
SERIAL_WLOCK_OPEN 
SERIAL_WLOCK_LOCKED 
SERIAL_WLOCK_DISABLED 

Function Documentation

◆ udrv_serial_register_onewire_handler()

void udrv_serial_register_onewire_handler ( SERIAL_CLI_HANDLER  handler)

This API is used to register a one-wire handler.

Return values
void
Parameters
SERIAL_CLI_HANDLERhandler: the handler function to handle the received characters

◆ is_udrv_serial_initialized()

bool is_udrv_serial_initialized ( SERIAL_PORT  Port)

This API is used to check if a specified serial port is initialized.

Return values
bool
Parameters
SERIAL_PORTPort: the specified serial port to be checked

◆ udrv_serial_init()

void udrv_serial_init ( SERIAL_PORT  Port,
uint32_t  BaudRate,
SERIAL_WORD_LEN_E  DataBits,
SERIAL_STOP_BIT_E  StopBits,
SERIAL_PARITY_E  Parity,
SERIAL_WIRE_MODE_E  WireMode 
)

This API is used to initialize a specified serial port.

Return values
void
Parameters
SERIAL_PORTPort: the specified serial port to be initialized
uint32_tBaudRate: the initialized value of baud rate setting
SERIAL_WORD_LEN_EDataBits: the initialized value of data bits setting
SERIAL_STOP_BIT_EStopBits: the initialized value of stop bits setting
SERIAL_PARITY_EParity: the initialized value of parity bits setting
SERIAL_WIRE_MODE_EWireMode: the initialized value of wire mode

◆ udrv_serial_deinit()

void udrv_serial_deinit ( SERIAL_PORT  Port)

This API is used to deinitialize a specified serial port.

Return values
void
Parameters
SERIAL_PORTPort: the specified serial port to be deinitialized

◆ udrv_serial_write()

int32_t udrv_serial_write ( SERIAL_PORT  Port,
uint8_t const *  Buffer,
int32_t  NumberOfBytes 
)

◆ udrv_serial_printf()

int32_t udrv_serial_printf ( SERIAL_PORT  Port,
const char *  fmt,
  ... 
)

This API is like printf() to format any kinds of data type into a byte sequence, and write it to a specified serial port.

Return values
int32_t
Returns
number of bytes sent successfully
Parameters
SERIAL_PORTPort: the specified serial port
constchar *fmt:

◆ udrv_serial_log_printf()

int32_t udrv_serial_log_printf ( const char *  fmt,
  ... 
)

This API is like printf() to format any kinds of data type into a byte sequence, and write it to every serial port in AT Command Mode.

Return values
int32_t
Returns
number of bytes sent successfully
Parameters
constchar *fmt:

◆ udrv_serial_read()

int32_t udrv_serial_read ( SERIAL_PORT  Port,
uint8_t *  Buffer,
int32_t  NumberOfBytes 
)

This API is used to read a byte sequence from a specified serial port.

Return values
int32_t
Returns
number of bytes received successfully
Parameters
SERIAL_PORTPort: the specified serial port
uint8_tconst *Buffer:
int32_tNumberOfBytes:

◆ udrv_serial_peek()

int32_t udrv_serial_peek ( SERIAL_PORT  Port)

This API is used to peek a byte from a specified serial port.

Return values
int32_t
Returns
the successfully peeked byte
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_flush()

void udrv_serial_flush ( SERIAL_PORT  Port)

This API is used to wait a specified serial port to complete data writing.

Return values
void
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_lock()

void udrv_serial_lock ( void  )

This API is used to lock a specified serial port.

Return values
void

◆ udrv_serial_unlock()

void udrv_serial_unlock ( void  )

This API is used to maunually unlock a specified serial port.

Return values
void

◆ udrv_serial_get_passwd()

int32_t udrv_serial_get_passwd ( char *  passwd,
uint32_t  len 
)

This API is used to get the unlock password for a specified serial port.

Return values
int32_t
Parameters
char*passwd:
uint32_tlen:

◆ udrv_serial_set_passwd()

int32_t udrv_serial_set_passwd ( const char *  passwd,
uint32_t  len 
)

This API is used to set the unlock password for a specified serial port.

Return values
int32_t
Parameters
constchar *passwd:
uint32_tlen:

◆ udrv_serial_get_lock_state()

SERIAL_WLOCK_STATE udrv_serial_get_lock_state ( SERIAL_PORT  Port)

This API is used to get the lock state of a specified serial port.

Return values
SERIAL_WLOCK_STATE
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_disable()

void udrv_serial_disable ( SERIAL_PORT  Port)

This API is used to disable a specified serial port.

Return values
void
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_enable()

void udrv_serial_enable ( SERIAL_PORT  Port)

This API is used to enable a specified serial port.

Return values
void
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_read_available()

int32_t udrv_serial_read_available ( SERIAL_PORT  Port)

This API is used to get the number of bytes available for reading from the specified serial port.

Return values
int32_t
Returns
the number of bytes available for reading from the specified serial port
Parameters
SERIAL_PORTPort: the specified serial port

◆ udrv_serial_get_timeout()

uint32_t udrv_serial_get_timeout ( )

This API is used to get the timeout value for read/write/flush API.

Return values
uint32_t

◆ udrv_serial_set_timeout()

void udrv_serial_set_timeout ( uint32_t  timeout)

This API is used to set the timeout value for read/write/flush API.

Return values
void
Parameters
uint32_ttimeout: the timeout value

◆ udrv_serial_suspend()

void udrv_serial_suspend ( )

Suspend serial hardware before entering sleep mode.

◆ udrv_serial_resume()

void udrv_serial_resume ( )

Resume serial hardware after leaving sleep mode.

◆ serial_fallback_handler()

void serial_fallback_handler ( SERIAL_PORT  port,
uint8_t  ch 
)

Let AT+BOOT and AT+ATM works in any serial mode.