AN433: CP2110 HID to UART API specification

AN433
CP2110/4 HID- T O -UART API S P E C I F I C A T I O N
1. Introduction
The Silicon Labs HID-to-UART interface library provides a simple API to configure and operate CP2110 and
CP2114 devices. The library provides interface abstraction so that users can develop their application without
writing any USB HID code. C libraries implementing the CP2110 and CP2114 Interface Specification are provided
for Windows 2000 and later, Mac OS X 10.5 and later, and Linux. Similarly, various include files are provided to
import library functions into C#.NET and Visual Basic.NET. Refer to Table 1 for complete details.
User Application
HID to UART Library
HID Driver
(Provided by OS)
USB Root Hub
USB
PC
CP2110 HIDUART Bridge
External RS-232
Transceiver or UART
Circuitry
CP2114 USB
Audio-I2S Digital
Audio Bridge
External RS-232
Transceiver or UART
Circuitry/DAC/CODEC
Hardware
Figure 1. System Architecture Diagram
Rev. 0.5 10/12
Copyright © 2012 by Silicon Laboratories
AN433
AN433
Table 1. HID-to-UART Include Files
Operating System
Windows 2000 and later
Library
Include Files
Version
SLABHIDtoUART.dll1
SLABHIDtoUART.h (C/C++)
SLABHIDtoUART.cs (C#.NET)
SLABHIDtoUART.vb (VB.NET)
2.0
SLABCP2110.h (C/C++)
SLABCP2110.cs (C#.NET)
SLABCP2110.vb (VB.NET)
SLABCP2114.h (C/C++)
CP2114_common.h (C/C++)
Mac OS X 10.5 and later
Linux
libSLABHIDtoUART.dylib
SLABHIDtoUART.h (C, C++, Obj-C)
SLABCP2110.h (C, C++, Obj-C)
SLABCP2114.h (C, C++, Obj-C)
CP2114_common.h (C, C++, Obj-C)
Types.h (C, C++, Obj-C)
2.0
libslabhidtouart.so2
SLABHIDtoUART.h (C/C++)
SLABCP2110.h (C/C++)
SLABCP2114.h (C/C++)
CP2114_common.h (C/C++)
Types.h (C/C++)
2.0
Notes:
1. Requires SLABHIDDevice.dll version 1.5 during runtime.
2. Requires libusb-1.0 during runtime.
2
Rev. 0.5
AN433
2. API Functions
The following API functions apply to the CP2110 and CP2114.
Definition
Description
Page #
HidUart_GetNumDevices()
Returns the number of devices connected
4
HidUart_GetString()
Returns a string for a device by index
5
HidUart_GetOpenedString()
Returns a string for a device by device object pointer
6
HidUart_GetIndexedString()
Returns an indexed USB string descriptor by index
(Windows/Linux only)
7
HidUart_GetOpenedIndexedString() Returns an indexed USB string descriptor by device object
pointer (Windows/Linux only)
7
HidUart_GetAttributes()
Returns the VID, PID, and release number for a device by
index.
8
HidUart_GetOpenedAttributes()
Returns the VID, PID, and release number for a device by
device object pointer.
8
HidUart_Open()
Opens a device and returns a device object pointer
9
HidUart_Close()
Cancels pending IO and closes a device
9
HidUart_IsOpened()
Returns the device opened status
9
HidUart_SetUartEnable()
Enables/disables the UART
10
HidUart_GetUartEnable()
Gets UART status
10
HidUart_Read()
Reads a block of data from a device
11
HidUart_Write()
Writes a block of data to a device
12
HidUart_FlushBuffers()
Flushes the TX and RX buffers for a device
13
HidUart_CancelIo()
Cancels pending HID reads and writes (Windows only)
13
HidUart_SetTimeouts()
Sets read and write block timeouts for a device
13
HidUart_GetTimeouts()
Gets read and write block timeouts for a device
14
HidUart_GetUartStatus()
Returns the number of bytes in the device transmit and receive
FIFOs and parity/overrun errors
14
HidUart_SetUartConfig()
Sets baud rate, parity, flow control, data bits, and stop bits
15
HidUart_GetUartConfig()
Gets baud rate, parity, flow control, data bits, and stop bits
16
HidUart_StartBreak()
Starts transmission of the line break for the specified duration
17
HidUart_StopBreak()
Stops transmission of the line break
17
HidUart_Reset()
Resets the device with re-enumeration
17
HidUart_ReadLatch()
Gets the port latch value from a device
18
Rev. 0.5
3
AN433
Definition
Description
Page #
HidUart_WriteLatch()
Sets the port latch value on a device
18
HidUart_GetPartNumber()
Gets the device part number and version
19
HidUart_GetLibraryVersion()
Gets the DLL Library version
20
HidUart_GetHidLibraryVersion()
Gets the HID Device Interface Library version
20
HidUart_GetHidGuid()
Gets the HID GUID (Windows only)
20
2.1. HidUart_GetNumDevices
Description:
This function returns the number of devices connected to the host with matching vendor and
product ID (VID, PID).
Prototype:
HID_UART_STATUS HidUart_GetNumDevices (DWORD* numDevices, WORD vid, WORD
pid)
Parameters:
1. numDevices—Returns the number of devices connected on return.
2. vid—Filter device results by vendor ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
3. pid—Filter device results by product ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
Return Value:
4
HID_UART_STATUS = HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
Rev. 0.5
AN433
2.2. HidUart_GetString
Description:
This function returns a null-terminated vendor ID string, product ID string, serial string, device path
string, manufacturer string, or product string for the device specified by an index passed in
deviceNum. The index for the first device is 0 and the last device is the value returned by
HidUart_GetNumDevices() – 1.
Prototype:
HID_UART_STATUS HidUart_GetString (DWORD deviceNum, WORD vid, WORD pid,
char* deviceString, DWORD options)
Parameters:
1. deviceNum—Index of the device for which the string is desired.
2. vid—Filter device results by vendor ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
3. pid—Filter device results by product ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
4. deviceString—Variable of type HID_UART_DEVICE_STRING which will contain a NULL
terminated ASCII device string on return. The string is 260 bytes on Windows and 512 bytes
on Mac OS X and Linux.
5. options—Determines if deviceString contains a vendor ID string, product ID string, serial
string, device path string, manufacturer string, or product string.
Definition
Value
Length
Description
HID_UART_GET_VID_STR
0x01
5
Vendor ID
HID_UART_GET_PID_STR
0x02
5
Product ID
HID_UART_GET_PATH_STR
0x03
260/512
Device path
HID_UART_GET_SERIAL_STR
0x04
256
Serial string
HID_UART_GET_MANUFACTURER_STR
0x05
256
Manufacturer string
HID_UART_GET_PRODUCT_STR
0x06
256
Product string
Return Value:
HID_UART_STATUS = HID_UART_SUCCESS
HID_UART_DEVICE_NOT_FOUND
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
Rev. 0.5
5
AN433
2.3. HidUart_GetOpenedString
Description:
This function returns a null-terminated vendor ID string, product ID string, serial string, device path
string, manufacturer string, or product string for the device specified by device.
Prototype:
HID_UART_STATUS HidUart_GetOpenedString (HID_UART_DEVICE device, char*
deviceString, DWORD options)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. deviceString—Variable of type HID_UART_DEVICE_STRING which will contain a NULL
terminated ASCII device string on return. The string is 260 bytes on Windows and 512 bytes
on Mac OS X and Linux.
3. options—Determines if deviceString contains a vendor ID string, product ID string, serial
string, device path string, manufacturer string, or product string.
Definition
Value
Length
Description
HID_UART_ GET_VID_STR
0x01
5
Vendor ID
HID_UART_ GET_PID_STR
0x02
5
Product ID
HID_UART_ GET_PATH_STR
0x03
260/512
Device path
HID_UART_ GET_SERIAL_STR
0x04
256
Serial string
HID_UART_GET_MANUFACTURER_STR
0x05
256
Manufacturer string
HID_UART_GET_PRODUCT_STR
0x06
256
Product string
Return Value:
6
HID_UART_STATUS = HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
Rev. 0.5
AN433
2.4. HidUart_GetIndexedString
Description:
This function returns a null-terminated USB string descriptor for the device specified by an index
passed in deviceNum. (Windows/Linux only)
Prototype:
HID_UART_STATUS HidUart_GetIndexedString (DWORD
WORD pid, DWORD stringIndex, char* deviceString)
Parameters:
1. deviceNum—Index of the device for which the string is desired.
deviceNum,
WORD
vid,
2. vid—Filter device results by vendor ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
3. pid—Filter device results by product ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
4. stringIndex — Specifies the device-specific index of the USB string descriptor to return.
5. deviceString—Variable of type HID_UART_DEVICE_STRING which will contain a NULL
terminated device descriptor string on return. The string is 260 bytes on Windows and 512
bytes on Linux.
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_DEVICE_NOT_FOUND
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
2.5. HidUart_GetOpenedIndexedString
Description:
This function returns a null-terminated USB string descriptor for the device specified by device.
(Windows/Linux only)
Prototype:
HID_UART_STATUS HidUart_GetOpenedIndexedString (HID_UART_DEVICE device,
DWORD stringIndex, char* deviceString)
Parameters:
1. deviceNum—Device object pointer as returned by HidUart_Open().
2. stringIndex—Specifies the device-specific index of the USB string descriptor to return.
3. deviceString —Variable of type HID_UART_DEVICE_STRING which will contain a NULL
terminated device descriptor string on return. The string is 260 bytes on Windows and 512
bytes on Linux.
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
Rev. 0.5
7
AN433
2.6. HidUart_GetAttributes
Description:
This function returns the device vendor ID, product ID, and release number for the device specified
by an index passed in deviceNum.
Prototype:
HID_UART_STATUS HidUart_GetAttributes (DWORD deviceNum, WORD vid, WORD
pid, WORD* deviceVid, WORD* devicePid, WORD* deviceReleaseNumber)
Parameters:
1. deviceNum—Index of the device for which the string is desired.
2. vid—Filter device results by vendor ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
3. pid—Filter device results by product ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
4. deviceVid—Returns the device vendor ID.
5. devicePid —Returns the device product ID.
6. deviceReleaseNumber —Returns the USB device release number in binary-coded decimal.
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_DEVICE_NOT_FOUND
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
2.7. HidUart_GetOpenedAttributes
Description:
This function returns the device vendor ID, product ID, and release number for the device specified
by device.
Prototype:
HID_UART_STATUS HidUart_GetOpenedAttributes (HID_UART_DEVICE
WORD* deviceVid, WORD* devicePid, WORD* deviceReleaseNumber)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
device,
2. deviceVid —Returns the device vendor ID.
3. devicePid — Returns the device product ID.
4. deviceReleaseNumber—Returns the USB device release number in binary-coded decimal.
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_ACCESS_ERROR
8
Rev. 0.5
AN433
2.8. HidUart_Open
Description:
Opens a device using a device number between 0 and HidUart_GetNumDevices()–1, enables the
UART, and returns a device object pointer which will be used for subsequent accesses.
Prototype:
HID_UART_STATUS HidUart_Open (HID_UART_DEVICE* device, DWORD deviceNum,
WORD vid, WORD pid)
Parameters:
1. device—Returns a pointer to a HID-to-UART device object. This pointer will be used by all
subsequent accesses to the device.
2. deviceNum —Zero-based device index, between 0 and (HidUart_GetNumDevices() – 1).
3. vid—Filter device results by vendor ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
4. pid—Filter device results by product ID. If both vid and pid are set to 0x0000, then HID devices
will not be filtered by VID/PID.
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_NOT_FOUND
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_ACCESS_ERROR
HID_UART_DEVICE_NOT_SUPPORTED
Remarks:
Be careful when opening a device. Any HID device may be opened by this library. However, if the
device is not actually a CP211x, use of this library will cause undesirable results. The best course
of action would be to designate a unique VID/PID for CP211x devices only. The application should
then filter devices using this VID/PID.
2.9. HidUart_Close
Description:
Closes an opened device using the device object pointer provided by HidUart_Open().
Prototype:
HID_UART_STATUS HidUart_Close (HID_UART_DEVICE device)
Parameters:
device—Device object pointer as returned by HidUart_Open().
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_HANDLE
HID_UART_DEVICE_ACCESS_ERROR
Remarks:
device is invalid after calling HidUart_Close(). Set device to NULL.
Rev. 0.5
9
AN433
2.10. HidUart_IsOpened
Description:
Returns the device opened status.
Prototype:
HID_UART_STATUS HidUart_IsOpened (HID_UART_DEVICE device, BOOL* opened)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. opened—Returns TRUE if the device object pointer is valid and the device has been opened
using HidUart_Open().
Return Value: HID_UART_STATUS= HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
2.11. HidUart_SetUartEnable
Description:
Enables or disables the UART.
Prototype:
HID_UART_STATUS HidUart_SetUartEnable (HID_UART_DEVICE, BOOL enable)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. enable—Set to TRUE to enable the UART. Set to FALSE to disable the UART.
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
Enabling or disabling the UART will flush the UART FIFOs if the flushBuffers parameter is enabled
by calling HidUart_SetUsbConfig().
2.12. HidUart_GetUartEnable
Description:
Returns the UART enable status.
Prototype:
HID_UART_STATUS HidUart_GetUartEnable (HID_UART_DEVICE, BOOL* enable)
Parameters:
1. device —Device object pointer as returned by HidUart_Open().
2. enable —Returns TRUE if the UART is enabled. Returns FALSE if the UART is disabled.
Return Value: HID_UART_STATUS
10
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
HID_UART_INVALID_PARAMETER
Rev. 0.5
AN433
2.13. HidUart_Read
Description:
Reads the available number of bytes into the supplied buffer and returns the number of bytes read
which can be less than the number of bytes requested. This function returns synchronously after
reading the requested number of bytes or after the timeout duration has elapsed. Read and write
timeouts can be set using HidUart_SetTimeouts() described in "2.17. HidUart_SetTimeouts" on
page 13.
Prototype:
HID_UART_STATUS HidUart_Read (HID_UART_DEVICE device, BYTE* buffer,
DWORD numBytesToRead, DWORD* numBytesRead)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. buffer—Address of a buffer to be filled with read data.
3. numBytesToRead—Number of bytes to read from the device into the buffer (1–32768). This
value must be less than or equal to the size of buffer.
4. numBytesRead—Returns the number of bytes actually read into the buffer on completion.
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_READ_ERROR
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_READ_TIMED_OUT
HID_UART_INVALID_REQUEST_LENGTH
HidUart_Read() returns HID_UART_READ_TIMED_OUT if the number of bytes read is less than
the number of bytes requested. This will only occur after the read timeout has elapsed. If the
number of bytes read matches the number of bytes requested, this function will return
HID_UART_SUCCESS.
Rev. 0.5
11
AN433
2.14. HidUart_Write
Description:
Write the specified number of bytes from the supplied buffer to the device. This function returns
synchronously after writing the requested number of bytes or after the timeout duration has
elapsed. Read and write timeouts can be set using HidUart_SetTimeouts() described in "2.17.
HidUart_SetTimeouts" on page 13.
Prototype:
HID_UART_STATUS HidUart_Write (HID_UART_DEVICE device, BYTE* buffer,
DWORD numBytesToWrite, DWORD* numBytesWritten)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. buffer—Address of a buffer to be sent to the device.
3. numBytesToWrite—Number of bytes to write to the device (1–4096 bytes). This value must be
less than or equal to the size of buffer.
4. numBytesWritten—Returns the number of bytes actually written to the device.
Return Value: HID_UART_STATUS
Remarks:
12
=
HID_UART_SUCCESS
HID_UART_WRITE_ERROR
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_WRITE_TIMED_OUT
HID_UART_INVALID_REQUEST_LENGTH
HidUart_Write() returns HID_UART_WRITE_TIMED_OUT if the number of bytes written is less
than the number of bytes requested. Data is broken down into HID interrupt reports between
1 – 63 bytes in size and transmitted. Each report will be given a specific amount of time to
complete. This report timeout is determined by writeTimeout in HidUart_SetTimeouts(). Each
interrupt report is given the max timeout to complete because a timeout at the interrupt report level
is considered an unrecoverable error (the IO is canceled in an unknown state). If the HID set
interrupt report times out, HidUart_Write() returns HID_UART_WRITE_ERROR. The
HidUart_Write() timeout may take up to twice as long as the timeout specified to allow each
interrupt report to complete.
Rev. 0.5
AN433
2.15. HidUart_FlushBuffers
Description:
This function flushes the receive buffer in the device and the HID driver and/or the transmit buffer
in the device.
Prototype:
HID_UART_STATUS
HidUart_FlushBuffers
flushTransmit, BOOL flushReceive)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
(HID_UART_DEVICE
device,
BOOL
2. flushTransmit —Set to TRUE to flush the device transmit buffer.
3. flushReceive —Set to TRUE to flush the device receive buffer and HID receive buffer.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
2.16. HidUart_Cancello
Description:
This function cancels any pending HID reads and writes. (Windows only)
Prototype:
HID_UART_STATUS HidUart_CancelIo (HID_UART_DEVICE device)
Parameters:
device—Device object pointer as returned by HidUart_Open().
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
2.17. HidUart_SetTimeouts
Description:
Sets the read and write timeouts. Timeouts are used for HidUart_Read() and HidUart_Write(). The
default value for timeouts is 1000 ms, but timeouts can be set to wait for any number of
milliseconds between 0 and 0xFFFFFFFF.
Prototype:
HID_UART_STATUS
HidUart_SetTimeouts
readTimeout, DWORD writeTimeout)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
(HID_UART_DEVICE
device,
DWORD
2. readTimeout—HidUart_Read() operation timeout in milliseconds.
3. writeTimeout—HidUart_Write() operation timeout in milliseconds.
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
If read timeouts are set to a large value and no data is received, then the application may appear
unresponsive. It is recommended to set timeouts appropriately before using the device.
Rev. 0.5
13
AN433
2.18. HidUart_GetTimeouts
Description:
Returns the current read and write timeouts specified in milliseconds.
Prototype:
HID_UART_STATUS HidUart_GetTimeouts
readTimeout, DWORD* writeTimeout)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
(HID_UART_DEVICE
device,
DWORD*
2. readTimeout—HidUart_Read() operation timeout in milliseconds.
3. writeTimeout—HidUart_Write() operation timeout in milliseconds.
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
Read and write timeouts are maintained for each device but are not persistent across
HidUart_Open()/HidUart_Close().
2.19. HidUart_GetUartStatus
Description:
Returns the number of bytes held in the device receive and transmit FIFO. Returns the parity/error
status and line break status.
Prototype:
HID_UART_STATUS HidUart_GetUartStatus (HID_UART_DEVICE device,
transmitFifoSize, WORD* receiveFifoSize, BYTE* errorStatus,
lineBreakStatus)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
WORD*
BYTE*
2. transmitFifoSize—Returns the number of bytes currently held in the device transmit FIFO.
3. receiveFifoSize—Returns the number of bytes currently held in the device receive FIFO.
4. errorStatus—Returns an error status bitmap describing parity and overrun errors. Calling this
function clears the errors.
Definition
Value
Description
HID_UART_MASK_PARITY_ERROR
0x01
Parity error
HID_UART_MASK_OVERRUN_ERROR
0x02
Overrun error
5. lineBreakStatus—Returns 0x01 if line break is currently active and 0x00 otherwise.
Definition
14
Value
Description
HID_UART_LINE_BREAK_INACTIVE
0x00
Line break inactive
HID_UART_LINE_BREAK_ACTIVE
0x01
Line break active
Rev. 0.5
AN433
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
The transmitFifoSize and receiveFifoSize only apply to data held in the device FIFOs; they do not
include data queued in the HID driver or interface library.
2.20. HidUart_SetUartConfig
Description:
Sets the baud rate, data bits, parity, stop bits, and flow control. Refer to the device data sheet for a
list of supported configuration settings.
Prototype:
HID_UART_STATUS HidUart_SetUartConfig (HID_UART_DEVICE device, DWORD
baudRate, BYTE dataBits, BYTE parity, BYTE stopBits, BYTE flowControl)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. baudRate —The baud rate for UART communication. Default: 115200
3. dataBits—The number of data bits for UART communication. Default: 8
Definition
Value
Description
HID_UART_FIVE_DATA_BITS
0x00
5 data bits
HID_UART_SIX_DATA_BITS
0x01
6 data bits
HID_UART_SEVEN_DATA_BITS
0x02
7 data bits
HID_UART_EIGHT_DATA_BITS
0x03
8 data bits
4. parity—The parity for UART communication. Default: No parity
Definition
Value
Description
HID_UART_NO_PARITY
0x00
No parity
HID_UART_ODD_PARITY
0x01
Odd parity (sum of data bits is odd)
HID_UART_EVEN_PARITY
0x02
Even parity (sum of data bits is even)
HID_UART_MARK_PARITY
0x03
Mark parity (always 1)
HID_UART_SPACE_PARITY
0x04
Space parity (always 0)
Rev. 0.5
15
AN433
5. stopBits—The number of stop bits for UART communication. Default: 1
Definition
Value
Description
HID_UART_SHORT_STOP_BIT
0x00
1 stop bit
HID_UART_LONG_STOP_BIT
0x01
5 data bits: 1.5 stop bits
6-8 data bits: 2 stop bits
6. flowControl—The type of flow control for UART communication. Default: No flow control
Definition
Value
Description
HID_UART_NO_FLOW_CONTROL
0x00
No flow control
HID_UART_RTS_CTS_FLOW_CONTROL
0x01
RTS/CTS hardware flow
control
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
2.21. HidUart_GetUartConfig
Description:
Gets the baud rate, data bits, parity, stop bits, and flow control. Refer to the device data sheet for a
list of supported baud rates. See "2.20. HidUart_SetUartConfig" on page 15.
Prototype:
HID_UART_STATUS HidUart_GetUartConfig (HID_UART_DEVICE device, DWORD*
baudRate,
BYTE*
dataBits,
BYTE*
parity,
BYTE*
stopBits,
BYTE*
flowControl)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. baudRate—Returns the baud rate for UART communication.
3. dataBits—Returns the number of data bits for UART communication.
4. parity—Returns the parity for UART communication.
5. stopBits—Returns the number of stop bits for UART communication.
6. flowControl—Returns the type of flow control for UART communication.
Return Value: HID_UART_STATUS
16
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
AN433
2.22. HidUart_StartBreak
Description:
Causes the device to transmit a line break, holding the TX pin low, for the specified duration in
milliseconds.
Prototype:
HID_UART_STATUS
duration)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
HidUart_StartBreak
(HID_UART_DEVICE
device,
BYTE
2. duration—The length of time in milliseconds to transmit the line break (1–125 ms). A value of
0x00 indicates that the line break will be transmitted indefinitely until HidUart_StopBreak() is
called.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
2.23. HidUart_StopBreak
Description:
Stops the device from transmitting a line break.
Prototype:
HID_UART_STATUS HidUart_StopBreak (HID_UART_DEVICE device)
Parameters:
device—Device object pointer as returned by HidUart_Open().
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
This function is ignored if the device is not transmitting a line break.
2.24. HidUart_Reset
Description:
Initiates a full device reset. Transmit and receive FIFOs will be cleared, UART settings will be reset
to default values, and the device will re-enumerate.
Prototype:
HID_UART_STATUS HidUart_Reset (HID_UART_DEVICE device)
Parameters:
device—Device object pointer as returned by HidUart_Open().
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
Resetting the device will make the device’s handle stale. Users must close the device using the
old handle before proceeding to reconnect to the device. See more information on surprise
removal. Default UART settings are as follows: 115200 8N1, no flow control.
Rev. 0.5
17
AN433
2.25. HidUart_ReadLatch
Description:
Gets the current port latch value from the device.
Prototype:
HID_UART_STATUS
latchValue)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
HidUart_ReadLatch
(HID_UART_DEVICE
device,
WORD*
2. latchValue—Returns the port latch value (Logic High = 1, Logic Low = 0). If a pin is configured
as a GPIO input or flow control pin that is an input, then the corresponding bit represents the
input value. If a pin is configured as a GPIO output pin or a flow control pin that is an output,
then the corresponding bit represents the logic level driven on the pin.
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
See "6. Port Latch Pin Definition" on page 46 for more information on configuring GPIO and flow
control pins. Bits 9 and 15 of latchValue are ignored.
2.26. HidUart_WriteLatch
Description:
Sets the current port latch value to the device.
Prototype:
HID_UART_STATUS
HidUart_WriteLatch
latchValue, WORD latchMask)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
(HID_UART_DEVICE
device,
WORD
2. latchValue—Value to write to the port latch (Logic High = 1, Logic Low = 0). This function is
used to set the values for GPIO pins or flow control pins that are configured as outputs. This
function will not affect any pins that are not configured as outputs.
3. latchMask—Determines which pins to change (Change = 1, Leave = 0).
Return Value: HID_UART_STATUS
Remarks:
18
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
See "6. Port Latch Pin Definition" on page 46 for more information on configuring GPIO and flow
control pins. Bits 9 and 15 or latchValue and latchMask are ignored. Pins TX, RX, Suspend, and /
Suspend cannot be written to using this function.
Rev. 0.5
AN433
2.27. HidUart_GetPartNumber
Description:
Retrieves the part number and version of the CP211x device.
Prototype:
HID_UART_STATUS HidUart_GetPartNumber
partNumber, BYTE* version)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
(HID_UART_DEVICE
device,
BYTE*
2. partNumber—Returns the device part number.
Definition
Value
Description
HID_UART_PART_CP2110
0x0A
CP2110
HID_UART_PART_CP2114
0x0E
CP2114
3. version—Returns the version. This value is not user-programmable.
Return Value:
HID_UART_STATUS=HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
19
AN433
2.28. HidUart_GetLibraryVersion
Description:
Returns the HID-to-UART Interface Library version.
Prototype:
HID_UART_STATUS
BOOL* release)
Parameters:
1. major—Returns the major library version number. This value ranges from 0 to 255.
HidUart_GetLibraryVersion
(BYTE*
major,
BYTE*
minor,
2. minor—Returns the minor library version number. This value ranges from 0 to 255.
3. release—Returns TRUE if the library is a release build, otherwise the library is a Debug build.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
2.29. HidUart_GetHidLibraryVersion
Description:
Returns the version of the HID Device Interface Library that is currently in use.
Prototype:
HID_UART_STATUS HidUart_GetHidLibraryVersion (BYTE* major, BYTE* minor,
BOOL* release)
Parameters:
1. major—Returns the major library version number. This value ranges from 0 to 255.
2. minor—Returns the minor library version number. This value ranges from 0 to 255.
3. release—Returns TRUE if the library is a release build, otherwise the library is a Debug build.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
2.30. HidUart_GetHidGuid
Description:
Obtains the HID GUID. This can be used to register for surprise removal notifications. (Windows
only)
Prototype:
HID_UART_STATUS HidUart_GetHidGuid (void* guid)
Parameters:
1. guid—Returns the HID GUID.
Return Value: HID_UART_STATUS
20
=
HID_UART_SUCCESS
HID_UART_INVALID_PARAMETER
Rev. 0.5
AN433
3. User Customization API Functions
The following parameters are programmable on the device. Different functions are provided to program these
parameters. Each of these functions can only be called once for each device and apply to the CP2110 and
CP2114.
Name
Size
(Bytes)
Short Description
VID
2
USB Vendor ID
PID
2
USB Product ID
Power
1
Power request in mA/2
Power Mode
1
Bus Powered
Self Powered
Release Version
2
Major and Minor release version
Flush Buffers
1
Purge FIFOs on enable/disable
Manufacturer String
126
Product Manufacturer (English Unicode)
Product Description String
126
Product Description (English Unicode)
Serial String
62
Serialization String (English Unicode)
The following API functions are provided to allow user customization / one-time programming:
Definition
Description
Page #
HidUart_SetLock()
Prevents further OTP programming/customization
22
HidUart_GetLock()
Gets the OTP lock status
23
HidUart_SetUsbConfig()
Sets VID, PID, power, power mode, release version, and flush
buffers settings
24
HidUart_GetUsbConfig()
Gets VID, PID, power, power mode, release version, and flush
buffers settings
26
HidUart_SetManufacturingString()
Sets the USB manufacturing string
27
HidUart_GetManufacturingString()
Gets the USB manufacturing string
27
HidUart_SetProductString()
Sets the USB product string
28
HidUart_GetProductString()
Gets the USB product string
28
HidUart_SetSerialString()
Sets the USB serial string
29
HidUart_GetSerialString()
Gets the USB serial string
29
Note: "4. CP2110 User-Customizable API Functions" on page 30 and "5. CP2114 User-Customizable API Functions" on
page 35 contain additional user customization/one-time programmable functions specific to the CP2110 and CP2114.
Rev. 0.5
21
AN433
3.1. HidUart_SetLock
Description:
Permanently locks/disables device customization.
Prototype:
HID_UART_STATUS HidUart_SetLock (HID_UART_DEVICE device, WORD lock)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. lock—Bitmask specifying which fields can be customized/programmed and which fields are
already customized.
Bit
Definition
Description
0
HID_UART_LOCK_PRODUCT_STR_1
0x0001
Product String
1
HID_UART_LOCK_PRODUCT_STR_2
0x0002
Product String
2
HID_UART_LOCK_SERIAL_STR
0x0004
Serial String
3
HID_UART_LOCK_PIN_CONFIG
0x0008
Pin Config
4
N/A
5
N/A
6
N/A
7
N/A
8
HID_UART_LOCK_VID
0x0100
VID
9
HID_UART_LOCK_PID
0x0200
PID
10
HID_UART_LOCK_POWER
0x0400
Power
11
HID_UART_LOCK_POWER_MODE
0x0800
Power Mode
12
HID_UART_LOCK_RELEASE_VERSION
0x1000
Release Version
13
HID_UART_LOCK_FLUSH_BUFFERS
0x2000
Flush Buffers
14
HID_UART_LOCK_MFG_STR_1
0x4000
Manufacturing String
15
HID_UART_LOCK_MFG_STR_2
0x8000
Manufacturing String
Definition
22
Mask
Bit Value
Description
HID_UART_LOCK_UNLOCKED
1
Field can be customized
HID_UART_LOCK_LOCKED
0
Field has already been customized or
has been locked
Rev. 0.5
AN433
Return Value: HID_UART_STATUS
Remarks:
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_DEVICE_IO_FAILED
When this function is successfully called, the specified fields are fully locked and cannot be further
customized. The user customization functions can be called and may return
HID_UART_SUCCESS even though the device was not programmed. Call the function’s
corresponding get function to verify that customization was successful. Each field is stored in one
time programmable memory (OTP) and can only be customized once. After a field is customized,
the corresponding lock bits are set to 0.
3.2. HidUart_GetLock
Description:
Returns the device customization lock status.
Prototype:
HID_UART_STATUS HidUart_GetLock (HID_UART_DEVICE device, WORD* lock)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. lock—Returns a bitmask specifying which fields are locked.
Bit
Definition
Mask
Description
0
HID_UART_LOCK_PRODUCT_STR_1
0x0001
Product String
1
HID_UART_LOCK_PRODUCT_STR_2
0x0002
Product String
2
HID_UART_LOCK_SERIAL_STR
0x0004
Serial String
3
HID_UART_LOCK_PIN_CONFIG
0x0008
Pin Config
4
N/A
5
N/A
6
N/A
7
N/A
8
HID_UART_LOCK_VID
0x0100
VID
9
HID_UART_LOCK_PID
0x0200
PID
10
HID_UART_LOCK_POWER
0x0400
Power
11
HID_UART_LOCK_POWER_MODE
0x0800
Power Mode
12
HID_UART_LOCK_RELEASE_VERSION
0x1000
Release Version
13
HID_UART_LOCK_FLUSH_BUFFERS
0x2000
Flush Buffers
14
HID_UART_LOCK_MFG_STR_1
0x4000
Manufacturing String
15
HID_UART_LOCK_MFG_STR_2
0x8000
Manufacturing String
Rev. 0.5
23
AN433
Definition
Bit Value
Description
HID_UART_LOCK_UNLOCKED
1
Field can be customized
HID_UART_LOCK_LOCKED
0
Field has already been customized or
has been locked
Return Value:HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
3.3. HidUart_SetUsbConfig
Description:
Allows one-time customization of the USB configuration, which includes vendor ID, product ID,
power, power mode, release version, and flush buffers setting. Each field can be independently
programmed one time each via the mask field.
Prototype:
HID_UART_STATUS HidUart_SetUsbConfig (HID_UART_DEVICE device, WORD vid,
WORD pid, BYTE power, BYTE powerMode, WORD releaseVersion, BYTE
flushBuffers, BYTE mask)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. vid—Vendor ID.
3. pid—Product ID.
4. power—Specifies the current requested by the device in milliamps/2. The maximum power
setting is 500 mA or 250 (0xFA). This value only applies when the device is configured to be
bus powered.
5. powerMode—Configures the device as bus powered or self powered.
Definition
Value
Description
HID_UART_BUS_POWER
0x00
Device is bus powered
HID_UART_SELF_POWER_VREG_DIS
0x01
Device is self-powered and voltage regulator is
disabled
HID_UART_SELF_POWER_VREG_EN
0x02
Device is self-powered and voltage regulator is
enabled
6. releaseVersion—The release version. The MSB is the major revision and the LSB is the minor
revision. Both revisions can be programmed to any value from 0 to 255.
7. flushBuffers—Bitmask specifying whether the RX and/or TX FIFOs are purged upon a device
open and/or close.
24
Rev. 0.5
AN433
Bit
Definition
Mask
Description
0
HID_UART_FLUSH_TX_OPEN
0x01
Flush TX on Open
1
HID_UART_FLUSH_TX_CLOSE
0x02
Flush TX on Close
2
HID_UART_FLUSH_RX_OPEN
0x04
Flush RX on Open
3
HID_UART_FLUSH_RX_CLOSE
0x08
Flush RX on Close
8. mask—Bitmask specifying which fields to customize.
Bit
Definition
Mask
Description
0
HID_UART_SET_VID
0x01
VID
1
HID_UART_SET_PID
0x02
PID
2
HID_UART_SET_POWER
0x04
Power
3
HID_UART_SET_POWER_MODE
0x08
Power Mode
4
HID_UART_SET_RELEASE_VERSION
0x10
Release Version
5
HID_UART_SET_FLUSH_BUFFERS
0x20
Flush Buffers
6
N/A
7
N/A
Definition
Bit Value
Description
HID_UART_SET_IGNORE
0
Field will be unchanged
HID_UART_SET_PROGRAM
1
Field will be programmed
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
25
AN433
3.4. HidUart_GetUsbConfig
Description:
Retrieves USB configuration, which includes vendor ID, product ID, power, power mode, release
version, and flush buffers setting.
Prototype:
HID_UART_STATUS HidUart_GetUsbConfig (HID_UART_DEVICE device, WORD* vid,
WORD* pid, BYTE* power, BYTE* powerMode, WORD* releaseVersion, BYTE*
flushBuffers)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. vid—Returns the vendor ID.
3. pid—Returns the product ID.
4. power—Returns the current requested by the device in milliamps/2. This value only applies
when the device is bus powered.
5. powerMode—Returns the device power mode.
Definition
Value
Description
HID_UART_BUS_POWER
0x00
Device is bus-powered
HID_UART_SELF_POWER_VREG_DIS
0x01
Device is self-powered and voltage
regulator is disabled
HID_UART_SELF_POWER_VREG_EN
0x02
Device is self-powered and voltage
regulator is enabled
6. releaseVersion—Returns the release version. The MSB is the major revision and the LSB is
the minor revision. Both revisions can be programmed to any value from 0 to 255.
7. flushBuffers—Returns a bitmask specifying whether the RX and/or TX FIFOs are purged upon
a device open and/or close.
Bit
Definition
Description
0
HID_UART_FLUSH_TX_OPEN
0x01
Flush TX on Open
1
HID_UART_FLUSH_TX_CLOSE
0x02
Flush TX on Close
2
HID_UART_FLUSH_RX_OPEN
0x04
Flush RX on Open
3
HID_UART_FLUSH_RX_CLOSE
0x08
Flush RX on Close
Return Value: HID_UART_STATUS
26
Mask
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
AN433
3.5. HidUart_SetManufacturingString
Description:
Allows one-time customization of the USB manufacturing string.
Prototype:
HID_UART_STATUS HidUart_SetManufacturingString (HID_UART_DEVICE device,
char* manufacturingString, BYTE strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. manufacturingString—Variable of type HID_UART_CP2110/4_MFG_STR, a 62-byte character
buffer containing the ASCII manufacturing string.
3. strlen—The length of manufacturingString in bytes. The maximum string length is 62 bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
3.6. HidUart_GetManufacturingString
Description:
Retrieves the USB manufacturing string.
Prototype:
HID_UART_STATUS HidUart_GetManufacturingString (HID_UART_DEVICE device,
char* manufacturingString, BYTE* strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. manufacturingString—Variable of type HID_UART_CP2110/4_MFG_STR,
character buffer that will contain the ASCII manufacturing string.
a
62-byte
3. strlen—Returns the length of the string in bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
27
AN433
3.7. HidUart_SetProductString
Description:
Allows one-time customization of the USB product string.
Prototype:
HID_UART_STATUS HidUart_SetProductString (HID_UART_DEVICE device, char*
productString, BYTE strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. productString—Variable of type HID_UART_CP2110/4_PRODUCT_STR, a 62-byte character
buffer containing the ASCII product string.
3. strlen—The length of productString in bytes. The maximum string length is 62 bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
3.8. HidUart_GetProductString
Description:
Retrieves the USB product string.
Prototype:
HID_UART_STATUS HidUart_GetProductString (HID_UART_DEVICE device, char*
productString, BYTE* strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. productString—Variable of type HID_UART_CP2110/4_PRODUCT_STR, a 62-byte character
buffer that will contain the ASCII product string.
3. strlen—Returns the length of the string in bytes.
Return Value: HID_UART_STATUS
28
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
AN433
3.9. HidUart_SetSerialString
Description:
Allows one-time customization of the USB serial string.
Prototype:
HID_UART_STATUS HidUart_SetSerialString (HID_UART_DEVICE device, char*
serialString, BYTE strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. serialString—Variable of type HID_UART_CP2110/4_SERIAL_STR, a 30-byte character
buffer containing the ASCII serial string.
3. strlen—The length of serialString in bytes. The maximum string length is 30 bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
3.10. HidUart_GetSerialString
Description:
Retrieves the USB product string.
Prototype:
HID_UART_STATUS HidUart_GetSerialString (HID_UART_DEVICE device, char*
serialString, BYTE* strlen)
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. serialString—Variable of type HID_UART_CP2110/4_SERIAL_STR, a 30-byte character
buffer that will contain the Unicode product string.
3. strlen—Returns the length of the string in bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
Rev. 0.5
29
AN433
4. CP2110 User-Customizable API Functions
The following parameters are programmable on the CP2110. Different functions are provided to program these
parameters. Each of these functions can only be called once for each device.
Name
Size
Short Description
Pin Configuration
18
All pins configuration
The following API functions are provided to allow user customization / one-time programming:
Definition
Description
Page #
HidUart_SetPinConfig()
Configures the pin behavior
30
HidUart_GetPinConfig()
Gets pin configuration
34
4.1. HidUart_SetPinConfig
Description:
Allows one-time configuration of the GPIO mode for each pin.
Prototype:
HID_UART_STATUS
HidUart_SetPinConfig(HID_UART_DEVICE
device,
BYTE*
pinConfig, BOOL useSuspendValues, WORD suspendValue, WORD suspendMode,
BYTE rs485Level, BYTE clkDiv);
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
2. pinConfig—A pointer to a 13-byte array that configures the GPIO mode for each of the 13 pins.
The RX pin is not configurable.
Byte
30
Name
Value
Mode
0
GPIO.0/CLK
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
CLK Output–Push Pull
1
GPIO.1/RTS
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
RTS Output–Push Pull
2
GPIO.2/CTS
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output– Open Drain
GPIO Output– Push Pull
CTS Input
3
GPIO.3/RS485
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
RS485 Output–Push Pull
Rev. 0.5
AN433
Byte
Name
Value
4
GPIO.4/TX Toggle
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
TX Toggle Output–Push Pull
5
GPIO.5/RX Toggle
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
RX Toggle Output–Push Pull
6
GPIO.6
0x00
0x01
0x02
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
7
GPIO.7
0x00
0x01
0x02
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
8
GPIO.8
0x00
0x01
0x02
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
9
GPIO.9
0x00
0x01
0x02
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
10
TX
0x01
0x02
TX–Open Drain
TX–Push Pull
11
Suspend
0x01
0x02
Suspend–Open Drain
Suspend–Push Pull
12
/Suspend
0x01
0x02
/Suspend–Open Drain
/Suspend–Push Pull
Definition
Mode
Value
Description
HID_UART_GPIO_MODE_INPUT
0x00
GPIO Input
HID_UART_GPIO_MODE_OD
0x01
GPIO Output–Open Drain
HID_UART_GPIO_MODE_PP
0x02
GPIO Output–Push Pull
HID_UART_GPIO_MODE_FUNCTION1
0x03
Pin specific function and mode
3. useSuspendValues—Specifies if the device is to use suspendValue and suspendMode when
device is in USB suspend. If set to 1, the device will use these values. If cleared to 0, the
device's GPIO pins will remain in the state they were in before entering USB suspend.
4. suspendValue–This is the latch value that will be driven on each GPIO pin when the device is
in a suspend state.
Rev. 0.5
31
AN433
Bit
Definition
Bit Mask
Description
0
CP2110_MASK_GPIO_0_CLK
0x0001
GPIO.0/CLK
1
CP2110_ MASK_GPIO_1_RTS
0x0002
GPIO.1/RTS
2
CP2110_ MASK_GPIO_2_CTS
0x0004
GPIO.2/CTS
3
CP2110_ MASK_GPIO_3_RS485
0x0008
GPIO.3/RS485
4
CP2110_ MASK_TX
0x0010
TX
5
CP2110_ MASK_RX
0x0020
RX
6
CP2110_ MASK_GPIO_4_TX_TOGGLE
0x0040
TX Toggle
7
CP2110_ MASK_GPIO_5_RX_TOGGLE
0x0080
RX Toggle
8
CP2110_MASK_SUSPEND_BAR
0x0100
Suspend
9
N/A
10
CP2110_ MASK_GPIO_6
0x0400
GPIO.6
11
CP2110_ MASK_GPIO_7
0x0800
GPIO.7
12
CP2110_ MASK_GPIO_8
0x1000
GPIO.8
13
CP2110_ MASK_GPIO_9
0x2000
GPIO.9
14
CP2110_MASK_SUSPEND
0x4000
Suspend
15
N/A
Definition
Bit Value
Description
HID_UART_VALUE_SUSPEND_LO
0
Latch = 0 in suspend
HID_UART_VALUE_SUSPEND_HI
1
Latch = 1 in suspend
5. suspendMode—Specifies the mode for each GPIO pin when the device is in a suspend state.
32
Rev. 0.5
AN433
Bit
Definition
Bit Mask
Description
0
CP2110_MASK_GPIO_0_CLK
0x0001
GPIO.0/SYSCLK
1
CP2110_ MASK_GPIO_1_RTS
0x0002
GPIO.1/RTS
2
CP2110_ MASK_GPIO_2_CTS
0x0004
GPIO.2/CTS
3
CP2110_ MASK_GPIO_3_RS485
0x0008
GPIO.3/RS485
4
CP2110_ MASK_TX
0x0010
TX
5
CP2110_ MASK_RX
0x0020
RX
6
CP2110_ MASK_GPIO_4_TX_TOGGLE
0x0040
TX Toggle
7
CP2110_ MASK_GPIO_5_RX_TOGGLE
0x0080
RX Toggle
8
CP2110_MASK_SUSPEND_BAR
0x0100
Suspend
9
N/A
10
CP2110_ MASK_GPIO_6
0x0400
GPIO.6
11
CP2110_ MASK_GPIO_7
0x0800
GPIO.7
12
CP2110_ MASK_GPIO_8
0x1000
GPIO.8
13
CP2110_ MASK_GPIO_9
0x2000
GPIO.9
14
CP2110_MASK_SUSPEND
0x4000
Suspend
15
N/A
Definition
Bit Value
Description
HID_UART_MODE_SUSPEND_OD
0
Open Drain in suspend
HID_UART_MODE_SUSPEND_PP
1
Push Pull in suspend
6. rs485Level—Specifies the RS-485 pin level of GPIO.2 when configured in RS-485 mode.
Definition
Value
Description
HID_UART_MODE_RS485_ACTIVE_LO
0x00
GPIO.2/RS485 pin is active low
HID_UART_MODE_RS485_ACTIVE_HI
0x01
GPIO.2/RS485 pin is active high
Rev. 0.5
33
AN433
7. clkDiv—Divider applied to GPIO0_CLK clock output. When 0, the output frequency is 24 MHz.
For 1–255, the output frequency is 24 MHz/(2 x clkDiv).
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
4.2. HidUart_GetPinConfig
Description:
Retrieves the GPIO mode configuration for each pin.
Prototype:
HID_UART_STATUS
HidUart_GetPinConfig(HID_UART_DEVICE
device,
pinConfig,
BOOL*
useSuspendValues,
WORD*
suspendValue,
suspendMode, BYTE* rs485Level, BYTE* clkDiv);
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
BYTE*
WORD*
2. pinConfig—A pointer to a 13-byte array that will contain the GPIO mode configuration for each
of the 13 pins.
3. useSuspendValues—Returns the configuration for using the values in suspendValue and
suspendMode when in suspend mode. This bit is the same as bit 15 of suspendMode.
4. suspendValue—Returns the latch value that will be driven on each GPIO pin when the device
is in a suspend state.
5. suspendMode—Returns the mode for each GPIO pin when the device is in a suspend state.
6. rs485Level—Returns the RS-485 pin level of GPIO.2 when configured in RS–485 mode.
7. clkDiv—Divider applied to GPIO0_CLK clock output. When 0, the output frequency is 24 MHz.
For 1–255, the output frequency is 24 MHz/(2 x clkDiv).
Return Value: HID_UART_STATUS
34
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
AN433
5. CP2114 User-Customizable API Functions
The following API functions access customizable features of CP2114 devices.
Definition
Description
Page
CP2114_GetVersions()
Gets the API and firmware versions
36
CP2114_SetPinConfig()
Configures the pin behavior
36
CP2114_GetPinConfig()
Gets pin configuration
39
CP2114_GetDeviceStatus()
Gets the CP2114 device status
40
CP2114_GetDeviceCaps()
Gets the CP2114 device capabilities
41
CP2114_SetRamConfig()
Sets the CP2114 configuration in
RAM
42
CP2114_GetRamConfig()
Gets the CP2114 device configuration from RAM
42
CP2114_SetDacRegisters()
Sets the DAC configuration registers
43
CP2114_GetDacRegisters()
Gets the DAC configuration registers
43
CP2114_GetOtpConfig()
Gets the OTP configuration based
on the current index
44
CP2114_CreateOtpConfig()
Creates a new configuration block
for the CP2114
44
CP2114_SetBootConfig()
Sets the CP2114 boot configuration
index
45
CP2114_ReadOTP()
Reads OTP customization block
45
CP2114_WriteOTP()
Writes OTP customization block
45
Rev. 0.5
35
AN433
5.1. CP2114_GetVersions
Description:
Returns the CP2114 API and firmware versions.
Prototype:
HID_UART_STATUS
CP2114_GetVersions(HID_UART_DEVICE
api_version, BYTE* fw_version);
Parameters:
1. device—Device object pointer as returned by HidUart_Open().
device,
BYTE*
2. api_version—Returns the API version of the device.
3. fw_version—Returns the firmware version of the device.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.2. CP2114_SetPinConfig
Description:
Allows one-time configuration of the GPIO mode for each pin.
Prototype:
HID_UART_STATUS
CP2114_SetPinConfig(HID_UART_DEVICE
device,
BYTE*
pinConfig, BOOL useSuspendValues, WORD suspendValue, WORD suspendMode,
BYTE clkDiv)
1. device—Device object pointer as returned by HidUart_Open().
Parameters:
2. pinConfig—A pointer to a 14-byte array that configures the GPIO mode or dedicated function
for each of the 14 pins.
36
Byte
Name
Value
0
GPIO.0_RMUTE
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
Record Mute Input*
1
GPIO.1_PMUTE
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
Play Back Mute Input*
2
GPIO.2_VOL–
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
Volume Down Input*
3
GPIO.3_VOL+
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
Volume Up Input*
Rev. 0.5
Mode
AN433
4
GPIO.4_RMUTELED
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
LED1 RMute Output*
5
GPIO.5_TXT_DACSEL0
0x00
0x01
0x02
0x03
0x04
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
TX Toggle Output–Push Pull
DAC Select 0 Input*
6
GPIO.6_RXT_DACSEL1
0x00
0x01
0x02
0x03
0x04
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
RX Toggle Output–Push Pull
DAC Select 1 Input*
7
GPIO.7_RTS_DACSEL2
0x00
0x01
0x02
0x03
0x04
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
RTS Output–Push Pull
DAC Select 2 Input*
8
GPIO.8_CTS_DACSEL3
0x00
0x01
0x02
0x03
0x04
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
CTS Input
DAC Select 3 Input*
9
GPIO.9_CLKOUT
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output–Push Pull
CLK Output–Push Pull*
10
GPIO.10_TX
0x00
0x01
0x02
0x03
0x04
GPIO Input
GPIO Output–Open Drain
GPIO Output– Open Drain
TX Output–Open Drain
TX Output–Push Pull*
11
GPIO.11_RX
0x00
0x01
0x02
0x03
GPIO Input
GPIO Output–Open Drain
GPIO Output– Open Drain
RX Input*
12
Suspend
0x01
0x02
Suspend–Open Drain
Suspend–Push Pull*
13
/Suspend
0x01
0x02
/Suspend–Open Drain
/Suspend–Push Pull*
*Note: Default setting.
Rev. 0.5
37
AN433
useSuspendValues—Specifies if the device is to use suspendValue and suspendMode when
device is in USB suspend. If set to 1, the device will use these values. If cleared to 0, the
device's GPIO pins will remain in the state they were in before entering USB suspend.
suspendValue—This is the latch value that will be driven on each GPIO pin except Suspend and /
Suspend when the device is in a suspend state.
suspendMode—Specifies the mode for each GPIO pin when the device is in a suspend state.
Bit
Definition
Bit Mask
Description
0
CP2114_MASK_GPIO_0
0x0001
GPIO.0_RMUTE
1
CP2114_MASK_GPIO_1
0x0002
GPIO.1_PMUTE
2
CP2114_MASK_GPIO_2
0x0004
GPIO.2_VOL-
3
CP2114_MASK_GPIO_3
0x0008
GPIO.3_VOL+
4
CP2114_MASK_GPIO_4
0x0010
GPIO.4_RMUTELED
5
CP2114_MASK_GPIO_5
0x0020
GPIO.5_TXT_DACSEL0
6
CP2114_MASK_GPIO_6
0x0040
GPIO.6_RXT_DACSEL1
7
CP2114_MASK_GPIO_7
0x0080
GPIO.7_RTS_DACSEL2
8
CP2114_MASK_GPIO_8
0x0100
GPIO.8_CTS_DACSEL3
9
CP2114_MASK_GPIO_9
0x0200
GPIO.9_CLKOUT
10
CP2114_MASK_TX
0x0400
GPIO.10_TX
11
CP2114_MASK_RX
0x0800
GPIO.11_RX
12
CP2114_MASK_SUSPEND
0x1000
Suspend
13
CP2114_MASK_SUSPEND_BAR
0x2000
/Suspend
clkDiv—Divider applied to GPIO9./CLK clock output when the pin is configured to CLK OutputPush Pull. When 0, the output frequency is SYSCLK/(2x256). For 1-255, the output frequency
is SYSCLK/(2 x clkDiv). SYSCLK can be either 48MHz or 49.152MHz depending on the
configuration.
Return Value: HID_UART_STATUS
38
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
AN433
5.3. CP2114_GetPinConfig
Description:
Retrieves the GPIO mode configuration for each pin.
Prototype:
HID_UART_STATUS
CP2114_GetPinConfig(HID_UART_DEVICE
device,
pinConfig,
BOOL*
useSuspendValues,
WORD*
suspendValue,
suspendMode, BYTE* clkDiv)
1. device—Device object pointer as returned by HidUart_Open().
Parameters:
BYTE*
WORD*
2. pinConfig—A pointer to a 14-byte array to store GPIO mode configuration or dedicated
function for each of the 14 pins.
3. useSuspendValues—Returns the configuration for using the values in suspendValue and
suspendMode when in suspend mode. This bit is the same as bit 15 of suspendMode.
4. suspendValue—Returns the latch value that will be driven on each GPIO pin when the device
is in a suspend state.
5. suspendMode—Returns the mode for each GPIO pin when the device is in a suspend state.
6. clkDiv—Divider applied to GPIO.9_CLKOUT clock output. When 0, the output frequency is
SYSCLK/(2 x 256). For 1–255, the output frequency is SYSCLK/(2 x clkDiv). SYSCLK can be
either 48 MHz or 49.152 MHz depending on the configuration.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
39
AN433
5.4. CP2114_GetDeviceStatus
Description:
Prototype:
Parameters:
Returns the status of the device (the device status is cleared on a read).
HID_UART_STATUS
CP2114_GetDeviceStatus(HID_UART_DEVICE
*pCP2114Status)
1. device—Device object pointer as returned by HidUart_Open().
device,
BYTE
2. pCP2114Status—Pointer to store status byte.
Definition
Value
Description
HID_UART_SUCCESS
0x00
Last command produced no error
HID_UART_INVALID_CONFIG_NUMBER
0x20
Requested configuration number exceeded
max configurations of 32
HID_UART_BOOT_INDEXES_DEPLETED
0x21
All boot indices have been used
HID_UART_REQUESTED_CONFIG_NOT_PRESENT
0x22
Pointer to requested configuration is
0xFFFF
HID_UART_CONFIG_INVALID
0x23
Specified configuration consists of invalid
parameters
HID_UART_CONFIG_POINTERS_DEPLETED
0x24
All configuration pointer slots have been
used
HID_UART_CONFIG_SPACE_DEPLETED
0x25
Not enough space to save the new Config
HID_UART_BOOT_INDEX_UNCHANGED
0x26
The user-specified boot index is already
the current boot index stored in OTP
HID_UART_CONFIG_UNCHANGED
0x27
Current configuration is already the same
as the user requested
HID_UART_INVALID_NUMER_OF_CACHED_PARAMS
0x40
Specified tSetParamsForNextGet.params
exceeds MAX_CACHED_PARAMS of 4
HID_UART_UNEXPECTED_CACHE_DATA
0x41
Unexpected data in tSetParamsForNextGet
Return Value: HID_UART_STATUS
40
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
AN433
5.5. CP2114_GetDeviceCaps
Description:
Prototype:
Parameters:
Returns the CP2114 device capabilities.
HID_UART_STATUS
CP2114_GetDeviceCaps(HID_UART_DEVICE
PCP2114_CAPS_STRUCT pCP2114CapsStruct)
1. device—Device object pointer as returned by HidUart_Open().
device,
2. pCP2114CapsStruct—pointer to store CP2114_CAPS_STRUCT.
typedef struct
{
U8
availableBootIndices;
U8
availableOtpConfigs;
U8
currentBootConfig;
U8
availableOtpConfigSpace_LSB;
U8
availableOtpConfigSpace_MSB;
}tDeviceCaps;
3. availableBootIndices—Indicates how many CP2114 OTP Boot indices are left for
programming.
4. availableOtpConfigs—indicates how many entries are left for programming in the CP2114
configuration table. Three OTP configurations are pre-programmed at factory default.
5. currentBootConfig—indicates the current active boot config. This active boot config may be
dictated by DAC Select Pins, thus this might not be the boot index in OTP. If currentBootConfig
is 0xFF, the device will boot up with no DAC.
6. availableOtpConfigSpace_LSB—low byte of OTP space left to support new configurations.
7. availableOtpConfigSpace_MSB—high byte of OTP space left to support new configurations.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
41
AN433
5.6. CP2114_SetRamConfig
Description:
Configures the CP2114 RAM configuration parameters with the given values. These settings are
written to the internal structures of the CP2114, they're not retained on power cycle. These values
might not take immediate effect, device re-enumeration may be required.
Dynamic switch on different clock sources is not supported using CP2114_SetRamConfig. If clock
settings differ from those at boot up, the new configuration should be written to OTP and
configured as the new boot index. Then power cycle the device to verify the new settings.
Prototype:
Parameters:
The CP2114 datasheet has more information on the audio configuration string format
(CP2114_RAM_CONFIG_STRUCT).
HID_UART_STATUS
CP2114_SetRamConfig(HID_UART_DEVICE
device,
PCP2114_RAM_CONFIG_STRUCT pCP2114RamConfigStruct)
1. device—Device object pointer as returned by HidUart_Open().
2. pCP2114RamConfigStruct—pointer to CP2114_RAM_CONFIG_STRUCT.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.7. CP2114_GetRamConfig
Description:
Prototype:
Parameters:
Gets the current CP2114 RAM configuration parameters.
HID_UART_STATUS
CP2114_GetRamConfig(HID_UART_DEVICE
PCP2114_RAM_CONFIG_STRUCT pCP2114RamConfigStruct)
1. device—Device object pointer as returned by HidUart_Open().
2. pCP2114RamConfigStruct—pointer to store the 32-byte RAM config.
Return Value: HID_UART_STATUS
42
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
device,
AN433
5.8. CP2114_SetDacRegisters
Description:
Configures the device or attached DAC using multiples of 2-byte or 3-byte sequences.
The first byte is DAC register address or special in-band command.
The following byte(s) is the data to write in the specified DAC register if preceded by DAC register
address, or parameter(s) of the in-band command if preceded by reserved in-band command IDs.
Some DACs have 8-bit registers, some have 16-bit registers. For 8-bit registers, 2-byte pairs shall
be used. For 16-bit registers, 3-byte triplets shall be used.
Prototype:
Parameters:
See User's Guide for details on in-band commands.
HID_UART_STATUS CP2114_SetDacRegisters(HID_UART_DEVICE
pDacConfigBuffer, BYTE dacConfigBufferLength)
1. device—Device object pointer as returned by HidUart_Open().
device,
BYTE*
2. pDacConfigBuffer—Pointer to the sequence buffer.
3. dacConfigBufferLength—Length in bytes of the sequences.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.9. CP2114_GetDacRegisters
Description:
Prototype:
Parameters:
Reads from the specified DAC registers via the I2C interface. Unlike CP2114_SetDacRegisters,
this API retrieves DAC register settings only without intercepting any in-band commands. The host
should ensure valid DAC register addresses are used.
HID_UART_STATUS
CP2114_GetDacRegisters(HID_UART_DEVICE
device,
BYTE
dacStartAddress, BYTE dacRegistersToRead, BYTE* pDacConfigBuffer)
1. device—Device object pointer as returned by HidUart_Open().
2. dacStartAddress—Register address from which to start.
3. dacRegistersToRead—Number of registers to read.
4. pDacConfigBuffer—Pointer to a buffer to store the data returned from the device. Sufficient
space must be allocated to store the data. The size of the DacConfigBuffer is:
2 (or 3) * dacRegistersToRead.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
43
AN433
5.10. CP2114_GetOtpConfig
Description:
Prototype:
Parameters:
Retrieves a CP2114 configurationfrom OTP.
HID_UART_STATUS
CP2114_GetOtpConfig(HID_UART_DEVICE
device,
cp2114ConfigNumber, PCP2114_CONFIG_STRUCT pCP2114ConfigStruct)
1. device—Device object pointer as returned by HidUart_Open().
BYTE
2. cp2114ConfigNumber —configuration number to retrieve CP2114 OTP.
3. pCP2114ConfigStruct —Pointer to store configuration data returned from the device.
typedef struct_CONFIG_STRUCT
{
CP2114_RAM_CONFIG_STRUCT
BYTE
ramConfig;
DacConfiguration[MAX_DAC_CONFIG_SIZE];
}CP2114_CONFIG_STRUCT, *PCP2114_CONFIG_STRUCT;
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.11. CP2114_CreateOtpConfig
Description:
Prototype:
Parameters:
Creates a new CP2114 configuration in the available OTP space.
HID_UART_STATUS
CP2114_CreateOtpConfig(HID_UART_DEVICE
configBufferLength, BYTE* pConfigBuffer)
1. device—Device object pointer as returned by HidUart_Open().
device,
WORD
2. configBufferLength—Length in bytes of the configuration to be written to OTP.
3. pConfigBuffer—Pointer to the buffer containing configuration structured
CP2114_CONFIG_STRUCT
excluding
the
"U16
Length"
CP2114_RAM_CONFIG_STRUCT. The DLL will automatically insert the Length field.
Return Value: HID_UART_STATUS
44
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
per
in
AN433
5.12. CP2114_SetBootConfig
Description:
Prototype:
Parameters:
Specifies the CP2114 configuration to be loaded from OTP on boot.
HID_UART_STATUS
CP2114_SetBootConfig(HID_UART_DEVICE
cp2114ConfigNumber)
1. device—Device object pointer as returned by HidUart_Open().
device,
BYTE
2. cp2114ConfigNumber—Configuration Index that will be set as the boot configuration upon
reset.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.13. CP2114_ReadOTP
Description:
Prototype:
Parameters:
Returns partial or full OTP customization block. The OTP space must be within the range of 6
kilobytes from address 0x6800.
HID_UART_STATUSCP2114_ReadOTP(HID_UART_DEVICE device, UINT cp2114Address
,BYTE* pReadBuffer, UINT ReadLength)
1. device—Device object pointer as returned by HidUart_Open().
2. cp2114Address —The OTP address to read from. This address must be in between 0x6800
and 0x7FFFF (inclusive).
3. pReadBuffer—Pointer to a byte array buffer to store data read from OTP space.
4. ReadLength—Length of OTP data to read in bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
5.14. CP2114_WriteOTP
Description:
Prototype:
Parameters:
Writes partial or full OTP customization block. The OTP space must be within the range of 6
kilobytes from address 0x6800.
HID_UART_STATUSCP2114_WriteOTP(HID_UART_DEVICE
device,
UINT
cp2114Address ,BYTE* pWriteBuffer, UINT writeLength)
1. device—Device object pointer as returned by HidUart_Open().
2. cp2114Address —The OTP address to start writing to. This address must be in between
0x6800 and 0x7FFFF (inclusive).
3. pWriteBuffer—Pointer to a byte array buffer that will contain values to write to the OTP space.
4. writeLength—The length of write buffer in bytes. The maximum length is 6K bytes.
Return Value: HID_UART_STATUS
=
HID_UART_SUCCESS
HID_UART_INVALID_DEVICE_OBJECT
HID_UART_INVALID_PARAMETER
HID_UART_DEVICE_IO_FAILED
HID_UART_DEVICE_NOT_SUPPORTED
Rev. 0.5
45
AN433
6. Port Latch Pin Definition
Table 2 and Table 3 describe the GPIO bit definitions for latchValue in HidUart_ReadLatch() and
HidUart_WriteLatch(). The library will remap the bit definitions used by the device to match this structure.
Table 2. CP2110 Port Latch Pin Definition
Bit
Pin Name
Pin Number
0
GPIO.0/CLK
1
1
GPIO.1/RTS
24
2
GPIO.2/CTS
23
3
GPIO.3/RS485
22
4
TX
21
5
RX
20
6
GPIO.4/TX Toggle
19
7
GPIO.5/RX Toggle
18
8
SUSPEND
17
9
N/A
10
GPIO.6
15
11
GPIO.7
14
12
GPIO.8
13
13
GPIO.9
12
14
SUSPEND
11
15
N/A
Table 3. CP2114 Port Latch Pin Definition
46
Bit
CP2114 Pin Name
CP2114 Pin Number
0
GPIO.0_RMUTE
30
1
GPIO.1_PMUTE
29
2
GPIO.2_VOL-
14
3
GPIO.3_VOL+
13
4
GPIO.4_RMUTELED
12
5
GPIO.5_TXT_DACSEL0
28
6
GPIO.6_RXT_DACSEL1
11
Rev. 0.5
AN433
Table 3. CP2114 Port Latch Pin Definition
7
GPIO.7_RTS_DACSEL2
19
8
GPIO.8_CTS_DACSEL3
20
9
GPIO.9_CLKOUT
22
10
GPIO.10_TX
16
11
GPIO.11_RX
15
12
SUSPEND
18
13
SUSPEND
17
14
Not Used
Not Used
15
Not Used
Not Used
Rev. 0.5
47
AN433
7. HID_UART_STATUS Return Codes
Each library function returns an HID_UART_STATUS return code to indicate that the function returned successfully
or to describe an error. The table below describes each error code.
Definition
Value
Description
HID_UART_SUCCESS
0x00
Function returned successfully.*
HID_UART_DEVICE_NOT_FOUND
0x01
Indicates that no devices are connected or that
the specified device does not exist.
HID_UART_INVALID_HANDLE
0x02
Indicates that the handle value is NULL or
INVALID_HANDLE_VALUE or that the device with
the specified handle does not exist.
HID_UART_INVALID_DEVICE_OBJECT
0x03
Indicates that the device object pointer does not
match the address of a valid HID-to-UART device.
HID_UART_INVALID_PARAMETER
0x04
Indicates that a pointer value is NULL or that an
invalid setting was specified.
HID_UART_INVALID_REQUEST_LENGTH
0x05
Indicates that the specified number of bytes to
read or write is invalid. Check the read and write
length limits.
HID_UART_READ_ERROR
0x10
Indicates that the read was not successful and did
not time out. This means that the host could not
get an input interrupt report.
HID_UART_WRITE_ERROR
0x11
Indicates that the write was not successful. This
means that the output interrupt report failed or
timed out.
HID_UART_READ_TIMED_OUT
0x12
Indicates that a read failed to return the number of
bytes requested before the read timeout elapsed.
Try increasing the read timeout.
HID_UART_WRITE_TIMED_OUT
0x13
Indicates that a write failed to complete sending
the number of bytes requested before the write
timeout elapsed. Try increasing the write timeout
(should be greater than 0 ms).
HID_UART_DEVICE_IO_FAILED
0x14
Indicates that host was unable to get or set a
feature report. The device could have been disconnected.
HID_UART_DEVICE_ACCESS_ERROR
0x15
Indicates that the device or device property could
not be accessed. Either the device is not opened,
already opened when trying to open, or an error
occurred when trying to get HID information.
HID_UART_DEVICE_NOT_SUPPORTED
0x16
Indicates that the current device does not support
the corresponding action. Functions listed in this
document are for the CP2110/4 only.
HID_UART_UNKNOWN_ERROR
0xFF
This is the default return code value. This value
should never be returned.
*Note: Set functions may return success, indicating that the device received the request; however, there is no
indication that the device actually performed the request (i.e., the setting was invalid). The user must call
the corresponding get function to verify that the settings were properly configured.
48
Rev. 0.5
AN433
8. Thread Safety
The HID-to-UART library and associated functions are not thread-safe. This means that calling library functions
simultaneously from multiple threads may have undesirable effects.
To use the library functions in more than one thread, the user should do the following:
1. Call library functions from within a critical section such that only a single function is being called at any given
time. If a function is being called in one thread, then the user must prevent another thread from calling any
function until the first function returns.
2. HidUART_Read() issues a pending read request that cannot be canceled from another thread. If the user calls
HidUART_Close() in a different thread than the thread in which the read request was created, then the device
will not be accessible after calling HidUart_Close(). The thread that issued the pending read request must
return/terminate successfully before the device can be accessed again. See Section "9. Thread Read Access
Models (For Windows)" on page 50 for more information.
Rev. 0.5
49
AN433
9. Thread Read Access Models (For Windows)
There are several common read access models when using the HID-to-UART library. There are some restrictions
on the valid use of a device handle based on these models. CancelIo() can only cancel pending I/O (reads/writes)
issued in the same thread in which CancelIo() is called. Due to this limitation, the user is responsible for cancelling
pending I/O before closing the device. Failure to do so will result in an inaccessible HID-to-UART device until the
thread releases access to the device handle.
The following tables describe five common access models and the expected behavior:
Note: HidUart_Close() calls CancelIo() prior to calling CloseHandle().
Note: HidUart_Read() issues a pending read request. The request completes if at least one input report is read. The request is
still pending if the operation times out.
Note: HidUart_CancelIo() forces any pending requests issued by the same thread to complete (cancelled).
*
?
Indicates that a read is still pending and was issued in the specified thread.
Indicates that a read is still pending and was issued in one of the threads (indeterminate).
Table 4. Single Thread Access Model (Safe)
Thread A
Thread B
Result
HidUart_Open()
—
—
HidUart_Read()*
—
—
HidUart_Close()
—
OK
Table 5. Split Thread Access Model (Unsafe)
Thread A
Thread B
Result
HidUart_Open()
—
—
—
HidUart_Read()*
—
HidUart_Close()
—
Error: Device inaccessible
—
Terminate Thread
OK: Thread relinquishes device access
Table 6. Split Thread Access Mode (Safe)
50
Thread A
Thread B
Result
HidUart_Open()
—
—
—
HidUart_Read()*
—
—
HidUart_CancelIo()
—
HidUart_Close()
—
OK
Rev. 0.5
AN433
Table 7. Multi-Thread Access Model (Unsafe)
Thread A
Thread B
Result
HidUart_Open()
—
—
HidUart_Read()?
HidUart_Read()?
—
HidUart_Close()
—
—
Terminate Thread
Read()* Thread A: OK
Read()* Thread B: Error: Device inaccessible
OK: Thread relinquishes device access
Table 8. Multi-Thread Access Model (Safe)
Thread A
Thread B
Result
HidUart_Open()
—
—
HidUart_Read()?
HidUart_Read()?
—
—
HidUart_CancelIo()
—
HidUart_Close()
—
OK
Rev. 0.5
51
AN433
10. Surprise Removal (For Windows)
HidUart_GetHidGuid() returns the HID GUID so that Windows applications or services can register for the
WM_DEVICECHANGE Windows message. Once registered, the application will receive device arrival and
removal notices for HID devices. The application must retrieve the device path to filter devices based on VID/PD.
Similarly, if a DBT_DEVICEREMOVECOMPLETE message is received, then the application must check to see if
the device path matches the device path of any connected devices. If this is the case, then the device was
removed and the application must close the device. Also if a DBT_DEVICEARRIVAL message is received, then
the application might add the new device to a device list so that users can select any HID device matching the
required VID/PID.
See accompanying example code for information on how to implement surprise removal and device arrival. Search
for Knowledge Base Article #222649, 311158, and 311153 for programming examples for C++, Visual Basic.NET,
and Visual C#. The USB Bridge Knowledge Base can be found at the following URL:
http://www.silabs.com/support/knowledgebase/Pages/USB-bridge-knowledge-base.aspx
52
Rev. 0.5
AN433
DOCUMENT CHANGE LIST
Revision 0.4 to Revision 0.5

Added support for the CP2114.
Rev. 0.5
53
AN433
CONTACT INFORMATION
Silicon Laboratories Inc.
400 West Cesar Chavez
Austin, TX 78701
Tel: 1+(512) 416-8500
Fax: 1+(512) 416-9669
Toll Free: 1+(877) 444-3032
Please visit the Silicon Labs Technical Support web page:
https://www.silabs.com/support/pages/contacttechnicalsupport.aspx
and register to submit a technical support request.
Patent Notice
Silicon Labs invests in research and development to help our customers differentiate in the market with innovative low-power, small size, analogintensive mixed-signal solutions. Silicon Labs' extensive patent portfolio is a testament to our unique approach and world-class engineering team.
The information in this document is believed to be accurate in all respects at the time of publication but is subject to change without notice.
Silicon Laboratories assumes no responsibility for errors and omissions, and disclaims responsibility for any consequences resulting from
the use of information included herein. Additionally, Silicon Laboratories assumes no responsibility for the functioning of undescribed features or parameters. Silicon Laboratories reserves the right to make changes without further notice. Silicon Laboratories makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Silicon Laboratories assume any
liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation
consequential or incidental damages. Silicon Laboratories products are not designed, intended, or authorized for use in applications intended to support or sustain life, or for any other application in which the failure of the Silicon Laboratories product could create a situation where
personal injury or death may occur. Should Buyer purchase or use Silicon Laboratories products for any such unintended or unauthorized
application, Buyer shall indemnify and hold Silicon Laboratories harmless against all claims and damages.
Silicon Laboratories and Silicon Labs are trademarks of Silicon Laboratories Inc.
Other products or brandnames mentioned herein are trademarks or registered trademarks of their respective holders.
54
Rev. 0.5