123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #ifndef HAL_SERIAL_USB_H
- #define HAL_SERIAL_USB_H
- #if (HAL_USE_SERIAL_USB == TRUE) || defined(__DOXYGEN__)
- #include "hal_usb_cdc.h"
- #if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
- #define SERIAL_USB_BUFFERS_SIZE 256
- #endif
- #if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
- #define SERIAL_USB_BUFFERS_NUMBER 2
- #endif
- #if HAL_USE_USB == FALSE
- #error "Serial over USB Driver requires HAL_USE_USB"
- #endif
- typedef enum {
- SDU_UNINIT = 0,
- SDU_STOP = 1,
- SDU_READY = 2
- } sdustate_t;
- typedef struct SerialUSBDriver SerialUSBDriver;
- typedef struct {
-
- USBDriver *usbp;
-
- usbep_t bulk_in;
-
- usbep_t bulk_out;
-
- usbep_t int_in;
- } SerialUSBConfig;
- #define _serial_usb_driver_data \
- _base_asynchronous_channel_data \
- \
- sdustate_t state; \
- \
- input_buffers_queue_t ibqueue; \
- \
- output_buffers_queue_t obqueue; \
- \
- uint8_t ib[BQ_BUFFER_SIZE(SERIAL_USB_BUFFERS_NUMBER, \
- SERIAL_USB_BUFFERS_SIZE)]; \
- \
- uint8_t ob[BQ_BUFFER_SIZE(SERIAL_USB_BUFFERS_NUMBER, \
- SERIAL_USB_BUFFERS_SIZE)]; \
- \
- \
- const SerialUSBConfig *config;
- #define _serial_usb_driver_methods \
- _base_asynchronous_channel_methods
- struct SerialUSBDriverVMT {
- _serial_usb_driver_methods
- };
- struct SerialUSBDriver {
-
- const struct SerialUSBDriverVMT *vmt;
- _serial_usb_driver_data
- };
- #ifdef __cplusplus
- extern "C" {
- #endif
- void sduInit(void);
- void sduObjectInit(SerialUSBDriver *sdup);
- void sduStart(SerialUSBDriver *sdup, const SerialUSBConfig *config);
- void sduStop(SerialUSBDriver *sdup);
- void sduSuspendHookI(SerialUSBDriver *sdup);
- void sduWakeupHookI(SerialUSBDriver *sdup);
- void sduConfigureHookI(SerialUSBDriver *sdup);
- bool sduRequestsHook(USBDriver *usbp);
- void sduSOFHookI(SerialUSBDriver *sdup);
- void sduDataTransmitted(USBDriver *usbp, usbep_t ep);
- void sduDataReceived(USBDriver *usbp, usbep_t ep);
- void sduInterruptTransmitted(USBDriver *usbp, usbep_t ep);
- msg_t sduControl(USBDriver *usbp, unsigned int operation, void *arg);
- #ifdef __cplusplus
- }
- #endif
- #endif
- #endif
|