Difference between revisions of "Unit UART"

From Ultibo.org
Jump to: navigation, search
Line 538: Line 538:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Called only during system startup
 
| Called only during system startup
 
|-
 
|-
Line 553: Line 553:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to open
 
| The UART device to open
 
|-
 
|-
! '''BaudRate'''
+
! BaudRate
| Baud rate for the connection (eg 9600, 57600, 115200 etc
+
| Baud rate for the connection (eg 9600, 57600, 115200 etc)
 
|-
 
|-
! '''DataBits'''
+
! DataBits
 
| Size of the data (eg SERIAL_DATA_8BIT)
 
| Size of the data (eg SERIAL_DATA_8BIT)
 
|-
 
|-
! '''StopBits'''
+
! StopBits
 
| Number of stop bits (eg SERIAL_STOP_1BIT)
 
| Number of stop bits (eg SERIAL_STOP_1BIT)
 
|-
 
|-
! '''Parity'''
+
! Parity
 
| Parity type for the data (eg SERIAL_PARITY_NONE)
 
| Parity type for the data (eg SERIAL_PARITY_NONE)
 
|-
 
|-
! '''FlowControl'''
+
! FlowControl
 
| Flow control for the connection (eg SERIAL_FLOW_NONE)
 
| Flow control for the connection (eg SERIAL_FLOW_NONE)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 583: Line 583:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to close
 
| The UART device to close
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 598: Line 598:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to read from
 
| The UART device to read from
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a buffer to receive the data
 
| Pointer to a buffer to receive the data
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size of the buffer
 
| The size of the buffer
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags to control reading (eg UART_READ_NON_BLOCK)
 
| The flags to control reading (eg UART_READ_NON_BLOCK)
 
|-
 
|-
! '''Count'''
+
! Count
 
| The number of bytes read on return
 
| The number of bytes read on return
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 625: Line 625:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to write to
 
| The UART device to write to
 
|-
 
|-
! '''Buffer'''
+
! Buffer
 
| Pointer to a buffer of data to transmit
 
| Pointer to a buffer of data to transmit
 
|-
 
|-
! '''Size'''
+
! Size
 
| The size of the buffer
 
| The size of the buffer
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags to control writing (eg UART_WRITE_NON_BLOCK)
 
| The flags to control writing (eg UART_WRITE_NON_BLOCK)
 
|-
 
|-
! '''Count'''
+
! Count
 
| The number of bytes written on return
 
| The number of bytes written on return
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 652: Line 652:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to wait for
 
| The UART device to wait for
 
|-
 
|-
! '''Direction'''
+
! Direction
 
| The direction of data to wait for (eg UART_WAIT_RECEIVE)
 
| The direction of data to wait for (eg UART_WAIT_RECEIVE)
 
|-
 
|-
! '''Timeout'''
+
! Timeout
 
| The number of milliseconds to wait for data (INFINITE to wait forever)
 
| The number of milliseconds to wait for data (INFINITE to wait forever)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 673: Line 673:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to get the status from
 
| The UART device to get the status from
 
|-
 
|-
! '''Return'''
+
! Return
 
| A set of flags containing the device status (eg UART_STATUS_RTS)
 
| A set of flags containing the device status (eg UART_STATUS_RTS)
 
|-
 
|-
! '''Note'''
+
! Note
 
| Replaced by UARTDeviceGetStatus for consistency
 
| Replaced by UARTDeviceGetStatus for consistency
 
|-
 
|-
Line 691: Line 691:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to get the status from
 
| The UART device to get the status from
 
|-
 
|-
! '''Return'''
+
! Return
 
| A set of flags containing the device status (eg UART_STATUS_RTS)
 
| A set of flags containing the device status (eg UART_STATUS_RTS)
 
|-
 
|-
Line 706: Line 706:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to set the status for
 
| The UART device to set the status for
 
|-
 
|-
! '''Status'''
+
! Status
 
| The device status flags to be set (eg UART_STATUS_RTS)
 
| The device status flags to be set (eg UART_STATUS_RTS)
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
| Not all UART_STATUS_* flags can be set, the device may ignore invalid values
+
| Not all UART_STATUS_* flags can be set, the device may ignore invalid values.
Not all UART devices support set status, returns ERROR_CALL_NOT_IMPLEMENTED if not supported
+
Not all UART devices support set status, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.
 
|-
 
|-
 
|}
 
|}
Line 728: Line 728:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to get properties from
 
| The UART device to get properties from
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| Pointer to a PUARTProperties structure to fill in
 
| Pointer to a PUARTProperties structure to fill in
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| Replaced by UARTDeviceGetProperties for consistency
 
| Replaced by UARTDeviceGetProperties for consistency
 
|-
 
|-
Line 749: Line 749:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to get properties from
 
| The UART device to get properties from
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| Pointer to a PUARTProperties structure to fill in
 
| Pointer to a PUARTProperties structure to fill in
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 767: Line 767:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to set properties for
 
| The UART device to set properties for
 
|-
 
|-
! '''Properties'''
+
! Properties
 
| Pointer to a PUARTProperties structure to use
 
| Pointer to a PUARTProperties structure to use
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 785: Line 785:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to new UART entry or nil if UART could not be created
 
| Pointer to new UART entry or nil if UART could not be created
 
|-
 
|-
Line 797: Line 797:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Size'''
+
! Size
 
| Size in bytes to allocate for new UART (Including the UART entry)
 
| Size in bytes to allocate for new UART (Including the UART entry)
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to new UART entry or nil if UART could not be created
 
| Pointer to new UART entry or nil if UART could not be created
 
|-
 
|-
Line 812: Line 812:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to destroy
 
| The UART device to destroy
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 827: Line 827:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to register
 
| The UART device to register
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 842: Line 842:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to deregister
 
| The UART device to deregister
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 857: Line 857:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UARTId'''
+
! UARTId
 
| The Id number of the UART to find
 
| The Id number of the UART to find
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to UART device entry or nil if not found
 
| Pointer to UART device entry or nil if not found
 
|-
 
|-
Line 872: Line 872:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Name'''
+
! Name
 
| The name of the UART to find (eg UART0)
 
| The name of the UART to find (eg UART0)
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to UART device entry or nil if not found
 
| Pointer to UART device entry or nil if not found
 
|-
 
|-
Line 887: Line 887:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Description'''
+
! Description
 
| The description of the UART to find (eg BCM2836 PL011 UART)
 
| The description of the UART to find (eg BCM2836 PL011 UART)
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to UART device entry or nil if not found
 
| Pointer to UART device entry or nil if not found
 
|-
 
|-
Line 902: Line 902:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Callback'''
+
! Callback
 
| The callback function to call for each UART in the table
 
| The callback function to call for each UART in the table
 
|-
 
|-
! '''Data'''
+
! Data
 
| A private data pointer to pass to callback for each UART in the table
 
| A private data pointer to pass to callback for each UART in the table
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 920: Line 920:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''UART'''
+
! UART
 
| The UART device to notify changes for (Optional, pass nil for all UART devices)
 
| The UART device to notify changes for (Optional, pass nil for all UART devices)
 
|-
 
|-
! '''Callback'''
+
! Callback
 
| The function to call when a notification event occurs
 
| The function to call when a notification event occurs
 
|-
 
|-
! '''Data'''
+
! Data
 
| A private data pointer to pass to callback when a notification event occurs
 
| A private data pointer to pass to callback when a notification event occurs
 
|-
 
|-
! '''Notification'''
+
! Notification
 
| The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
 
| The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
 
|-
 
|-
! '''Flags'''
+
! Flags
 
| The flags to control the notification (eg NOTIFIER_FLAG_WORKER)
 
| The flags to control the notification (eg NOTIFIER_FLAG_WORKER)
 
|-
 
|-
Line 947: Line 947:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceOpen instead
+
| Not intended to be called directly by applications, use SerialDeviceOpen instead.
 
|-
 
|-
 
|}
 
|}
Line 959: Line 959:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceClose instead
+
| Not intended to be called directly by applications, use SerialDeviceClose instead.
 
|-
 
|-
 
|}
 
|}
Line 971: Line 971:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceRead instead
+
| Not intended to be called directly by applications, use SerialDeviceRead instead.
 
|-
 
|-
 
|}
 
|}
Line 983: Line 983:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceWrite instead
+
| Not intended to be called directly by applications, use SerialDeviceWrite instead.
 
|-
 
|-
 
|}
 
|}
Line 995: Line 995:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceWait instead
+
| Not intended to be called directly by applications, use SerialDeviceWait instead.
 
|-
 
|-
 
|}
 
|}
Line 1,007: Line 1,007:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceStatus instead
+
| Not intended to be called directly by applications, use SerialDeviceStatus instead.
 
Replaced by UARTSerialDeviceGetStatus for consistency
 
Replaced by UARTSerialDeviceGetStatus for consistency
 
|-
 
|-
Line 1,020: Line 1,020:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceGetStatus instead
+
| Not intended to be called directly by applications, use SerialDeviceGetStatus instead.
 
|-
 
|-
 
|}
 
|}
Line 1,032: Line 1,032:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceSetStatus instead
+
| Not intended to be called directly by applications, use SerialDeviceSetStatus instead.
 
|-
 
|-
 
|}
 
|}
Line 1,044: Line 1,044:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use SerialDeviceGetProperties instead
+
| Not intended to be called directly by applications, use SerialDeviceGetProperties instead.
 
|-
 
|-
 
|}
 
|}
Line 1,059: Line 1,059:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,071: Line 1,071:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,083: Line 1,083:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,095: Line 1,095:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,107: Line 1,107:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,119: Line 1,119:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,131: Line 1,131:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,143: Line 1,143:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,155: Line 1,155:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 1,170: Line 1,170:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not intended to be called directly by applications
 
| Not intended to be called directly by applications
 
|-
 
|-
Line 1,182: Line 1,182:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Not intended to be called directly by applications
 
| Not intended to be called directly by applications
 
|-
 
|-

Revision as of 06:19, 20 April 2018

Return to Unit Reference


Description


Ultibo UART interface unit

UART (Universal Asynchronous Receiver Transmitter) devices represent the industry standard serial communications devices that are available on almost every system.

This unit implements the framework for UART devices and provides a standardized API to allow driver specific implementation to be abstracted. All UART devices are also represented as a serial device and this unit handles the relationship between the two devices.

Each UART device returns a set of properties that describe the capabilities of the device and includes a set of flags that indicate what features are supported.

Reads and writes to UART devices are unbuffered and simply pass raw data to and from the caller unless the serial interface is used instead which includes buffering of transmitted and received data. Both reads and writes allow for non blocking so that a caller can avoid waiting for received data to be available or the device to be ready to transmit.

Constants



UART specific constants UART_*
UART_NAME_PREFIX = 'UART'; Name prefix for UART Devices
 
UART_PUSH_TIMEOUT = SERIAL_PUSH_TIMEOUT; Timeout (Milliseconds) for Push RX/TX (Implementation specific)


UART device type UART_TYPE_*
UART_TYPE_NONE = 0;  
UART_TYPE_8250 = 1; 8250 UART and similar variants (Differences are handled by driver)
UART_TYPE_16550 = 2; 16550 UART and similar variants (eg 16550A) (Differences are handled by driver)
UART_TYPE_16650 = 3; 16650 UART and similar variants (eg 16C650) (Differences are handled by driver)


UART device mode UART_MODE_*
UART_MODE_NONE = 0;  
UART_MODE_UART = 1; The UART was opened as a UART device and all reads and writes are direct
UART_MODE_SERIAL = 2; The UART was opened as a Serial device so reads and writes are being buffered


UART device state UART_STATE_*
UART_STATE_DISABLED = 0;  
UART_STATE_ENABLED = 1;  


UART device flag UART_FLAG_*
UART_FLAG_NONE = SERIAL_FLAG_NONE;  
UART_FLAG_DATA_8BIT = SERIAL_FLAG_DATA_8BIT; Device supports 8 data bits
UART_FLAG_DATA_7BIT = SERIAL_FLAG_DATA_7BIT; Device supports 7 data bits
UART_FLAG_DATA_6BIT = SERIAL_FLAG_DATA_6BIT; Device supports 6 data bits
UART_FLAG_DATA_5BIT = SERIAL_FLAG_DATA_5BIT; Device supports 5 data bits
UART_FLAG_STOP_1BIT = SERIAL_FLAG_STOP_1BIT; Device supports 1 stop bit
UART_FLAG_STOP_2BIT = SERIAL_FLAG_STOP_2BIT; Device supports 2 stop bits
UART_FLAG_STOP_1BIT5 = SERIAL_FLAG_STOP_1BIT5; Device supports 1.5 stop bits
UART_FLAG_PARITY_ODD = SERIAL_FLAG_PARITY_ODD; Device supports odd parity
UART_FLAG_PARITY_EVEN = SERIAL_FLAG_PARITY_EVEN; Device supports even parity
UART_FLAG_PARITY_MARK = SERIAL_FLAG_PARITY_MARK; Device supports mark parity
UART_FLAG_PARITY_SPACE = SERIAL_FLAG_PARITY_SPACE; Device supports space parity
UART_FLAG_FLOW_RTS_CTS = SERIAL_FLAG_FLOW_RTS_CTS; Device supports RTS/CTS flow control
UART_FLAG_FLOW_DSR_DTR = SERIAL_FLAG_FLOW_DSR_DTR; Device supports DSR/DTR flow control
UART_FLAG_PUSH_RX = SERIAL_FLAG_PUSH_RX; Device requires pushed receive (Implementation specific)
UART_FLAG_PUSH_TX = SERIAL_FLAG_PUSH_TX; Device requires pushed transmit (Implementation specific)


UART read flag UART_READ_*
UART_READ_NONE = SERIAL_READ_NONE;  
UART_READ_NON_BLOCK = SERIAL_READ_NON_BLOCK; Do not block when receiving, if the FIFO is empty return immediately


UART write flag UART_WRITE_*
UART_WRITE_NONE = SERIAL_WRITE_NONE;  
UART_WRITE_NON_BLOCK = SERIAL_WRITE_NON_BLOCK; Do not block when transmitting, if the FIFO is full return immediately


UART wait direction UART_WAIT_*
UART_WAIT_NONE = SERIAL_WAIT_NONE;  
UART_WAIT_RECEIVE = SERIAL_WAIT_RECEIVE; Wait for data to be available in the receive FIFO
UART_WAIT_TRANSMIT = SERIAL_WAIT_TRANSMIT; Wait for space to be available in the transmit FIFO


UART status flag UART_STATUS_*
UART_STATUS_NONE = SERIAL_STATUS_NONE;  
UART_STATUS_RTS = SERIAL_STATUS_RTS;  
UART_STATUS_CTS = SERIAL_STATUS_CTS;  
UART_STATUS_DSR = SERIAL_STATUS_DSR;  
UART_STATUS_DTR = SERIAL_STATUS_DTR;  
UART_STATUS_RX_FULL = SERIAL_STATUS_RX_FULL;  
UART_STATUS_RX_EMPTY = SERIAL_STATUS_RX_EMPTY;  
UART_STATUS_TX_FULL = SERIAL_STATUS_TX_FULL;  
UART_STATUS_TX_EMPTY = SERIAL_STATUS_TX_EMPTY;  
UART_STATUS_BUSY = SERIAL_STATUS_BUSY;  
UART_STATUS_BREAK_ERROR = SERIAL_STATUS_BREAK_ERROR;  
UART_STATUS_PARITY_ERROR = SERIAL_STATUS_PARITY_ERROR;  
UART_STATUS_FRAMING_ERROR = SERIAL_STATUS_FRAMING_ERROR;  
UART_STATUS_OVERRUN_ERROR = SERIAL_STATUS_OVERRUN_ERROR;  
UART_STATUS_DCD = SERIAL_STATUS_DCD;  
UART_STATUS_RI = SERIAL_STATUS_RI;  


UART logging UART_LOG_*
UART_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG; UART debugging messages
UART_LOG_LEVEL_INFO = LOG_LEVEL_INFO; UART informational messages, such as a device being attached or detached
UART_LOG_LEVEL_WARN = LOG_LEVEL_WARN; UART warning messages
UART_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR; UART error messages
UART_LOG_LEVEL_NONE = LOG_LEVEL_NONE; No UART messages


Type definitions



UART properties

PUARTProperties = ^TUARTProperties;

TUARTProperties = record

Flags:LongWord; Device flags (eg UART_FLAG_DATA_8BIT)
MinRate:LongWord; Minimum supported baud rate
MaxRate:LongWord; Maximum supported baud rate
BaudRate:LongWord; Current baud rate setting
DataBits:LongWord; Current data bits setting
StopBits:LongWord; Current stop bits setting
Parity:LongWord; Current parity setting
FlowControl:LongWord; Current flow control setting

UART enumeration callback

TUARTEnumerate = function(UART:PUARTDevice; Data:Pointer):LongWord;

UART notification callback

TUARTNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;

UART device open

TUARTDeviceOpen = function(UART:PUARTDevice; BaudRate,DataBits,StopBits,Parity,FlowControl:LongWord):LongWord;

UART device close

TUARTDeviceClose = function(UART:PUARTDevice):LongWord;

UART device read

TUARTDeviceRead = function(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;

UART device write

TUARTDeviceWrite = function(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;

UART device wait

TUARTDeviceWait = function(UART:PUARTDevice; Direction,Timeout:LongWord):LongWord;

UART device get status

TUARTDeviceGetStatus = function(UART:PUARTDevice):LongWord;

UART device set status

TUARTDeviceSetStatus = function(UART:PUARTDevice; Status:LongWord):LongWord;

UART device get properties

TUARTDeviceGetProperties = function(UART:PUARTDevice; Properties:PUARTProperties):LongWord;

UART device set properties

TUARTDeviceSetProperties = function(UART:PUARTDevice; Properties:PUARTProperties):LongWord;

UART device

PUARTDevice = ^TUARTDevice;

TUARTDevice = record

Serial Properties
Device Properties
Device:TDevice; The Device entry for this UART
UART Properties
UARTId:LongWord; Unique Id of this UART in the UART table
UARTMode:LongWord; UART mode (eg UART_MODE_SERIAL)
UARTState:LongWord; UART state (eg UART_STATE_ENABLED)
UARTStatus:LongWord; UART status (eg UART_STATUS_RX_FULL)(May not be real time status depending on the driver)
DeviceOpen:TUARTDeviceOpen; A Device specific DeviceOpen method implementing the standard UART device interface (Mandatory)
DeviceClose:TUARTDeviceClose; A Device specific DeviceClose method implementing the standard UART device interface (Mandatory)
DeviceRead:TUARTDeviceRead; A Device specific DeviceRead method implementing the standard UART device interface (Mandatory)
DeviceWrite:TUARTDeviceWrite; A Device specific DeviceWrite method implementing the standard UART device interface (Mandatory)
DeviceWait:TUARTDeviceWait; A Device specific DeviceWait method implementing the standard UART device interface (Or nil if the default method is suitable)
DeviceGetStatus:TUARTDeviceGetStatus; A Device specific DeviceGetStatus method implementing the standard UART device interface (Or nil if the default method is suitable)
DeviceSetStatus:TUARTDeviceSetStatus; A Device specific DeviceSetStatus method implementing the standard UART device interface (Optional)
DeviceGetProperties:TUARTDeviceGetProperties; A Device specific DeviceGetProperties method implementing the standard UART device interface (Or nil if the default method is suitable)
DeviceSetProperties:TUARTDeviceSetProperties; A Device specific DeviceSetProperties method implementing the standard UART device interface (Or nil if the default method is suitable)
Driver Properties
Lock:TMutexHandle; Device lock
ReceiveWait:TEventHandle; Read wait event
TransmitWait:TEventHandle; Write wait event
Properties:TUARTProperties; Device properties
Serial:PSerialDevice; The Serial device represented by this UART
Statistics Properties
ReceiveCount:LongWord;  
ReceiveErrors:LongWord;  
TransmitCount:LongWord;  
TransmitErrors:LongWord;  
Internal Properties
Prev:PUARTDevice; Previous entry in UART table
Next:PUARTDevice; Next entry in UART table


Public variables



UART logging

UART_DEFAULT_LOG_LEVEL:LongWord = UART_LOG_LEVEL_DEBUG; Minimum level for UART messages. Only messages with level greater than or equal to this will be printed.
UART_LOG_ENABLED:Boolean;


Function declarations



Initialization functions

procedure UARTInit;
Description: Initialize the UART unit and UART device table
Note Called only during system startup


UART functions

function UARTDeviceOpen(UART:PUARTDevice; BaudRate,DataBits,StopBits,Parity,FlowControl:LongWord):LongWord;
Description: Open a UART device ready for sending and receiving
UART The UART device to open
BaudRate Baud rate for the connection (eg 9600, 57600, 115200 etc)
DataBits Size of the data (eg SERIAL_DATA_8BIT)
StopBits Number of stop bits (eg SERIAL_STOP_1BIT)
Parity Parity type for the data (eg SERIAL_PARITY_NONE)
FlowControl Flow control for the connection (eg SERIAL_FLOW_NONE)
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceClose(UART:PUARTDevice):LongWord;
Description: Close a UART device and terminate sending and receiving
UART The UART device to close
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceRead(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord;var Count:LongWord):LongWord;
Description: Read data from a UART device
UART The UART device to read from
Buffer Pointer to a buffer to receive the data
Size The size of the buffer
Flags The flags to control reading (eg UART_READ_NON_BLOCK)
Count The number of bytes read on return
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceWrite(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord;var Count:LongWord):LongWord;
Description: Write data to a UART device
UART The UART device to write to
Buffer Pointer to a buffer of data to transmit
Size The size of the buffer
Flags The flags to control writing (eg UART_WRITE_NON_BLOCK)
Count The number of bytes written on return
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceWait(UART:PUARTDevice; Direction,Timeout:LongWord):LongWord;
Description: Wait for data to be available in the receive or transmit FIFO of a UART device
UART The UART device to wait for
Direction The direction of data to wait for (eg UART_WAIT_RECEIVE)
Timeout The number of milliseconds to wait for data (INFINITE to wait forever)
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceStatus(UART:PUARTDevice):LongWord; inline;
Description: Get the current line status of a UART device
UART The UART device to get the status from
Return A set of flags containing the device status (eg UART_STATUS_RTS)
Note Replaced by UARTDeviceGetStatus for consistency


function UARTDeviceGetStatus(UART:PUARTDevice):LongWord;
Description: Get the current line status of a UART device
UART The UART device to get the status from
Return A set of flags containing the device status (eg UART_STATUS_RTS)


function UARTDeviceSetStatus(UART:PUARTDevice;Status:LongWord):LongWord;
Description: Set the current line status of a UART device
UART The UART device to set the status for
Status The device status flags to be set (eg UART_STATUS_RTS)
Return ERROR_SUCCESS if completed or another error code on failure
Note Not all UART_STATUS_* flags can be set, the device may ignore invalid values.

Not all UART devices support set status, returns ERROR_CALL_NOT_IMPLEMENTED if not supported.


function UARTDeviceProperties(UART:PUARTDevice; Properties:PUARTProperties):LongWord; inline;
Description: Get the properties for the specified UART device
UART The UART device to get properties from
Properties Pointer to a PUARTProperties structure to fill in
Return ERROR_SUCCESS if completed or another error code on failure
Note Replaced by UARTDeviceGetProperties for consistency


function UARTDeviceGetProperties(UART:PUARTDevice;Properties:PUARTProperties):LongWord;
Description: Get the properties for the specified UART device
UART The UART device to get properties from
Properties Pointer to a PUARTProperties structure to fill in
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceSetProperties(UART:PUARTDevice; Properties:PUARTProperties):LongWord;
Description: Set the properties for the specified UART device
UART The UART device to set properties for
Properties Pointer to a PUARTProperties structure to use
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceCreate:PUARTDevice;
Description: Create a new UART entry
Return Pointer to new UART entry or nil if UART could not be created


function UARTDeviceCreateEx(Size:LongWord):PUARTDevice;
Description: Create a new UART entry
Size Size in bytes to allocate for new UART (Including the UART entry)
Return Pointer to new UART entry or nil if UART could not be created


function UARTDeviceDestroy(UART:PUARTDevice):LongWord;
Description: Destroy an existing UART entry
UART The UART device to destroy
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceRegister(UART:PUARTDevice):LongWord;
Description: Register a new UART in the UART table
UART The UART device to register
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceDeregister(UART:PUARTDevice):LongWord;
Description: Deregister a UART from the UART table
UART The UART device to deregister
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceFind(UARTId:LongWord):PUARTDevice;
Description: Find a UART device by Id in the UART table
UARTId The Id number of the UART to find
Return Pointer to UART device entry or nil if not found


function UARTDeviceFindByName(const Name:String):PUARTDevice; inline;
Description: Find a UART device by name in the UART table
Name The name of the UART to find (eg UART0)
Return Pointer to UART device entry or nil if not found


function UARTDeviceFindByDescription(const Description:String):PUARTDevice; inline;
Description: Find a UART device by description in the UART table
Description The description of the UART to find (eg BCM2836 PL011 UART)
Return Pointer to UART device entry or nil if not found


function UARTDeviceEnumerate(Callback:TUARTEnumerate; Data:Pointer):LongWord;
Description: Enumerate all UART devices in the UART table
Callback The callback function to call for each UART in the table
Data A private data pointer to pass to callback for each UART in the table
Return ERROR_SUCCESS if completed or another error code on failure


function UARTDeviceNotification(UART:PUARTDevice; Callback:TUARTNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: Register a notification for UART device changes
UART The UART device to notify changes for (Optional, pass nil for all UART devices)
Callback The function to call when a notification event occurs
Data A private data pointer to pass to callback when a notification event occurs
Notification The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
Flags The flags to control the notification (eg NOTIFIER_FLAG_WORKER)


UART serial functions

function UARTSerialDeviceOpen(Serial:PSerialDevice; BaudRate,DataBits,StopBits,Parity,FlowControl,ReceiveDepth,TransmitDepth:LongWord):LongWord;
Description: Implementation of SerialDeviceOpen API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceOpen instead.


function UARTSerialDeviceClose(Serial:PSerialDevice):LongWord;
Description: Implementation of SerialDeviceClose API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceClose instead.


function UARTSerialDeviceRead(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of SerialDeviceRead API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceRead instead.


function UARTSerialDeviceWrite(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of SerialDeviceWrite API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceWrite instead.


function UARTSerialDeviceWait(Serial:PSerialDevice; Direction,Timeout:LongWord; var Count:LongWord):LongWord;
Description: Implementation of SerialDeviceWait API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceWait instead.


function UARTSerialDeviceStatus(Serial:PSerialDevice):LongWord; inline;
Description: Implementation of SerialDeviceStatus API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceStatus instead.

Replaced by UARTSerialDeviceGetStatus for consistency


function UARTSerialDeviceGetStatus(Serial:PSerialDevice):LongWord;
Description: Implementation of SerialDeviceGetStatus API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceGetStatus instead.


function UARTSerialDeviceSetStatus(Serial:PSerialDevice; Status:LongWord):LongWord;
Description: Implementation of SerialDeviceSetStatus API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceSetStatus instead.


function UARTSerialDeviceGetProperties(Serial:PSerialDevice;Properties:PSerialProperties):LongWord;
Description: Implementation of SerialDeviceGetProperties API for UART Serial
Note Not intended to be called directly by applications, use SerialDeviceGetProperties instead.


UART helper functions

function UARTGetCount:LongWord; inline;
Description: Get the current UART count
Note None documented


function UARTDeviceGetDefault:PUARTDevice; inline;
Description: Get the current default UART device
Note None documented


function UARTDeviceSetDefault(UART:PUARTDevice):LongWord;
Description: Set the current default UART device
Note None documented


function UARTDeviceCheck(UART:PUARTDevice):PUARTDevice;
Description: Check if the supplied UART is in the UART table
Note None documented


procedure UARTLog(Level:LongWord;UART:PUARTDevice; const AText:String);
Description: To be documented
Note None documented


procedure UARTLogInfo(UART:PUARTDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure UARTLogWarn(UART:PUARTDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure UARTLogError(UART:PUARTDevice; const AText:String); inline;
Description: To be documented
Note None documented


procedure UARTLogDebug(UART:PUARTDevice; const AText:String); inline;
Description: To be documented
Note None documented


UART serial helper functions

function UARTSerialDeviceReceive(UART:PUARTDevice):LongWord;
Description: Read data from a UART device into the receive buffer of the associated Serial device
Note Not intended to be called directly by applications


function UARTSerialDeviceTransmit(UART:PUARTDevice):LongWord;
Description: Write data to a UART device from the transmit buffer of the associated Serial device
Note Not intended to be called directly by applications


Return to Unit Reference