31#include <libopencm3/stm32/rcc.h>
32#include <libopencm3/stm32/gpio.h>
33#include <libopencm3/cm3/nvic.h>
34#include <libopencm3/cm3/systick.h>
35#include <libopencm3/usb/usbd.h>
36#include <libopencm3/usb/cdc.h>
37#include <libopencm3/cm3/scb.h>
38#include <libopencm3/stm32/desig.h>
39#include <libopencm3/usb/dwc/otg_fs.h>
43#include "mcu_periph/sys_time_arch.h"
46#define MAX_PACKET_SIZE 64
48#define VCOM_FIFO_SIZE 256
50#define TX_TIMEOUT_CNT 20
88 .bNumConfigurations = 1,
99 .bEndpointAddress = 0x83,
101 .wMaxPacketSize = 16,
109 .bEndpointAddress = 0x01,
116 .bEndpointAddress = 0x82,
153 .bControlInterface = 0,
154 .bSubordinateInterface0 = 1,
161 .bInterfaceNumber = 0,
162 .bAlternateSetting = 0,
179 .bInterfaceNumber = 1,
180 .bAlternateSetting = 0,
183 .bInterfaceSubClass = 0,
184 .bInterfaceProtocol = 0,
205 .bConfigurationValue = 1,
207 .bmAttributes = 0x80,
240 switch (req->bRequest) {
251 notif->bmRequestType = 0xA1;
285 for (
int i = 0; i < len; i++) {
337 if (next ==
fifo->tail) {
427 static int result = 0;
440 static int result = 0;
514#ifdef USE_USB_LINE_CODING
545 for (i = 0; i < len; i++) {
void sys_time_usleep(uint32_t us)
sys_time_usleep(uint32_t us)
static uint8_t mode
mode holds the current sonar mode mode = 0 used at high altitude, uses 16 wave patterns mode = 1 used...
static const struct usb_interface ifaces[]
bool fifo_peek(fifo_t *fifo, uint8_t *pc, uint8_t ofs)
void fifo_init(fifo_t *fifo, uint8_t *buf)
void VCOM_event(void)
Poll usb (required by libopencm3).
int VCOM_getchar(void)
Reads one character from VCOM port.
int fifo_free(fifo_t *fifo)
int VCOM_putchar(int c)
Writes one character to VCOM port fifo.
static const struct @12 cdcacm_functional_descriptors
static int usb_serial_check_free_space(struct usb_serial_periph *p, long *fd, uint16_t len)
static void usb_serial_transmit_buffer(struct usb_serial_periph *p, long fd, uint8_t *data, uint16_t len)
static void usb_serial_transmit(struct usb_serial_periph *p, long fd, uint8_t byte)
static void suspend_cb(void)
usbd_device * my_usbd_dev
uint8_t usbd_control_buffer[128]
static char serial_no[25]
static uint8_t txdata[VCOM_FIFO_SIZE]
int VCOM_check_available(void)
Checks if data available in VCOM buffer.
static enum usbd_request_return_codes cdcacm_control_request(usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len, void(**complete)(usbd_device *usbd_dev, struct usb_setup_data *req))
CDC device control request (from libopencm3 examples)
static const struct usb_endpoint_descriptor data_endp[]
int VCOM_peekchar(int ofs)
Reads one character from VCOM port without removing it from the queue.
static void cdcacm_set_config(usbd_device *usbd_dev, uint16_t wValue)
Set configuration and control callbacks for CDC device (from libopencm3 examples)
static const struct usb_interface_descriptor data_iface[]
static const struct usb_config_descriptor config
int fifo_avail(fifo_t *fifo)
static const struct usb_endpoint_descriptor comm_endp[]
static uint8_t rxdata[VCOM_FIFO_SIZE]
static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
RX callback for CDC device (from libopencm3 examples)
void VCOM_send_message(void)
Send data from fifo right now.
struct usb_serial_periph usb_serial
static uint8_t usb_serial_getch(struct usb_serial_periph *p)
static void usb_serial_send(struct usb_serial_periph *p, long fd)
static int usb_serial_char_available(struct usb_serial_periph *p)
bool fifo_put(fifo_t *fifo, uint8_t c)
bool VCOM_check_free_space(uint16_t len)
Checks if buffer free in VCOM buffer.
static const struct usb_device_descriptor dev
static const char * usb_strings[]
static const struct usb_interface_descriptor comm_iface[]
static bool usb_connected
bool fifo_get(fifo_t *fifo, uint8_t *pc)
void VCOM_set_linecoding(uint8_t mode)
struct link_device device
Generic device interface.
void VCOM_allow_linecoding(uint8_t mode)
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.