Просмотр исходного кода

implement dcd connect/disconnect for samd and nrf

hathach 5 лет назад
Родитель
Сommit
c1f3fbbc03
2 измененных файлов с 28 добавлено и 1 удалено
  1. 14 1
      src/portable/microchip/samd/dcd_samd.c
  2. 14 0
      src/portable/nordic/nrf5x/dcd_nrf5x.c

+ 14 - 1
src/portable/microchip/samd/dcd_samd.c

@@ -154,10 +154,23 @@ void dcd_set_config (uint8_t rhport, uint8_t config_num)
 void dcd_remote_wakeup(uint8_t rhport)
 {
   (void) rhport;
-
   USB->DEVICE.CTRLB.bit.UPRSM = 1;
 }
 
+// disconnect by disabling internal pull-up resistor on D+/D-
+void dcd_disconnect(uint8_t rhport)
+{
+  (void) rhport;
+  USB->DEVICE.CTRLB.reg |= USB_DEVICE_CTRLB_DETACH;
+}
+
+// connect by enabling internal pull-up resistor on D+/D-
+void dcd_connect(uint8_t rhport)
+{
+  (void) rhport;
+   USB->DEVICE.CTRLB.reg &= ~USB_DEVICE_CTRLB_DETACH;
+}
+
 /*------------------------------------------------------------------*/
 /* DCD Endpoint port
  *------------------------------------------------------------------*/

+ 14 - 0
src/portable/nordic/nrf5x/dcd_nrf5x.c

@@ -237,6 +237,20 @@ void dcd_remote_wakeup(uint8_t rhport)
   // We may manually raise DCD_EVENT_RESUME event here
 }
 
+// disconnect by disabling internal pull-up resistor on D+/D-
+void dcd_disconnect(uint8_t rhport)
+{
+  (void) rhport;
+  NRF_USBD->USBPULLUP = 0;
+}
+
+// connect by enabling internal pull-up resistor on D+/D-
+void dcd_connect(uint8_t rhport)
+{
+  (void) rhport;
+  NRF_USBD->USBPULLUP = 1;
+}
+
 //--------------------------------------------------------------------+
 // Endpoint API
 //--------------------------------------------------------------------+