diff options
-rw-r--r-- | libmaple/usb/usb.c | 19 | ||||
-rw-r--r-- | libmaple/usb/usb.h | 24 | ||||
-rw-r--r-- | libmaple/usb/usb_cdcacm.c | 2 | ||||
-rw-r--r-- | wirish/usb_serial.cpp | 4 |
4 files changed, 24 insertions, 25 deletions
diff --git a/libmaple/usb/usb.c b/libmaple/usb/usb.c index 00ba4ef..667b11f 100644 --- a/libmaple/usb/usb.c +++ b/libmaple/usb/usb.c @@ -72,6 +72,7 @@ struct { static usblib_dev usblib = { .irq_mask = USB_ISR_MSK, .state = USB_UNCONNECTED, + .clk_id = RCC_USB, }; usblib_dev *USBLIB = &usblib; @@ -79,11 +80,13 @@ usblib_dev *USBLIB = &usblib; * Routines */ -void usb_init_usblib(void (**ep_int_in)(void), void (**ep_int_out)(void)) { - rcc_clk_enable(RCC_USB); +void usb_init_usblib(usblib_dev *dev, + void (**ep_int_in)(void), + void (**ep_int_out)(void)) { + rcc_clk_enable(dev->clk_id); - USBLIB->ep_int_in = ep_int_in; - USBLIB->ep_int_out = ep_int_out; + dev->ep_int_in = ep_int_in; + dev->ep_int_out = ep_int_out; /* usb_lib/ declares both and then assumes that pFoo points to Foo * (even though the names don't always match), which is stupid for @@ -242,14 +245,6 @@ void __irq_usb_lp_can_rx0(void) { #endif } -uint8 usbIsConfigured() { - return USBLIB->state == USB_CONFIGURED; -} - -uint8 usbIsConnected() { - return USBLIB->state != USB_UNCONNECTED; -} - /* * Auxiliary routines */ diff --git a/libmaple/usb/usb.h b/libmaple/usb/usb.h index 988c923..94579ea 100644 --- a/libmaple/usb/usb.h +++ b/libmaple/usb/usb.h @@ -32,6 +32,7 @@ #define _USB_H_ #include "libmaple_types.h" +#include "rcc.h" #ifdef __cplusplus extern "C" { @@ -51,28 +52,31 @@ typedef enum usb_dev_state { USB_CONFIGURED } usb_dev_state; -/* Encapsulates global state formerly handled by usb_lib/ - * functionality */ +/* Encapsulates global state formerly handled by usb_lib/ */ typedef struct usblib_dev { uint32 irq_mask; void (**ep_int_in)(void); void (**ep_int_out)(void); usb_dev_state state; + rcc_clk_id clk_id; } usblib_dev; extern usblib_dev *USBLIB; -/* - * Convenience routines, etc. - */ +void usb_init_usblib(usblib_dev *dev, + void (**ep_int_in)(void), + void (**ep_int_out)(void)); -void usb_init_usblib(void (**ep_int_in)(void), void (**ep_int_out)(void)); +static inline uint8 usb_is_connected(usblib_dev *dev) { + return dev->state != USB_UNCONNECTED; +} -uint8 usbIsConnected(void); -uint8 usbIsConfigured(void); +static inline uint8 usb_is_configured(usblib_dev *dev) { + return dev->state == USB_CONFIGURED; +} #ifdef __cplusplus -} // extern "C" +} #endif -#endif // _USB_H_ +#endif diff --git a/libmaple/usb/usb_cdcacm.c b/libmaple/usb/usb_cdcacm.c index fe06166..a86776b 100644 --- a/libmaple/usb/usb_cdcacm.c +++ b/libmaple/usb/usb_cdcacm.c @@ -398,7 +398,7 @@ void usb_cdcacm_enable(gpio_dev *disc_dev, uint8 disc_bit) { gpio_write_bit(disc_dev, disc_bit, 0); // presents us to the host /* initialize USB peripheral */ - usb_init_usblib(ep_int_in, ep_int_out); + usb_init_usblib(USBLIB, ep_int_in, ep_int_out); } void usb_cdcacm_disable(gpio_dev *disc_dev, uint8 disc_bit) { diff --git a/wirish/usb_serial.cpp b/wirish/usb_serial.cpp index ccca4b4..b66b992 100644 --- a/wirish/usb_serial.cpp +++ b/wirish/usb_serial.cpp @@ -57,7 +57,7 @@ void USBSerial::write(const char *str) { } void USBSerial::write(const void *buf, uint32 len) { - if (!(usbIsConnected() && usbIsConfigured()) || !buf) { + if (!this->isConnected() || !buf) { return; } @@ -103,7 +103,7 @@ uint8 USBSerial::pending(void) { } uint8 USBSerial::isConnected(void) { - return usbIsConnected() && usbIsConfigured(); + return usb_is_connected(USBLIB) && usb_is_configured(USBLIB); } uint8 USBSerial::getDTR(void) { |