You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gn...@apache.org on 2020/06/15 13:13:31 UTC
[incubator-nuttx] 04/06: Fix issues reported on PR #1233
This is an automated email from the ASF dual-hosted git repository.
gnutt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 7609b6749682afbfa3fbcf4c066dae510ddb2d39
Author: Alan C. Assis <ac...@gmail.com>
AuthorDate: Sun Jun 14 19:59:38 2020 -0300
Fix issues reported on PR #1233
---
drivers/usbhost/Kconfig | 3 ++-
drivers/usbhost/usbhost_cdcmbim.c | 39 +++++++++++++++++++++------------------
include/nuttx/net/net.h | 2 +-
include/nuttx/usb/cdc.h | 8 +++++---
net/Kconfig | 5 +++++
net/netdev/netdev_register.c | 13 ++++++++-----
6 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/drivers/usbhost/Kconfig b/drivers/usbhost/Kconfig
index d9678d1..f57904b 100644
--- a/drivers/usbhost/Kconfig
+++ b/drivers/usbhost/Kconfig
@@ -265,8 +265,9 @@ endif # USBHOST_CDCACM
config USBHOST_CDCMBIM
bool "CDC/MBIM support"
default n
- depends on USBHOST_HAVE_ASYNCH && !USBHOST_BULK_DISABLE && !USBHOST_INT_DISABLE
+ depends on USBHOST_HAVE_ASYNCH && !USBHOST_BULK_DISABLE && !USBHOST_INT_DISABLE && EXPERIMENTAL
select USBHOST_ASYNCH
+ select NET_MBIM
---help---
Select this option to build in host support for CDC/MBIM network
devices.
diff --git a/drivers/usbhost/usbhost_cdcmbim.c b/drivers/usbhost/usbhost_cdcmbim.c
index eb1f0da..b0b251c 100644
--- a/drivers/usbhost/usbhost_cdcmbim.c
+++ b/drivers/usbhost/usbhost_cdcmbim.c
@@ -56,6 +56,7 @@
****************************************************************************/
/* put in cdc.h */
+
#define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00
#define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01
#define USB_CDC_GET_NTB_PARAMETERS 0x80
@@ -564,10 +565,10 @@ static ssize_t cdcwdm_write(FAR struct file *filep, FAR const char *buffer,
static int cdcwdm_poll(FAR struct file *filep, FAR struct pollfd *fds,
bool setup)
{
- FAR struct inode *inode;
+ FAR struct inode *inode;
FAR struct usbhost_cdcmbim_s *priv;
- int ret = OK;
- int i;
+ int ret = OK;
+ int i;
DEBUGASSERT(filep && filep->f_inode && fds);
inode = filep->f_inode;
@@ -803,9 +804,11 @@ static void usbhost_bulkin_work(FAR void *arg)
{
struct usbhost_cdcmbim_s *priv;
struct usbhost_hubport_s *hport;
+ struct usb_cdc_ncm_nth16_s *nth;
uint16_t ndpoffset;
uint16_t dgram_len;
uint16_t dgram_off;
+ uint16_t block_len;
priv = (struct usbhost_cdcmbim_s *)arg;
DEBUGASSERT(priv);
@@ -828,8 +831,7 @@ static void usbhost_bulkin_work(FAR void *arg)
/* Parse the NTB header */
- struct usb_cdc_ncm_nth16_s *nth =
- (struct usb_cdc_ncm_nth16_s *)priv->rxnetbuf;
+ nth = (struct usb_cdc_ncm_nth16_s *)priv->rxnetbuf;
if (usbhost_getle32(nth->signature) != USB_CDC_NCM_NTH16_SIGNATURE)
{
@@ -837,7 +839,7 @@ static void usbhost_bulkin_work(FAR void *arg)
goto out;
}
- uint16_t block_len = usbhost_getle16(nth->block_length);
+ block_len = usbhost_getle16(nth->block_length);
if (block_len > priv->bulkinbytes)
{
@@ -856,6 +858,7 @@ static void usbhost_bulkin_work(FAR void *arg)
do
{
+ struct usb_cdc_ncm_dpe16_s *dpe;
struct usb_cdc_ncm_ndp16_s *ndp
= (struct usb_cdc_ncm_ndp16_s *)(priv->rxnetbuf + ndpoffset);
@@ -863,8 +866,6 @@ static void usbhost_bulkin_work(FAR void *arg)
/* Parse each DPE */
- struct usb_cdc_ncm_dpe16_s *dpe;
-
for (dpe = ndp->dpe16; usbhost_getle16(dpe->index); dpe++)
{
dgram_off = usbhost_getle16(dpe->index);
@@ -904,7 +905,17 @@ out:
static void usbhost_rxdata_work(FAR void *arg)
{
+ /* Would be nice if CTRLIN would return how many bytes it read... */
+
+ struct mbim_header_s
+ {
+ uint8_t type[4];
+ uint8_t len[4];
+ };
+
FAR struct usbhost_cdcmbim_s *priv;
+ struct mbim_header_s *hdr;
+ uint32_t len;
int ret;
priv = (FAR struct usbhost_cdcmbim_s *)arg;
@@ -931,16 +942,8 @@ static void usbhost_rxdata_work(FAR void *arg)
goto errout;
}
- /* Would be nice if CTRLIN would return how many bytes it read... */
-
- struct mbim_header_s
- {
- uint8_t type[4];
- uint8_t len[4];
- };
-
- struct mbim_header_s *hdr = (struct mbim_header_s *)priv->comm_rxbuf;
- uint32_t len = usbhost_getle32(hdr->len);
+ hdr = (struct mbim_header_s *)priv->comm_rxbuf;
+ len = usbhost_getle32(hdr->len);
if (len > priv->maxctrlsize)
{
diff --git a/include/nuttx/net/net.h b/include/nuttx/net/net.h
index 3bb4808..c2cbb93 100644
--- a/include/nuttx/net/net.h
+++ b/include/nuttx/net/net.h
@@ -156,7 +156,7 @@ enum net_lltype_e
NET_LL_IEEE80211, /* IEEE 802.11 */
NET_LL_IEEE802154, /* IEEE 802.15.4 MAC */
NET_LL_PKTRADIO, /* Non-standard packet radio */
- NET_LL_MBIM
+ NET_LL_MBIM /* CDC-MBIM USB host driver */
};
/* This defines a bitmap big enough for one bit for each socket option */
diff --git a/include/nuttx/usb/cdc.h b/include/nuttx/usb/cdc.h
index 7c3b7fb..429fc05 100644
--- a/include/nuttx/usb/cdc.h
+++ b/include/nuttx/usb/cdc.h
@@ -1,4 +1,4 @@
-/****************************************************************************
+/*****************************************************************************
* include/nuttx/usb/cdc.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -16,7 +16,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*
- ****************************************************************************/
+ *****************************************************************************/
#ifndef __INCLUDE_NUTTX_USB_CDC_H
#define __INCLUDE_NUTTX_USB_CDC_H
@@ -930,7 +930,9 @@ struct cdc_linecoding_s
struct cdc_linestatus_s
{
uint8_t size[2]; /* wLength, Size of this structure, in bytes */
- uint8_t ringer[4]; /* dwRingerBitmap, Ringer Conf bitmap for this line */
+ uint8_t ringer[4]; /* dwRingerBitmap, Ringer Configuration bitmap for this
+ * line
+ */
uint8_t line[4]; /* dwLineState, Defines current state of the line */
uint32_t call[1]; /* dwCallStateN, Current state of call N on the line */
};
diff --git a/net/Kconfig b/net/Kconfig
index fed3d01..0240f1c 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -150,6 +150,11 @@ config NET_LOOPBACK_PKTSIZE
CONFIG_NET_LOOPBACK_PKTSIZE is zero, meaning that this maximum
packet size will be used by loopback driver.
+menuconfig NET_MBIM
+ bool "MBIM modem support"
+ depends on USBHOST_CDCMBIM
+ default n
+
menuconfig NET_SLIP
bool "SLIP support"
select ARCH_HAVE_NETDEV_STATISTICS
diff --git a/net/netdev/netdev_register.c b/net/netdev/netdev_register.c
index 1ca7e54..4b08efa 100644
--- a/net/netdev/netdev_register.c
+++ b/net/netdev/netdev_register.c
@@ -314,11 +314,14 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
devfmt = NETDEV_TUN_FORMAT;
break;
#endif
- case NET_LL_MBIM:
- llhdrlen = 0;
- pktsize = 1200;
- devfmt = NETDEV_WWAN_FORMAT;
- break;
+
+#ifdef CONFIG_NET_MBIM
+ case NET_LL_MBIM:
+ llhdrlen = 0;
+ pktsize = 1200;
+ devfmt = NETDEV_WWAN_FORMAT;
+ break;
+#endif
default:
nerr("ERROR: Unrecognized link type: %d\n", lltype);