blob: d4ce0b3b8bfc862fa86ca4bf493c4aaf00924b41 [file] [log] [blame]
/*
* Copyright 2017, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#ifndef _USB_CDC_H_
#define _USB_CDC_H_
#include <usb/usb.h>
/* PSTN - Abstract Control Model (PSTN spec 6.2.2) */
#define ACM_CTRL_DTR 0x1
#define ACM_CTRL_RTS 0x2
#define ACM_STOP_1BIT 0
#define ACM_STOP_15BIT 1
#define ACM_STOP_2BIT 2
#define ACM_PARITY_NONE 0
#define ACM_PARITY_ODD 1
#define ACM_PARITY_EVEN 2
#define ACM_PARITY_MARK 3
#define ACM_PARITY_SPACE 4
enum acm_comm_feature {
ABSTRACT_STATE = 1,
COUNTRY_SETTING = 2
};
struct acm_line_coding {
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} __attribute__((packed));
int usb_cdc_bind(usb_dev_t *usb_dev);
/* Communication Device Class Requests */
void cdc_send_encap_cmd(usb_dev_t *udev, const void *buf, int len);
void cdc_get_encap_resp(usb_dev_t *udev, void *buf, int len);
void acm_set_comm_feature(usb_dev_t *udev, enum acm_comm_feature f, uint16_t state);
uint16_t acm_get_comm_feature(usb_dev_t *udev, enum acm_comm_feature f);
void acm_clear_comm_feature(usb_dev_t *udev, enum acm_comm_feature f);
void acm_set_line_coding(usb_dev_t *udev, const struct acm_line_coding *coding);
void acm_get_line_coding(usb_dev_t *udev, struct acm_line_coding *coding);
void acm_set_ctrl_line_state(usb_dev_t *udev, uint8_t ctrl);
void acm_send_break(usb_dev_t *udev, uint16_t us);
/* Data interface functions */
int usb_cdc_read(usb_dev_t *udev, void *buf, int len);
int usb_cdc_write(usb_dev_t *udev, const void *buf, int len);
#endif /* _USB_CDC_H_ */