|
@@ -9,9 +9,19 @@
|
|
|
* See the file COPYING for more details, or visit <http://unlicense.org>.
|
|
|
*/
|
|
|
|
|
|
+static const struct usb_driver *drv = &usbd;
|
|
|
+
|
|
|
void hw_usb_init(void)
|
|
|
{
|
|
|
- usbd.init();
|
|
|
+#if !defined(BOOTLOADER)
|
|
|
+ /* We detect an Artery MCU by presence of Cortex-M4 CPUID. Cortex-M4:
|
|
|
+ * 41xfc24x ; Cortex-M3: 41xfc23x */
|
|
|
+ bool_t is_artery_mcu = ((scb->cpuid >> 4) & 0xf) == 4;
|
|
|
+ if (is_artery_mcu)
|
|
|
+ drv = &usbd_at32f4;
|
|
|
+#endif
|
|
|
+
|
|
|
+ drv->init();
|
|
|
|
|
|
/* Indicate we are connected by pulling up D+. */
|
|
|
gpio_configure_pin(gpioa, 0, GPO_pushpull(_2MHz, HIGH));
|
|
@@ -21,57 +31,57 @@ void hw_usb_deinit(void)
|
|
|
{
|
|
|
gpio_configure_pin(gpioa, 0, GPI_floating);
|
|
|
|
|
|
- usbd.deinit();
|
|
|
+ drv->deinit();
|
|
|
}
|
|
|
|
|
|
bool_t hw_has_highspeed(void)
|
|
|
{
|
|
|
- return usbd.has_highspeed();
|
|
|
+ return drv->has_highspeed();
|
|
|
}
|
|
|
|
|
|
bool_t usb_is_highspeed(void)
|
|
|
{
|
|
|
- return usbd.is_highspeed();
|
|
|
+ return drv->is_highspeed();
|
|
|
}
|
|
|
|
|
|
int ep_rx_ready(uint8_t epnr)
|
|
|
{
|
|
|
- return usbd.ep_rx_ready(epnr);
|
|
|
+ return drv->ep_rx_ready(epnr);
|
|
|
}
|
|
|
|
|
|
bool_t ep_tx_ready(uint8_t epnr)
|
|
|
{
|
|
|
- return usbd.ep_tx_ready(epnr);
|
|
|
+ return drv->ep_tx_ready(epnr);
|
|
|
}
|
|
|
|
|
|
void usb_read(uint8_t epnr, void *buf, uint32_t len)
|
|
|
{
|
|
|
- usbd.read(epnr, buf, len);
|
|
|
+ drv->read(epnr, buf, len);
|
|
|
}
|
|
|
|
|
|
void usb_write(uint8_t epnr, const void *buf, uint32_t len)
|
|
|
{
|
|
|
- usbd.write(epnr, buf, len);
|
|
|
+ drv->write(epnr, buf, len);
|
|
|
}
|
|
|
|
|
|
void usb_stall(uint8_t epnr)
|
|
|
{
|
|
|
- usbd.stall(epnr);
|
|
|
+ drv->stall(epnr);
|
|
|
}
|
|
|
|
|
|
void usb_configure_ep(uint8_t epnr, uint8_t type, uint32_t size)
|
|
|
{
|
|
|
- usbd.configure_ep(epnr, type, size);
|
|
|
+ drv->configure_ep(epnr, type, size);
|
|
|
}
|
|
|
|
|
|
void usb_setaddr(uint8_t addr)
|
|
|
{
|
|
|
- usbd.setaddr(addr);
|
|
|
+ drv->setaddr(addr);
|
|
|
}
|
|
|
|
|
|
void usb_process(void)
|
|
|
{
|
|
|
- usbd.process();
|
|
|
+ drv->process();
|
|
|
}
|
|
|
|
|
|
/*
|