This makes the user interface a little hostile. People thing of an MTU of 1500 bytes, but the corresponding packet is really 1514 bytes (including the 14 byte Ethernet header). A more friendly solution would configure the MTU (as before), but then derive the packet buffer size by adding the MAC header length. Instead, we define the packet buffer size then derive the MTU.
The MTU is not common currency in networking. On the wire, the only real issue is the MSS which is derived from MTU by subtracting the IP header and TCP header sizes (for the case of TCP). Now it is derived for the PKTSIZE by subtracting the IP header, the TCP header, and the MAC header sizes. So we should be all good and without the recurring 14 byte error in MTU's and MSS's.
Squashed commit of the following:
Trivial update to fix some spacing issues.
net/: Rename several macros containing _MTU to _PKTSIZE.
net/: Rename CONFIG_NET_SLIP_MTU to CONFIG_NET_SLIP_PKTSIZE and similarly for CONFIG_NET_TUN_MTU. These are not the MTU which does not include the size of the link layer header. These are the full size of the packet buffer memory (minus any GUARD bytes).
net/: Rename CONFIG_NET_6LOWPAN_MTU to CONFIG_NET_6LOWPAN_PKTSIZE and similarly for CONFIG_NET_TUN_MTU. These are not the MTU which does not include the size of the link layer header. These are the full size of the packet buffer memory (minus any GUARD bytes).
net/: Rename CONFIG_NET_ETH_MTU to CONFIG_NET_ETH_PKTSIZE. This is not the MTU which does not include the size of the link layer header. This is the full size of the packet buffer memory (minus any GUARD bytes).
net/: Rename the file d_mtu in the network driver structure to d_pktsize. That value saved there is not the MTU. The packetsize is the memory large enough to hold the maximum packet PLUS the size of the link layer header. The MTU does not include the link layer header.
Squashed commit of the following:
drivers/usbhost/usbhost_max3421e.c: Add USB tracing support. Fix compilation errors when assertions and debug is enabled.
drivers/usbhost/usbhost_max3421e.c: Fixes to get a clean compilation.
drivers/usbhost/usbhost_max3421e.c: Drivers is basically code complete.
drivers/usbhost/usbhost_max3421e.c: Missed a little bit of logic in the last commit.
drivers/usbhost/usbhost_max3421e.c: Completes implementatin of control transfers.
drivers/usbhost/usbhost_max3421e.c: Implements low-level part of packet receive.
drivers/usbhost/usbhost_max3421e.c: Reorder some functions add a little more transfer-related logic.
drivers/usbhost/usbhost_max3421e.c: Completes basic logic path for sending normal packets.
drivers/usbhost/usbhost_max3421e.c: Correct handling of SNDFIFO double buffering.
drivers/usbhost/usbhost_max3421e.c: Not necessary to set the ACKSTAT bit in host mode. Clean up some comments.
drivers/usbhost/usbhost_max3421e.c: Mostly cosmetic cleanup
drivers/usbhost/usbhost_max3421e.c: Revise some previous logic. Looks like the MAX3421E can handle 16 channels in host mode. A little bit of work on packet transfer logic.
Copy paste error fix
drivers/usbhost/usbhost_max3421e.c: Add some channel allocation logic.
drivers/usbhost/usbhost_max3421e.c: Add some initialization logic.
drivers/usbhost/usbhost_max3421e.c: Add logic to determine if a full or low speed device has been connected.
drivers/usbhost/usbhost_max3421e.c: Add interrupt handling and bus reset logic.
drivers/usbhost/usbhost_max3421e.c: Add framework for an MAX3421E host driver. Initial commit is just the STM32 OTGFS host driver with a few new SPI-related functions.
Fix a few typo/compilation problems.
net/: Remove all CONFIG_NET_xxx_TCP_RECVWNDO configuration variables. They were used only to initialize the d_recwndo of the network device structure which no longer exists.
net/: Remove the device TCP receive window field (d_recvwndo) from the device structure. That value is no longer retained, but is calculated dynamically.
Remove some dangling references to CONFIG_NET_TCP_RWND_CONTROL.
net/tcp: Take read-ahead throttling into account when calculating the TCP receive window size.
net/tcp: tcp_get_recvwindow() now returns the receive window size directly (vs. indirectly via the device structure).
net/tcp: Remove CONFIG_NET_TCP_RWND_CONTROL. TCP window algorithm is now trigged only by CONFIG_NET_TCP_READAHEAD.
net/netdev: Add implementation of if_nametoindex() and if indextoname().
net/pkt: Raw AF_PACKET sockets now depend on CONFIG_NETDEV_IFINDEX.
net/procfs: Tweak to handle traversal of interfaces if CONFIG_NETDEV_IFINDEX is not defined.
net/netdev.h: Update netdev_findbyaddr() to use the assigned device index.
Trivial typo fix
net/netdev: Add support for assigned an interface index to a device when it is regisgtered.
sched/clock: Move the implementation of clock() from libs/libc/time to sched/clock. This is necessary because it calls the (now) internal OS function clock_systimer. clock() is now accessed only via a system call in certain configuratins.
libs/libc/wqueue: Replace calls to clock_systimer() with calls to the equivalent clock().
Squashed commit of the following:
sched: Rename all use of system_t to clock_t.
syscall: Rename all use of system_t to clock_t.
net: Rename all use of system_t to clock_t.
libs: Rename all use of system_t to clock_t.
fs: Rename all use of system_t to clock_t.
drivers: Rename all use of system_t to clock_t.
arch: Rename all use of system_t to clock_t.
include: Remove definition of systime_t; rename all use of system_t to clock_t.
Squashed commit of the following:
Author: Gregory Nutt <gnutt@nuttx.org>
include/nuttx/wireless/ieee80211: Cosmetic, coding standard changes from review of last merge.
drivers/wireless/ieee80211: Cosmetic, coding standard changes from review of last merge.
configs/photon: Cosmetic, coding standard changes from review of last merge.
arch/arm/src/stm32: SDIO changes from last review: Fix a few long lines and other coding standard issues; Make additions for SDIO card support dependent on a configuration option.
Author: hhuysqt <hyq9606@126.com>
Return IEEE 802.11 MAC address just as ethernet does
Modifyed bcmf_board_setup_oob_irq declaration
Modified OOB ISR function types
Add some logic according to WICED SDK
Bug fixed: data_offset counts in 4-bytes
Add BCM43438 logic for future developement
Add tips on using telnet
Use SDIO in-band interrupt instead of OOB interrupt, because Photon seems to unconnect the OOB interrupt line...
add SDIO in-band interrupt logic
Squashed commit of the following:
arch/arm/src/stm32: Add Kconfig options needed by the HCI UART. Various fixes to finally get a clean error free compile with no unexpected warnings.
arch/arm/src/stm32: In HCI UART, use spin_lock_irqsave() instead of enter_critical_section() whenever possible.
arch/arm/src/stm32: In HCI UART, fix up naming of configurations so that they are unique. Still needs Kconfig settings. Modify logic so that there can be multiple HCI UARTs, some supporting DMA and some not.
arch/arm/src/stm32: Integrate watermarks and software Rx flow control into the HCI UART driver.
arch/arm/src/stm32: Eliminate some HCI UART UART configuration options. Per the HCI UART spec, the link will b 8 data bits, no parity, 1 stop bit... Always.
arch/arm/src/stm32: Trivial cleanup
arch/arm/src/stm32: Fixes most initial compilation issues STM32 HCI UART driver. Still need to set up USART configuration parmeters for HCI UART
arch/arm/src/stm32: Completes first cut at STM32 HCI UART driver.
arch/arm/src/stm32: Completes most of read logic for HCI UART. Still needs to be able to block if no read data is available. Still missing write and flush logic.
drivers/wireless: Remove txenable from HCI UART methods. arch/arm/src/stm32: Reorganize some structures in HCI UART.
arch/arm/src/stm32: Still messaging the HCI uart driver.
arch/arm/src/stm32: Some trivial renaming.
arch/arm/src/stm32: A little more HCI-UART logic.
arch/arm/src/stm32: Initial setup to support HCI-UART. Little more than the serial driver with some name changes and a few things removed.
Squashed merge of the following:
Author: Gregory Nutt <gnutt@nuttx.org>
drivers/sensors: Fix some minor typos in last commit that cause some compile problems.
drivers/sensors/: Clean up some coding standard isses in LM330 and ADXL372 drivers.
drivers/sensors/README.txt: Clean up some long lines and odd line breaks.
include/nuttx/sensors: Completes coding style review of adxl372.h, cluster_driver.h, and lsm330.h.
Author: Bob Feretich <bob.feretich@rafresearch.com>
Add LSM330 SPI and ADXL372 drivers along with the cluster driver infrastructure.
Squashed commit of the following:
Author: Gregory Nutt <gnutt@nuttx.org>
Some cosmetic changes from coding style review.
Author: Juha Niskanen <juha.niskanen@haltian.com>
drivers/1wire: add 1-wire subsystem and ds28e17 driver
Squashed commit of the following:
Author: Gregory Nutt <gnutt@nuttx.org>
Fix a few remaining refereces to cc3000.
Author: Alan Carvalho de Assis <acassis@gmail.com>
drivers/wireless/cc3000: emove the driver to support CC3000 because it doesn't use the USRSOCKET
Author: Alan Carvalho de Assis <acassis@gmail.com>
configs: Remove board support to CC3000 from all relevant configurations.
Author: Gregory Nutt <gnutt@nuttx.org>
configs/spark: Removes Spark board configuration. Still available in the Obsoleted repository. This is preparation for removal of CC3000 support by Alan Carvalho de Assis. If there is no CC3000 support, then there is no purpose in supporting the Spark either.
Change all Sony related copyright to conform with our company's internal rules.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
wireless/bluetooth: This completes the basic logic path that gets frames from the Bluetooth stack and into the network layer.
wireless/bluetooth: Fleshes out some of the network packet receive logic.
wireless/bluetooth: Replace buffer allocated with primitive allocator from ieee 802.15.4.
wireless/ieee802154: Fix a few typos.
wireless/bluetooth: More renaming in preparation for some real work.
wireless/bluetooth: Some trivial renaming; update comments
Squashed commit of the following:
wireless/bluetooth: Some small changes that gets to a clean compile by just eliminating some incorrect implementations (still with a lot of warnings. The logic is still incomplete but now not so lethal.
wireless/bluetooth: Restructuring: Connection interfaces should internal to wireless/bluetooth. include/nuttx/wireless/bt_conn.h removed and merged with wireless/bluetooth/bt_conn.h. Several fix to get closer to bt_netdev.c compiling. Need to design some not interfaces and use some existing interfaces to send and receiv packets.
wireless/bluetooth: Some organization with some network device compile errors fixed. Still not even close to compiling.
net/bluetooth: Fix numerous compile issues; Still open design issues with regard to the interface with the Bluetooth stack.
wireless/bluetooth: Create bt_netdev.c with a crude copy of mac802154_netdev.c. Does not not even compile yet.
include/nuttx/net: Add bluetooth.h. Content is not yet correct.
net/netpackets: Add bluetooth.h. Update net/bluetooth to use new socket address definition.
net/bluetooth: Some fixes for initial build.
net/bluetooth: Add initial support for Bluetooth sockets. The initial cut is just the a clone of the IEEE 802.15.4 socket support with name changes.
net/ieee802154: Fix some typos noted when cloning to create net/bluetooth.
Squashed commit of the following:
drivers/bluetooth: Re-architect Bluetooth UART driver to follow upper/lower half model. Completely untested.
drivers/bluetooth: Grr.. Another band-aid commit to stay in sync with master. Why is this so difficult
drivers/bluetooth: Band-aid commit to stay in sync with master. Lost it somehow.
drivers/wireless/bluetooth: A few changes, mostly thought experiments.
drivers/wireless/bluetooth: UART-based Bluetooth driver ported from the Intel/Zephyr arduino101_firmware_source-v1.tar package. This initial commit is the original files in the NuttX build environment with changes to conform with the coding standard. It should not even build.
NOTE: This selection is marked EXPERIMENTAL. It is incomplete and, hence, untested. It still lacks any low-level Bluetooth drivers and is missing the network interface driver.
Squashed commit of the following:
wireless/bluetooth: Fixe last of compile issues. Now compiles without errors or warnings.
wireless/blutooth: Add macros BT_GETUINT16() and BT_PUTUINT16(). Fix more compile errors. Only one file now generates compile errors.
wireless/bluetooth: Add macros BT_LE162HOST() and BT_HOST2LE16().
wireless/bluetooth: Add bt_queue.c; begin fixing comple errors. Many more compile problems yet to resolve.
Kconfig edited online with Bitbucket
wireless/bluetooth: Struggling to remove nano_fifo logic: Replace buffer management with IOB allocate... this changes some logic and might have some side effects. Use messages queues instead of nano-fifos to inter-task communications. nano-fifos still used in 'frag' logic... whatever that is.
wireless/bluetooth: Fix numerous typos introduced by an ill conceived search-and-replace.
wireless/bluetooth: Add message queue support to manage interthread buffer transfers.
wireless/bluetooth: Replace fibers with kernel threads.
wireless/bluetooth: Fix a few initial compile errors. Just the tip of the iceberg.
wireless/bluetooth: Complete leveage of the bluetooth stack including public header files.
wireless/bluetooth: Complete leverage of all Bluetooth source files. Still missing header files that defines the driver interface. Also missing the network driver implementation.
wireless/bluetooth: Fix some naming of static global variables.
wireless/bluetooth: Adds three more files ported from the Intel/Zephyr arduino101_firmware_source-v1.tar package (plus two original files).
wireless/bluetooth: Adds five more files ported from the Intel/Zephyr arduino101_firmware_source-v1.tar package.
wireless/bluetooth: Adds three more files ported from the Intel/Zephyr arduino101_firmware_source-v1.tar package.
wireless/bluetooth: First few files ported from the Intel/Zephyr arduino101_firmware_source-v1.tar package.
mac802154: Adds ackreq flag to TX descriptor for use by radio driver.
The radio layer is responsible for a full "transaction". Because of
differences in radio capabilites, the radio must be responsible for
the handling of acks and retransmissions. This commit simply passes
the ackreq meta-data flag along to the radio.
Approved-by: Gregory Nutt <gnutt@nuttx.org>
Squashed commit of the following:
fs/cromfs: Now depends on EXPERIMENTAL because it is not yet verified.
fs/cromfs: This commit brings the CROMFS file system to code complete. Still completely untested. Next steps: Need a tool to generate CROMFS file system images and a test case under apps/
fs/cromfs: Add logic to traverse the in-memory file system nodes.
fs/cromfs: Add initial support for an in-memory, compressed, read-only file system.
net/tcp: Add logic to send probes when SO_KEEPALIVE is enabled.
net/tcp: TCP socket should not have to be connected to configure KeepAlive.
net/: Add a separate configuration to enable/disable KEEPALIVE socket options.
net/tcp: Arguments to TCP keep-alive timing functions probably should be struct timeval as are the times for other time-related socket options.
net/tcp: Fix a backward conditional
net/tcp: Add some more checks and debug output to TCP-protocol socket options.
net/tcp: Cosmetic changes to some alignment.
net/: Adds socket options needed to manage TCP-keepalive and TCP state machine logic to detect if that the remote peer is alive. Still missing the timer poll logic to send the keep-alive probes and the state machine logic to respond to probes.
drivers/lcd/ft80x: ACTIVE host command appears to be formatted differently than other host commands; Fix ROM CHIPID. Appears to be big-ending, BCD.
drivers/lcd/ft80x: Fix some compile issues when debug features are enabled.
Feature pca9540bdp i2cmultiplexer
* Implement common i2c multiplexer abstraction to be reused by i2c multiplexer devices. Provide common interface with transfer and reset calls to set up virtual i2c busses.
* Remove i2cmux_lower_half.c and headers, will be implemented by each mux driver
* Implement PCA9540BDP I2C multiplexer lower half which uses the common i2c mux abstraction
* Remove application interface and implement common i2c functions
* Remove application interface from pca driver and implement common i2c functions directly in the pca driver
* Use i2cerr
Approved-by: Gregory Nutt <gnutt@nuttx.org>
cc1101: Changes from review of last PR.
remove gpio
remove cc1101 frame len
remove FLAGS_RXONLY flags
add cc1101 function
remove some waring
add cc1101 poll function
add cc1101 register
add cc1101 isr read data
add cc1101 spi deviceId
add cc1101 init2
add wait cc1101 chip ready
raw init cc1101
drivers/lcd and include/nuttx/lcd: Add FT80x support for writing to graphics memory. Also add some definitions needed by apps/examples/ft80x for bitmap manipulation.
drivers/lcd: Review/update FT80x initializatin logic
drivers/lcd: Rename ft80x_base.c to just ft80x.c. Add logic to notify FT80X clients of events via signals.
drivers/lcd: Trivial updates to naming. Add some new definitions.
Squashed commit of the following:
drivers/lcd: Finishes off basic FT80X. Still missing some niceties.
drivers/lcd: Rethink FT80X display list interface.
drivers/lcd: More FT800x display list logic. Still not complete.
drivers/lcd: Add some basic FT80x initialization logic.
drivers/lcd: Add ft80x display list IOCTL framework. Still missing low level display list operations.
drivers/lcd: FT80x driver cannot be a standard LCD driver but must, instead, be a custom character driver.
drivers/lcd: Add FT800 co-processor commands and display list helpers.
drivers/lcd: Add SPI interface and framework for the initialization and the basic LCD driver.
drivers/lcd: Add beginnings of some FT80x implementation.
drivers/lcd: Add definitions for the FTDI FT801 part
include/nuttx/lcd/ft800.h: Add initial FT800 interface definition.
drivers/lcd: Add ft800 header file.
Added support for LIS3DH accelerometer sensor.
* Added support for LIS3DH accelerometer sensor.
* Fix line length
* Fix more line lengthts
Approved-by: Gregory Nutt <gnutt@nuttx.org>
sched/: Convert legitimate uses of task_create() to nxtask_create(). Review handling of returned values from all uses of kthread_create() (as well as nxtask_create()).
graphics/: Review return values for all calls to kthread_start() because it no longer returns an errno.
drivers/: threads started by drivers should be kernel threads, not user tasks. Review return values for all calls to kthread_start() because it no longer returns an errno.
configs/: threads started by board bringup logic should be kernel threads, not user tasksi (part 2 of 2).
sched/task: Add nxtask_create(). Kthread_create() and nxtask_create() are internal OS functions and should not modify the errno variable. configs/: threads started by board bringup logic should be kernel threads, not user tasks.
The previous implementation of clearing global IRQ in sched_addreadytorun()
and sched_removereadytorun() was done too early. As a result, nxsem_post()
would have a chance to enter the critical section even nxsem_wait() is
still not in blocked state. This patch moves clearing global IRQ controls
from sched_addreadytorun() and sched_removereadytorun() to sched_resumescheduler()
to ensure that nxsem_post() can enter the critical section correctly.
For this change, sched_resumescheduler.c is always necessary for SMP configuration.
In addition, by this change, task_exit() had to be modified so that it calls
sched_resumescheduler() because it calls sched_removescheduler() inside the
function, otherwise it will cause a deadlock.
However, I encountered another DEBUGASSERT() in sched_cpu_select() during
HTTP streaming aging test on lc823450-xgevk. Actually sched_cpu_select()
accesses the g_assignedtasks which might be changed by another CPU. Similarly,
other tasklists might be modified simultaneously if both CPUs are executing
scheduling logic. To avoid this, I introduced tasklist protetion APIs.
With these changes, SMP kernel stability has been much improved.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
sched/sched: Correct some build issues introduced by last set of changes.
sched/sched: Add new internal OS function nxsched_setaffinity() that is identical to sched_isetaffinity() except that it does not modify the errno value. All usage of sched_setaffinity() within the OS is replaced with nxsched_setaffinity().
sched/sched: Internal functions sched_reprioritize() and sched_setpriority() no longer movidify the errno value. Also renamed to nxsched_reprioritize() and sched_setpriority().
sched/sched: Add new internal OS function nxsched_getscheduler() that is identical to sched_getscheduler() except that it does not modify the errno value. All usage of sched_getscheduler() within the OS is replaced with nxsched_getscheduler().
sched/sched: Add new internal OS function nxsched_setparam() that is identical to sched_setparam() except that it does not modify the errno value. All usage of sched_setparam() within the OS is replaced with nxsched_setparam().
sched/sched: Add new internal OS function nxsched_getparam() that is identical to sched_getparam() except that it does not modify the errno value (actually, the previous value erroneously neglected to set the errno value to begin with, but this fixes both issues). All usage of sched_getparam() within the OS is replaced with nxsched_getparam().
Squashed commit of the following:
net/udp: Address most of the issues with UDP write buffering. There is a remaining issue with handling one network going down in a multi-network environment. None of this has been test but it is certainly ready for test. Hence, the feature is marked EXPERIMENTAL.
net/udp: Some baby steps toward a corrected write buffering design.
net/udp: Remove pesky write buffer macros.
Eliminate trailing space at the end of lines.
net/udp: A little more UDP write buffering logic. Still at least on big gaping hole in the design.
net/udp: Undefined CONFIG_NET_SENDTO_TIMEOUT.
net/udp: Crude, naive port of the TCP write buffering logic into UDP. This commit is certainly non-functional and is simply a starting point for the implementatin of UDP write buffering.
net/udp: Rename udp/udp_psock_sendto.c udp/udp_psock_sendto_unbuffered.c.
Squashed commit of the following:
configs: Each board now initializes the touchscreen controller as a normal part of its board bring-up. board_tsc_setup() is gone; the touchscreen controller is now treated like any other on-board device.
Remove all support for BOARDIOC_TSCTEST_SETUP
Move prototype for board_tsc_setup() from include/nuttx/board.h to individual board header files.
These APIs are used in sched_note.c to protect instumentation data.
The deffrence between these APIs to exsiting spin_lock() and spin_unlock()
is that they do not perform insturumentation to avoid recursive call
when SCHED_INSTRUMENTATION_SPINLOCKS=y.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
fs: Add truncate() support for userfs
fs/unionfs: Add truncate() support to the unionfs
fs/tmpfs: Add ftruncate() support to tmpfs
syscall/: Add system call support for ftruncate()
net/route: Adding ftruncate() support eliminates an issue in file-based routing table management.
fs: Add basic framework to support truncate() and ftruncate(). The infrastructure is complete. Now, however, the actual implementation of ftruncate() will have to be done for each file system.
SMP: Introduce spin_lock_irqsave() and spin_unlock_irqrestore()
These APIs are simplified version of enter_critical_section() and
leave_critical_section() to protect data (e.g. registers) in SMP mode.
By using these APIs inside drivers, performace will be improved.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
Pass header-payload offset to application for use when the MAC layer is in promiscuous mode
* mac802154_device: When in promiscuous mode, the char driver sends the entire frame, including the MAC header. This change adds an offset field indicating the header-payload boundary. It is set to 0 when not in promiscuous mode as the header is not passed to the application
* mac802154: Adds support for getting promiscuous mode state
Approved-by: Gregory Nutt <gnutt@nuttx.org>
This conversion is unfortunate in the sense that Unix local domain sockets are relatively lightweight. LocalHost UDP sockets are much heavier weight since they rely on the full UDP stack. If anyone is up for a complete redesign, then using some shared memory and a POSIX message queue would be lightweight again.
This commit also fixes several bugs that were not testable before the inode tree deadlock. I cannot say that the logic is 100% stable but it does not have basic functionality.
Squashed commit of the following:
fs/userfs: Order locking so that access to the shared I/O buffer is also locked.
fs/userfs: Converts to use LocalHost UDP loopback for IPC.
ieee802154: Simplifies notify() and rxframe() calls to a single notify() call. dataind's and all other "notifs" are now "primitives" which aligns with standard terminology
* mac802154: Adds missing breaks from case statement
* sixlowpan: Fixes bad logic where ACK is not requested if address is not a broadcast
* ieee802154: Simplification of "notifs" and "datainds" to generic primitives passed via a single notify call to the layer above the MAC
* Directories.mk should reference CONFIG_WIRELESS instead of CONFIG_DRIVERS_WIRELESS
* xbee_netdev: Network must be locked when calling sixlowpan_input
* sixlowpan: Reassembly buffer can't be freed if provided by radio driver
* sixlowpan: Don't free IOB if there is an error processing it as the MAC will try to pass it along to another receiver
* ieee802154: Adds basic logging to ieee802154_primitive.c
* Minor fixes after rebase
* xbee: Adds AT query timeout to retry if XBee doesn't respond to request
* same70-xplained: Adds Xbee support. Makes mikroBus slot Kconfig 'choice'
* mac802154: Removes unused function declaration
* drivers/mrf24j40: Fixes compilation error using . operator rather than -> operator
* mac802154_device: Changes a few mac802154_primtive_free's to ieee802154_primitive_free() and changes notif to primitive in a couple places.
* mac802154: Adds promiscous mode logic to bypass parsing of incoming frames. MAC char device also checks for promiscous mode and passes whole frames including header and FCS to the application if promiscous mode is enabled.
* sixlowpan: Fixes logic to correctly check if packet is large enough to include header. This would cause packets to be considered too small when they are sufficiently sized.
* sixlowpan: Fixes forwarding logic to use forwarding device rather than received device to look up destination link layer address
* net/ipforward: Fixes typo that caused build error when IP forwarding was enabled with CONFIG_NET_ICMPv6_NEIGHBOR enabled as well.
* configs/same70-xplained: Simple spelling fix
Approved-by: Gregory Nutt <gnutt@nuttx.org>
Fix GPIO operation of STMPE811 driver.
Fixed issues:
1. STMPE811_GPIO_DIR was defined for register name
and later was redefined to be the pin direction mask
for `stmpe811_gpioconfig`
I decided to change register name to be STMPE811_GPIO_DIR_REG,
and keep pin direction mask STMPE811_GPIO_DIR, so that any
external code that already use this driver will be unchanged.
2. The STMPE811 register GPIO_DIR uses bit value 1 for output
and 0 for input, but `stmpe811_gpioconfig` set the opposite.
3. The call to `stmpe811_gpiowrite` from inside of `stmpe811_gpioconfig`
leaded to deadlock.
Approved-by: Gregory Nutt <gnutt@nuttx.org>
fs/userfs: This completes coding of the UserFS client and of the UserFS feature in general. This feature is being merged to main now because I believe it is innocuous. It is, however, untesed. The next step will be to develop a test case to verify the feature.
fs/userfs: Completes the request logic for the UserFS client. Still need the logic that receives the responses.
fs/userfs: Completes coding for most of the server side of the user filesystem logic.
fs/userfs: Big design changes, simplications. Use Unix domain local sockets instead of message queues. Easier to transfer big data in local sockets than message queues. Remove character drvier 'factory' it is not necessary.
fs/userfs: Minor reparitioning; volume private info does not need to be held on the OS client side.
libc/userfs: Add some of the server side logic.
fs/userfs: Add some UserFS initialization logic.
fs/userfs: Add frame work for the UserFS proxy. Remove all references to a block driver. There is no block dricer... what was I thinking?
fs/userfs: Add some initialization of the character driver, 'factory' device.
fs/userfs: Rename from fusefs to userfs to that we don't stomp on someone else's cool name.
Add a header file describing the fusefs interface.
fs/mount: Implements procfs /proc/fs/blocks and /proc/fs/usage files, replacing the NSH df command.
fs/mount: Implements procfs /proc/fs/mount file, replacing the NSH mount command when there are not arguments.
fs/: Move prototype of foreach_mountpoint out of include/nuttx/fs/fs.h to fs/mount/mount.h. Add framework for the mount procfs (initial commit is just a close of the net/route table procfs.
Squashed commit of the following:
net/icmpv6: IPPROT_ICMP6 socket logic now builds without error.
net/icmpv6: Add support for read-ahead and poll(). Initial commit is just cloned from ICMP with the appropriate name changes.
configs/: All defconfig filess that include CONFIG_NET_ICMPv6_SOCKET=y need to select CONFIG_SYSTEM_PING6=y and deselect CONFIG_DISABLE_POLL.
Update NSH documention to show that ping6 is now a built in command.
net/icmpv6: Add icmpv6_sendto.c and icmpv6_recvfrom.c. Initial versions are just clones from icmp/ with appropriate name changes.
net/icmpv6: Clone some ICMP socket logic as the beginning of support for ICMPv6 socket support.
Rename CONFIG_NET_ICMPv6_PING to CONFIG_NET_ICMPv6_SOCKET. Move prototype for icmpv6_ping from include/nuttx/net/icmpv6 to net/icmpv6/icmpv6.h
Squashed commit of the following:
net/icmp: Finishes off icmp_recvfrom().
net/icmp: Add readahead support for IPPROTO_ICMP sockets.
net/icmp: Add poll() support for IPPROTO_ICMP sockets.
net/icmp: Add a connection structure for IPPROTO_ICMP sockets.
net/icmp: Implements sendto for the IPPROTO_ICMP socket.
net/icmp: Move icmp_sendto() and icmp_recvfrom() to separate files. They are likely to be complex (when they are implemented).
net/icmp: Hook IPPROTO_ICMP sockets into network. Fix some naming collisions. Still missing basic ICMP send/receive logic.
configs: apps/system/ping current need poll() enabled.
configs: All defconfig files that use to enable low-level support must now enabled CONFIG_SYSTEM_PING.
net/icmp: Adds basic build framework to support IPPROTO_ICMP sockets.
STM32L1, STM32L4 RTC: add periodic interrupts, update L1 RTC implementation
* STM32L4 RTC: add support experimental CONFIG_RTC_PERIODIC
* STM32 RTC: separate STM32L1 RTC into a separate file
STM32L1 RTC is very close to F4 or L4 versions, with two alarms
and periodic wakeup support so backported L4 peripheral to L1.
* RTC: add periodic alarms to upper and lower halves
Approved-by: Gregory Nutt <gnutt@nuttx.org>
The same interrupt handler is entered with the device structure parameter in all situations,
multiple or single PCA. One should still be careful if multiple PCA devices share the same IRQ.
This commit adds a driver for this chip. Right now it measures bus voltage and current, and does not use the internal calibrated current reading, nor the available power measurement.
Change all calls to mq_receive() and mq_timedreceive() in the OS to calls to nxmq_receive() and nxmq_timedreceive(), making appropriate changes for differences in return values.
sched/mqueue: Add nxmq_receive() and mxmq_timedreceive() which are functionally equivalent to the standard mq_receive and mq_timedreceive() except that (1) they do not create cancellation points, and (2) the do not modify the application's errno variable.
Change all calls to mq_send() and mq_timedsend() in the OS to calls to nxmq_send() and nxmq_timedsend(), making appropriate changes for differences in return values.
sched/mqueue: Add internal function nxmq_send() and nxmq_timedsend() that are equivalent to mq_send() and mq_timedsend() except that they do not create cancellation points and do to not modify the errno variable.
Replace all calls to sigprocmask() in the OS proper with calls to nxsig_procmask().
sched/signal: Add internal OS interface nxsig_procmask(). This internal interface is equivalent to the standard sigprocmask() used by applications except that it does not modify the errno value. Also fixes a problem in that the original sigprocmask() was not setting the errno.
Replace all calls to sigqueue() in the OS proper with calls to nxsig_queue() to avoid accessing the errno variable.
sched/signal: Add nxsig_queue() which is functionally equivalent to sigqueue() except that it does not modify the errno variable.
Replace all usage kill() in the OS proper with nxsig_kill().
sched/signal: Add nxsig_kill() which is functionally equivalent to kill() except that it does not modify the errno variable.
Squashed commit of the following:
Change all calls to usleep() in the OS proper to calls to nxsig_usleep()
sched/signal: Add a new OS internal function nxsig_usleep() that is functionally equivalent to usleep() but does not cause a cancellaption point and does not modify the errno variable.
sched/signal: Add a new OS internal function nxsig_sleep() that is functionally equivalent to sleep() but does not cause a cancellaption point.
sigtimedwait() -> nxsig_timedwait()
sigwaitinfo() -> nxsig_waitinfo()
nanosleep() -> nxsig_nanosleep()
The internal OS versions differ from the standard application interfaces in that:
- They do not create cancellation points, and
- they do not modify the application's errno variable
Squashed commit of the following:
sched/signal: Replace all usage of sigwaitinfo(), sigtimedwait(), and nanosleep() with the OS internal counterparts nxsig_waitinfo(), nxsig_timedwait(), and nxsig_nanosleep().
sched/signal: Add nxsig_nanosleep(). This is an internal OS version of nanosleep(). It differs in that it does not set the errno varaiable and does not create a cancellation point.
sched/signal: Add nxsig_timedwait() and nxsig_waitinfo(). These are internal OS versions of sigtimedwait() and sigwaitinfo(). They differ in that they do not set the errno varaiable and they do not create cancellation points.
This is analogous to similar renaming that was done previously for semaphores.
Squashed commit of the following:
sched/signal: Fix a few compile warnings introduced by naming changes.
sched/signal: Rename all private, internal signl functions to use the nxsig_ prefix.
sched/signal: Rename sig_removependingsignal, sig_unmaskpendingsignal, and sig_mqnotempty to nxsig_remove_pendingsignal, nxsig_unmask_pendingsignal, and nxsig_mqnotempty to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_findaction and sig_lowest to nxsig_find_action and nxsig_lowest to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_allocatepingsigaction and sig_deliver to nxsig_alloc_pendingsigaction and nxsig_deliver to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_cleanup, sig_release, sig_releasependingaction, and sig_releasependingsignal to nxsig_cleanup, nxsig_release, nxsig_release_pendingaction, and nxsig_release_pendingsignal to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_tcbdispatch and sig_dispatch to nxsig_tcbdispatch and nxsig_dispatch to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_releaseaction and sig_pendingset to nxsig_release_action and nxsig_pendingset to make it clear that these are OS internal interfaces.
sched/signal: Rename sig_initialize and sig_allocateactionblock to nxsig_initialize and nxsig_alloc_actionblock to make it clear that these are OS internal interfaces.
This commit backs out most of commit b4747286b1. That change was added because sem_wait() would sometimes cause cancellation points inappropriated. But with these recent changes, nxsem_wait() is used instead and it is not a cancellation point.
In the OS, all calls to sem_wait() changed to nxsem_wait(). nxsem_wait() does not return errors via errno so each place where nxsem_wait() is now called must not examine the errno variable.
In all OS functions (not libraries), change sem_wait() to nxsem_wait(). This will prevent the OS from creating bogus cancellation points and from modifying the per-task errno variable.
sched/semaphore: Add the function nxsem_wait(). This is a new internal OS interface. It is functionally equivalent to sem_wait() except that (1) it is not a cancellation point, and (2) it does not set the per-thread errno value on return.
sched/semaphore: Add nxsem_post() which is identical to sem_post() except that it never modifies the errno variable. Changed all references to sem_post in the OS to nxsem_post().
sched/semaphore: Add nxsem_destroy() which is identical to sem_destroy() except that it never modifies the errno variable. Changed all references to sem_destroy() in the OS to nxsem_destroy().
libc/semaphore and sched/semaphore: Add nxsem_getprotocol() and nxsem_setprotocola which are identical to sem_getprotocol() and set_setprotocol() except that they never modifies the errno variable. Changed all references to sem_setprotocol in the OS to nxsem_setprotocol(). sem_getprotocol() was not used in the OS
libc/semaphore: Add nxsem_getvalue() which is identical to sem_getvalue() except that it never modifies the errno variable. Changed all references to sem_getvalue in the OS to nxsem_getvalue().
sched/semaphore: Rename all internal private functions from sem_xyz to nxsem_xyz. The sem_ prefix is (will be) reserved only for the application semaphore interfaces.
libc/semaphore: Add nxsem_init() which is identical to sem_init() except that it never modifies the errno variable. Changed all references to sem_init in the OS to nxsem_init().
sched/semaphore: Rename sem_tickwait() to nxsem_tickwait() so that it is clear this is an internal OS function.
sched/semaphoate: Rename sem_reset() to nxsem_reset() so that it is clear this is an internal OS function.
binfmt: Fix some compilation issues introduced in previous changes. Verfied with the STM32F4-Discovery ELF configuration.
binfmt: schedule_unload() is an internal OS function and must not alter the errno variable.
binfmt: unload_module() is an internal OS function and must not alter the errno variable.
binfmt: load_module() is an internal OS function and must not alter the errno variable.
binfmt: exec_module() is an internal OS function and must not alter the errno variable.
psock_close() and net_close() are internal OS functions and should not set the errno variable.
psock_ioctl() and netdev_ioctl() are internal OS functions and should not set the errno variable.
net_dupsd() and net_dupsd2() are internal OS functions and should not set the errno variable.
net/ and fs/: net_vfcntl(), file_fcntl(), file_dup(), and file_dup2() are all internal OS interfaces and should not modify the errno value.
net/: psock_recvfrom() is an internal interface and should not set the errno nor should it be a cancellation point.
net/: psock_accept() is not a cancellation point.
net/: psock_getsockopt() and psock_socket*9 are an internal interfaces and should not set the errno.
net/: psock_getsockopt() is an internal interface and should not set the errno.
net/: psock_listen() is an internal interface and should not set the errno.
net/: psock_connect(( is an internal interface and should not set the errno nor should it be a cancellation point.
net/: psock_bind() is an internal interface and should not set the errno.
net/: psock_accept() is an internal interface and should not set the errno.
There are two issues with it however:
1. Reading from file system on a per packet basis could be slow. I think it probably should have a small, in-memory cache of most frequently used routes for good problem.
2. Currently the delroute logic is disabled due to a problem with the design. NuttX does not currently support truncate(). Therefore, it is not possible to delete entries from the routing table file.
In this current implementation, that leaves the last entry intact at the end of the file. An alternative design might include a tag on each record to indicate if the record is valid or not. That would work but would add complexity to the other routing table functions.
The existing implementation is available for testing purposes only if CONFIG_EXPERIMENTAL=y.
Squashed commit of the following:
net/route: The current delroute design depends on file truncation. However, NuttX does not currently support truncate. Alternative, more complex designs are possible but not implemented. At present the file routing table are otherwise functional but the delroute logic is disabled via CONFIG_EXPERIMENTAL. Enable it only if you plan to fix it.
net/route: Fix some issues with locking routing table files.
net/route: Add partial implementation of delroute for the case where the routing table is in a file.
net/route: Add support for seeking to positions in the routing table.
net/route: Add net_addroute_ipv4/6() using a file-based routing table.
net/route: Add net_foreach_ipv4/4() using a file-based routing table.
net/route: Initial build, configuration, and fs utilies to support routing tables in a file.
From: Sakari Kapanen <sakari.kapanen@optofidelity.com>
Date: Sun, 24 Sep 2017 13:19:25 +0300
Subject: [PATCH] ICMPv6: fix router advertisement
Fixes several errors preventing icmpv6_radvertise.c from being compiled. Fixes conversions to network byte order (namely vlifetime, plifetime, mtu).
IPv6 source address is set to link-local IP address instead of the address in the netdev structure. This is in compliance to RFC 4861. RA didn't work on Linux before this change.
Finally, router prefix and prefix length are derived from the IPv6 address and netmask in the netdev structure. This seems to make more sense than using a predefined, separate prefix from the config.