* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+use nvic;
+use clock;
+
extern {
- fn USB_VcomInit();
+ fn USB_VcomInit(vid: u16, pid: u16);
+ fn USB_VcomDeinit();
+}
+
+pub unsafe fn init(vid: u16, pid: u16) {
+ USB_VcomInit(vid, pid);
+}
+
+pub unsafe fn shutdown() {
+ USB_VcomDeinit();
+}
+
+#[no_mangle]
+#[allow(non_snake_case)]
+pub unsafe extern fn USB_DeviceIsrEnable()
+{
+ let irq_number = 24; // USB0
+ let irq_prio = 3; // Stolen from NXP example.
+
+ nvic::set_priority(irq_number, irq_prio);
+ nvic::enable_irq(irq_number);
+}
+
+#[no_mangle]
+#[allow(non_snake_case)]
+pub unsafe extern fn USB_DeviceIsrDisable()
+{
+ let irq_number = 24; // USB0
+
+ nvic::disable_irq(irq_number);
}
-pub unsafe fn init() {
- USB_VcomInit();
+#[no_mangle]
+#[allow(non_snake_case)]
+pub unsafe extern fn USB_DeviceClockInit()
+{
+ clock::configure_usb();
}