Add CDC NCM driver
This commit is contained in:
		@@ -220,6 +220,19 @@ static usbd_class_driver_t const _usbd_driver[] =
 | 
			
		||||
      .sof              = NULL
 | 
			
		||||
  },
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if CFG_TUD_NCM
 | 
			
		||||
  {
 | 
			
		||||
      DRIVER_NAME("NCM")
 | 
			
		||||
      .init             = ncmd_init,
 | 
			
		||||
      .reset            = ncmd_reset,
 | 
			
		||||
      .open             = ncmd_open,
 | 
			
		||||
      .control_request  = ncmd_control_request,
 | 
			
		||||
      .control_complete = ncmd_control_complete,
 | 
			
		||||
      .xfer_cb          = ncmd_xfer_cb,
 | 
			
		||||
      .sof              = NULL
 | 
			
		||||
  },
 | 
			
		||||
  #endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum { BUILTIN_DRIVER_COUNT = TU_ARRAY_SIZE(_usbd_driver) };
 | 
			
		||||
 
 | 
			
		||||
@@ -671,6 +671,39 @@ TU_ATTR_WEAK bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_re
 | 
			
		||||
  TUD_BTH_PRI_ITF(_itfnum, _stridx, _ep_evt, _ep_evt_size, _ep_evt_interval, _ep_in, _ep_out, _ep_size) \
 | 
			
		||||
  TUD_BTH_ISO_ITFS(_itfnum + 1, _ep_in + 1, _ep_out + 1, __VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//------------- CDC-NCM -------------//
 | 
			
		||||
 | 
			
		||||
// Length of template descriptor
 | 
			
		||||
#define TUD_CDC_NCM_DESC_LEN  (8+9+5+5+13+6+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.
 | 
			
		||||
#define TUD_CDC_NCM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \
 | 
			
		||||
  /* Interface Association */\
 | 
			
		||||
  8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, 0,\
 | 
			
		||||
  /* CDC Control Interface */\
 | 
			
		||||
  9, TUSB_DESC_INTERFACE, _itfnum, 0, 1, TUSB_CLASS_CDC, CDC_COMM_SUBCLASS_NETWORK_CONTROL_MODEL, 0, _desc_stridx,\
 | 
			
		||||
  /* CDC-NCM Header */\
 | 
			
		||||
  5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_HEADER, U16_TO_U8S_LE(0x0110),\
 | 
			
		||||
  /* CDC-NCM Union */\
 | 
			
		||||
  5, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_UNION, _itfnum, (uint8_t)((_itfnum) + 1),\
 | 
			
		||||
  /* CDC-ECM Functional Descriptor */\
 | 
			
		||||
  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, \
 | 
			
		||||
  /* CDC-ECM Functional Descriptor */\
 | 
			
		||||
  6, TUSB_DESC_CS_INTERFACE, CDC_FUNC_DESC_NCM, U16_TO_U8S_LE(0x0100), 0, \
 | 
			
		||||
  /* Endpoint Notification */\
 | 
			
		||||
  7, TUSB_DESC_ENDPOINT, _ep_notif, TUSB_XFER_INTERRUPT, U16_TO_U8S_LE(_ep_notif_size), 1,\
 | 
			
		||||
  /* CDC Data Interface (default inactive) */\
 | 
			
		||||
  9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 0, 0, TUSB_CLASS_CDC_DATA, 0, 1, 0,\
 | 
			
		||||
  /* CDC Data Interface (alternative active) */\
 | 
			
		||||
  9, TUSB_DESC_INTERFACE, (uint8_t)((_itfnum)+1), 1, 2, TUSB_CLASS_CDC_DATA, 0, 1, 0,\
 | 
			
		||||
  /* Endpoint In */\
 | 
			
		||||
  7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\
 | 
			
		||||
  /* Endpoint Out */\
 | 
			
		||||
  7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user