usbdev: add ncm driver
The compilation and verification commands are shown below: ./tools/configure.sh sim:usbdev make -j sudo ./nuttx nsh> conn 2 nsh> dhcpd_start eth1 Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
This commit is contained in:
parent
b328b35e2b
commit
4e79741e7d
12 changed files with 3172 additions and 12 deletions
|
@ -79,7 +79,11 @@
|
||||||
#define UDC_NAME_LENGTH_MAX 128
|
#define UDC_NAME_LENGTH_MAX 128
|
||||||
|
|
||||||
#define USB_RAW_EP0_MAX_LEN 256
|
#define USB_RAW_EP0_MAX_LEN 256
|
||||||
#define USB_RAW_EP_MAX_LEN 1024
|
#ifdef CONFIG_NET_CDCNCM
|
||||||
|
# define USB_RAW_EP_MAX_LEN 16384
|
||||||
|
#else
|
||||||
|
# define USB_RAW_EP_MAX_LEN 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
#define USB_RAW_RX_BUF_NUM 8
|
#define USB_RAW_RX_BUF_NUM 8
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#
|
#
|
||||||
# CONFIG_SIM_UART_DMA is not set
|
# CONFIG_SIM_UART_DMA is not set
|
||||||
CONFIG_ADBD_FILE_SERVICE=y
|
CONFIG_ADBD_FILE_SERVICE=y
|
||||||
CONFIG_ADBD_SHELL_SERVICE=y
|
|
||||||
CONFIG_ADBD_USB_BOARDCTL=y
|
CONFIG_ADBD_USB_BOARDCTL=y
|
||||||
CONFIG_ADBD_USB_SERVER=y
|
CONFIG_ADBD_USB_SERVER=y
|
||||||
CONFIG_ARCH="sim"
|
CONFIG_ARCH="sim"
|
||||||
|
@ -21,6 +20,7 @@ CONFIG_BUILTIN=y
|
||||||
CONFIG_CDCACM=y
|
CONFIG_CDCACM=y
|
||||||
CONFIG_CDCACM_COMPOSITE=y
|
CONFIG_CDCACM_COMPOSITE=y
|
||||||
CONFIG_CDCECM_COMPOSITE=y
|
CONFIG_CDCECM_COMPOSITE=y
|
||||||
|
CONFIG_CDCNCM_COMPOSITE=y
|
||||||
CONFIG_COMPOSITE_IAD=y
|
CONFIG_COMPOSITE_IAD=y
|
||||||
CONFIG_COMPOSITE_PRODUCTID=0x0042
|
CONFIG_COMPOSITE_PRODUCTID=0x0042
|
||||||
CONFIG_COMPOSITE_VENDORID=0x1630
|
CONFIG_COMPOSITE_VENDORID=0x1630
|
||||||
|
@ -35,25 +35,57 @@ CONFIG_DEBUG_USB_WARN=y
|
||||||
CONFIG_EXAMPLES_DHCPD=y
|
CONFIG_EXAMPLES_DHCPD=y
|
||||||
CONFIG_FS_PROCFS=y
|
CONFIG_FS_PROCFS=y
|
||||||
CONFIG_FS_TMPFS=y
|
CONFIG_FS_TMPFS=y
|
||||||
|
CONFIG_HAVE_CXX=y
|
||||||
|
CONFIG_ICMPv6_AUTOCONF_RDNSS=y
|
||||||
CONFIG_INIT_ENTRYPOINT="nsh_main"
|
CONFIG_INIT_ENTRYPOINT="nsh_main"
|
||||||
|
CONFIG_IOB_NBUFFERS=512
|
||||||
|
CONFIG_IOB_NCHAINS=36
|
||||||
CONFIG_LIBC_DLFCN=y
|
CONFIG_LIBC_DLFCN=y
|
||||||
CONFIG_LIBC_EXECFUNCS=y
|
CONFIG_LIBC_EXECFUNCS=y
|
||||||
CONFIG_LIBUV=y
|
CONFIG_LIBUV=y
|
||||||
CONFIG_NETDB_DNSCLIENT=y
|
CONFIG_NETDB_DNSCLIENT=y
|
||||||
CONFIG_NETDB_DNSCLIENT_MAXRESPONSE=1024
|
CONFIG_NETDB_DNSCLIENT_MAXRESPONSE=1024
|
||||||
CONFIG_NETDB_DNSSERVER_IPv4ADDR=0xDF050505
|
CONFIG_NETDB_DNSSERVER_IPv4ADDR=0xDF050505
|
||||||
|
CONFIG_NETDB_MAX_IPADDR=1
|
||||||
|
CONFIG_NETDEV_PHY_IOCTL=y
|
||||||
|
CONFIG_NETDOWN_NOTIFIER=y
|
||||||
|
CONFIG_NETINIT_DRIPADDR=0x0a000101
|
||||||
|
CONFIG_NETINIT_IPADDR=0x0a000102
|
||||||
CONFIG_NETUTILS_DHCPD=y
|
CONFIG_NETUTILS_DHCPD=y
|
||||||
CONFIG_NETUTILS_IPERF=y
|
CONFIG_NETUTILS_IPERF=y
|
||||||
CONFIG_NETUTILS_TELNETC=y
|
CONFIG_NETUTILS_TELNETC=y
|
||||||
CONFIG_NETUTILS_TELNETD=y
|
CONFIG_NETUTILS_TELNETD=y
|
||||||
|
CONFIG_NET_BINDTODEVICE=y
|
||||||
CONFIG_NET_BROADCAST=y
|
CONFIG_NET_BROADCAST=y
|
||||||
CONFIG_NET_CDCECM=y
|
CONFIG_NET_CDCECM=y
|
||||||
|
CONFIG_NET_CDCNCM=y
|
||||||
CONFIG_NET_ETH_PKTSIZE=1518
|
CONFIG_NET_ETH_PKTSIZE=1518
|
||||||
CONFIG_NET_ICMP_SOCKET=y
|
CONFIG_NET_ICMP_SOCKET=y
|
||||||
|
CONFIG_NET_ICMPv6=y
|
||||||
|
CONFIG_NET_ICMPv6_ALLOC_CONNS=1
|
||||||
|
CONFIG_NET_ICMPv6_AUTOCONF=y
|
||||||
|
CONFIG_NET_ICMPv6_NEIGHBOR=y
|
||||||
|
CONFIG_NET_ICMPv6_ROUTER=y
|
||||||
|
CONFIG_NET_ICMPv6_SOCKET=y
|
||||||
CONFIG_NET_IPFORWARD=y
|
CONFIG_NET_IPFORWARD=y
|
||||||
|
CONFIG_NET_IPFORWARD_NSTRUCT=100
|
||||||
|
CONFIG_NET_IPv6=y
|
||||||
|
CONFIG_NET_MAX_RECV_BUFSIZE=65535
|
||||||
|
CONFIG_NET_MAX_SEND_BUFSIZE=65535
|
||||||
CONFIG_NET_NAT=y
|
CONFIG_NET_NAT=y
|
||||||
|
CONFIG_NET_RECV_BUFSIZE=16384
|
||||||
|
CONFIG_NET_SEND_BUFSIZE=16384
|
||||||
CONFIG_NET_TCP=y
|
CONFIG_NET_TCP=y
|
||||||
|
CONFIG_NET_TCPBACKLOG=y
|
||||||
|
CONFIG_NET_TCP_ALLOC_CONNS=1
|
||||||
|
CONFIG_NET_TCP_DELAYED_ACK=y
|
||||||
|
CONFIG_NET_TCP_KEEPALIVE=y
|
||||||
|
CONFIG_NET_TCP_NOTIFIER=y
|
||||||
|
CONFIG_NET_TCP_SELECTIVE_ACK=y
|
||||||
|
CONFIG_NET_TCP_WRITE_BUFFERS=y
|
||||||
CONFIG_NET_UDP=y
|
CONFIG_NET_UDP=y
|
||||||
|
CONFIG_NET_UDP_NOTIFIER=y
|
||||||
|
CONFIG_NET_UDP_WRITE_BUFFERS=y
|
||||||
CONFIG_NSH_ARCHINIT=y
|
CONFIG_NSH_ARCHINIT=y
|
||||||
CONFIG_NSH_BUILTIN_APPS=y
|
CONFIG_NSH_BUILTIN_APPS=y
|
||||||
CONFIG_NSH_READLINE=y
|
CONFIG_NSH_READLINE=y
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <nuttx/usb/rndis.h>
|
#include <nuttx/usb/rndis.h>
|
||||||
#include <nuttx/usb/cdcacm.h>
|
#include <nuttx/usb/cdcacm.h>
|
||||||
#include <nuttx/usb/cdcecm.h>
|
#include <nuttx/usb/cdcecm.h>
|
||||||
|
#include <nuttx/usb/cdcncm.h>
|
||||||
#include <nuttx/usb/composite.h>
|
#include <nuttx/usb/composite.h>
|
||||||
|
|
||||||
#if defined(CONFIG_BOARDCTL_USBDEVCTRL) && defined(CONFIG_USBDEV_COMPOSITE)
|
#if defined(CONFIG_BOARDCTL_USBDEVCTRL) && defined(CONFIG_USBDEV_COMPOSITE)
|
||||||
|
@ -210,6 +211,53 @@ static void *board_composite1_connect(int port)
|
||||||
return composite_initialize(composite_getdevdescs(), dev, dev_idx);
|
return composite_initialize(composite_getdevdescs(), dev, dev_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: board_composite2_connect
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Connect the USB composite device on the specified USB device port for
|
||||||
|
* configuration 2.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* port - The USB device port.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* A non-NULL handle value is returned on success. NULL is returned on
|
||||||
|
* any failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static void *board_composite2_connect(int port)
|
||||||
|
{
|
||||||
|
struct composite_devdesc_s dev[1];
|
||||||
|
int dev_idx = 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_CDCNCM
|
||||||
|
/* Configure the CDC/NCM device */
|
||||||
|
|
||||||
|
cdcncm_get_composite_devdesc(&dev[dev_idx]);
|
||||||
|
|
||||||
|
/* Interfaces */
|
||||||
|
|
||||||
|
dev[dev_idx].devinfo.ifnobase = 0;
|
||||||
|
dev[dev_idx].minor = 0;
|
||||||
|
|
||||||
|
/* Strings */
|
||||||
|
|
||||||
|
dev[dev_idx].devinfo.strbase = COMPOSITE_NSTRIDS - 1;
|
||||||
|
|
||||||
|
/* Endpoints */
|
||||||
|
|
||||||
|
dev[dev_idx].devinfo.epno[CDCNCM_EP_INTIN_IDX] = 5;
|
||||||
|
dev[dev_idx].devinfo.epno[CDCNCM_EP_BULKIN_IDX] = 6;
|
||||||
|
dev[dev_idx].devinfo.epno[CDCNCM_EP_BULKOUT_IDX] = 7;
|
||||||
|
|
||||||
|
dev_idx += 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return composite_initialize(composite_getdevdescs(), dev, dev_idx);
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -251,10 +299,14 @@ void *board_composite_connect(int port, int configid)
|
||||||
{
|
{
|
||||||
return board_composite0_connect(port);
|
return board_composite0_connect(port);
|
||||||
}
|
}
|
||||||
else
|
else if (configid == 1)
|
||||||
{
|
{
|
||||||
return board_composite1_connect(port);
|
return board_composite1_connect(port);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return board_composite2_connect(port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_BOARDCTL_USBDEVCTRL && CONFIG_USBDEV_COMPOSITE */
|
#endif /* CONFIG_BOARDCTL_USBDEVCTRL && CONFIG_USBDEV_COMPOSITE */
|
||||||
|
|
|
@ -59,6 +59,10 @@ if(CONFIG_USBDEV)
|
||||||
list(APPEND SRCS cdcecm.c)
|
list(APPEND SRCS cdcecm.c)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CONFIG_NET_CDCNCM)
|
||||||
|
list(APPEND SRCS cdcncm.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CONFIG_USBDEV_FS)
|
if(CONFIG_USBDEV_FS)
|
||||||
list(APPEND SRCS usbdev_fs.c)
|
list(APPEND SRCS usbdev_fs.c)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -1226,6 +1226,171 @@ config CDCECM_PRODUCTSTR
|
||||||
endif # !CDCECM_COMPOSITE
|
endif # !CDCECM_COMPOSITE
|
||||||
endif # CDCECM
|
endif # CDCECM
|
||||||
|
|
||||||
|
|
||||||
|
menuconfig NET_CDCNCM
|
||||||
|
bool "CDC-NCM Ethernet-over-USB"
|
||||||
|
default n
|
||||||
|
depends on SCHED_WORKQUEUE
|
||||||
|
depends on NETDEVICES
|
||||||
|
depends on NET
|
||||||
|
depends on NET_ETHERNET
|
||||||
|
---help---
|
||||||
|
References:
|
||||||
|
- "Universal Serial Bus - Communications Class - Subclass
|
||||||
|
Specification for Ethernet Control Model Devices,
|
||||||
|
Revision 1.2, February 9, 2007"
|
||||||
|
|
||||||
|
This option may require CONFIG_NETDEV_LATEINIT=y, otherwise the
|
||||||
|
power-up initialization may call the non-existent xxx_netinitialize().
|
||||||
|
This option is not automatically selected because it may be that
|
||||||
|
you have an additional network device that requires the early
|
||||||
|
xxx_netinitialize() call.
|
||||||
|
|
||||||
|
if NET_CDCNCM
|
||||||
|
|
||||||
|
menuconfig CDCNCM_COMPOSITE
|
||||||
|
bool "CDC/NCM composite support"
|
||||||
|
default n
|
||||||
|
depends on USBDEV_COMPOSITE
|
||||||
|
---help---
|
||||||
|
Configure the CDC Ethernet Control Model driver as part of a
|
||||||
|
composite driver (only if USBDEV_COMPOSITE is also defined)
|
||||||
|
|
||||||
|
if !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
# In a composite device the EP0 config comes from the composite device
|
||||||
|
# and the EP-Number is configured dynamically via composite_initialize
|
||||||
|
|
||||||
|
config CDCNCM_EP0MAXPACKET
|
||||||
|
int "Endpoint 0 max packet size"
|
||||||
|
default 64
|
||||||
|
---help---
|
||||||
|
Endpoint 0 max packet size. Default 64.
|
||||||
|
|
||||||
|
config CDCNCM_EPINTIN
|
||||||
|
int "Interrupt IN endpoint number"
|
||||||
|
default 1
|
||||||
|
---help---
|
||||||
|
The logical 7-bit address of a hardware endpoint that supports
|
||||||
|
interrupt IN operation. Default 1.
|
||||||
|
|
||||||
|
endif # !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
config CDCNCM_EPINTIN_FSSIZE
|
||||||
|
int "Interrupt IN full speed MAXPACKET size"
|
||||||
|
default 16
|
||||||
|
---help---
|
||||||
|
Max package size for the interrupt IN endpoint if full speed mode.
|
||||||
|
Default 16.
|
||||||
|
|
||||||
|
if USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
config CDCNCM_EPINTIN_HSSIZE
|
||||||
|
int "Interrupt IN high speed MAXPACKET size"
|
||||||
|
default 64
|
||||||
|
---help---
|
||||||
|
Max package size for the interrupt IN endpoint if high speed mode.
|
||||||
|
Default 64.
|
||||||
|
|
||||||
|
endif # USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
if !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
# In a composite device the EP-Number is configured dynamically via
|
||||||
|
# composite_initialize
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKOUT
|
||||||
|
int "Bulk OUT endpoint number"
|
||||||
|
default 5
|
||||||
|
---help---
|
||||||
|
The logical 7-bit address of a hardware endpoint that supports
|
||||||
|
bulk OUT operation. Default: 5
|
||||||
|
|
||||||
|
endif # !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKOUT_FSSIZE
|
||||||
|
int "Bulk OUT full speed MAXPACKET size"
|
||||||
|
default 64
|
||||||
|
---help---
|
||||||
|
Max package size for the bulk OUT endpoint if full speed mode.
|
||||||
|
Default 64.
|
||||||
|
|
||||||
|
if USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKOUT_HSSIZE
|
||||||
|
int "Bulk OUT out high speed MAXPACKET size"
|
||||||
|
default 512
|
||||||
|
---help---
|
||||||
|
Max package size for the bulk OUT endpoint if high speed mode.
|
||||||
|
Default 512.
|
||||||
|
|
||||||
|
endif # USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
if !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
# In a composite device the EP-Number is configured dynamically via
|
||||||
|
# composite_initialize
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKIN
|
||||||
|
int "Bulk IN endpoint number"
|
||||||
|
default 2
|
||||||
|
---help---
|
||||||
|
The logical 7-bit address of a hardware endpoint that supports
|
||||||
|
bulk IN operation. Default: 2
|
||||||
|
|
||||||
|
endif # !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKIN_FSSIZE
|
||||||
|
int "Bulk IN full speed MAXPACKET size"
|
||||||
|
default 64
|
||||||
|
---help---
|
||||||
|
Max package size for the bulk IN endpoint if full speed mode.
|
||||||
|
Default 64.
|
||||||
|
|
||||||
|
if USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
config CDCNCM_EPBULKIN_HSSIZE
|
||||||
|
int "Bulk IN high speed MAXPACKET size"
|
||||||
|
default 512
|
||||||
|
---help---
|
||||||
|
Max package size for the bulk IN endpoint if high speed mode.
|
||||||
|
Default 512.
|
||||||
|
|
||||||
|
endif # USBDEV_DUALSPEED
|
||||||
|
|
||||||
|
if !CDCNCM_COMPOSITE
|
||||||
|
|
||||||
|
# In a composite device the Vendor- and Product-ID is given by the composite
|
||||||
|
# device
|
||||||
|
|
||||||
|
config CDCNCM_VENDORID
|
||||||
|
hex "Vendor ID"
|
||||||
|
default 0x0525
|
||||||
|
---help---
|
||||||
|
The vendor ID code/string. Default 0x0525 and "NuttX"
|
||||||
|
0x0525 is the Netchip vendor and should not be used in any
|
||||||
|
products. This default VID was selected for compatibility with
|
||||||
|
the Linux CDC NCM default VID.
|
||||||
|
|
||||||
|
config CDCNCM_PRODUCTID
|
||||||
|
hex "Product ID"
|
||||||
|
default 0xa4a2
|
||||||
|
---help---
|
||||||
|
The product ID code/string. Default 0xa4a2 and "CDC/NCM Ethernet"
|
||||||
|
0xa4a2 was selected for compatibility with the Linux CDC NCM
|
||||||
|
default PID.
|
||||||
|
|
||||||
|
config CDCNCM_VENDORSTR
|
||||||
|
string "Vendor string"
|
||||||
|
default "NuttX"
|
||||||
|
|
||||||
|
config CDCNCM_PRODUCTSTR
|
||||||
|
string "Product string"
|
||||||
|
default "CDC/NCM Ethernet"
|
||||||
|
|
||||||
|
endif # !CDCNCM_COMPOSITE
|
||||||
|
endif # CDCNCM
|
||||||
|
|
||||||
config USBDEV_FS
|
config USBDEV_FS
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -62,6 +62,10 @@ ifeq ($(CONFIG_NET_CDCECM),y)
|
||||||
CSRCS += cdcecm.c
|
CSRCS += cdcecm.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_NET_CDCNCM),y)
|
||||||
|
CSRCS += cdcncm.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_USBDEV_FS),y)
|
ifeq ($(CONFIG_USBDEV_FS),y)
|
||||||
CSRCS += usbdev_fs.c
|
CSRCS += usbdev_fs.c
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -58,4 +58,7 @@
|
||||||
#define CDCECM_SELFPOWERED (0)
|
#define CDCECM_SELFPOWERED (0)
|
||||||
#define CDCECM_REMOTEWAKEUP (0)
|
#define CDCECM_REMOTEWAKEUP (0)
|
||||||
|
|
||||||
|
#define CDCECM_LOW_BITRATE (19 * 64 * 1 * 1000 * 8)
|
||||||
|
#define CDCECM_HIGH_BITRATE (13 * 512 * 8 * 1000 * 8)
|
||||||
|
|
||||||
#endif /* __DRIVERS_USBDEV_CDCECM_H */
|
#endif /* __DRIVERS_USBDEV_CDCECM_H */
|
||||||
|
|
2733
drivers/usbdev/cdcncm.c
Normal file
2733
drivers/usbdev/cdcncm.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1253,7 +1253,7 @@ static int usbhost_cfgdesc(FAR struct usbhost_cdcmbim_s *priv,
|
||||||
|
|
||||||
else if (ifdesc->classid == USB_CLASS_CDC_DATA &&
|
else if (ifdesc->classid == USB_CLASS_CDC_DATA &&
|
||||||
ifdesc->subclass == CDC_SUBCLASS_NONE &&
|
ifdesc->subclass == CDC_SUBCLASS_NONE &&
|
||||||
ifdesc->protocol == CDC_DATA_PROTO_NTB)
|
ifdesc->protocol == CDC_DATA_PROTO_MBIMNTB)
|
||||||
{
|
{
|
||||||
priv->dataif = ifdesc->ifno;
|
priv->dataif = ifdesc->ifno;
|
||||||
found |= USBHOST_DATAIFFOUND;
|
found |= USBHOST_DATAIFFOUND;
|
||||||
|
|
|
@ -57,8 +57,9 @@
|
||||||
#define CDC_SUBCLASS_CAPI 0x05 /* CAPI Control Model */
|
#define CDC_SUBCLASS_CAPI 0x05 /* CAPI Control Model */
|
||||||
#define CDC_SUBCLASS_ECM 0x06 /* Ethernet Networking Control Model */
|
#define CDC_SUBCLASS_ECM 0x06 /* Ethernet Networking Control Model */
|
||||||
#define CDC_SUBCLASS_ATM 0x07 /* ATM Networking Control Model */
|
#define CDC_SUBCLASS_ATM 0x07 /* ATM Networking Control Model */
|
||||||
/* 0x08-0x0d Reserved (future use) */
|
/* 0x08-0x0c Reserved (future use) */
|
||||||
#define CDC_SUBCLASS_MBIM 0x0e /* MBIM Control Model */
|
#define CDC_SUBCLASS_NCM 0x0d /* Network Control Model */
|
||||||
|
#define CDC_SUBCLASS_MBIM 0x0e /* Mobile Broadband Interface Model */
|
||||||
/* 0x0f-0x7f Reserved (future use) */
|
/* 0x0f-0x7f Reserved (future use) */
|
||||||
/* 0x80-0xfe Reserved (vendor specific) */
|
/* 0x80-0xfe Reserved (vendor specific) */
|
||||||
|
|
||||||
|
@ -85,7 +86,8 @@
|
||||||
|
|
||||||
#define CDC_DATA_PROTO_NONE 0x00 /* No class specific protocol required */
|
#define CDC_DATA_PROTO_NONE 0x00 /* No class specific protocol required */
|
||||||
/* 0x01-0x2f Reserved (future use) */
|
/* 0x01-0x2f Reserved (future use) */
|
||||||
#define CDC_DATA_PROTO_NTB 0x02 /* Network Transfer Block protocol */
|
#define CDC_DATA_PROTO_NCMNTB 0x01 /* NCM Network Transfer Block protocol */
|
||||||
|
#define CDC_DATA_PROTO_MBIMNTB 0x02 /* MBIM Network Transfer Block protocol */
|
||||||
#define CDC_DATA_PROTO_ISDN 0x30 /* Physical interface protocol for ISDN BRI */
|
#define CDC_DATA_PROTO_ISDN 0x30 /* Physical interface protocol for ISDN BRI */
|
||||||
#define CDC_DATA_PROTO_HDLC 0x31 /* HDLC */
|
#define CDC_DATA_PROTO_HDLC 0x31 /* HDLC */
|
||||||
#define CDC_DATA_PROTO_TRANSP 0x32 /* Transparent */
|
#define CDC_DATA_PROTO_TRANSP 0x32 /* Transparent */
|
||||||
|
@ -328,6 +330,19 @@
|
||||||
*/
|
*/
|
||||||
#define ECM_SPEED_CHANGE ATM_SPEED_CHANGE
|
#define ECM_SPEED_CHANGE ATM_SPEED_CHANGE
|
||||||
|
|
||||||
|
/* Table 14: Requests, Networking Control Model */
|
||||||
|
|
||||||
|
#define NCM_GET_NTB_PARAMETERS 0x80
|
||||||
|
#define NCM_SET_NTB_FORMAT 0x84
|
||||||
|
#define NCM_GET_NTB_INPUT_SIZE 0x85
|
||||||
|
#define NCM_SET_NTB_INPUT_SIZE 0x86
|
||||||
|
#define NCM_SET_CRC_MODE 0x8a
|
||||||
|
|
||||||
|
/* Table 15: Notifications, Networking Control Model */
|
||||||
|
|
||||||
|
#define NCM_NETWORK_CONNECTION ECM_NETWORK_CONNECTION
|
||||||
|
#define NCM_SPEED_CHANGE ECM_SPEED_CHANGE
|
||||||
|
|
||||||
/* Descriptors ***************************************************************/
|
/* Descriptors ***************************************************************/
|
||||||
|
|
||||||
/* Table 25: bDescriptor SubType in Functional Descriptors */
|
/* Table 25: bDescriptor SubType in Functional Descriptors */
|
||||||
|
@ -352,8 +367,9 @@
|
||||||
#define CDC_DSUBTYPE_CAPI 0x0e /* CAPI Control Management Functional Descriptor */
|
#define CDC_DSUBTYPE_CAPI 0x0e /* CAPI Control Management Functional Descriptor */
|
||||||
#define CDC_DSUBTYPE_ECM 0x0f /* Ethernet Networking Functional Descriptor */
|
#define CDC_DSUBTYPE_ECM 0x0f /* Ethernet Networking Functional Descriptor */
|
||||||
#define CDC_DSUBTYPE_ATM 0x10 /* ATM Networking Functional Descriptor */
|
#define CDC_DSUBTYPE_ATM 0x10 /* ATM Networking Functional Descriptor */
|
||||||
|
#define CDC_DSUBTYPE_NCM 0x1a /* Networking Functional Descriptor */
|
||||||
#define CDC_DSUBTYPE_MBIM 0x1b /* MBIM Functional Descriptor */
|
#define CDC_DSUBTYPE_MBIM 0x1b /* MBIM Functional Descriptor */
|
||||||
/* 0x11-0xff Reserved (future use) */
|
/* 0x11-0x19 and 0x1c-0xff Reserved (future use) */
|
||||||
|
|
||||||
/* Table 42: Ethernet Statistics Capabilities */
|
/* Table 42: Ethernet Statistics Capabilities */
|
||||||
|
|
||||||
|
@ -880,6 +896,23 @@ struct cdc_ecm_funcdesc_s
|
||||||
|
|
||||||
#define SIZEOF_ECM_FUNCDESC 13
|
#define SIZEOF_ECM_FUNCDESC 13
|
||||||
|
|
||||||
|
/* Table 42: NCM Control Model Functional Descriptor */
|
||||||
|
|
||||||
|
struct cdc_ncm_funcdesc_s
|
||||||
|
{
|
||||||
|
uint8_t size; /* bLength, Size of this descriptor */
|
||||||
|
uint8_t type; /* bDescriptorType, USB_DESC_TYPE_CSINTERFACE */
|
||||||
|
uint8_t subtype; /* bDescriptorSubType, CDC_DSUBTYPE_NCM as defined in
|
||||||
|
* Table 25.
|
||||||
|
*/
|
||||||
|
uint8_t version[2]; /* bcdNcmVersion, the NCM version 0x0100 */
|
||||||
|
uint8_t netcaps; /* bmNetworkCapabilities, The NCM net types the device
|
||||||
|
* supports.
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SIZEOF_NCM_FUNCDESC 6
|
||||||
|
|
||||||
/* Table 43: ATM Networking Functional Descriptor */
|
/* Table 43: ATM Networking Functional Descriptor */
|
||||||
|
|
||||||
struct cdc_atm_funcdesc_s
|
struct cdc_atm_funcdesc_s
|
||||||
|
|
105
include/nuttx/usb/cdcncm.h
Normal file
105
include/nuttx/usb/cdcncm.h
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/****************************************************************************
|
||||||
|
* include/nuttx/usb/cdcncm.h
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __INCLUDE_NUTTX_USB_CDCNCM_H
|
||||||
|
#define __INCLUDE_NUTTX_USB_CDCNCM_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_CDCNCM_COMPOSITE
|
||||||
|
# include <nuttx/usb/composite.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Preprocessor definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define CDCNCM_EP_INTIN_IDX (0)
|
||||||
|
#define CDCNCM_EP_BULKIN_IDX (1)
|
||||||
|
#define CDCNCM_EP_BULKOUT_IDX (2)
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#undef EXTERN
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
# define EXTERN extern "C"
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
# define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: cdcncm_initialize
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Register CDC/NCM USB device interface. Register the corresponding
|
||||||
|
* network driver to NuttX and bring up the network.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* minor - Device minor number.
|
||||||
|
* handle - An optional opaque reference to the CDC/NCM class object that
|
||||||
|
* may subsequently be used with cdcncm_uninitialize().
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero (OK) means that the driver was successfully registered. On any
|
||||||
|
* failure, a negated errno value is returned.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef CONFIG_CDCNCM_COMPOSITE
|
||||||
|
int cdcncm_initialize(int minor, FAR void **handle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: cdcncm_get_composite_devdesc
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Helper function to fill in some constants into the composite
|
||||||
|
* configuration struct.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* dev - Pointer to the configuration struct we should fill
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_CDCNCM_COMPOSITE
|
||||||
|
void cdcncm_get_composite_devdesc(FAR struct composite_devdesc_s *dev);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef EXTERN
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __INCLUDE_NUTTX_USB_CDCNCM_H */
|
|
@ -65,10 +65,35 @@
|
||||||
#define MSBYTE(u16) ((u16) >> 8) /* Get MS byte from uint16_t */
|
#define MSBYTE(u16) ((u16) >> 8) /* Get MS byte from uint16_t */
|
||||||
#define LSBYTE(u16) ((u16) & 0xff) /* Get LS byte from uint16_t */
|
#define LSBYTE(u16) ((u16) & 0xff) /* Get LS byte from uint16_t */
|
||||||
|
|
||||||
#define GETUINT16(p) ((uint16_t)((uint16_t)(p[1] << 8) | (uint16_t)p[0]))
|
#define GETUINT16(p) ((uint16_t)(((uint16_t)(p)[1] << 8) | \
|
||||||
#define GETUINT32(p) ((uint32_t)((uint32_t)p[3] << 24) | \
|
(uint16_t)(p)[0]))
|
||||||
((uint32_t)p[2] << 16) | \
|
|
||||||
((uint32_t)p[1] << 8) | (uint32_t)p[0])
|
#define PUTUINT16(p, v) do \
|
||||||
|
{ \
|
||||||
|
uint8_t *__p; \
|
||||||
|
__p = (FAR uint8_t *)(p); \
|
||||||
|
*__p++ = ((uint16_t)(v) & 0xff); \
|
||||||
|
*__p = ((uint16_t)(v) >> 8); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
/* All 32-bit values must be little-endian */
|
||||||
|
|
||||||
|
#define GETUINT32(p) ((uint32_t)(((uint32_t)(p)[3] << 24) | \
|
||||||
|
((uint32_t)(p)[2] << 16) | \
|
||||||
|
((uint32_t)(p)[1] << 8) | \
|
||||||
|
(uint32_t)(p)[0]))
|
||||||
|
|
||||||
|
#define PUTUINT32(p, v) do \
|
||||||
|
{ \
|
||||||
|
uint8_t *__p; \
|
||||||
|
__p = (FAR uint8_t *)(p); \
|
||||||
|
*__p++ = ((uint32_t)(v) & 0xff); \
|
||||||
|
*__p++ = ((uint32_t)(v) >> 8) & 0xff; \
|
||||||
|
*__p++ = ((uint32_t)(v) >> 16) & 0xff; \
|
||||||
|
*__p = ((uint32_t)(v) >> 24); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
/* USB directions (in endpoint addresses) */
|
/* USB directions (in endpoint addresses) */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue