blob: ad5f71082cd1b16fbc4755ce8b9825838669125b [file] [log] [blame]
/*
* BRLTTY - A background process providing access to the console screen (when in
* text mode) for a blind person using a refreshable braille display.
*
* Copyright (C) 1995-2023 by The BRLTTY Developers.
*
* BRLTTY comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
#ifndef BRLTTY_INCLUDED_USB_CP2101
#define BRLTTY_INCLUDED_USB_CP2101
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef enum {
USB_CP2101_CTL_EnableInterface = 0x00,
USB_CP2101_CTL_SetBaudDivisor = 0x01,
USB_CP2101_CTL_GetBaudDivisor = 0x02,
USB_CP2101_CTL_SetLineControl = 0x03,
USB_CP2101_CTL_GetLineControl = 0x04,
USB_CP2101_CTL_SetBreak = 0x05,
USB_CP2101_CTL_SendImmediateCharacter = 0x06,
USB_CP2101_CTL_SetModemHandShaking = 0x07,
USB_CP2101_CTL_GetModemStatus = 0x08,
USB_CP2101_CTL_SetXon = 0x09,
USB_CP2101_CTL_SetXoff = 0x0A,
USB_CP2101_CTL_SetEventMask = 0x0B,
USB_CP2101_CTL_GetEventMask = 0x0C,
USB_CP2101_CTL_SetSpecialCharacter = 0x0D,
USB_CP2101_CTL_GetSpecialCharacters = 0x0E,
USB_CP2101_CTL_GetProperties = 0x0F,
USB_CP2101_CTL_GetSerialStatus = 0x10,
USB_CP2101_CTL_Reset = 0x11,
USB_CP2101_CTL_Purge = 0x12,
USB_CP2101_CTL_SetFlowControl = 0x13,
USB_CP2101_CTL_GetFlowControl = 0x14,
USB_CP2101_CTL_EmbedEvents = 0x15,
USB_CP2101_CTL_GetEventState = 0x16,
USB_CP2101_CTL_SetSpecialCharacters = 0x19,
USB_CP2101_CTL_GetBaudRate = 0x1D,
USB_CP2101_CTL_SetBaudRate = 0x1E,
USB_CP2101_CTL_VendorSpecific = 0xFF
} USB_CP2101_ControlRequest;
typedef uint32_t USB_CP2101_BaudRate;
typedef uint16_t USB_CP2101_BaudDivisor;
#define USB_CP2101_BAUD_BASE 0X384000
typedef uint16_t USB_CP2101_LineControl;
#define USB_CP2101_STOP_SHIFT 0
#define USB_CP2101_STOP_WIDTH 4
#define USB_CP2101_PARITY_SHIFT 4
#define USB_CP2101_PARITY_WIDTH 4
#define USB_CP2101_DATA_SHIFT 8
#define USB_CP2101_DATA_WIDTH 8
#define USB_CP2101_DATA_MINIMUM 5
#define USB_CP2101_DATA_MAXIMUM 8
typedef enum {
USB_CP2101_STOP_1,
USB_CP2101_STOP_1_5,
USB_CP2101_STOP_2
} USB_CP2101_StopBits;
typedef enum {
USB_CP2101_PARITY_NONE,
USB_CP2101_PARITY_ODD,
USB_CP2101_PARITY_EVEN,
USB_CP2101_PARITY_MARK,
USB_CP2101_PARITY_SPACE
} USB_CP2101_Parity;
typedef struct {
uint32_t handshakeOptions;
uint32_t dataFlowOptions;
uint32_t xonThreshold;
uint32_t xoffThreshold;
} PACKED USB_CP2101_FlowControl;
typedef enum {
USB_CP2101_FLOW_HSO_DTR_MASK = 0X00000003, // DTR line usage
USB_CP2101_FLOW_HSO_DTR_INACTIVE = 0X00000000, // DTR is held inactive
USB_CP2101_FLOW_HSO_DTR_ACTIVE = 0X00000001, // DTR is held active
USB_CP2101_FLOW_HSO_DTR_CONTROLLED = 0X00000002, // DTR is controlled
USB_CP2101_FLOW_HSO_CTS_INTERPRET = 0X00000008, // CTS is interpreted
USB_CP2101_FLOW_HSO_DSR_INTERPRET = 0X00000010, // DSR is interpreted
USB_CP2101_FLOW_HSO_DCD_INTERPRET = 0X00000020, // DCD is interpreted
USB_CP2101_FLOW_HSO_DSR_DISCARD = 0X00000040 // DSR low discards data
} USB_CP2101_ControlHandshake;
typedef enum {
USB_CP2101_FLOW_DFO_AUTO_TRANSMIT = 0X00000001, // respond to XON/XOFF from device
USB_CP2101_FLOW_DFO_AUTO_RECEIVE = 0X00000002, // send XON/XOFF to device
USB_CP2101_FLOW_DFO_ERROR_CHARACTER = 0X00000004, // enable insertion of error special-character
USB_CP2101_FLOW_DFO_STRIP_NULS = 0X00000008, // discard received NUL characters
USB_CP2101_FLOW_DFO_BREAK_CHARACTER = 0X00000010, // enable insertion of break special-character
USB_CP2101_FLOW_DFO_RTS_MASK = 0X000000C0, // RTS line usage
USB_CP2101_FLOW_DFO_RTS_INACTIVE = 0X00000000, // RTS is statically inactive
USB_CP2101_FLOW_DFO_RTS_ACTIVE = 0X00000040, // RTS is statically active
USB_CP2101_FLOW_DFO_RTS_RCV_FLOW = 0X00000080, // RTS is used for receive flow control
USB_CP2101_FLOW_DFO_RTS_XMT_ACTIVE = 0X000000C0, // RTS signals transmit active
USB_CP2101_FLOW_DFO_AUTO_RCV_ALWAYS = 0X80000000 // send XON/XOFF to device even when suspended
} USB_CP2101_FlowReplace;
typedef struct {
uint8_t eof; // indicates end-of-file on input
uint8_t error; // inserted when an error is detected
uint8_t brk ; // inserted when a break is detected
uint8_t event; // sets bit 2 of the event-occurred mask
uint8_t xon; // sent to resume input
uint8_t xoff; // sent to suspend input
} PACKED USB_CP2101_SpecialCharacters;
typedef struct {
uint32_t errors;
uint32_t holdReasons;
uint32_t inputCount;
uint32_t outputCount;
uint8_t eofReceived;
uint8_t waitForImmediate;
uint8_t reserved;
} PACKED USB_CP2101_SerialStatus;
typedef enum {
USB_CP2101_SS_ERR_BREAK_SIGNAL = 0X00000001,
USB_CP2101_SS_ERR_FRAMING_ERROR = 0X00000002,
USB_CP2101_SS_ERR_HARDWARE_OVERRUN = 0X00000004,
USB_CP2101_SS_ERR_QUEUE_OVERRUN = 0X00000008,
USB_CP2101_SS_ERR_PARITY_ERROR = 0X00000010
} USB_CP2101_SerialError;
typedef enum {
USB_CP2101_SS_HLD_XMT_CTS_WAIT = 0X00000001,
USB_CP2101_SS_HLD_XMT_DSR_WAIT = 0X00000002,
USB_CP2101_SS_HLD_XMT_DCD_WAIT = 0X00000004,
USB_CP2101_SS_HLD_XMT_XON_WAIT = 0X00000008,
USB_CP2101_SS_HLD_XMT_XOFF_SENT = 0X00000010,
USB_CP2101_SS_HLD_XMT_BRK_WAIT = 0X00000020,
USB_CP2101_SS_HLD_RCV_DSR_WAIT = 0X00000040,
} USB_CP2101_HoldReason;
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLTTY_INCLUDED_USB_CP2101 */