12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * Copyright (c) 2024, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #ifndef USBH_FTDI_H
- #define USBH_FTDI_H
- #include "usb_cdc.h"
- /* Requests */
- #define SIO_RESET_REQUEST 0x00 /* Reset the port */
- #define SIO_SET_MODEM_CTRL_REQUEST 0x01 /* Set the modem control register */
- #define SIO_SET_FLOW_CTRL_REQUEST 0x02 /* Set flow control register */
- #define SIO_SET_BAUDRATE_REQUEST 0x03 /* Set baud rate */
- #define SIO_SET_DATA_REQUEST 0x04 /* Set the data characteristics of the port */
- #define SIO_POLL_MODEM_STATUS_REQUEST 0x05
- #define SIO_SET_EVENT_CHAR_REQUEST 0x06
- #define SIO_SET_ERROR_CHAR_REQUEST 0x07
- #define SIO_SET_LATENCY_TIMER_REQUEST 0x09
- #define SIO_GET_LATENCY_TIMER_REQUEST 0x0A
- #define SIO_SET_BITMODE_REQUEST 0x0B
- #define SIO_READ_PINS_REQUEST 0x0C
- #define SIO_READ_EEPROM_REQUEST 0x90
- #define SIO_WRITE_EEPROM_REQUEST 0x91
- #define SIO_ERASE_EEPROM_REQUEST 0x92
- #define SIO_DISABLE_FLOW_CTRL 0x0
- #define SIO_RTS_CTS_HS (0x1 << 8)
- #define SIO_DTR_DSR_HS (0x2 << 8)
- #define SIO_XON_XOFF_HS (0x4 << 8)
- #define SIO_SET_DTR_MASK 0x1
- #define SIO_SET_DTR_HIGH (1 | (SIO_SET_DTR_MASK << 8))
- #define SIO_SET_DTR_LOW (0 | (SIO_SET_DTR_MASK << 8))
- #define SIO_SET_RTS_MASK 0x2
- #define SIO_SET_RTS_HIGH (2 | (SIO_SET_RTS_MASK << 8))
- #define SIO_SET_RTS_LOW (0 | (SIO_SET_RTS_MASK << 8))
- #define SIO_RTS_CTS_HS (0x1 << 8)
- struct usbh_ftdi {
- struct usbh_hubport *hport;
- struct usb_endpoint_descriptor *bulkin; /* Bulk IN endpoint */
- struct usb_endpoint_descriptor *bulkout; /* Bulk OUT endpoint */
- struct usbh_urb bulkout_urb;
- struct usbh_urb bulkin_urb;
- struct cdc_line_coding line_coding;
- uint8_t intf;
- uint8_t minor;
- uint8_t modem_status[2];
- void *user_data;
- };
- #ifdef __cplusplus
- extern "C" {
- #endif
- int usbh_ftdi_set_line_coding(struct usbh_ftdi *ftdi_class, struct cdc_line_coding *line_coding);
- int usbh_ftdi_get_line_coding(struct usbh_ftdi *ftdi_class, struct cdc_line_coding *line_coding);
- int usbh_ftdi_set_line_state(struct usbh_ftdi *ftdi_class, bool dtr, bool rts);
- int usbh_ftdi_bulk_in_transfer(struct usbh_ftdi *ftdi_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout);
- int usbh_ftdi_bulk_out_transfer(struct usbh_ftdi *ftdi_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout);
- void usbh_ftdi_run(struct usbh_ftdi *ftdi_class);
- void usbh_ftdi_stop(struct usbh_ftdi *ftdi_class);
- #ifdef __cplusplus
- }
- #endif
- #endif /* USBH_FTDI_H */
|