Ivan Grokhotkov [Tue, 1 Nov 2016 14:26:37 +0000 (22:26 +0800)]
Merge branch 'bugfix/nvs_write_failure' into 'master'
Fix spi_flash_write regression and nvs error recovery
In the previous set of changes related to spi_flash, new alignment checks were added. One of these checks, word alignment of `src` buffer in `nvs_flas_write`, was unnecessary. ROM `SPIWrite` function can handle unaligned source buffers.
This change caused an error to be returned to nvs for some legitimate write operations. Due to a bug in nvs, further write operations were possible, while the internal state of `Page` instance was broken. In WiFi functional tests, this inflicted havoc on the nvs partition, creating multiple duplicate items in the affected page. Because multiple duplicate items per page were never supposed to be handled during page load, duplicates were not removed. Thankfully this caused an assert at a later point in the loading process, otherwise this bug would be very difficult to detect.
This change set fixes the original spi_flash regression, handling of `INVALID` state of `nvs::Page`, and handling of duplicate items.
Ivan Grokhotkov [Tue, 1 Nov 2016 14:25:20 +0000 (22:25 +0800)]
Merge branch 'feature/api_doc' into 'master'
API reference, first batch
This includes fixes to documentation formats in header files, some standalone doc fixes, necessary files for readthedocs, and instructions for documenting the code.
Liu Zhi Fu [Tue, 1 Nov 2016 07:34:30 +0000 (15:34 +0800)]
esp32: update wifi lib
146f5962 - Make the return value of esp_wifi_internal_tx consistent with LWIP error code so that
the up-layer can detect the out-of-memory error and take action accordingly, such do flow control.
Ivan Grokhotkov [Mon, 31 Oct 2016 13:10:47 +0000 (21:10 +0800)]
nvs_flash: delete all duplicate entries in a page while loading
Due to previous flash write bug it was possible to create multiple duplicate entries in a single page.
Recovery logic detected that case and bailed out with an assert.
This change adds graceful recovery from this condition.
Tests included.
Ivan Grokhotkov [Mon, 31 Oct 2016 11:48:28 +0000 (19:48 +0800)]
nvs_flash: don't allow more operation to be done on page in PageState::INVALID
Currently a restart is required to recover a page from invalid state.
The long-term solution is to detect such a condition and recover automatically (without a restart). This will be implemented in a separate change set.
Ivan Grokhotkov [Mon, 31 Oct 2016 11:17:25 +0000 (19:17 +0800)]
nvs_flash: introduce write failures after each word written
Previously the test bench would check failure recovery by introducing error after each write operation.
This makes checks a bit more extensive (and much longer) by failing after every word written. Surprisingly, this change didn't expose any bugs.
Ivan Grokhotkov [Mon, 31 Oct 2016 11:08:56 +0000 (19:08 +0800)]
spi_flash: remove unnecessary src pointer alignment check in spi_flash_write
ROM SPIWrite routine can work with unaligned sources, so this check is unnecessary.
Furthermore, it breaks nvs_set_str and nvs_get_blob when data pointer is unaligned.
Also fix stray backslash in COUNTER_STOP macro
Jeroen Domburg [Mon, 31 Oct 2016 03:04:28 +0000 (11:04 +0800)]
Merge branch 'feature/crosscore_int' into 'master'
Add cross-core int to accelerate task being awoken from another CPU.
This adds a per-CPU interrupt that can be used to poke the CPU to go do something. In this case all that is implemented is a request to yield the current task, used in case a CPU unblocks a task that runs on another CPU. This gets rid of the limitation that inter-CPU communication using queues, muxes etc can take up to a FreeRTOS tick to happen.
Specs!
Sending an in in a queue of length 1 (essentially a semaphore) as quickly as possible (just a small delay in the sender, to make sure the receiver task gets swapped out) for 10 seconds. Number indicates the amount of ints transferred
Ivan Grokhotkov [Fri, 28 Oct 2016 08:21:34 +0000 (16:21 +0800)]
Merge branch 'bugfix/int-wdt-fix' into 'master'
Fix the things that broke when adding the new WDTs
Seemingly, I broke a bunch of things when adding the interrupt WDTs and moved the panic handler to the esp32 directory. This fixes that, as well as the issue where flashing would trigger the int wdt. It also bodges in a fix for a merge artifact breaking the halt-on-first-thread-when-openocd-is-connected; that fix should be refined later.
Wu Jian Gang [Fri, 28 Oct 2016 07:38:57 +0000 (15:38 +0800)]
Merge branch 'feature/support_max_16_sockets' into 'master'
lwip: support max 16 sockets
Since the customers need more sockets in their application, support max 16 sockets,
in other words, the total socket number of UDP/TCP/RAW sockets should not exceed 16.
Liu Zhi Fu [Fri, 28 Oct 2016 04:03:51 +0000 (12:03 +0800)]
lwip: support max 16 sockets
Since the customers need more sockets in their application, support max 16 sockets,
in other words, the total socket number of UDP/TCP/RAW sockets should not exceed 16.
Ivan Grokhotkov [Fri, 21 Oct 2016 10:44:57 +0000 (18:44 +0800)]
spi_flash: implement partition API, drop trivial wrappers
This implements esp_partition_read, esp_partition_write, esp_partition_erase_range, esp_partition_mmap.
Also removed getters which didn't add much sugar after all.
Ivan Grokhotkov [Fri, 21 Oct 2016 09:28:50 +0000 (17:28 +0800)]
spi_flash: change argument types
spi_flash_read and spi_flash_write currently have a limitation that source and destination must be word-aligned.
This can be fixed by adding code paths for various unaligned scenarios, but function signatures also need to be adjusted.
As a first step (since we are pre-1.0 and can still change function signatures) alignment checks are added, and pointer types are relaxed to uint8_t.
Later we will add handling of unaligned operations.
This change also introduces spi_flash_erase_range and spi_flash_get_chip_size functions.
We probably need something like spi_flash_chip_size_detect which will detect actual chip size.
This is to allow single application binary to be used on a variety of boards and modules.
Ivan Grokhotkov [Thu, 27 Oct 2016 09:47:45 +0000 (17:47 +0800)]
Merge branch 'feature/vfs' into 'master'
Virtual filesystem APIs
This changeset adds virtual filesystem APIs. As an example, UART devices are mapped to `/dev/uart/x`.
Also fixes an issue with per-task FILE descriptors.
Ivan Grokhotkov [Wed, 26 Oct 2016 06:05:56 +0000 (14:05 +0800)]
vfs and newlib: small fixes
- spaces->tabs in tasks.c
- update vfs_uart.c to use per-UART locks
- add license to vfs_uart.c
- allocate separate streams for stdout, stdin, stderr, so that they can be independently reassigned
- fix build system test failure
- use posix off_t instead of newlib internal _off_t
Ivan Grokhotkov [Tue, 25 Oct 2016 14:12:07 +0000 (22:12 +0800)]
vfs and newlib: small fixes
- spaces->tabs in tasks.c
- update vfs_uart.c to use per-UART locks
- add license to vfs_uart.c
- allocate separate streams for stdout, stdin, stderr, so that they can be independently reassigned
- fix build system test failure
Ivan Grokhotkov [Thu, 27 Oct 2016 09:09:35 +0000 (17:09 +0800)]
Merge branch 'feature/wdts' into 'master'
Feature/wdts
This adds two watchdogs to esp-idf:
- An interrupt watchdog. Kicks in if the FreeRTOS timer interupt on either the PRO_CPU or (when configured) the APP CPU isn't called for a configurable time. Panics, displaying which CPU caused the problem and the registers that may lead to the offending code.
- A task watchdog. A task has to feed it every once in a while. If not, it will print the name of the offending tasks, as well as the tasks currently running on both CPUs, and optionally panic.
Also adds a panic reason to the panic call, as well as fixes the panic code a bit.
Jeroen Domburg [Thu, 27 Oct 2016 08:07:47 +0000 (16:07 +0800)]
Add checks for tasks woken up on other CPUs where needed, make xYieldPending and xPendingReadyList per-processor, add configurable ISR stack size to Kconfig, in general fix the entire wake-up-task-on-other-cpu-by-interrupt implementation
Ivan Grokhotkov [Thu, 27 Oct 2016 05:44:31 +0000 (13:44 +0800)]
Merge branch 'feature/freertos_static_buffers' into 'master'
Backport the static allocation feature from FreeRTOS V9.0.0
This feature allows to use static buffers (or from a pool of memory which is not
controlled by FreeRTOS).
In order to reduce the impact of the changes, the static feature has only been added
to the queus (and in consequence to the semaphores and the mutexes) and the tasks.
The Timer task is always dynamically allocated and also the idle task(s), which in the
case of the ESP-IDF is ok, since we always need to have dynamic allocation enabled.
Original PR on Github: https://github.com/espressif/esp-idf/pull/21
Wu Jian Gang [Thu, 27 Oct 2016 03:33:56 +0000 (11:33 +0800)]
Merge branch 'feature/add_api_to_get_ap_info' into 'master'
esp32: add esp_wifi_sta_get_ap_info
The customers need to get information about AP that associated with ESP32 station,
these information includes RSSI, channel number etc, so add this new API
Liu Zhi Fu [Thu, 27 Oct 2016 02:42:01 +0000 (10:42 +0800)]
esp32: add esp_wifi_sta_get_ap_info
The customers need to get information about AP that associated with ESP32 station,
these information includes RSSI, channel number etc, so add this new API