Some drivers return on netdev_driver_t::recv() not the actual frame size, but
an upper bound estimation of it. The upper layer code is already prepared to
handle that. This brings the doc in sync with the code.
Clarified in the documentation how netdev_driver_t::recv() should behave in case
the size of the buffer in parameter buf (indicated by parameter len) is to small
to fit the received frame.
netdev_driver_t::recv does on of three things:
- Receive the frame
- Drop it
- Get (an estimation of) the size of the frame
The brief section of the documentation was changed to reflect this. (And it
starts with the least obvious thing in the hope readers of the API stumble upon
it...)
Removed the invalid precondition in netdev_driver_t::recv that the buffer never
NULL and the length positive. (In the "get message size" case both is wrong, in
the drop message case the first part is wrong.)
While reviewing #9942 I noticed that the documentation on the netdev
driver API is unclear and in some cases outright contradicting itself:
> ```
> @return number of bytes used from @p value
> @return `< 0` on error, 0 on success
> ```
IMHO this is unacceptable for such a central API where communication
This fixes a few things and also clarifies preconditions:
- Specifies negative `errno`s clearly so all drivers return the same
when required
- Re-iterates parameter preconditions and special cases within the
parameter documentation itself (might also help towards #9805?)
- Fixes contradictions within return value documentation
- Adds missing parameter documentation on `init()`.
`len` and `count` are both values that should never go `< 0`, so instead of
having to test this (in theory) every time the function is called (regardless
of by assert or if its unnecessary code), I propose to change it to `size_t`.
As a bonus I made the type of recv's buf parameter generic - no reason for it to
be a char and it might lead to unnecessary static casting requirements
This patch adds two new options to netopt. NETOPT_CCA_MODE to set
the CCA mode corresponding to the respective PHY standard and
NETOPT_RF_TESTMODE to set the test mode for the radio.
On OS X, `netdev2_tap` suspends monitoring file descriptor until `_recv` is
called. If no spaces in left in pktbuf, `gnrc_netdev2_eth` does not call `_recv`
that results in deadlock.
With this commit, `gnrc_netdev2_eth` calls `_recv` with NULL buffer and non-zero
length parameter, that indicates the driver to drop frame and resume working.