Commit graph

944 commits

Author SHA1 Message Date
Johann Fischer
32cac08e55 usb: class: adapt functions for new composite interface
Adapt functions for new composite interface.

Assign bInterfaceNumber and similar variables of a Interface
default values, these should be valid values for non-composite
configuration. For the case of the composite configuration,
these variables must be set by the interface configuration
function (interface_config) accordingly.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
1383dad8a7 subsys: usb: rework composite device support
This patch reworks composite device support. It allows the
functions to be modular and the user to combine its own
functions with the USB functions of the Zephyr OS.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
1237549082 subsys: usb: configure Interface descriptor at runtime
Introduce function to configure interface descriptor at runtime.
It is simple to leave the corresponding function to configure the
interface descriptor and fix bInterfaceNumber and iInterface values,
for example.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
bf332d0004 subsys: usb: validate and update endpoint address
Add the routine to validate endpoint address and update the endpoint
descriptors and usb_ep_cfg_data at runtime.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
18b27b7f9d subsys: usb: fetch endpoint address from usb_ep_cfg_data
This patch changes all class functions so that the endpoint
address will be retrieved from the usb_ep_cfg_data at runtime.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
6807f3a826 subsys: usb: move descriptor parts to the class drivers
This patch moves the descriptor parts to related class
and function drivers and extends the usb_fix_descriptor
function so that the wTotalLength and bNumInterfaces
are corrected before enumeration.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
589dbc4cd8 subsys: usb: add function to find and fix USB descriptors
This patch introduces a function to find and correct all string
descriptor.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Johann Fischer
0fca16443a subsys: usb: rework usb string descriptor fixup
This patch simplifies the handling of the string descriptors.
It introduces common macro for all string descriptors to
calculate the length of the bString.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-15 11:02:05 +02:00
Aurelien Jarno
a55c72d35f subsys: usb/class/hid: make interrupt endpoint size configurable
The Kconfig option HID_INTERRUPT_EP_MPS does not have a prompt entry,
so it is not configurable in practice. Fix that.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
2018-06-13 21:07:09 -04:00
Johann Fischer
1ce6a6eaa8 subsys: usb: update bcdUSB to 2.00
Update bcdUSB to 2.00

resolves #7570

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-06-11 17:31:15 -04:00
Loic Poulain
452cb61844 usb: bluetooth: Use transfer API for ACL packets
Use transfer API for ACL out transfers. No extra buffer is requested,
directly use the net buf and update its len on transfer completion.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2018-06-11 17:28:27 -04:00
Loic Poulain
00a6b4c5ae usb: bluetooth: Fix assert due to unreserved headroom
Bluetooth net buffers have 1-byte reserve, which can be used by HCI bus
driver (uart, spi...) to set packet type (H4).
This fixes assert when building hci_usb with CONFIG_NET_BUF_SIMPLE_LOG.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2018-06-11 17:28:27 -04:00
Loic Poulain
51fecf80d9 usb: bluetooth: Add TX thread
Calling bt_send from IRQ context is not safe, at least in HCI SPI case.
In the same way as hci_core, create a thread for TX.
This fixes hci_usb sample for 96b_carbon board.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2018-06-11 17:28:27 -04:00
Andrei Emeltchenko
73009d05ce usb: cdc_acm: Set bInterfaceProtocol to No Protocol (0)
Do not set protocol in interface descriptor. Although this field has
been ignored by major OSs during the last decades, this creates a big
deal of problems with ModemManager sending unexpected AT commands when
plugging in a dev board.

Fixes: #6646

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-30 09:05:40 -04:00
Johann Fischer
cb0dd0cc93 usb: function_eem: fix eem_read_cb
This patch prevents eem_read_cb from trying to allocate a lot of memory.

It may happen that EEM payload size is zero, the eem_read_cb then tries
to allocate a buffer which is 0xfffc bytes large and luckily blocks.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-05-28 12:47:32 -04:00
Andrei Emeltchenko
fc8bcb9a1b usb: netusb: Refactor function's status callbacks
Refactor functions status callbacks for netusb ECM, EEM and RNDIS.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Andrei Emeltchenko
7a6f1c9884 usb: netusb: Implement status callback for RNDIS
Implement status callback

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Andrei Emeltchenko
1d5692a7b6 usb: netusb: Implement status callback for EEM
Implement status callback.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Andrei Emeltchenko
851195bfe3 usb: netusb: Implement status callback for ECM
Implement status callback.

Fixes: #7364

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Andrei Emeltchenko
3497791372 usb: netusb: Use function - defined status callbacks
Allow functions to define status callbacks

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Andrei Emeltchenko
5135a73391 usb: netusb: Add subsys/usb to include list
This helps to source files without ../../ etc paths.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-05-26 08:27:16 -04:00
Kumar Gala
b0e697cc43 subsys: usb: Remove undefined CONFIG_USB_DEVICE_HID_BOOTP
The Kconfig symbol CONFIG_USB_DEVICE_HID_BOOTP isn't defined anywhere,
so remove dead code associated with it.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2018-05-25 08:04:36 -05:00
Kumar Gala
5013cca676 usb: rndis: Rename CONFIG_RNDIS_TX_BUF_* and CONFIG_RNDIS_CMD_BUF_*
Rename CONFIG_RNDIS_TX_BUF_* to CFG_RNDIS_TX_BUF_* and rename
CONFIG_RNDIS_CMD_BUF_* to CFG_RNDIS_CMD_BUF_*.  The CONFIG options where
not exposed in Kconfig so limit use of CONFIG_ to Kconfig only symbols.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2018-05-23 17:57:06 -04:00
Johann Fischer
4b0b65c1b8 subsys: usb: check for invalid descriptor type request
Implementation of Get Descriptor Request should not return interface
or endpoint descriptors in a single request without configuration
descriptor, see USB Spec. Revision 2.0, 9.4.3 Get Descriptor

This patch fixes linux kernel usbtest subtest 7 and subtest 11 errors.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-05-14 17:24:52 -04:00
qianfan Zhao
63ffbe9dcb usb: usb_device.c: rewrite if condition judgment
The 'if condition' in usb_handle_control_transfer is diffcult
to understand. So I rewrite another version.

Fixes #7340

Signed-off-by: qianfan Zhao <qianfanguijin@163.com>
2018-05-14 17:23:21 -04:00
qianfan Zhao
4e324e2171 usb: dfu: fix 'this area can not be overwritten'
fix issue #7336

Signed-off-by: qianfan Zhao <qianfanguijin@163.com>
2018-05-10 16:26:38 -07:00
Ramakrishna Pallala
2b5b7da9f3 subsys: disk: Add support for multiple disk interfaces
Add support for enabling multiple disk interfaces (Flash, RAM)
simultaneously in Zephyr by introducing a simple disk interface
framework where we can register multiple disks which would
interface with different storage devices. This would enable us
to have multiple instances of FATFS in Zephyr.

Add support for mass storage drive disk name which will be
used as an argument when calling the disk interface API's.

Enable multiple volumes support configuration in
ELM FAT library.

Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
2018-05-08 08:53:01 -04:00
Johann Fischer
b2ca5ee5bc subsys: usb: rework USB DFU class driver
This patch moves USB DFU class driver to subsys/usb/class.

For the first the USB DFU class driver depends on DFU image
manager and partition layout and is limited to use as an
application for the bootloader. The driver fetches the
information about the flash, erase block size, write block
size and partitions offset from the DT now. The driver has
two interfaces associated with the two partitions "SLOT-0"
and "SLOT-1". The "SLOT-0" can only be read.

In the following work the class driver can be extended so
that it can be used from the bootloader and update a flash
region directly from the bootloader.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-04-30 17:42:40 -04:00
Andrei Emeltchenko
222aa6009c netusb: rndis: Fix RNDIS always disabled state
Fix regression with RNDIS due to different USB configuration method.
RNDIS drivers in Windows never call Set Interface and netusb is always
disabled. Change to enable netusb upon USB Set Configuration.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-26 16:30:29 +03:00
Andrei Emeltchenko
185f2be681 netusb: rndis: Add more debugs
Add debug for enable / disable callbacks

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-26 16:30:29 +03:00
Andrei Emeltchenko
7e067414cd usb: Remove unneeded header include
The should be included from sources

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-25 07:17:42 +05:30
qianfan Zhao
b7862eb832 hid: core: truncated wLength if it doesn't match report descriptor size
Some buggy system may be pass a larger wLength when it try read
HID report descriptor, although we had already tell it the right
descriptor size.

Signed-off-by: qianfan Zhao <qianfanguijin@163.com>
2018-04-21 07:01:36 -07:00
Andrei Emeltchenko
53410af994 usb: Add Bluetooth device class core functionality
Implement Bluetooth over USB functionality through Bluetooth raw
access to the Bluetooth controller. Most devices with Bluetooth and
USB controllers supported by Zephyr can export themselves as USB
Bluetooth dongles.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
Andrei Emeltchenko
0322af5896 usb: Add Bluetooth device decriptors
Add USB Bluetooth device descriptors to usb_descriptor table.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
Andrei Emeltchenko
4d703b1e14 usb: Add Bluetooth USB Device configuration options
Add USB_DEVICE_BLUETOOTH option

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
Andrei Emeltchenko
1653254924 usb: mass_storage: Use simpler header include
Use searched dirs for descriptor headers

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
Andrei Emeltchenko
6239341add usb: Add subsys/usb for device descriptor header
Support device descriptor header easy access

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
Andrei Emeltchenko
773f3e18bb usb: Add sys_cpu_to_le16() conversion for USB field
Add missing conversion.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-20 21:04:42 -07:00
dbb2264454 usb: hid: implement set_report()
set_report() is used by the host to set a feature on the device such
as turning a LED on or off.

This is also used by protocols such as FIDO U2F to transfer data to
the device.

Signed-off-by: Michael Hope <mlhx@google.com>
2018-04-06 23:06:07 -04:00
0d04aef6fe usb: hid: add a INT IN transfer complete callback.
int_in_ready is an optional callback that is called when the current
interrupt IN transfer has completed.  This can be used to wait for the
endpoint to go idle or to trigger the next transfer.

This is needed for protocols like FIDO U2F that use the interrupt
endpoint for transfers.

Signed-off-by: Michael Hope <mlhx@google.com>
2018-04-06 23:06:07 -04:00
Loic Poulain
d80ae8aeeb usb: netusb: Add CDC EEM network usb function
Add CDC Ethernet Emulation Model function driver. This usb network
function can be used for ethernet over USB. Ethernet packet are
encapsulated within EEM packets. An EEM pkt contains 2-byte header
and 4-byte sentinel (or crc).

Note that EEM packets can be split across USB packets but shall not
be split across USB transfers.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2018-04-06 06:50:34 -04:00
Loic Poulain
992e32842b usb: netusb: Rework netusb media connect/disconnect
Consider media connected when interface is selected by the host and
disconnected on device diconnection.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2018-04-06 06:50:34 -04:00
Jukka Rissanen
de13e979fc net: if: vlan: Add virtual lan support
This allows creation of virtual lan (VLAN) networks. VLAN support is
only available for ethernet network technology.

Fixes #3234

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2018-04-05 08:54:19 -04:00
Andrei Emeltchenko
4291fb67a3 usb: Remove duplicated CDC_ECM_SUBCLASS definition
Use ECM_SUBCLASS instead.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-04 08:21:06 -04:00
Andrei Emeltchenko
75397485ba usb: hid: Fix setting report size for composite configuration
Fixes usb_set_hid_report_size() not called for composite configuration

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2018-04-03 15:58:33 -04:00
29f4e18af4 cdc_acm: fix interrupt handling, API registration, and propgate errors.
As per uart_pipe.c, irq_is_pending should only return true if any
*unmasked* interrupts are pending.

The device_get_binding() code only checks devices that have an API.
Set the API at compile time so that other devices can refer to the CDC
ACM driver.

usb_write() may return EBUSY if the endpoint is full.  Propagate this
for future use.

Signed-off-by: Michael Hope <mlhx@google.com>
2018-03-28 11:17:14 +02:00
4e7deb49b9 usb: netusb: implement the ethernet interface.
net_eth_get_hw_capabilities() calls .get_capabilities() which is part
of the ethernet API but not the net_if_api that netusb implements.
This causes a fault as .get_capabilities() was past the end of the
struct and resolved to a random address.

Also, make the API const and give it a unique name.

Signed-off-by: Michael Hope <mlhx@google.com>
2018-03-28 09:36:55 +03:00
Anas Nashif
993c350b92 cleanup: replace old jira numbers with GH issues
Replace all references to old JIRA issues (ZEP) with the corrosponding
Github issue ID.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2018-03-26 13:13:04 -04:00
4d6d04d3ea hid: change the API table to const.
A minor change to put the API function table into flash.

Signed-off-by: Michael Hope <mlhx@google.com>
2018-03-21 19:45:11 -04:00
Johann Fischer
c0c4dfc6ea subsys: usb: usb_descriptor: fix style and function declaration
Fix style and function declaration

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2018-03-21 15:39:56 -04:00