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>
Consider media connected when interface is selected by the host and
disconnected on device diconnection.
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
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>
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>
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>
Add new status event indicating an interface has been selected.
Interface and its endpoint(s) are enabled.
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
The transfer API provides 'high' level functions to manage sending and
reception of USB data. A USB (class) driver has to register the generic
usb_transfer_ep_callback as endpoint status callback in order to use
the API.
With this API, the class driver does not need to take care of low-level
usb transfer management (packet splitting, ZLP, synchronization...).
The usb_transfer methods will split transfer into multiple transactions
depending endpoint max size and controller capabilities.
Once the transfer is completed, class driver is notified by a callback.
The usb_transfer method can be executed in IRQ/atomic context.
A usb_transfer synchronous helper exists which block-waits until
transfer completion.
In write case, a transfer is complete when all data has been sent.
In read case, a transfer is complete when the exact amount of data
requested has been received or if a short-pkt (including ZLP) is
received.
transfer methods are thread-safe.
A transfer can be cancelled at any time.
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
In order to avoid confusion between "Unicode", UTF8, UTF16, UTF32,
and endianess of these encodings, rename all instances of "Unicode"
in the USB subsystem and samples into "UTF16LE".
Signed-off-by: Iván Sánchez Ortega <ivan@sanchezortega.es>
Make it possible to change USB manufacturer, product and
serial number strings by forcing prompt in the kconfig files.
Signed-off-by: Iván Sánchez Ortega <ivan@sanchezortega.es>
This fixes a bug in the cdc_ecm Ethernet over USB driver. The ECM
spec (section 3.3.1) says that the end of an Ethernet frame is marked
using the USB short packet mechanisim, where the last packet is less
than the maximum packet size. If the Ethernet frame is a multiple of
the USB maximum packet size then a final zero length packet must be
sent.
Linux however sends a one byte packet (usbnet.c:1393) to work
around hardware issues with zero length packets.
The current Zephyr driver works most of the time except when you send
an Ethernet frame of the right length where the last byte is zero,
such as:
$ ping 192.0.2.1 -s 23 -p 0
Zephyr then drops the last byte, creating a short frame which gets
dropped higher up in the stack.
Signed-off-by: Michael Hope <mlhx@google.com>
Fix Kconfig help sections and add spacing to be consistent across all
Kconfig file. In a previous run we missed a few.
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This patch reworked logging so that the logging levels are more
finely graded and the locations with non-critical error handling
(below usb_ep_set_stall's) are logged with SYS_LOG_WRN.
Also cleanup, add log domain and fix indents.
Signed-off-by: Johann Fischer <j.fischer@phytec.de>
At the moment CONFIG_SYS_LOG_USB_LEVEL name does not specify that this
is log level for the Device Stack. Make it clear renaming to the
proper name.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Document USB Vendor and Product IDs and their intended usage.
Set the Vendor and Product IDs and define the USB bcdDevice
Device Descriptor Device Release Number to be the binary
coded decimal representation of the Zephyr major and minor
kernel version number.
Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
Instead of accessing the environment variable ZEPHYR_BASE every time we
require accessing the source code root, use an intermediate variable
that has OS path separators correctly set to '/' to avoid issues on
Windows.
Note: This removes the ZEPHYR_SOURCE_DIR CMake variable. External
applications using that will need to change to use the new ZEPHYR_BASE
variable.
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
Even if endpoint addresses are configurable by each platform,
it would be better to make the default configuration compatible
with a larger board range.
e.g. STM32 OTG FS device has only four endpoints (0x84 is out).
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Introducing CMake is an important step in a larger effort to make
Zephyr easy to use for application developers working on different
platforms with different development environment needs.
Simplified, this change retains Kconfig as-is, and replaces all
Makefiles with CMakeLists.txt. The DSL-like Make language that KBuild
offers is replaced by a set of CMake extentions. These extentions have
either provided simple one-to-one translations of KBuild features or
introduced new concepts that replace KBuild concepts.
This is a breaking change for existing test infrastructure and build
scripts that are maintained out-of-tree. But for FW itself, no porting
should be necessary.
For users that just want to continue their work with minimal
disruption the following should suffice:
Install CMake 3.8.2+
Port any out-of-tree Makefiles to CMake.
Learn the absolute minimum about the new command line interface:
$ cd samples/hello_world
$ mkdir build && cd build
$ cmake -DBOARD=nrf52_pca10040 ..
$ cd build
$ make
PR: zephyrproject-rtos#4692
docs: http://docs.zephyrproject.org/getting_started/getting_started.html
Signed-off-by: Sebastian Boe <sebastian.boe@nordicsemi.no>
Sometimes we need to select Endpoint addresses manually to get it
working with certain USB controllers having limit for endpoints. In
this case default values break endpoint limit check. The proper
solution would be automatic endpoint allocation.
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>