summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorPeter Lawrence <[email protected]>2020-04-12 15:41:18 -0500
committerPeter Lawrence <[email protected]>2020-04-12 15:41:18 -0500
commitbb3bbcc00bfa641d285b28931ceb8bd04c3f7651 (patch)
tree3a6a47cf13ac41d4076ecf97362527e096bd2c6b /src/device
parent13a3081d308828ae6e4b9a40bb8ac7bf5b0e424c (diff)
usbnet: OS-agnostic (Windows/Linux/macOS) network driver
Diffstat (limited to 'src/device')
-rw-r--r--src/device/usbd.c38
-rw-r--r--src/device/usbd.h12
2 files changed, 39 insertions, 11 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 2adac429c..9d15ea4a4 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -184,21 +184,47 @@ static usbd_class_driver_t const _usbd_driver[] =
#endif
#if CFG_TUD_NET
+#if CFG_TUD_NET != OPT_NET_EEM
+ /* RNDIS management interface */
{
- .class_code =
-#if CFG_TUD_NET == OPT_NET_RNDIS
- TUD_RNDIS_ITF_CLASS,
-#else
- TUSB_CLASS_CDC,
+ .class_code = TUD_RNDIS_ITF_CLASS,
+ .init = netd_init,
+ .reset = netd_reset,
+ .open = netd_open,
+ .control_request = netd_control_request,
+ .control_complete = netd_control_complete,
+ .xfer_cb = netd_xfer_cb,
+ .sof = NULL,
+ },
#endif
+ /* CDC-ECM management interface; CDC-EEM data interface */
+ {
+ .class_code = TUSB_CLASS_CDC,
.init = netd_init,
.reset = netd_reset,
+#if CFG_TUD_NET == OPT_NET_EEM
+ .open = netd_open_data,
+#else
.open = netd_open,
+#endif
.control_request = netd_control_request,
.control_complete = netd_control_complete,
.xfer_cb = netd_xfer_cb,
- .sof = NULL
+ .sof = NULL,
},
+ /* RNDIS/CDC-ECM data interface */
+#if CFG_TUD_NET != OPT_NET_EEM
+ {
+ .class_code = TUSB_CLASS_CDC_DATA,
+ .init = netd_init_data,
+ .reset = NULL,
+ .open = netd_open_data,
+ .control_request = NULL,
+ .control_complete = NULL,
+ .xfer_cb = netd_xfer_cb,
+ .sof = NULL,
+ },
+#endif
#endif
};
diff --git a/src/device/usbd.h b/src/device/usbd.h
index 817af20e3..756f5b161 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -342,8 +342,8 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
//------------- CDC-ECM -------------//
-// Length of template descriptor: 62 bytes
-#define TUD_CDC_ECM_DESC_LEN (9+5+5+13+7+9+7+7)
+// Length of template descriptor: 71 bytes
+#define TUD_CDC_ECM_DESC_LEN (9+5+5+13+7+9+9+7+7)
// CDC-ECM Descriptor Template
// Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size.
@@ -358,8 +358,10 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
13, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_ETHERNET_NETWORKING, _mac_stridx, 0, 0, 0, 0, U16_TO_U8S_LE(_maxsegmentsize), U16_TO_U8S_LE(0), 0,\
/* Endpoint Notification */\
7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\
- /* CDC Data Interface */\
- 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\
+ /* CDC Data Interface (default inactive) */\
+ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 0, 0,\
+ /* CDC Data Interface (alternative active) */\
+ 9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 0, 0,\
/* Endpoint In */\
7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\
/* Endpoint Out */\
@@ -372,7 +374,7 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
/* Windows XP */
#define TUD_RNDIS_ITF_CLASS TUSB_CLASS_CDC
#define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL
- #define TUD_RNDIS_ITF_PROTOCOL CDC_COMM_PROTOCOL_MICROSOFT_RNDIS
+ #define TUD_RNDIS_ITF_PROTOCOL 0xFF /* CDC_COMM_PROTOCOL_MICROSOFT_RNDIS */
#else
/* Windows 7+ */
#define TUD_RNDIS_ITF_CLASS 0xE0