From 3c071e1d899707bc4d63aed63de4772f62d5be53 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 28 Oct 2016 01:53:02 +0300 Subject: [PATCH] update IDF libraries and includes --- libraries/WiFi/src/WiFiAP.cpp | 6 +- libraries/WiFi/src/WiFiScan.cpp | 24 +- platform.txt | 4 +- tools/esptool.py | 477 +++++++++++++----- tools/sdk/bin/bootloader.bin | Bin 4016 -> 2784 bytes tools/sdk/include/config/sdkconfig.h | 25 +- tools/sdk/include/esp32/esp_brownout.h | 21 + tools/sdk/include/esp32/esp_gdbstub.h | 22 + tools/sdk/include/esp32/esp_heap_alloc_caps.h | 34 ++ tools/sdk/include/esp32/esp_int_wdt.h | 60 +++ tools/sdk/include/esp32/esp_panic.h | 21 + tools/sdk/include/esp32/esp_task_wdt.h | 83 +++ tools/sdk/include/esp32/esp_wifi.h | 30 +- tools/sdk/include/esp32/esp_wifi_internal.h | 80 +++ tools/sdk/include/esp32/esp_wifi_types.h | 15 +- tools/sdk/include/esp32/heap_alloc_caps.h | 34 ++ tools/sdk/include/esp32/rom/spi_flash.h | 12 +- tools/sdk/include/esp32/soc/cpu.h | 3 + tools/sdk/include/esp32/soc/rmt_struct.h | 18 + tools/sdk/include/esp32/soc/rtc_cntl_reg.h | 3 + tools/sdk/include/esp32/soc/timer_group_reg.h | 10 + .../sdk/include/freertos/freertos/FreeRTOS.h | 162 ++++++ .../freertos/freertos/FreeRTOSConfig.h | 7 +- tools/sdk/include/freertos/freertos/panic.h | 7 - .../sdk/include/freertos/freertos/portable.h | 10 +- .../sdk/include/freertos/freertos/portmacro.h | 20 + tools/sdk/include/freertos/freertos/queue.h | 110 +++- tools/sdk/include/freertos/freertos/semphr.h | 382 +++++++++++++- tools/sdk/include/freertos/freertos/task.h | 172 ++++++- .../freertos/freertos/xtensa_context.h | 7 +- tools/sdk/include/lwip/lwip/api.h | 4 - tools/sdk/include/lwip/lwip/dhcp.h | 2 +- tools/sdk/include/lwip/lwip/dns.h | 2 +- tools/sdk/include/lwip/lwip/err.h | 2 +- tools/sdk/include/lwip/lwip/mem.h | 37 -- tools/sdk/include/lwip/lwip/netif.h | 6 +- tools/sdk/include/lwip/lwip/opt.h | 16 +- tools/sdk/include/lwip/lwip/pbuf.h | 2 +- tools/sdk/include/lwip/lwip/priv/api_msg.h | 6 +- tools/sdk/include/lwip/lwip/priv/tcp_priv.h | 2 +- tools/sdk/include/lwip/lwip/sockets.h | 10 +- tools/sdk/include/lwip/lwip/tcp.h | 13 +- tools/sdk/include/lwip/lwipopts.h | 54 +- tools/sdk/include/lwip/netif/wlanif.h | 4 +- tools/sdk/include/lwip/port/lwipopts.h | 54 +- tools/sdk/include/lwip/port/netif/wlanif.h | 4 +- .../sdk/include/tcpip_adapter/tcpip_adapter.h | 28 +- tools/sdk/include/vfs/esp_vfs.h | 157 ++++++ tools/sdk/include/vfs/esp_vfs_dev.h | 28 + tools/sdk/ld/esp32.peripherals.ld | 1 + tools/sdk/ld/esp32.rom.ld | 6 +- tools/sdk/ld/esp32_out.ld | 4 +- tools/sdk/lib/libbt.a | Bin 198132 -> 2080 bytes tools/sdk/lib/libcore.a | Bin 44656 -> 37280 bytes tools/sdk/lib/libcrypto.a | Bin 129180 -> 129180 bytes tools/sdk/lib/libdriver.a | Bin 1722190 -> 98594 bytes tools/sdk/lib/libesp32.a | Bin 2286592 -> 267472 bytes tools/sdk/lib/libexpat.a | Bin 1605832 -> 1030052 bytes tools/sdk/lib/libfreertos.a | Bin 3529244 -> 488002 bytes tools/sdk/lib/libjson.a | Bin 345568 -> 183460 bytes tools/sdk/lib/liblog.a | Bin 211222 -> 21166 bytes tools/sdk/lib/liblwip.a | Bin 14550218 -> 1615692 bytes tools/sdk/lib/libmbedtls.a | Bin 9356882 -> 3166386 bytes tools/sdk/lib/libnet80211.a | Bin 548138 -> 551050 bytes tools/sdk/lib/libnewlib.a | Bin 0 -> 66706 bytes tools/sdk/lib/libnghttp.a | Bin 3222398 -> 1281422 bytes tools/sdk/lib/libnvs_flash.a | Bin 1378540 -> 534978 bytes tools/sdk/lib/libpp.a | Bin 274616 -> 277312 bytes tools/sdk/lib/librtc.a | Bin tools/sdk/lib/libsmartconfig.a | Bin 122816 -> 115458 bytes tools/sdk/lib/libspi_flash.a | Bin 425406 -> 24804 bytes tools/sdk/lib/libtcpip_adapter.a | Bin 338842 -> 55610 bytes tools/sdk/lib/libvfs.a | Bin 0 -> 62690 bytes tools/sdk/lib/libwpa.a | Bin 137394 -> 137394 bytes 74 files changed, 1952 insertions(+), 349 deletions(-) create mode 100644 tools/sdk/include/esp32/esp_brownout.h create mode 100644 tools/sdk/include/esp32/esp_gdbstub.h create mode 100644 tools/sdk/include/esp32/esp_heap_alloc_caps.h create mode 100644 tools/sdk/include/esp32/esp_int_wdt.h create mode 100644 tools/sdk/include/esp32/esp_panic.h create mode 100644 tools/sdk/include/esp32/esp_task_wdt.h create mode 100644 tools/sdk/include/esp32/esp_wifi_internal.h create mode 100644 tools/sdk/include/esp32/heap_alloc_caps.h delete mode 100644 tools/sdk/include/freertos/freertos/panic.h create mode 100644 tools/sdk/include/vfs/esp_vfs.h create mode 100644 tools/sdk/include/vfs/esp_vfs_dev.h create mode 100644 tools/sdk/lib/libnewlib.a mode change 100644 => 100755 tools/sdk/lib/librtc.a create mode 100644 tools/sdk/lib/libvfs.a diff --git a/libraries/WiFi/src/WiFiAP.cpp b/libraries/WiFi/src/WiFiAP.cpp index d824c104d..5886fd92f 100644 --- a/libraries/WiFi/src/WiFiAP.cpp +++ b/libraries/WiFi/src/WiFiAP.cpp @@ -189,9 +189,9 @@ bool WiFiAPClass::softAPdisconnect(bool wifioff) */ uint8_t WiFiAPClass::softAPgetStationNum() { - uint16_t number; - if(esp_wifi_get_ap_num(&number) == ESP_OK) { - return number; + wifi_sta_list_t clients; + if(esp_wifi_ap_get_sta_list(&clients) == ESP_OK) { + return clients.num; } return 0; } diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp index 70409e504..bcfcdfa9a 100644 --- a/libraries/WiFi/src/WiFiScan.cpp +++ b/libraries/WiFi/src/WiFiScan.cpp @@ -99,11 +99,11 @@ void WiFiScanClass::_scanDone() { WiFiScanClass::_scanComplete = true; WiFiScanClass::_scanStarted = false; - esp_wifi_get_ap_num(&(WiFiScanClass::_scanCount)); + esp_wifi_scan_get_ap_num(&(WiFiScanClass::_scanCount)); if(WiFiScanClass::_scanCount) { - WiFiScanClass::_scanResult = new wifi_ap_list_t[WiFiScanClass::_scanCount]; + WiFiScanClass::_scanResult = new wifi_ap_record_t[WiFiScanClass::_scanCount]; if(WiFiScanClass::_scanResult) { - esp_wifi_get_ap_list(&(WiFiScanClass::_scanCount), (wifi_ap_list_t*)_scanResult); + esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t*)_scanResult); } else { //no memory WiFiScanClass::_scanCount = 0; @@ -121,7 +121,7 @@ void * WiFiScanClass::_getScanInfoByIndex(int i) if(!WiFiScanClass::_scanResult || (size_t) i > WiFiScanClass::_scanCount) { return 0; } - return reinterpret_cast(WiFiScanClass::_scanResult) + i; + return reinterpret_cast(WiFiScanClass::_scanResult) + i; } /** @@ -150,7 +150,7 @@ int8_t WiFiScanClass::scanComplete() void WiFiScanClass::scanDelete() { if(WiFiScanClass::_scanResult) { - delete[] reinterpret_cast(WiFiScanClass::_scanResult); + delete[] reinterpret_cast(WiFiScanClass::_scanResult); WiFiScanClass::_scanResult = 0; WiFiScanClass::_scanCount = 0; } @@ -170,7 +170,7 @@ void WiFiScanClass::scanDelete() */ bool WiFiScanClass::getNetworkInfo(uint8_t i, String &ssid, uint8_t &encType, int32_t &rssi, uint8_t* &bssid, int32_t &channel) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return false; } @@ -190,7 +190,7 @@ bool WiFiScanClass::getNetworkInfo(uint8_t i, String &ssid, uint8_t &encType, in */ String WiFiScanClass::SSID(uint8_t i) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return String(); } @@ -205,7 +205,7 @@ String WiFiScanClass::SSID(uint8_t i) */ wifi_auth_mode_t WiFiScanClass::encryptionType(uint8_t i) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return WIFI_AUTH_OPEN; } @@ -219,7 +219,7 @@ wifi_auth_mode_t WiFiScanClass::encryptionType(uint8_t i) */ int32_t WiFiScanClass::RSSI(uint8_t i) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return 0; } @@ -234,7 +234,7 @@ int32_t WiFiScanClass::RSSI(uint8_t i) */ uint8_t * WiFiScanClass::BSSID(uint8_t i) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return 0; } @@ -249,7 +249,7 @@ uint8_t * WiFiScanClass::BSSID(uint8_t i) String WiFiScanClass::BSSIDstr(uint8_t i) { char mac[18] = { 0 }; - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return String(); } @@ -259,7 +259,7 @@ String WiFiScanClass::BSSIDstr(uint8_t i) int32_t WiFiScanClass::channel(uint8_t i) { - wifi_ap_list_t* it = reinterpret_cast(_getScanInfoByIndex(i)); + wifi_ap_record_t* it = reinterpret_cast(_getScanInfoByIndex(i)); if(!it) { return 0; } diff --git a/platform.txt b/platform.txt index ac4d7be8e..5eb4509fa 100644 --- a/platform.txt +++ b/platform.txt @@ -13,7 +13,7 @@ compiler.warning_flags.all=-Wall -Wextra compiler.path={runtime.tools.xtensa-esp32-elf-gcc.path}/bin/ compiler.sdk.path={runtime.platform.path}/tools/sdk -compiler.cpreprocessor.flags=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE='"mbedtls/esp_config.h"' -DHAVE_CONFIG_H "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/bt" "-I{compiler.sdk.path}/include/driver" "-I{compiler.sdk.path}/include/esp32" "-I{compiler.sdk.path}/include/freertos" "-I{compiler.sdk.path}/include/log" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/nvs_flash" "-I{compiler.sdk.path}/include/spi_flash" "-I{compiler.sdk.path}/include/tcpip_adapter" "-I{compiler.sdk.path}/include/expat" "-I{compiler.sdk.path}/include/json" "-I{compiler.sdk.path}/include/mbedtls" "-I{compiler.sdk.path}/include/nghttp" "-I{compiler.sdk.path}/include/lwip" +compiler.cpreprocessor.flags=-DESP_PLATFORM -DMBEDTLS_CONFIG_FILE='"mbedtls/esp_config.h"' -DHAVE_CONFIG_H "-I{compiler.sdk.path}/include/config" "-I{compiler.sdk.path}/include/bt" "-I{compiler.sdk.path}/include/driver" "-I{compiler.sdk.path}/include/esp32" "-I{compiler.sdk.path}/include/freertos" "-I{compiler.sdk.path}/include/log" "-I{compiler.sdk.path}/include/vfs" "-I{compiler.sdk.path}/include/newlib" "-I{compiler.sdk.path}/include/nvs_flash" "-I{compiler.sdk.path}/include/spi_flash" "-I{compiler.sdk.path}/include/tcpip_adapter" "-I{compiler.sdk.path}/include/expat" "-I{compiler.sdk.path}/include/json" "-I{compiler.sdk.path}/include/mbedtls" "-I{compiler.sdk.path}/include/nghttp" "-I{compiler.sdk.path}/include/lwip" compiler.c.cmd=xtensa-esp32-elf-gcc compiler.c.flags=-c {compiler.warning_flags} -Os -g3 -Wpointer-arith -Wno-error=unused-function -Wno-error=unused-but-set-variable -Wno-error=unused-variable -ffunction-sections -fdata-sections -mlongcalls -nostdlib -MMD -std=gnu99 -fstrict-volatile-bitfields @@ -26,7 +26,7 @@ compiler.S.flags=-c -g3 -x assembler-with-cpp -MMD -mlongcalls compiler.c.elf.cmd=xtensa-esp32-elf-gcc compiler.c.elf.flags="-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" -nostdlib -T esp32_out.ld -T esp32.common.ld -T esp32.rom.ld -T esp32.peripherals.ld -u call_user_start_cpu0 -Wl,--gc-sections -Wl,-static -Wl,--undefined=uxTopUsedPriority -compiler.c.elf.libs=-lgcc -lc -lm -lhal -lcore -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lbtdm_app -lbt -ldriver -lesp32 -lcrypto -lexpat -lfreertos -ljson -llog -llwip -lmbedtls -lnghttp -lnvs_flash -lspi_flash -ltcpip_adapter +compiler.c.elf.libs=-lgcc -lc -lm -lhal -lcore -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lbtdm_app -lbt -ldriver -lesp32 -lcrypto -lexpat -lfreertos -ljson -llog -llwip -lmbedtls -lnghttp -lnvs_flash -lspi_flash -ltcpip_adapter -lnewlib -lvfs compiler.as.cmd=xtensa-esp32-elf-as diff --git a/tools/esptool.py b/tools/esptool.py index 42033cee8..755f4cb84 100755 --- a/tools/esptool.py +++ b/tools/esptool.py @@ -98,7 +98,6 @@ class ESPLoader(object): # Some comands supported by ESP32 ROM bootloader (or -8266 w/ stub) ESP_SPI_SET_PARAMS = 0x0B ESP_SPI_ATTACH = 0x0D - ESP_CHANGE_BAUDRATE = 0x0F ESP_FLASH_DEFL_BEGIN = 0x10 ESP_FLASH_DEFL_DATA = 0x11 @@ -131,14 +130,11 @@ class ESPLoader(object): UART_DATA_REG_ADDR = 0x60000078 - # SPI peripheral "command" bitmasks - SPI_CMD_READ_ID = 0x10000000 - # Memory addresses IROM_MAP_START = 0x40200000 IROM_MAP_END = 0x40300000 - # The number of bytes in the response that signify command status + # The number of bytes in the UART response that signify command status STATUS_BYTES_LENGTH = 2 def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, do_connect=True): @@ -271,7 +267,7 @@ class ESPLoader(object): """ Try connecting repeatedly until successful, or giving up """ print 'Connecting...' - for _ in xrange(4): + for _ in xrange(10): # issue reset-to-bootloader: # RTS = either CH_PD or nRESET (both active low = chip in reset) # DTR = GPIO0 (active low = boot to flasher) @@ -283,8 +279,7 @@ class ESPLoader(object): time.sleep(0.05) self._port.setDTR(False) - # worst-case latency timer should be 255ms (probably <20ms) - self._port.timeout = 0.3 + self._port.timeout = 0.1 last_exception = None for _ in xrange(4): try: @@ -362,10 +357,9 @@ class ESPLoader(object): self.flash_finish(reboot) """ Read SPI flash manufacturer and device id """ - @stub_function_only def flash_id(self): - resp = self.check_command("get flash id", self.ESP_GET_FLASH_ID) - return struct.unpack(' 0: + self.write_reg(SPI_MOSI_DLEN_REG, mosi_bits - 1) + if miso_bits > 0: + self.write_reg(SPI_MISO_DLEN_REG, miso_bits - 1) + else: + + def set_data_lengths(mosi_bits, miso_bits): + SPI_DATA_LEN_REG = SPI_USR1_REG + SPI_MOSI_BITLEN_S = 17 + SPI_MISO_BITLEN_S = 8 + mosi_mask = 0 if (mosi_bits == 0) else (mosi_bits - 1) + miso_mask = 0 if (miso_bits == 0) else (miso_bits - 1) + self.write_reg(SPI_DATA_LEN_REG, + (miso_mask << SPI_MISO_BITLEN_S) | ( + mosi_mask << SPI_MOSI_BITLEN_S)) + + # SPI peripheral "command" bitmasks for SPI_CMD_REG + SPI_CMD_USR = (1 << 18) + + # shift values + SPI_USR2_DLEN_SHIFT = 28 + + if read_bits > 32: + raise FatalError("Reading more than 32 bits back from a SPI flash operation is unsupported") + if len(data) > 64: + raise FatalError("Writing more than 64 bytes of data with one SPI command is unsupported") + + data_bits = len(data) * 8 + flags = SPI_USR_COMMAND + if read_bits > 0: + flags |= SPI_USR_MISO + if data_bits > 0: + flags |= SPI_USR_MOSI + set_data_lengths(data_bits, read_bits) + self.write_reg(SPI_USR_REG, flags) + self.write_reg(SPI_USR2_REG, + (7 << SPI_USR2_DLEN_SHIFT) | spiflash_command) + if data_bits == 0: + self.write_reg(SPI_W0_REG, 0) # clear data register before we read it + else: + if len(data) % 4 != 0: # pad to 32-bit multiple + data += b'\0' * (4 - (len(data) % 4)) + words = struct.unpack("I" * (len(data) / 4), data) + next_reg = SPI_W0_REG + for word in words: + self.write_reg(next_reg, word) + next_reg += 4 + self.write_reg(SPI_CMD_REG, SPI_CMD_USR) + + def wait_done(): + for _ in xrange(10): + if (self.read_reg(SPI_CMD_REG) & SPI_CMD_USR) == 0: + return + raise FatalError("SPI command did not complete in time") + wait_done() + + status = self.read_reg(SPI_W0_REG) + return status + + def read_status(self, num_bytes=2): + """Read up to 24 bits (num_bytes) of SPI flash status register contents + via RDSR, RDSR2, RDSR3 commands + + Not all SPI flash supports all three commands. The upper 1 or 2 + bytes may be 0xFF. + """ + SPIFLASH_RDSR = 0x05 + SPIFLASH_RDSR2 = 0x35 + SPIFLASH_RDSR3 = 0x15 + + status = 0 + shift = 0 + for cmd in [SPIFLASH_RDSR, SPIFLASH_RDSR2, SPIFLASH_RDSR3][0:num_bytes]: + status += self.run_spiflash_command(cmd, read_bits=8) << shift + shift += 8 + return status + + def write_status(self, new_status, num_bytes=2, set_non_volatile=False): + """Write up to 24 bits (num_bytes) of new status register + + num_bytes can be 1, 2 or 3. + + Not all flash supports the additional commands to write the + second and third byte of the status register. When writing 2 + bytes, esptool also sends a 16-byte WRSR command (as some + flash types use this instead of WRSR2.) + + If the set_non_volatile flag is set, non-volatile bits will + be set as well as volatile ones (WREN used instead of WEVSR). + + """ + SPIFLASH_WRSR = 0x01 + SPIFLASH_WRSR2 = 0x31 + SPIFLASH_WRSR3 = 0x11 + SPIFLASH_WEVSR = 0x50 + SPIFLASH_WREN = 0x06 + SPIFLASH_WRDI = 0x04 + + enable_cmd = SPIFLASH_WREN if set_non_volatile else SPIFLASH_WEVSR + + # try using a 16-bit WRSR (not supported by all chips) + # this may be redundant, but shouldn't hurt + if num_bytes == 2: + self.run_spiflash_command(enable_cmd) + self.run_spiflash_command(SPIFLASH_WRSR, struct.pack(">= 8 + + self.run_spiflash_command(SPIFLASH_WRDI) + class ESP8266ROM(ESPLoader): """ Access class for ESP8266 ROM bootloader @@ -556,8 +694,9 @@ class ESP8266ROM(ESPLoader): ESP_OTP_MAC1 = 0x3ff00054 ESP_OTP_MAC3 = 0x3ff0005c - SPI_CMD_REG_ADDR = 0x60000200 - SPI_W0_REG_ADDR = 0x60000240 + SPI_REG_BASE = 0x60000200 + SPI_W0_OFFS = 0x40 + SPI_HAS_MOSI_DLEN_REG = False FLASH_SIZES = { '512KB':0x00, @@ -619,7 +758,7 @@ class ESP8266ROM(ESPLoader): class ESP8266StubLoader(ESP8266ROM): """ Access class for ESP8266 stub loader, runs on top of ROM. """ - FLASH_WRITE_SIZE = 8192 # matches MAX_WRITE_BLOCK in stub_loader.c + FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c IS_STUB = True def __init__(self, rom_loader): @@ -646,10 +785,11 @@ class ESP32ROM(ESPLoader): # ESP32 uses a 4 byte status reply STATUS_BYTES_LENGTH = 4 - SPI_CMD_REG_ADDR = 0x60003000 - SPI_W0_REG_ADDR = 0x60003040 + SPI_REG_BASE = 0x60002000 + EFUSE_REG_BASE = 0x6001a000 - EFUSE_BASE = 0x6001a000 + SPI_W0_OFFS = 0x80 + SPI_HAS_MOSI_DLEN_REG = True FLASH_SIZES = { '1MB':0x00, @@ -661,7 +801,7 @@ class ESP32ROM(ESPLoader): def read_efuse(self, n): """ Read the nth word of the ESP3x EFUSE region. """ - return self.read_reg(self.EFUSE_BASE + (4 * n)) + return self.read_reg(self.EFUSE_REG_BASE + (4 * n)) def chip_id(self): word16 = self.read_efuse(16) @@ -687,7 +827,7 @@ class ESP32ROM(ESPLoader): class ESP32StubLoader(ESP32ROM): """ Access class for ESP32 stub loader, runs on top of ROM. """ - FLASH_WRITE_SIZE = 8192 # matches MAX_WRITE_BLOCK in stub_loader.c + FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM IS_STUB = True @@ -739,6 +879,7 @@ class ImageSegment(object): data += "\x00" * (4 - pad_mod) self.data = data self.file_offs = file_offs + self.include_in_checksum = True def copy_with_new_addr(self, new_addr): """ Return a new ImageSegment with same data, but mapped at @@ -782,9 +923,7 @@ class BaseFirmwareImage(object): """ Load the next segment from the image file """ file_offs = f.tell() (offset, size) = struct.unpack(' 0x40200000 or offset < 0x3ffe0000 or size > 65536: - print('WARNING: Suspicious segment 0x%x, length %d' % (offset, size)) + self.warn_if_unusual_segment(offset, size, is_irom_segment) segment_data = f.read(size) if len(segment_data) < size: raise FatalError('End of file reading segment 0x%x, length %d (actual length %d)' % (offset, size, len(segment_data))) @@ -792,6 +931,11 @@ class BaseFirmwareImage(object): self.segments.append(segment) return segment + def warn_if_unusual_segment(self, offset, size, is_irom_segment): + if not is_irom_segment: + if offset > 0x40200000 or offset < 0x3ffe0000 or size > 65536: + print('WARNING: Suspicious segment 0x%x, length %d' % (offset, size)) + def save_segment(self, f, segment, checksum=None): """ Save the next segment to the image file, return next checksum value if provided """ f.write(struct.pack(' flash_end: - raise FatalError("File %s (length %d) at offset %d will not fit in %d bytes of flash." + - "Use --flash-size argument, or change flashing address." + raise FatalError(("File %s (length %d) at offset %d will not fit in %d bytes of flash. " + + "Use --flash-size argument, or change flashing address.") % (argfile.name, argfile.tell(), address, flash_end)) argfile.seek(0) for address, argfile in args.addr_filename: print 'Erasing flash...' + image = argfile.read() + # Update header with flash parameters + if address == 0 and image[0] == '\xe9': + image = image[0:2] + flash_info + image[4:] + calcmd5 = hashlib.md5(image).hexdigest() + uncsize = len(image) if args.compress: - uncimage = argfile.read() - calcmd5 = hashlib.md5(uncimage).hexdigest() - uncsize = len(uncimage) + uncimage = image image = zlib.compress(uncimage, 9) blocks = div_roundup(len(image), esp.FLASH_WRITE_SIZE) esp.flash_defl_begin(len(uncimage),len(image), address) else: - image = argfile.read() - calcmd5 = hashlib.md5(image).hexdigest() - uncsize = len(image) blocks = div_roundup(len(image), esp.FLASH_WRITE_SIZE) esp.flash_begin(blocks * esp.FLASH_WRITE_SIZE, address) argfile.seek(0) # in case we need it again @@ -1302,16 +1470,20 @@ def write_flash(esp, args): else: # Pad the last block block = block + '\xff' * (esp.FLASH_WRITE_SIZE - len(block)) - # Fix sflash config data - if address == 0 and seq == 0 and block[0] == '\xe9': - block = block[0:2] + flash_info + block[4:] - header_block = block esp.flash_block(block, seq) image = image[esp.FLASH_WRITE_SIZE:] seq += 1 written += len(block) t = time.time() - t - print '\rWrote %d bytes at 0x%08x in %.1f seconds (%.1f kbit/s)...' % (written, address, t, written / t * 8 / 1000) + speed_msg = "" + if args.compress: + if t > 0.0: + speed_msg = " (effective %.1f kbit/s)" % (uncsize / t * 8 / 1000) + print '\rWrote %d bytes (%d compressed) at 0x%08x in %.1f seconds%s...' % (uncsize, written, address, t, speed_msg) + else: + if t > 0.0: + speed_msg = " (%.1f kbit/s)" % (written / t * 8 / 1000) + print '\rWrote %d bytes at 0x%08x in %.1f seconds%s...' % (written, address, t, speed_msg) res = esp.flash_md5sum(address, uncsize) if res != calcmd5: print 'File md5: %s' % calcmd5 @@ -1339,14 +1511,13 @@ def image_info(args): print('Entry point: %08x' % image.entrypoint) if image.entrypoint != 0 else 'Entry point not set' print '%d segments' % len(image.segments) print - checksum = ESPLoader.ESP_CHECKSUM_MAGIC idx = 0 for seg in image.segments: idx += 1 print 'Segment %d: %r' % (idx, seg) - checksum = ESPLoader.checksum(seg.data, checksum) - print - print 'Checksum: %02x (%s)' % (image.checksum, 'valid' if image.checksum == checksum else 'invalid!') + calc_checksum = image.calculate_checksum() + print 'Checksum: %02x (%s)' % (image.checksum, + 'valid' if image.checksum == calc_checksum else 'invalid - calculated %02x' % calc_checksum) def make_image(args): @@ -1377,7 +1548,7 @@ def elf2image(args): image.entrypoint = e.entrypoint image.segments = e.sections # ELFSection is a subclass of ImageSegment image.flash_mode = {'qio':0, 'qout':1, 'dio':2, 'dout': 3}[args.flash_mode] - image.flash_size_freq = ESP8266ROM.FLASH_SIZES[args.flash_size] + image.flash_size_freq = image.ROM_LOADER.FLASH_SIZES[args.flash_size] image.flash_size_freq += {'40m':0, '26m':1, '20m':2, '80m': 0xf}[args.flash_freq] if args.output is None: @@ -1404,8 +1575,9 @@ def erase_flash(esp, args): def erase_region(esp, args): print 'Erasing region (may be slow depending on size)...' + t = time.time() esp.erase_region(args.address, args.size) - print 'Erase completed successfully.' + print 'Erase completed successfully in %.1f seconds.' % (time.time() - t) def run(esp, args): @@ -1468,6 +1640,19 @@ def verify_flash(esp, args, flash_params=None): raise FatalError("Verify failed.") +def read_flash_status(esp, args): + print ('Status value: 0x%04x' % esp.read_status(args.bytes)) + + +def write_flash_status(esp, args): + fmt = "0x%%0%dx" % (args.bytes * 2) + args.value = args.value & ((1 << (args.bytes * 8)) - 1) + print (('Initial flash status: ' + fmt) % esp.read_status(args.bytes)) + print (('Setting flash status: ' + fmt) % args.value) + esp.write_status(args.value, args.bytes, args.non_volatile) + print (('After flash status: ' + fmt) % esp.read_status(args.bytes)) + + def version(args): print __version__ @@ -1590,6 +1775,20 @@ def main(): 'flash_id', help='Read SPI flash manufacturer and device ID') + parser_read_status = subparsers.add_parser( + 'read_flash_status', + help='Read SPI flash status register') + + parser_read_status.add_argument('--bytes', help='Number of bytes to read (1-3)', type=int, choices=[1,2,3], default=2) + + parser_write_status = subparsers.add_parser( + 'write_flash_status', + help='Write SPI flash status register') + + parser_write_status.add_argument('--non-volatile', help='Write non-volatile bits (use with caution)', action='store_true') + parser_write_status.add_argument('--bytes', help='Number of status bytes to write (1-3)', type=int, choices=[1,2,3], default=2) + parser_write_status.add_argument('value', help='New value', type=arg_auto_int) + parser_read_flash = subparsers.add_parser( 'read_flash', help='Read SPI flash content') @@ -1652,6 +1851,8 @@ def main(): if hasattr(args, "ucIsHspi"): print "Attaching SPI flash..." esp.flash_spi_attach(args.ucIsHspi,args.ucIsLegacy) + else: + esp.flash_spi_attach(0, 0) if hasattr(args, "flash_size"): print "Configuring flash size..." esp.flash_set_parameters(flash_size_bytes(args.flash_size)) @@ -1718,94 +1919,96 @@ class AddrFilenamePairAction(argparse.Action): # Binary stub code (see flasher_stub dir for source & details) ESP8266ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) ESP32ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) if __name__ == '__main__': diff --git a/tools/sdk/bin/bootloader.bin b/tools/sdk/bin/bootloader.bin index d62d91ab5143caaa60d4dbcc8a2662eeb2d13c60..fac18c4de65f06a3b559ad5532b88919cfaf9121 100644 GIT binary patch literal 2784 zcmZWr4R90372aF@SeCCK8{)dQDR&1}WCt2qc0nd|bYeV;AQaZu|D^ zPD!ho)%*M2?%Q{7_w5ZMe%MWNW%Pf)d!9MfJx}R>Z3?g|j1-J<4jU~tV33j{BMU-* zd(R{zB!eG?A3_5?NL~zM{1qf00vg|h(C`ofOe#ewoBq=al)8XUU7$;WAk=38|EmPa zVP(owH#zO0fI#4fY_exDy60)0m<2};WYEb7)xU#ex63S#tT4-)R+{B&Uo*?k!a(Y@ z2MGw30;P1}Bm>_AJ`h02*gNfs0fMuR}Ev87rF5u=CR$d z$o>3*S-zgUOUErpJ(1#zRL2WTU{=6HR75T^J#QuNFnT*pM=#LXPkC$lEjnoZ!yj$+ z3nnM0$#3UDgN%anDuUL%Z)^Q3YUrm4E^vAUPX?IjXg(spriZ(mS~wi8vlneJKY&^| zL-+~%@WM+bghKgkQb=rb`4;N@I^Z|^cyu7QqszAKY`LOTcjZ465<-35jxMp=-6Gjb zLM@HT8 zC@(U6kI&;v)whl%@{$To6MAmo%v#%a;}Z>ymuA|xJV|bDd)mTVlh4!i0o|7GFh1KL z4b9w?$~)VCywUJez?@-q-Xi7kJ*ja4@T7$&^tqgoomASJt>4&71U8mv}>c;D^ z#kuzDn{h5LefG^9aWh@xk_@aq9$|AJ8}p6)s!pfcJEGLSFon|JimyqcLklq#yt8}6*Tpc;A-B$><(gO z>PYb6gn{HSHpZ!^ykt3JS6X$UBu)e-3UOg|F>b8_2rN+y!I6^xz+m3Um`&Fe-iLJ{ za#sUaA6znOuaX(2h5I?!M7+0bn1(My&@Ry_EZbv-`vp!~D&8BtM8g|kUr^3~1E1(c z$d5@!+NB}tlqRGhY?J!jlEVetG@Fn^3^z(ax1-XGk;8jxg7FPfu*UvC&bGx1Tj5Bd zj2-!lDXRdObv)ji`8@~;t}F-n$24|6yh2_TZ*{KqlFKaKk}BR9ysou=2_;N}+!ZsK zVA^mTzTid1@p#GPCP>p56a4$NdDNeD@kq9$R{mCg#g^68DR4NeJFruz-zSx$8q`^2 z8B$N~D=SB;Y%HurlFBWaOr|yYq>ve)l_|zJPYcn{=*Swj7V15tHAzT4Club)oF|0L z6fF#Bpd2(b0UOW8q>(^u-KoGOE9#dF(O=O>fwA&sZB4vvDH^mER%j6kM{iSqPu6z} z?rzsmQK``f-n{YSFCaj4*tBYCy$RsLGa@XNT&n>4Zr zH5}9e@usgZ{A?CBletCxJF~v4G=`HsTG=gHxN}PE(ki>zX7$76eNB_Agt;U3ss^#~ z%RwkNh%Yn9x<;e}{d=jmlPT64_(ecmy55cbd#L$06uuKDIKLm>Dm>^dkvgP&a+oC- zPIIfCWGnf}JbiMWKEr5ugPub)$PK9q`5{w%!|LzR$Y#bu1tH}9uD0O>*~jD-RXI}S zbWS~3b%W^cF#T?3AkFNb^#ku5qYQHOJP9ztf9@{vFh;*_S>F)1v2Da~DHh^3h(IrZ z^k3D~Fh2zW>*vNzYR- z{`Vb#ppOGcn4`c0N3T=L-Uh6npM>|qj477mrWd_SIiZ)vON8vA!{78)-NDq z406THWInHc0bfi$V46^V7gynE-eD7j>E?Yl-U^VMEQS*XK35nb3$21FCsdg&JBksrtGIl$fn$+K|bm)6f&c+B4|-5?O9 z#eq6L+2j;Z$M#K-ENRI2#?g;?i}*{bOfa>0iYkrF0!%ti`8;7HmB1vSFJmR@{Bpn* z1ekSO6F;ukN#{!p8_HFb<^DR_8NOedyX%4|nuYz6upUr>zsDHjqzDomwsJ1>IVCMr wROZ%uk*z2>kiU^O%~EoJb{=Ggn5CnKMcQrY-B0^PME2`5!Q<@MTt&Y5Z+&Yj_5c6? literal 4016 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 +#include "freertos/xtensa_api.h" + +void esp_gdbstub_panic_handler(XtExcFrame *frame); + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_heap_alloc_caps.h b/tools/sdk/include/esp32/esp_heap_alloc_caps.h new file mode 100644 index 000000000..d371ca5ed --- /dev/null +++ b/tools/sdk/include/esp32/esp_heap_alloc_caps.h @@ -0,0 +1,34 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef HEAP_ALLOC_CAPS_H +#define HEAP_ALLOC_CAPS_H + +#define MALLOC_CAP_EXEC (1<<0) //Memory must be able to run executable code +#define MALLOC_CAP_32BIT (1<<1) //Memory must allow for aligned 32-bit data accesses +#define MALLOC_CAP_8BIT (1<<2) //Memory must allow for 8/16/...-bit data accesses +#define MALLOC_CAP_DMA (1<<3) //Memory must be able to accessed by DMA +#define MALLOC_CAP_PID2 (1<<4) //Memory must be mapped to PID2 memory space +#define MALLOC_CAP_PID3 (1<<5) //Memory must be mapped to PID3 memory space +#define MALLOC_CAP_PID4 (1<<6) //Memory must be mapped to PID4 memory space +#define MALLOC_CAP_PID5 (1<<7) //Memory must be mapped to PID5 memory space +#define MALLOC_CAP_PID6 (1<<8) //Memory must be mapped to PID6 memory space +#define MALLOC_CAP_PID7 (1<<9) //Memory must be mapped to PID7 memory space +#define MALLOC_CAP_SPISRAM (1<<10) //Memory must be in SPI SRAM +#define MALLOC_CAP_INVALID (1<<31) //Memory can't be used / list end marker + + +void heap_alloc_caps_init(); +void *pvPortMallocCaps(size_t xWantedSize, uint32_t caps); + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_int_wdt.h b/tools/sdk/include/esp32/esp_int_wdt.h new file mode 100644 index 000000000..438740039 --- /dev/null +++ b/tools/sdk/include/esp32/esp_int_wdt.h @@ -0,0 +1,60 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __ESP_INT_WDT_H +#define __ESP_INT_WDT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup Watchdog_APIs + * @{ + */ + +/* +This routine enables a watchdog to catch instances of processes disabling +interrupts for too long, or code within interrupt handlers taking too long. +It does this by setting up a watchdog which gets fed from the FreeRTOS +task switch interrupt. When this watchdog times out, initially it will call +a high-level interrupt routine that will panic FreeRTOS in order to allow +for forensic examination of the state of the CPU. When this interrupt +handler is not called and the watchdog times out a second time, it will +reset the SoC. + +This uses the TIMERG1 WDT. +*/ + + +/** + * @brief Initialize the interrupt watchdog. This is called in the init code if + * the interrupt watchdog is enabled in menuconfig. + * + * @param null + * + * @return null + */ +void esp_int_wdt_init(); + + +/** + * @} + */ + + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_panic.h b/tools/sdk/include/esp32/esp_panic.h new file mode 100644 index 000000000..6aba6c5f4 --- /dev/null +++ b/tools/sdk/include/esp32/esp_panic.h @@ -0,0 +1,21 @@ +#ifndef PANIC_H +#define PANIC_H + + +#define PANIC_RSN_NONE 0 +#define PANIC_RSN_DEBUGEXCEPTION 1 +#define PANIC_RSN_DOUBLEEXCEPTION 2 +#define PANIC_RSN_KERNELEXCEPTION 3 +#define PANIC_RSN_COPROCEXCEPTION 4 +#define PANIC_RSN_INTWDT_CPU0 5 +#define PANIC_RSN_INTWDT_CPU1 6 +#define PANIC_RSN_MAX 6 + + +#ifndef __ASSEMBLER__ + +void esp_set_breakpoint_if_jtag(void *fn); + +#endif + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_task_wdt.h b/tools/sdk/include/esp32/esp_task_wdt.h new file mode 100644 index 000000000..bbc499567 --- /dev/null +++ b/tools/sdk/include/esp32/esp_task_wdt.h @@ -0,0 +1,83 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __ESP_TASK_WDT_H +#define __ESP_TASK_WDT_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/** \defgroup Watchdog_APIs Watchdog APIs + * @brief Watchdog APIs + */ + +/** @addtogroup Watchdog_APIs + * @{ + */ + +/* +This routine enables a more general-purpose task watchdog: tasks can individually +feed the watchdog and the watchdog will bark if one or more tasks haven't fed the +watchdog within the specified time. Optionally, the idle tasks can also configured +to feed the watchdog in a similar fashion, to detect CPU starvation. + +This uses the TIMERG0 WDT. +*/ + + +/** + * @brief Initialize the task watchdog. This is called in the init code, if the + * task watchdog is enabled in menuconfig. + * + * @param null + * + * @return null + */ +void esp_task_wdt_init(); + +/** + * @brief Feed the watchdog. After the first feeding session, the watchdog will expect the calling + * task to keep feeding the watchdog until task_wdt_delete() is called. + * + * @param null + * + * @return null + */ + +void esp_task_wdt_feed(); + + +/** + * @brief Delete the watchdog for the current task. + * + * @param null + * + * @return null + */ +void esp_task_wdt_delete(); + +/** + * @} + */ + + +#ifdef __cplusplus +} +#endif + + + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/esp_wifi.h b/tools/sdk/include/esp32/esp_wifi.h index 12378f334..80ced5dc6 100644 --- a/tools/sdk/include/esp32/esp_wifi.h +++ b/tools/sdk/include/esp32/esp_wifi.h @@ -191,14 +191,14 @@ esp_err_t esp_wifi_disconnect(void); esp_err_t esp_wifi_clear_fast_connect(void); /** - * @brief Kick the all station or associated id equals to aid + * @brief deauthenticate all stations or associated id equals to aid * - * @param uint16_t aid : when aid is 0, kick all stations, otherwise kick station whose associated id is aid + * @param uint16_t aid : when aid is 0, deauthenticate all stations, otherwise deauthenticate station whose associated id is aid * * @return ESP_OK : succeed * @return others : fail */ -esp_err_t esp_wifi_kick_station(uint16_t aid); +esp_err_t esp_wifi_deauth_sta(uint16_t aid); /** * @brief Scan all available APs. @@ -235,19 +235,30 @@ esp_err_t esp_wifi_scan_stop(void); * @return ESP_OK : succeed * @return others : fail */ -esp_err_t esp_wifi_get_ap_num(uint16_t *number); +esp_err_t esp_wifi_scan_get_ap_num(uint16_t *number); /** * @brief Get AP list found in last scan * - * @param uint16_t *number : as input param, it stores max AP number ap_list can hold, as output param, it store + * @param uint16_t *number : as input param, it stores max AP number ap_records can hold, as output param, it store the actual AP number this API returns - * @param wifi_ap_list_t *ap_list : a list to hold the found APs + * @param wifi_ap_record_t *ap_records: wifi_ap_record_t array to hold the found APs * * @return ESP_OK : succeed * @return others : fail */ -esp_err_t esp_wifi_get_ap_list(uint16_t *number, wifi_ap_list_t *ap_list); +esp_err_t esp_wifi_scan_get_ap_records(uint16_t *number, wifi_ap_record_t *ap_records); + + +/** + * @brief Get information of AP associated with ESP32 station + * + * @param wifi_ap_record_t *ap_info: the wifi_ap_record_t to hold station assocated AP + * + * @return ESP_OK : succeed + * @return others : fail + */ +esp_err_t esp_wifi_sta_get_ap_info(wifi_ap_record_t *ap_info); /** * @brief Set current power save type @@ -471,14 +482,13 @@ esp_err_t esp_wifi_get_config(wifi_interface_t ifx, wifi_config_t *conf); * * @attention SSC only API * - * @param struct station_info **station : station list + * @param wifi_sta_list_t *sta: station list * * @return ESP_OK : succeed * @return others : fail */ -esp_err_t esp_wifi_get_station_list(struct station_info **station); +esp_err_t esp_wifi_ap_get_sta_list(wifi_sta_list_t *sta); -esp_err_t esp_wifi_free_station_list(void); /** * @brief Set the WiFi API configuration storage type diff --git a/tools/sdk/include/esp32/esp_wifi_internal.h b/tools/sdk/include/esp32/esp_wifi_internal.h new file mode 100644 index 000000000..217d5f6d1 --- /dev/null +++ b/tools/sdk/include/esp32/esp_wifi_internal.h @@ -0,0 +1,80 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* + * All the APIs declared here are internal only APIs, it can only be used by + * espressif internal modules, such as SSC, LWIP, TCPIP adapter etc, espressif + * customers are not recommended to use them. + * + * If someone really want to use specified APIs declared in here, please contact + * espressif AE/developer to make sure you know the limitations or risk of + * the API, otherwise you may get unexpected behavior!!! + * + */ + + +#ifndef __ESP_WIFI_INTERNAL_H__ +#define __ESP_WIFI_INTERNAL_H__ + +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" +#include "rom/queue.h" +#include "esp_err.h" +#include "esp_wifi_types.h" +#include "esp_event.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief get whether the wifi driver is allowed to transmit data or not + * + * @param none + * + * @return true : upper layer should stop to transmit data to wifi driver + * @return false : upper layer can transmit data to wifi driver + */ +bool esp_wifi_internal_tx_is_stop(void); + +/** + * @brief free the rx buffer which allocated by wifi driver + * + * @param void* buffer: rx buffer pointer + * + * @return nonoe + */ +void esp_wifi_internal_free_rx_buffer(void* buffer); + +/** + * @brief transmit the buffer via wifi driver + * + * @attention1 TODO should modify the return type from bool to int + * + * @param wifi_interface_t wifi_if : wifi interface id + * @param void *buffer : the buffer to be tansmit + * @param u16_t len : the length of buffer + * + * @return True : success transmit the buffer to wifi driver + * False : failed to transmit the buffer to wifi driver + */ +bool esp_wifi_internal_tx(wifi_interface_t wifi_if, void *buffer, u16_t len); + +#ifdef __cplusplus +} +#endif + +#endif /* __ESP_WIFI_H__ */ diff --git a/tools/sdk/include/esp32/esp_wifi_types.h b/tools/sdk/include/esp32/esp_wifi_types.h index b3474769e..0ea719a65 100644 --- a/tools/sdk/include/esp32/esp_wifi_types.h +++ b/tools/sdk/include/esp32/esp_wifi_types.h @@ -109,7 +109,7 @@ typedef struct { wifi_second_chan_t second; /**< second channel of AP */ int8_t rssi; /**< signal strength of AP */ wifi_auth_mode_t authmode; /**< authmode of AP */ -} wifi_ap_list_t; +} wifi_ap_record_t; typedef enum { WIFI_PS_NONE, /**< No power save */ @@ -150,10 +150,15 @@ typedef union { wifi_sta_config_t sta; /**< configuration of STA */ } wifi_config_t; -struct station_info { - STAILQ_ENTRY(station_info) next; - uint8_t bssid[6]; -}; +typedef struct { + uint8_t mac[6]; /**< mac address of sta that associated with ESP32 soft-AP */ +}wifi_sta_info_t; + +#define ESP_WIFI_MAX_CONN_NUM (8+2) /**< max number of sta the eSP32 soft-AP can connect */ +typedef struct { + wifi_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM]; /**< station list */ + uint8_t num; /**< number of station that associated with ESP32 soft-AP */ +}wifi_sta_list_t; typedef enum { WIFI_STORAGE_FLASH, /**< all configuration will strore in both memory and flash */ diff --git a/tools/sdk/include/esp32/heap_alloc_caps.h b/tools/sdk/include/esp32/heap_alloc_caps.h new file mode 100644 index 000000000..d371ca5ed --- /dev/null +++ b/tools/sdk/include/esp32/heap_alloc_caps.h @@ -0,0 +1,34 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef HEAP_ALLOC_CAPS_H +#define HEAP_ALLOC_CAPS_H + +#define MALLOC_CAP_EXEC (1<<0) //Memory must be able to run executable code +#define MALLOC_CAP_32BIT (1<<1) //Memory must allow for aligned 32-bit data accesses +#define MALLOC_CAP_8BIT (1<<2) //Memory must allow for 8/16/...-bit data accesses +#define MALLOC_CAP_DMA (1<<3) //Memory must be able to accessed by DMA +#define MALLOC_CAP_PID2 (1<<4) //Memory must be mapped to PID2 memory space +#define MALLOC_CAP_PID3 (1<<5) //Memory must be mapped to PID3 memory space +#define MALLOC_CAP_PID4 (1<<6) //Memory must be mapped to PID4 memory space +#define MALLOC_CAP_PID5 (1<<7) //Memory must be mapped to PID5 memory space +#define MALLOC_CAP_PID6 (1<<8) //Memory must be mapped to PID6 memory space +#define MALLOC_CAP_PID7 (1<<9) //Memory must be mapped to PID7 memory space +#define MALLOC_CAP_SPISRAM (1<<10) //Memory must be in SPI SRAM +#define MALLOC_CAP_INVALID (1<<31) //Memory can't be used / list end marker + + +void heap_alloc_caps_init(); +void *pvPortMallocCaps(size_t xWantedSize, uint32_t caps); + +#endif \ No newline at end of file diff --git a/tools/sdk/include/esp32/rom/spi_flash.h b/tools/sdk/include/esp32/rom/spi_flash.h index ba8eebc2c..1f14c6617 100644 --- a/tools/sdk/include/esp32/rom/spi_flash.h +++ b/tools/sdk/include/esp32/rom/spi_flash.h @@ -218,7 +218,7 @@ void SelectSpiFunction(uint32_t ishspi); void spi_flash_attach(uint32_t ishspi, bool legacy); /** - * @brief SPI Read Flash status register. We use CMD 0x05. + * @brief SPI Read Flash status register. We use CMD 0x05 (RDSR). * Please do not call this function in SDK. * * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. @@ -232,7 +232,7 @@ void spi_flash_attach(uint32_t ishspi, bool legacy); SpiFlashOpResult SPI_read_status(SpiFlashChip *spi, uint32_t *status); /** - * @brief SPI Read Flash status register high 16 bit. We use CMD 0x35. + * @brief SPI Read Flash status register bits 8-15. We use CMD 0x35 (RDSR2). * Please do not call this function in SDK. * * @param SpiFlashChip *spi : The information for Flash, which is exported from ld file. @@ -243,7 +243,7 @@ SpiFlashOpResult SPI_read_status(SpiFlashChip *spi, uint32_t *status); * SPI_FLASH_RESULT_ERR : read error. * SPI_FLASH_RESULT_TIMEOUT : read timeout. */ -SpiFlashOpResult SPI_read_status_high(SpiFlashChip *spi, uint32_t *status); +SpiFlashOpResult SPI_read_status_high(uint32_t *status); /** * @brief Write status to Falsh status register. @@ -503,6 +503,12 @@ void SPI_Write_Encrypt_Disable(void); */ SpiFlashOpResult SPI_Encrypt_Write(uint32_t flash_addr, uint32_t *data, uint32_t len); + +/** @brief Global SpiFlashChip structure used by ROM functions + * + */ +extern SpiFlashChip g_rom_flashchip; + /** * @} */ diff --git a/tools/sdk/include/esp32/soc/cpu.h b/tools/sdk/include/esp32/soc/cpu.h index c74ba317c..ee2907493 100644 --- a/tools/sdk/include/esp32/soc/cpu.h +++ b/tools/sdk/include/esp32/soc/cpu.h @@ -15,6 +15,9 @@ #ifndef _SOC_CPU_H #define _SOC_CPU_H +#include +#include +#include #include "xtensa/corebits.h" /* C macros for xtensa special register read/write/exchange */ diff --git a/tools/sdk/include/esp32/soc/rmt_struct.h b/tools/sdk/include/esp32/soc/rmt_struct.h index 15beb8c6d..fb4c21055 100644 --- a/tools/sdk/include/esp32/soc/rmt_struct.h +++ b/tools/sdk/include/esp32/soc/rmt_struct.h @@ -225,4 +225,22 @@ typedef volatile struct { uint32_t date; /*This is the version register.*/ } rmt_dev_t; extern rmt_dev_t RMT; + +//Allow access to RMT memory using RMTMEM.chan[0].data[8] +typedef volatile struct { + struct { + union { + struct { + uint32_t level1: 1; + uint32_t duration1: 15; + uint32_t level0: 1; + uint32_t duration0: 15; + + }; + uint32_t val; + } data[64]; + } chan[8]; +} rmt_mem_t; +extern rmt_mem_t RMTMEM; + #endif /* _SOC_RMT_STRUCT_H_ */ diff --git a/tools/sdk/include/esp32/soc/rtc_cntl_reg.h b/tools/sdk/include/esp32/soc/rtc_cntl_reg.h index 47328611e..bb4e2afce 100644 --- a/tools/sdk/include/esp32/soc/rtc_cntl_reg.h +++ b/tools/sdk/include/esp32/soc/rtc_cntl_reg.h @@ -14,6 +14,9 @@ #ifndef _SOC_RTC_CNTL_REG_H_ #define _SOC_RTC_CNTL_REG_H_ +/* The value that needs to be written to RTC_CNTL_WDT_WKEY to write-enable the wdt registers */ +#define RTC_CNTL_WDT_WKEY_VALUE 0x50D83AA1 + #include "soc.h" #define RTC_CNTL_OPTIONS0_REG (DR_REG_RTCCNTL_BASE + 0x0) diff --git a/tools/sdk/include/esp32/soc/timer_group_reg.h b/tools/sdk/include/esp32/soc/timer_group_reg.h index 96a5eb790..2db2a7e3f 100644 --- a/tools/sdk/include/esp32/soc/timer_group_reg.h +++ b/tools/sdk/include/esp32/soc/timer_group_reg.h @@ -15,6 +15,16 @@ #define __TIMG_REG_H__ #include "soc.h" +/* The value that needs to be written to TIMG_WDT_WKEY to write-enable the wdt registers */ +#define TIMG_WDT_WKEY_VALUE 0x50D83AA1 + +/* Possible values for TIMG_WDT_STGx */ +#define TIMG_WDT_STG_SEL_OFF 0 +#define TIMG_WDT_STG_SEL_INT 1 +#define TIMG_WDT_STG_SEL_RESET_CPU 2 +#define TIMG_WDT_STG_SEL_RESET_SYSTEM 3 + + #define REG_TIMG_BASE(i) (DR_REG_TIMERGROUP0_BASE + i*0x1000) #define TIMG_T0CONFIG_REG(i) (REG_TIMG_BASE(i) + 0x0000) /* TIMG_T0_EN : R/W ;bitpos:[31] ;default: 1'h0 ; */ diff --git a/tools/sdk/include/freertos/freertos/FreeRTOS.h b/tools/sdk/include/freertos/freertos/FreeRTOS.h index 04b39b65e..f6c9aa497 100644 --- a/tools/sdk/include/freertos/freertos/FreeRTOS.h +++ b/tools/sdk/include/freertos/freertos/FreeRTOS.h @@ -74,6 +74,7 @@ * Include the generic headers required for the FreeRTOS port being used. */ #include +#include "sys/reent.h" /* * If stdint.h cannot be located then: @@ -739,6 +740,20 @@ extern "C" { #define portTICK_TYPE_IS_ATOMIC 0 #endif +#ifndef configSUPPORT_STATIC_ALLOCATION + /* Defaults to 0 for backward compatibility. */ + #define configSUPPORT_STATIC_ALLOCATION 0 +#endif + +#ifndef configSUPPORT_DYNAMIC_ALLOCATION + /* Defaults to 1 for backward compatibility. */ + #define configSUPPORT_DYNAMIC_ALLOCATION 1 +#endif + +#if( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) ) + #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1. +#endif + #if( portTICK_TYPE_IS_ATOMIC == 0 ) /* Either variables of tick type cannot be read atomically, or portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when @@ -791,6 +806,153 @@ V8 if desired. */ #define configESP32_PER_TASK_DATA 1 #endif +/* + * In line with software engineering best practice, FreeRTOS implements a strict + * data hiding policy, so the real structures used by FreeRTOS to maintain the + * state of tasks, queues, semaphores, etc. are not accessible to the application + * code. However, if the application writer wants to statically allocate such + * an object then the size of the object needs to be know. Dummy structures + * that are guaranteed to have the same size and alignment requirements of the + * real objects are used for this purpose. The dummy list and list item + * structures below are used for inclusion in such a dummy structure. + */ +struct xSTATIC_LIST_ITEM +{ + TickType_t xDummy1; + void *pvDummy2[ 4 ]; +}; +typedef struct xSTATIC_LIST_ITEM StaticListItem_t; + +/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ +struct xSTATIC_MINI_LIST_ITEM +{ + TickType_t xDummy1; + void *pvDummy2[ 2 ]; +}; +typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t; + +/* See the comments above the struct xSTATIC_LIST_ITEM definition. */ +typedef struct xSTATIC_LIST +{ + UBaseType_t uxDummy1; + void *pvDummy2; + StaticMiniListItem_t xDummy3; +} StaticList_t; + +/* + * In line with software engineering best practice, especially when supplying a + * library that is likely to change in future versions, FreeRTOS implements a + * strict data hiding policy. This means the Task structure used internally by + * FreeRTOS is not accessible to application code. However, if the application + * writer wants to statically allocate the memory required to create a task then + * the size of the task object needs to be know. The StaticTask_t structure + * below is provided for this purpose. Its sizes and alignment requirements are + * guaranteed to match those of the genuine structure, no matter which + * architecture is being used, and no matter how the values in FreeRTOSConfig.h + * are set. Its contents are somewhat obfuscated in the hope users will + * recognise that it would be unwise to make direct use of the structure members. + */ +typedef struct xSTATIC_TCB +{ + void *pxDummy1; + #if ( portUSING_MPU_WRAPPERS == 1 ) + xMPU_SETTINGS xDummy2; + #endif + StaticListItem_t xDummy3[ 2 ]; + UBaseType_t uxDummy5; + void *pxDummy6; + uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ]; + UBaseType_t uxDummyCoreId; + #if ( portSTACK_GROWTH > 0 ) + void *pxDummy8; + #endif + #if ( portCRITICAL_NESTING_IN_TCB == 1 ) + UBaseType_t uxDummy9; + uint32_t OldInterruptState; + #endif + #if ( configUSE_TRACE_FACILITY == 1 ) + UBaseType_t uxDummy10[ 2 ]; + #endif + #if ( configUSE_MUTEXES == 1 ) + UBaseType_t uxDummy12[ 2 ]; + #endif + #if ( configUSE_APPLICATION_TASK_TAG == 1 ) + void *pxDummy14; + #endif + #if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 ) + void *pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; + #if ( configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS ) + void *pvDummyLocalStorageCallBack[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ]; + #endif + #endif + #if ( configGENERATE_RUN_TIME_STATS == 1 ) + uint32_t ulDummy16; + #endif + #if ( configUSE_NEWLIB_REENTRANT == 1 ) + struct _reent xDummy17; + #endif + #if ( configUSE_TASK_NOTIFICATIONS == 1 ) + uint32_t ulDummy18; + uint32_t ucDummy19; + #endif + #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) + uint8_t uxDummy20; + #endif + +} StaticTask_t; + +/* + * In line with software engineering best practice, especially when supplying a + * library that is likely to change in future versions, FreeRTOS implements a + * strict data hiding policy. This means the Queue structure used internally by + * FreeRTOS is not accessible to application code. However, if the application + * writer wants to statically allocate the memory required to create a queue + * then the size of the queue object needs to be know. The StaticQueue_t + * structure below is provided for this purpose. Its sizes and alignment + * requirements are guaranteed to match those of the genuine structure, no + * matter which architecture is being used, and no matter how the values in + * FreeRTOSConfig.h are set. Its contents are somewhat obfuscated in the hope + * users will recognise that it would be unwise to make direct use of the + * structure members. + */ +typedef struct xSTATIC_QUEUE +{ + void *pvDummy1[ 3 ]; + + union + { + void *pvDummy2; + UBaseType_t uxDummy2; + } u; + + StaticList_t xDummy3[ 2 ]; + UBaseType_t uxDummy4[ 3 ]; + BaseType_t ucDummy5[ 2 ]; + + #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) + uint8_t ucDummy6; + #endif + + #if ( configUSE_QUEUE_SETS == 1 ) + void *pvDummy7; + #endif + + #if ( configUSE_TRACE_FACILITY == 1 ) + UBaseType_t uxDummy8; + uint8_t ucDummy9; + #endif + + struct { + volatile uint32_t mux; + #ifdef CONFIG_FREERTOS_PORTMUX_DEBUG + const char *lastLockedFn; + int lastLockedLine; + #endif + } mux; + +} StaticQueue_t; +typedef StaticQueue_t StaticSemaphore_t; + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h b/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h index d1958e770..fe61f7b09 100644 --- a/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h +++ b/tools/sdk/include/freertos/freertos/FreeRTOSConfig.h @@ -152,9 +152,9 @@ *----------------------------------------------------------*/ #define configUSE_PREEMPTION 1 -#define configUSE_IDLE_HOOK 0 +#define configUSE_IDLE_HOOK ( CONFIG_TASK_WDT_CHECK_IDLE_TASK ) -#define configUSE_TICK_HOOK 0 +#define configUSE_TICK_HOOK ( CONFIG_INT_WDT ) #define configTICK_RATE_HZ ( CONFIG_FREERTOS_HZ ) @@ -231,6 +231,7 @@ #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 #define INCLUDE_uxTaskGetStackHighWaterMark 1 +#define INCLUDE_pcTaskGetTaskName 1 #if CONFIG_ENABLE_MEMORY_DEBUG #define configENABLE_MEMORY_DEBUG 1 @@ -251,6 +252,8 @@ #define configUSE_NEWLIB_REENTRANT 1 +#define configSUPPORT_DYNAMIC_ALLOCATION 1 + /* Test FreeRTOS timers (with timer task) and more. */ /* Some files don't compile if this flag is disabled */ #define configUSE_TIMERS 1 diff --git a/tools/sdk/include/freertos/freertos/panic.h b/tools/sdk/include/freertos/freertos/panic.h deleted file mode 100644 index 9e902ed20..000000000 --- a/tools/sdk/include/freertos/freertos/panic.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PANIC_H -#define PANIC_H - -void setBreakpointIfJtag(void *fn); - - -#endif \ No newline at end of file diff --git a/tools/sdk/include/freertos/freertos/portable.h b/tools/sdk/include/freertos/freertos/portable.h index 4030ca0c0..f3474d49e 100644 --- a/tools/sdk/include/freertos/freertos/portable.h +++ b/tools/sdk/include/freertos/freertos/portable.h @@ -192,8 +192,14 @@ void vPortEndScheduler( void ) PRIVILEGED_FUNCTION; #endif /* Multi-core: get current core ID */ -int xPortGetCoreID( void ); - +static inline uint32_t xPortGetCoreID() { + int id; + asm volatile( + "rsr.prid %0\n" + " extui %0,%0,13,1" + :"=r"(id)); + return id; +} #ifdef __cplusplus } diff --git a/tools/sdk/include/freertos/freertos/portmacro.h b/tools/sdk/include/freertos/freertos/portmacro.h index ab83b0e05..f20a4a1e2 100644 --- a/tools/sdk/include/freertos/freertos/portmacro.h +++ b/tools/sdk/include/freertos/freertos/portmacro.h @@ -225,6 +225,26 @@ static inline unsigned portENTER_CRITICAL_NESTED() { unsigned state = XTOS_SET_I #define portCLEAR_INTERRUPT_MASK_FROM_ISR(state) portEXIT_CRITICAL_NESTED(state) +/* + * Wrapper for the Xtensa compare-and-set instruction. This subroutine will atomically compare + * *mux to compare, and if it's the same, will set *mux to set. It will return the old value + * of *addr in *set. + * + * Warning: From the ISA docs: in some (unspecified) cases, the s32c1i instruction may return the + * *bitwise inverse* of the old mem if the mem wasn't written. This doesn't seem to happen on the + * ESP32, though. (Would show up directly if it did because the magic wouldn't match.) + */ +static inline void uxPortCompareSet(volatile uint32_t *addr, uint32_t compare, uint32_t *set) { + __asm__ __volatile__( + "WSR %2,SCOMPARE1 \n" + "ISYNC \n" + "S32C1I %0, %1, 0 \n" + :"=r"(*set) + :"r"(addr), "r"(compare), "0"(*set) + ); +} + + /*-----------------------------------------------------------*/ /* Architecture specifics. */ diff --git a/tools/sdk/include/freertos/freertos/queue.h b/tools/sdk/include/freertos/freertos/queue.h index 2095c59b0..876f1a1b3 100644 --- a/tools/sdk/include/freertos/freertos/queue.h +++ b/tools/sdk/include/freertos/freertos/queue.h @@ -170,7 +170,95 @@ typedef void * QueueSetMemberHandle_t; * \defgroup xQueueCreate xQueueCreate * \ingroup QueueManagement */ -#define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( uxQueueLength, uxItemSize, queueQUEUE_TYPE_BASE ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + #define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) ) +#endif + +/** + * queue. h + *
+ QueueHandle_t xQueueCreateStatic(
+							  UBaseType_t uxQueueLength,
+							  UBaseType_t uxItemSize,
+							  uint8_t *pucQueueStorageBuffer,
+							  StaticQueue_t *pxQueueBuffer
+						  );
+ * 
+ * + * Creates a new queue instance, and returns a handle by which the new queue + * can be referenced. + * + * Internally, within the FreeRTOS implementation, queues use two blocks of + * memory. The first block is used to hold the queue's data structures. The + * second block is used to hold items placed into the queue. If a queue is + * created using xQueueCreate() then both blocks of memory are automatically + * dynamically allocated inside the xQueueCreate() function. (see + * http://www.freertos.org/a00111.html). If a queue is created using + * xQueueCreateStatic() then the application writer must provide the memory that + * will get used by the queue. xQueueCreateStatic() therefore allows a queue to + * be created without using any dynamic memory allocation. + * + * http://www.FreeRTOS.org/Embedded-RTOS-Queues.html + * + * @param uxQueueLength The maximum number of items that the queue can contain. + * + * @param uxItemSize The number of bytes each item in the queue will require. + * Items are queued by copy, not by reference, so this is the number of bytes + * that will be copied for each posted item. Each item on the queue must be + * the same size. + * + * @param pucQueueStorageBuffer If uxItemSize is not zero then + * pucQueueStorageBuffer must point to a uint8_t array that is at least large + * enough to hold the maximum number of items that can be in the queue at any + * one time - which is ( uxQueueLength * uxItemsSize ) bytes. If uxItemSize is + * zero then pucQueueStorageBuffer can be NULL. + * + * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which + * will be used to hold the queue's data structure. + * + * @return If the queue is created then a handle to the created queue is + * returned. If pxQueueBuffer is NULL then NULL is returned. + * + * Example usage: +
+ struct AMessage
+ {
+	char ucMessageID;
+	char ucData[ 20 ];
+ };
+
+ #define QUEUE_LENGTH 10
+ #define ITEM_SIZE sizeof( uint32_t )
+
+ // xQueueBuffer will hold the queue structure.
+ StaticQueue_t xQueueBuffer;
+
+ // ucQueueStorage will hold the items posted to the queue.  Must be at least
+ // [(queue length) * ( queue item size)] bytes long.
+ uint8_t ucQueueStorage[ QUEUE_LENGTH * ITEM_SIZE ];
+
+ void vATask( void *pvParameters )
+ {
+ QueueHandle_t xQueue1;
+
+	// Create a queue capable of containing 10 uint32_t values.
+	xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold.
+							ITEM_SIZE	  // The size of each item in the queue
+							&( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue.
+							&xQueueBuffer ); // The buffer that will hold the queue structure.
+
+	// The queue is guaranteed to be created successfully as no dynamic memory
+	// allocation is used.  Therefore xQueue1 is now a handle to a valid queue.
+
+	// ... Rest of task code.
+ }
+ 
+ * \defgroup xQueueCreateStatic xQueueCreateStatic + * \ingroup QueueManagement + */ +#if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * queue. h @@ -1479,7 +1567,9 @@ BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTi * these functions directly. */ QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION; +QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION; void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION; /* @@ -1538,10 +1628,22 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION #endif /* - * Generic version of the queue creation function, which is in turn called by - * any queue, semaphore or mutex creation function or macro. + * Generic version of the function used to creaet a queue using dynamic memory + * allocation. This is called by other functions and macros that create other + * RTOS objects that use the queue structure as their base. + */ +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +#endif + +/* + * Generic version of the function used to creaet a queue using dynamic memory + * allocation. This is called by other functions and macros that create other + * RTOS objects that use the queue structure as their base. */ -QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +#if( configSUPPORT_STATIC_ALLOCATION == 1 ) + QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION; +#endif /* * Queue sets provide a mechanism to allow a task to block (pend) on a read diff --git a/tools/sdk/include/freertos/freertos/semphr.h b/tools/sdk/include/freertos/freertos/semphr.h index 5866ab1ec..6343d0190 100644 --- a/tools/sdk/include/freertos/freertos/semphr.h +++ b/tools/sdk/include/freertos/freertos/semphr.h @@ -128,19 +128,37 @@ typedef QueueHandle_t SemaphoreHandle_t; * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary * \ingroup Semaphores */ -#define vSemaphoreCreateBinary( xSemaphore ) \ - { \ - ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ - if( ( xSemaphore ) != NULL ) \ - { \ - ( void ) xSemaphoreGive( ( xSemaphore ) ); \ - } \ - } +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + #define vSemaphoreCreateBinary( xSemaphore ) \ + { \ + ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \ + if( ( xSemaphore ) != NULL ) \ + { \ + ( void ) xSemaphoreGive( ( xSemaphore ) ); \ + } \ + } +#endif /** * semphr. h *
SemaphoreHandle_t xSemaphoreCreateBinary( void )
* + * Creates a new binary semaphore instance, and returns a handle by which the + * new semaphore can be referenced. + * + * In many usage scenarios it is faster and more memory efficient to use a + * direct to task notification in place of a binary semaphore! + * http://www.freertos.org/RTOS-task-notifications.html + * + * Internally, within the FreeRTOS implementation, binary semaphores use a block + * of memory, in which the semaphore structure is stored. If a binary semaphore + * is created using xSemaphoreCreateBinary() then the required memory is + * automatically dynamically allocated inside the xSemaphoreCreateBinary() + * function. (see http://www.freertos.org/a00111.html). If a binary semaphore + * is created using xSemaphoreCreateBinaryStatic() then the application writer + * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a + * binary semaphore to be created without using any dynamic memory allocation. + * * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this * xSemaphoreCreateBinary() function. Note that binary semaphores created using * the vSemaphoreCreateBinary() macro are created in a state such that the @@ -182,7 +200,68 @@ typedef QueueHandle_t SemaphoreHandle_t; * \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary * \ingroup Semaphores */ -#define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ) +#endif + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer )
+ * + * Creates a new binary semaphore instance, and returns a handle by which the + * new semaphore can be referenced. + * + * NOTE: In many usage scenarios it is faster and more memory efficient to use a + * direct to task notification in place of a binary semaphore! + * http://www.freertos.org/RTOS-task-notifications.html + * + * Internally, within the FreeRTOS implementation, binary semaphores use a block + * of memory, in which the semaphore structure is stored. If a binary semaphore + * is created using xSemaphoreCreateBinary() then the required memory is + * automatically dynamically allocated inside the xSemaphoreCreateBinary() + * function. (see http://www.freertos.org/a00111.html). If a binary semaphore + * is created using xSemaphoreCreateBinaryStatic() then the application writer + * must provide the memory. xSemaphoreCreateBinaryStatic() therefore allows a + * binary semaphore to be created without using any dynamic memory allocation. + * + * This type of semaphore can be used for pure synchronisation between tasks or + * between an interrupt and a task. The semaphore need not be given back once + * obtained, so one task/interrupt can continuously 'give' the semaphore while + * another continuously 'takes' the semaphore. For this reason this type of + * semaphore does not use a priority inheritance mechanism. For an alternative + * that does use priority inheritance see xSemaphoreCreateMutex(). + * + * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, + * which will then be used to hold the semaphore's data structure, removing the + * need for the memory to be allocated dynamically. + * + * @return If the semaphore is created then a handle to the created semaphore is + * returned. If pxSemaphoreBuffer is NULL then NULL is returned. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore = NULL;
+ StaticSemaphore_t xSemaphoreBuffer;
+
+ void vATask( void * pvParameters )
+ {
+    // Semaphore cannot be used before a call to xSemaphoreCreateBinary().
+    // The semaphore's data structures will be placed in the xSemaphoreBuffer
+    // variable, the address of which is passed into the function.  The
+    // function's parameter is not NULL, so the function will not attempt any
+    // dynamic memory allocation, and therefore the function will not return
+    // return NULL.
+    xSemaphore = xSemaphoreCreateBinary( &xSemaphoreBuffer );
+
+    // Rest of task code goes here.
+ }
+ 
+ * \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic + * \ingroup Semaphores + */ +#if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #define xSemaphoreCreateBinaryStatic( pxStaticSemaphore ) xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * semphr. h @@ -652,9 +731,18 @@ typedef QueueHandle_t SemaphoreHandle_t; * Macro that implements a mutex semaphore by using the existing queue * mechanism. * - * Mutexes created using this macro can be accessed using the xSemaphoreTake() + * Internally, within the FreeRTOS implementation, mutex semaphores use a block + * of memory, in which the mutex structure is stored. If a mutex is created + * using xSemaphoreCreateMutex() then the required memory is automatically + * dynamically allocated inside the xSemaphoreCreateMutex() function. (see + * http://www.freertos.org/a00111.html). If a mutex is created using + * xSemaphoreCreateMutexStatic() then the application writer must provided the + * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created + * without using any dynamic memory allocation. + * + * Mutexes created using this function can be accessed using the xSemaphoreTake() * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and - * xSemaphoreGiveRecursive() macros should not be used. + * xSemaphoreGiveRecursive() macros must not be used. * * This type of semaphore uses a priority inheritance mechanism so a task * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the @@ -667,8 +755,9 @@ typedef QueueHandle_t SemaphoreHandle_t; * semaphore and another always 'takes' the semaphore) and from within interrupt * service routines. * - * @return xSemaphore Handle to the created mutex semaphore. Should be of type - * SemaphoreHandle_t. + * @return If the mutex was successfully created then a handle to the created + * semaphore is returned. If there was not enough heap to allocate the mutex + * data structures then NULL is returned. * * Example usage:
@@ -690,19 +779,93 @@ typedef QueueHandle_t SemaphoreHandle_t;
  * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex
  * \ingroup Semaphores
  */
-#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )
+#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
+	#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )
+#endif
+
+/**
+ * semphr. h
+ * 
SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer )
+ * + * Creates a new mutex type semaphore instance, and returns a handle by which + * the new mutex can be referenced. + * + * Internally, within the FreeRTOS implementation, mutex semaphores use a block + * of memory, in which the mutex structure is stored. If a mutex is created + * using xSemaphoreCreateMutex() then the required memory is automatically + * dynamically allocated inside the xSemaphoreCreateMutex() function. (see + * http://www.freertos.org/a00111.html). If a mutex is created using + * xSemaphoreCreateMutexStatic() then the application writer must provided the + * memory. xSemaphoreCreateMutexStatic() therefore allows a mutex to be created + * without using any dynamic memory allocation. + * + * Mutexes created using this function can be accessed using the xSemaphoreTake() + * and xSemaphoreGive() macros. The xSemaphoreTakeRecursive() and + * xSemaphoreGiveRecursive() macros must not be used. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. + * + * Mutex type semaphores cannot be used from within interrupt service routines. + * + * See xSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt + * service routines. + * + * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, + * which will be used to hold the mutex's data structure, removing the need for + * the memory to be allocated dynamically. + * + * @return If the mutex was successfully created then a handle to the created + * mutex is returned. If pxMutexBuffer was NULL then NULL is returned. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+ StaticSemaphore_t xMutexBuffer;
+
+ void vATask( void * pvParameters )
+ {
+    // A mutex cannot be used before it has been created.  xMutexBuffer is
+    // into xSemaphoreCreateMutexStatic() so no dynamic memory allocation is
+    // attempted.
+    xSemaphore = xSemaphoreCreateMutexStatic( &xMutexBuffer );
+
+    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
+    // so there is no need to check it.
+ }
+ 
+ * \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic + * \ingroup Semaphores + */ + #if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #define xSemaphoreCreateMutexStatic( pxMutexBuffer ) xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * semphr. h *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )
* - * Macro that implements a recursive mutex by using the existing queue - * mechanism. + * Creates a new recursive mutex type semaphore instance, and returns a handle + * by which the new recursive mutex can be referenced. + * + * Internally, within the FreeRTOS implementation, recursive mutexs use a block + * of memory, in which the mutex structure is stored. If a recursive mutex is + * created using xSemaphoreCreateRecursiveMutex() then the required memory is + * automatically dynamically allocated inside the + * xSemaphoreCreateRecursiveMutex() function. (see + * http://www.freertos.org/a00111.html). If a recursive mutex is created using + * xSemaphoreCreateRecursiveMutexStatic() then the application writer must + * provide the memory that will get used by the mutex. + * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to + * be created without using any dynamic memory allocation. * * Mutexes created using this macro can be accessed using the * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The - * xSemaphoreTake() and xSemaphoreGive() macros should not be used. + * xSemaphoreTake() and xSemaphoreGive() macros must not be used. * * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex * doesn't become available again until the owner has called @@ -745,14 +908,104 @@ typedef QueueHandle_t SemaphoreHandle_t; * \defgroup vSemaphoreCreateMutex vSemaphoreCreateMutex * \ingroup Semaphores */ -#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) +#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) + #define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX ) +#endif + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer )
+ * + * Creates a new recursive mutex type semaphore instance, and returns a handle + * by which the new recursive mutex can be referenced. + * + * Internally, within the FreeRTOS implementation, recursive mutexs use a block + * of memory, in which the mutex structure is stored. If a recursive mutex is + * created using xSemaphoreCreateRecursiveMutex() then the required memory is + * automatically dynamically allocated inside the + * xSemaphoreCreateRecursiveMutex() function. (see + * http://www.freertos.org/a00111.html). If a recursive mutex is created using + * xSemaphoreCreateRecursiveMutexStatic() then the application writer must + * provide the memory that will get used by the mutex. + * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to + * be created without using any dynamic memory allocation. + * + * Mutexes created using this macro can be accessed using the + * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros. The + * xSemaphoreTake() and xSemaphoreGive() macros must not be used. + * + * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex + * doesn't become available again until the owner has called + * xSemaphoreGiveRecursive() for each successful 'take' request. For example, + * if a task successfully 'takes' the same mutex 5 times then the mutex will + * not be available to any other task until it has also 'given' the mutex back + * exactly five times. + * + * This type of semaphore uses a priority inheritance mechanism so a task + * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the + * semaphore it is no longer required. + * + * Mutex type semaphores cannot be used from within interrupt service routines. + * + * See xSemaphoreCreateBinary() for an alternative implementation that can be + * used for pure synchronisation (where one task or interrupt always 'gives' the + * semaphore and another always 'takes' the semaphore) and from within interrupt + * service routines. + * + * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t, + * which will then be used to hold the recursive mutex's data structure, + * removing the need for the memory to be allocated dynamically. + * + * @return If the recursive mutex was successfully created then a handle to the + * created recursive mutex is returned. If pxMutexBuffer was NULL then NULL is + * returned. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+ StaticSemaphore_t xMutexBuffer;
+
+ void vATask( void * pvParameters )
+ {
+    // A recursive semaphore cannot be used before it is created.  Here a
+    // recursive mutex is created using xSemaphoreCreateRecursiveMutexStatic().
+    // The address of xMutexBuffer is passed into the function, and will hold
+    // the mutexes data structures - so no dynamic memory allocation will be
+    // attempted.
+    xSemaphore = xSemaphoreCreateRecursiveMutexStatic( &xMutexBuffer );
+
+    // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,
+    // so there is no need to check it.
+ }
+ 
+ * \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic + * \ingroup Semaphores + */ +#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) ) + #define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * semphr. h *
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount )
* - * Macro that creates a counting semaphore by using the existing - * queue mechanism. + * Creates a new counting semaphore instance, and returns a handle by which the + * new counting semaphore can be referenced. + * + * In many usage scenarios it is faster and more memory efficient to use a + * direct to task notification in place of a counting semaphore! + * http://www.freertos.org/RTOS-task-notifications.html + * + * Internally, within the FreeRTOS implementation, counting semaphores use a + * block of memory, in which the counting semaphore structure is stored. If a + * counting semaphore is created using xSemaphoreCreateCounting() then the + * required memory is automatically dynamically allocated inside the + * xSemaphoreCreateCounting() function. (see + * http://www.freertos.org/a00111.html). If a counting semaphore is created + * using xSemaphoreCreateCountingStatic() then the application writer can + * instead optionally provide the memory that will get used by the counting + * semaphore. xSemaphoreCreateCountingStatic() therefore allows a counting + * semaphore to be created without using any dynamic memory allocation. * * Counting semaphores are typically used for two things: * @@ -808,7 +1061,94 @@ typedef QueueHandle_t SemaphoreHandle_t; * \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting * \ingroup Semaphores */ -#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) ) +#endif + +/** + * semphr. h + *
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer )
+ * + * Creates a new counting semaphore instance, and returns a handle by which the + * new counting semaphore can be referenced. + * + * In many usage scenarios it is faster and more memory efficient to use a + * direct to task notification in place of a counting semaphore! + * http://www.freertos.org/RTOS-task-notifications.html + * + * Internally, within the FreeRTOS implementation, counting semaphores use a + * block of memory, in which the counting semaphore structure is stored. If a + * counting semaphore is created using xSemaphoreCreateCounting() then the + * required memory is automatically dynamically allocated inside the + * xSemaphoreCreateCounting() function. (see + * http://www.freertos.org/a00111.html). If a counting semaphore is created + * using xSemaphoreCreateCountingStatic() then the application writer must + * provide the memory. xSemaphoreCreateCountingStatic() therefore allows a + * counting semaphore to be created without using any dynamic memory allocation. + * + * Counting semaphores are typically used for two things: + * + * 1) Counting events. + * + * In this usage scenario an event handler will 'give' a semaphore each time + * an event occurs (incrementing the semaphore count value), and a handler + * task will 'take' a semaphore each time it processes an event + * (decrementing the semaphore count value). The count value is therefore + * the difference between the number of events that have occurred and the + * number that have been processed. In this case it is desirable for the + * initial count value to be zero. + * + * 2) Resource management. + * + * In this usage scenario the count value indicates the number of resources + * available. To obtain control of a resource a task must first obtain a + * semaphore - decrementing the semaphore count value. When the count value + * reaches zero there are no free resources. When a task finishes with the + * resource it 'gives' the semaphore back - incrementing the semaphore count + * value. In this case it is desirable for the initial count value to be + * equal to the maximum count value, indicating that all resources are free. + * + * @param uxMaxCount The maximum count value that can be reached. When the + * semaphore reaches this value it can no longer be 'given'. + * + * @param uxInitialCount The count value assigned to the semaphore when it is + * created. + * + * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t, + * which will then be used to hold the semaphore's data structure, removing the + * need for the memory to be allocated dynamically. + * + * @return If the counting semaphore was successfully created then a handle to + * the created counting semaphore is returned. If pxSemaphoreBuffer was NULL + * then NULL is returned. + * + * Example usage: +
+ SemaphoreHandle_t xSemaphore;
+ StaticSemaphore_t xSemaphoreBuffer;
+
+ void vATask( void * pvParameters )
+ {
+ SemaphoreHandle_t xSemaphore = NULL;
+
+    // Counting semaphore cannot be used before they have been created.  Create
+    // a counting semaphore using xSemaphoreCreateCountingStatic().  The max
+    // value to which the semaphore can count is 10, and the initial value
+    // assigned to the count will be 0.  The address of xSemaphoreBuffer is
+    // passed in and will be used to hold the semaphore structure, so no dynamic
+    // memory allocation will be used.
+    xSemaphore = xSemaphoreCreateCounting( 10, 0, &xSemaphoreBuffer );
+
+    // No memory allocation was attempted so xSemaphore cannot be NULL, so there
+    // is no need to check its value.
+ }
+ 
+ * \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic + * \ingroup Semaphores + */ +#if( configSUPPORT_STATIC_ALLOCATION == 1 ) + #define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer ) xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * semphr. h diff --git a/tools/sdk/include/freertos/freertos/task.h b/tools/sdk/include/freertos/freertos/task.h index 9f3f3d659..f7b9181fc 100644 --- a/tools/sdk/include/freertos/freertos/task.h +++ b/tools/sdk/include/freertos/freertos/task.h @@ -177,6 +177,7 @@ typedef struct xTASK_STATUS UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */ UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */ uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */ + StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */ uint16_t usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */ } TaskStatus_t; @@ -281,8 +282,19 @@ is used in assert() statements. */ );
* * Create a new task and add it to the list of tasks that are ready to run. - * On multicore environments, this will give no specific affinity to the task. - * Use xTaskCreatePinnedToCore to give affinity. + * + * Internally, within the FreeRTOS implementation, tasks use two blocks of + * memory. The first block is used to hold the task's data structures. The + * second block is used by the task as its stack. If a task is created using + * xTaskCreate() then both blocks of memory are automatically dynamically + * allocated inside the xTaskCreate() function. (see + * http://www.freertos.org/a00111.html). If a task is created using + * xTaskCreateStatic() then the application writer must provide the required + * memory. xTaskCreateStatic() therefore allows a task to be created without + * using any dynamic memory allocation. + * + * See xTaskCreateStatic() for a version that does not use any dynamic memory + * allocation. * * xTaskCreate() can only be used to create a task that has unrestricted * access to the entire microcontroller memory map. Systems that include MPU @@ -350,8 +362,139 @@ is used in assert() statements. */ * \defgroup xTaskCreate xTaskCreate * \ingroup Tasks */ -#define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ), tskNO_AFFINITY ) -#define xTaskCreatePinnedToCore( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask, xCoreID ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ), xCoreID ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) + BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pxTaskCode, + const char * const pcName, + const uint16_t usStackDepth, + void * const pvParameters, + UBaseType_t uxPriority, + TaskHandle_t * const pxCreatedTask, + const BaseType_t xCoreID); + +#define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskCreatePinnedToCore( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), tskNO_AFFINITY ) +#endif + +/** + * task. h + *
+ TaskHandle_t xTaskCreateStatic( TaskFunction_t pvTaskCode,
+								 const char * const pcName,
+								 uint32_t ulStackDepth,
+								 void *pvParameters,
+								 UBaseType_t uxPriority,
+								 StackType_t *pxStackBuffer,
+								 StaticTask_t *pxTaskBuffer,
+                                 const BaseType_t xCoreID );
+ + * + * Create a new task and add it to the list of tasks that are ready to run. + * + * Internally, within the FreeRTOS implementation, tasks use two blocks of + * memory. The first block is used to hold the task's data structures. The + * second block is used by the task as its stack. If a task is created using + * xTaskCreate() then both blocks of memory are automatically dynamically + * allocated inside the xTaskCreate() function. (see + * http://www.freertos.org/a00111.html). If a task is created using + * xTaskCreateStatic() then the application writer must provide the required + * memory. xTaskCreateStatic() therefore allows a task to be created without + * using any dynamic memory allocation. + * + * @param pvTaskCode Pointer to the task entry function. Tasks + * must be implemented to never return (i.e. continuous loop). + * + * @param pcName A descriptive name for the task. This is mainly used to + * facilitate debugging. The maximum length of the string is defined by + * configMAX_TASK_NAME_LEN in FreeRTOSConfig.h. + * + * @param ulStackDepth The size of the task stack specified as the number of + * variables the stack can hold - not the number of bytes. For example, if + * the stack is 32-bits wide and ulStackDepth is defined as 100 then 400 bytes + * will be allocated for stack storage. + * + * @param pvParameters Pointer that will be used as the parameter for the task + * being created. + * + * @param uxPriority The priority at which the task will run. + * + * @param pxStackBuffer Must point to a StackType_t array that has at least + * ulStackDepth indexes - the array will then be used as the task's stack, + * removing the need for the stack to be allocated dynamically. + * + * @param pxTaskBuffer Must point to a variable of type StaticTask_t, which will + * then be used to hold the task's data structures, removing the need for the + * memory to be allocated dynamically. + * + * @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will + * be created and pdPASS is returned. If either pxStackBuffer or pxTaskBuffer + * are NULL then the task will not be created and + * errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY is returned. + * + * Example usage: +
+
+    // Dimensions the buffer that the task being created will use as its stack.
+    // NOTE:  This is the number of words the stack will hold, not the number of
+    // bytes.  For example, if each stack item is 32-bits, and this is set to 100,
+    // then 400 bytes (100 * 32-bits) will be allocated.
+    #define STACK_SIZE 200
+
+    // Structure that will hold the TCB of the task being created.
+    StaticTask_t xTaskBuffer;
+
+    // Buffer that the task being created will use as its stack.  Note this is
+    // an array of StackType_t variables.  The size of StackType_t is dependent on
+    // the RTOS port.
+    StackType_t xStack[ STACK_SIZE ];
+
+    // Function that implements the task being created.
+    void vTaskCode( void * pvParameters )
+    {
+        // The parameter value is expected to be 1 as 1 is passed in the
+        // pvParameters value in the call to xTaskCreateStatic().
+        configASSERT( ( uint32_t ) pvParameters == 1UL );
+
+        for( ;; )
+        {
+            // Task code goes here.
+        }
+    }
+
+    // Function that creates a task.
+    void vOtherFunction( void )
+    {
+        TaskHandle_t xHandle = NULL;
+
+        // Create the task without using any dynamic memory allocation.
+        xHandle = xTaskCreateStatic(
+                      vTaskCode,       // Function that implements the task.
+                      "NAME",          // Text name for the task.
+                      STACK_SIZE,      // Stack size in words, not bytes.
+                      ( void * ) 1,    // Parameter passed into the task.
+                      tskIDLE_PRIORITY,// Priority at which the task is created.
+                      xStack,          // Array to use as the task's stack.
+                      &xTaskBuffer );  // Variable to hold the task's data structure.
+
+        // puxStackBuffer and pxTaskBuffer were not NULL, so the task will have
+        // been created, and xHandle will be the task's handle.  Use the handle
+        // to suspend the task.
+        vTaskSuspend( xHandle );
+    }
+   
+ * \defgroup xTaskCreateStatic xTaskCreateStatic + * \ingroup Tasks + */ +#if( configSUPPORT_STATIC_ALLOCATION == 1 ) + TaskHandle_t xTaskCreateStaticPinnedToCore( TaskFunction_t pxTaskCode, + const char * const pcName, + const uint32_t ulStackDepth, + void * const pvParameters, + UBaseType_t uxPriority, + StackType_t * const puxStackBuffer, + StaticTask_t * const pxTaskBuffer, + const BaseType_t xCoreID ); + +#define xTaskCreateStatic( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxStackBuffer, pxTaskBuffer ) xTaskCreateStaticPinnedToCore( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxStackBuffer ), ( pxTaskBuffer ), tskNO_AFFINITY ) +#endif /* configSUPPORT_STATIC_ALLOCATION */ /** * task. h @@ -420,7 +563,9 @@ TaskHandle_t xHandle; * \defgroup xTaskCreateRestricted xTaskCreateRestricted * \ingroup Tasks */ -#define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) ) +#if( portUSING_MPU_WRAPPERS == 1 ) + BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION; +#endif /** * task. h @@ -1933,6 +2078,17 @@ TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION; */ TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION; + + +/* + * Return the handle of the task running on a certain CPU. Because of + * the nature of SMP processing, there is no guarantee that this + * value will still be valid on return and should only be used for + * debugging purposes. + */ +TaskHandle_t xTaskGetCurrentTaskHandleForCPU( BaseType_t cpuid ); + + /* * Capture the current time status for future reference. */ @@ -1968,12 +2124,6 @@ void vTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTIO */ BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION; -/* - * Generic version of the task creation function which is in turn called by the - * xTaskCreate() and xTaskCreateRestricted() macros. - */ -BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, StackType_t * const puxStackBuffer, const MemoryRegion_t * const xRegions, const BaseType_t xCoreID) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ - /* * Get the uxTCBNumber assigned to the task referenced by the xTask parameter. */ diff --git a/tools/sdk/include/freertos/freertos/xtensa_context.h b/tools/sdk/include/freertos/freertos/xtensa_context.h index 3167c8472..b748a0d1a 100644 --- a/tools/sdk/include/freertos/freertos/xtensa_context.h +++ b/tools/sdk/include/freertos/freertos/xtensa_context.h @@ -322,12 +322,7 @@ STRUCT_END(XtSolFrame) #ifdef __ASSEMBLER__ .macro getcoreid reg rsr.prid \reg - bbci \reg,1,1f - movi \reg,1 - j 2f -1: - movi \reg,0 -2: + extui \reg,\reg,13,1 .endm #endif diff --git a/tools/sdk/include/lwip/lwip/api.h b/tools/sdk/include/lwip/lwip/api.h index 985eb76d4..5b6a21ecf 100755 --- a/tools/sdk/include/lwip/lwip/api.h +++ b/tools/sdk/include/lwip/lwip/api.h @@ -185,10 +185,6 @@ struct netconn { /** sem that is used to synchronously execute functions in the core context */ sys_sem_t op_completed; -#ifdef LWIP_ESP8266 - sys_sem_t snd_op_completed; //only for snd semphore -#endif - #endif /** mbox where received packets are stored until they are fetched diff --git a/tools/sdk/include/lwip/lwip/dhcp.h b/tools/sdk/include/lwip/lwip/dhcp.h index 2d8926eca..76ce1543f 100755 --- a/tools/sdk/include/lwip/lwip/dhcp.h +++ b/tools/sdk/include/lwip/lwip/dhcp.h @@ -249,7 +249,7 @@ void dhcp_fine_tmr(void); #define DHCP_OPTION_NTP 42 #define DHCP_OPTION_END 255 -#ifdef LWIP_ESP8266 +#if ESP_LWIP /**add options for support more router by liuHan**/ #define DHCP_OPTION_DOMAIN_NAME 15 #define DHCP_OPTION_PRD 31 diff --git a/tools/sdk/include/lwip/lwip/dns.h b/tools/sdk/include/lwip/lwip/dns.h index 1ceed0d88..5ef12e56c 100755 --- a/tools/sdk/include/lwip/lwip/dns.h +++ b/tools/sdk/include/lwip/lwip/dns.h @@ -36,7 +36,7 @@ #include "lwip/opt.h" -#ifdef LWIP_ESP8266 +#if ESP_DNS #include "lwip/err.h" #endif diff --git a/tools/sdk/include/lwip/lwip/err.h b/tools/sdk/include/lwip/lwip/err.h index 26fb91db9..a766ee186 100755 --- a/tools/sdk/include/lwip/lwip/err.h +++ b/tools/sdk/include/lwip/lwip/err.h @@ -60,7 +60,7 @@ typedef s8_t err_t; #define ERR_USE -8 /* Address in use. */ -#ifdef LWIP_ESP8266 +#if ESP_LWIP #define ERR_ALREADY -9 /* Already connected. */ #define ERR_ISCONN -10 /* Conn already established.*/ #define ERR_IS_FATAL(e) ((e) < ERR_ISCONN) diff --git a/tools/sdk/include/lwip/lwip/mem.h b/tools/sdk/include/lwip/lwip/mem.h index ca76f6632..a90d07256 100755 --- a/tools/sdk/include/lwip/lwip/mem.h +++ b/tools/sdk/include/lwip/lwip/mem.h @@ -51,8 +51,6 @@ typedef size_t mem_size_t; * allow these defines to be overridden. */ -#ifndef MEMLEAK_DEBUG - #ifndef mem_free #define mem_free free #endif @@ -63,41 +61,6 @@ typedef size_t mem_size_t; #define mem_calloc calloc #endif -/* DYC_NEED_TO_DO_LATER -#ifndef mem_realloc -#define mem_realloc -#endif -#ifndef mem_zalloc -#define mem_zalloc -#endif -*/ - -#else -/* -#ifndef mem_free -#define mem_free(s) \ - do{\ - const char *file = mem_debug_file;\ - vPortFree(s, file, __LINE__);\ - }while(0) -#endif -#ifndef mem_malloc -#define mem_malloc(s) ({const char *file = mem_debug_file; pvPortMalloc(s, file, __LINE__);}) -#endif -#ifndef mem_calloc -#define mem_calloc(s) ({const char *file = mem_debug_file; pvPortCalloc(s, file, __LINE__);}) -#endif -#ifndef mem_realloc -#define mem_realloc(p, s) ({const char *file = mem_debug_file; pvPortRealloc(p, s, file, __LINE__);}) -#endif -#ifndef mem_zalloc -#define mem_zalloc(s) ({const char *file = mem_debug_file; pvPortZalloc(s, file, __LINE__);}) -#endif -*/ -#endif - - - /* Since there is no C library allocation function to shrink memory without moving it, define this to nothing. */ #ifndef mem_trim diff --git a/tools/sdk/include/lwip/lwip/netif.h b/tools/sdk/include/lwip/lwip/netif.h index 99066a5a1..666f77eb9 100755 --- a/tools/sdk/include/lwip/lwip/netif.h +++ b/tools/sdk/include/lwip/lwip/netif.h @@ -177,7 +177,7 @@ typedef err_t (*netif_mld_mac_filter_fn)(struct netif *netif, #endif /* LWIP_IPV6 && LWIP_IPV6_MLD */ -#ifdef LWIP_ESP8266 +#if ESP_DHCP /*add DHCP event processing by LiuHan*/ typedef void (*dhcp_event_fn)(void); #endif @@ -190,7 +190,7 @@ struct netif { /** pointer to next in linked list */ struct netif *next; -#ifdef LWIP_ESP8266 +#if ESP_LWIP //ip_addr_t is changed by marco IPV4, IPV6 ip_addr_t link_local_addr; #endif @@ -248,7 +248,7 @@ struct netif { /** the DHCP client state information for this netif */ struct dhcp *dhcp; -#ifdef LWIP_ESP8266 +#if ESP_LWIP struct udp_pcb *dhcps_pcb; dhcp_event_fn dhcp_event; #endif diff --git a/tools/sdk/include/lwip/lwip/opt.h b/tools/sdk/include/lwip/lwip/opt.h index 76fff8805..51d340e00 100755 --- a/tools/sdk/include/lwip/lwip/opt.h +++ b/tools/sdk/include/lwip/lwip/opt.h @@ -986,7 +986,7 @@ * (2 * TCP_MSS) for things to work well */ #ifndef TCP_WND -#define TCP_WND (4 * TCP_MSS) +#define TCP_WND(pcb) (4 * TCP_MSS) #endif /** @@ -1040,7 +1040,7 @@ * To achieve good performance, this should be at least 2 * TCP_MSS. */ #ifndef TCP_SND_BUF -#define TCP_SND_BUF (2 * TCP_MSS) +#define TCP_SND_BUF(pcb) (2 * TCP_MSS) #endif /** @@ -1048,7 +1048,7 @@ * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */ #ifndef TCP_SND_QUEUELEN -#define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) +#define TCP_SND_QUEUELEN(pcb) ((4 * (TCP_SND_BUF((pcb))) + (TCP_MSS - 1))/(TCP_MSS)) #endif /** @@ -1057,7 +1057,7 @@ * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT). */ #ifndef TCP_SNDLOWAT -#define TCP_SNDLOWAT LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1) +#define TCP_SNDLOWAT(pcb) LWIP_MIN(LWIP_MAX(((TCP_SND_BUF((pcb)))/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF((pcb))) - 1) #endif /** @@ -1066,7 +1066,7 @@ * this number, select returns writable (combined with TCP_SNDLOWAT). */ #ifndef TCP_SNDQUEUELOWAT -#define TCP_SNDQUEUELOWAT LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5) +#define TCP_SNDQUEUELOWAT(pcb) LWIP_MAX(((TCP_SND_QUEUELEN((pcb)))/2), 5) #endif /** @@ -1134,7 +1134,7 @@ * explicit window update */ #ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4)) +#define TCP_WND_UPDATE_THRESHOLD(pcb) LWIP_MIN((TCP_WND((pcb)) / 4), (TCP_MSS * 4)) #endif /** @@ -3008,8 +3008,8 @@ #define LWIP_PERF 0 #endif -#ifndef THREAD_SAFE_DEBUG -#define THREAD_SAFE_DEBUG 0 +#ifndef ESP_THREAD_SAFE_DEBUG +#define ESP_THREAD_SAFE_DEBUG 0 #endif #endif /* LWIP_HDR_OPT_H */ diff --git a/tools/sdk/include/lwip/lwip/pbuf.h b/tools/sdk/include/lwip/lwip/pbuf.h index aaf5e294a..1834c4e04 100755 --- a/tools/sdk/include/lwip/lwip/pbuf.h +++ b/tools/sdk/include/lwip/lwip/pbuf.h @@ -137,7 +137,7 @@ struct pbuf { */ u16_t ref; -#ifdef LWIP_ESP8266 +#if ESP_LWIP void *eb; #endif }; diff --git a/tools/sdk/include/lwip/lwip/priv/api_msg.h b/tools/sdk/include/lwip/lwip/priv/api_msg.h index 329fa0de3..02d191a53 100755 --- a/tools/sdk/include/lwip/lwip/priv/api_msg.h +++ b/tools/sdk/include/lwip/lwip/priv/api_msg.h @@ -187,7 +187,7 @@ struct dns_api_msg { #endif /* LWIP_DNS */ #if LWIP_NETCONN_SEM_PER_THREAD -#ifdef LWIP_ESP8266 +#if ESP_THREAD_SAFE #define LWIP_NETCONN_THREAD_SEM_GET() sys_thread_sem_get() #define LWIP_NETCONN_THREAD_SEM_ALLOC() sys_thread_sem_init() #define LWIP_NETCONN_THREAD_SEM_FREE() sys_thread_sem_deinit() @@ -222,10 +222,6 @@ struct dns_api_msg { #define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0) #define TCPIP_APIMSG_ACK(m) do { NETCONN_SET_SAFE_ERR((m)->conn, (m)->err); sys_sem_signal(LWIP_API_MSG_SEM(m)); } while(0) -#ifdef LWIP_ESP8266 -#define TCPIP_APIMSG_ACK_SND(m) do { NETCONN_SET_SAFE_ERR((m)->conn, (m)->err); sys_sem_signal(LWIP_API_MSG_SND_SEM(m)); } while(0) -#endif - #endif /* LWIP_TCPIP_CORE_LOCKING */ void lwip_netconn_do_newconn (void *m); diff --git a/tools/sdk/include/lwip/lwip/priv/tcp_priv.h b/tools/sdk/include/lwip/lwip/priv/tcp_priv.h index b5261b445..0c498944b 100755 --- a/tools/sdk/include/lwip/lwip/priv/tcp_priv.h +++ b/tools/sdk/include/lwip/lwip/priv/tcp_priv.h @@ -92,7 +92,7 @@ err_t tcp_process_refused_data(struct tcp_pcb *pcb); ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ ((tpcb)->unsent->len >= (tpcb)->mss))) || \ - ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN)) \ + ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN(tpcb))) \ ) ? 1 : 0) #define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) diff --git a/tools/sdk/include/lwip/lwip/sockets.h b/tools/sdk/include/lwip/lwip/sockets.h index aafb3d5cf..d9622ea03 100755 --- a/tools/sdk/include/lwip/lwip/sockets.h +++ b/tools/sdk/include/lwip/lwip/sockets.h @@ -190,7 +190,6 @@ struct msghdr { #define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ #define SO_NO_CHECK 0x100a /* don't create UDP checksum */ - /* * Structure used for manipulating linger option. */ @@ -250,6 +249,11 @@ struct linger { #define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ #define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ #define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ +#if ESP_PER_SOC_TCP_WND +#define TCP_WINDOW 0x06 /* set pcb->per_soc_tcp_wnd */ +#define TCP_SNDBUF 0x07 /* set pcb->per_soc_tcp_snd_buf */ +#endif + #endif /* LWIP_TCP */ #if LWIP_IPV6 @@ -505,7 +509,7 @@ int lwip_fcntl(int s, int cmd, int val); #if LWIP_COMPAT_SOCKETS #if LWIP_COMPAT_SOCKETS != 2 -#if LWIP_THREAD_SAFE +#if ESP_THREAD_SAFE int lwip_accept_r(int s, struct sockaddr *addr, socklen_t *addrlen); int lwip_bind_r(int s, const struct sockaddr *name, socklen_t namelen); @@ -590,7 +594,7 @@ int lwip_fcntl_r(int s, int cmd, int val); #define fcntl(s,cmd,val) lwip_fcntl(s,cmd,val) #define ioctl(s,cmd,argp) lwip_ioctl(s,cmd,argp) #endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ -#endif /* LWIP_THREAD_SAFE */ +#endif /* ESP_THREAD_SAFE */ #endif /* LWIP_COMPAT_SOCKETS != 2 */ diff --git a/tools/sdk/include/lwip/lwip/tcp.h b/tools/sdk/include/lwip/lwip/tcp.h index d52040f99..6b8c4b6c4 100755 --- a/tools/sdk/include/lwip/lwip/tcp.h +++ b/tools/sdk/include/lwip/lwip/tcp.h @@ -129,14 +129,14 @@ typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err); #define RCV_WND_SCALE(pcb, wnd) (((wnd) >> (pcb)->rcv_scale)) #define SND_WND_SCALE(pcb, wnd) (((wnd) << (pcb)->snd_scale)) #define TCPWND16(x) ((u16_t)LWIP_MIN((x), 0xFFFF)) -#define TCP_WND_MAX(pcb) ((tcpwnd_size_t)(((pcb)->flags & TF_WND_SCALE) ? TCP_WND : TCPWND16(TCP_WND))) +#define TCP_WND_MAX(pcb) ((tcpwnd_size_t)(((pcb)->flags & TF_WND_SCALE) ? TCP_WND(pcb) : TCPWND16(TCP_WND(pcb)))) typedef u32_t tcpwnd_size_t; typedef u16_t tcpflags_t; #else #define RCV_WND_SCALE(pcb, wnd) (wnd) #define SND_WND_SCALE(pcb, wnd) (wnd) #define TCPWND16(x) (x) -#define TCP_WND_MAX(pcb) TCP_WND +#define TCP_WND_MAX(pcb) TCP_WND(pcb) typedef u16_t tcpwnd_size_t; typedef u8_t tcpflags_t; #endif @@ -236,6 +236,11 @@ struct tcp_pcb { u8_t dupacks; u32_t lastack; /* Highest acknowledged seqno. */ +#if ESP_PER_SOC_TCP_WND + tcpwnd_size_t per_soc_tcp_wnd; /* per tcp socket tcp window size */ + tcpwnd_size_t per_soc_tcp_snd_buf; /* per tcp socket tcp send buffer size */ +#endif + /* congestion avoidance/control variables */ tcpwnd_size_t cwnd; tcpwnd_size_t ssthresh; @@ -402,6 +407,10 @@ const char* tcp_debug_state_str(enum tcp_state s); /* for compatibility with older implementation */ #define tcp_new_ip6() tcp_new_ip_type(IPADDR_TYPE_V6) +#if ESP_PER_SOC_TCP_WND +#define PER_SOC_WND(pcb) (pcb->per_soc_wnd) +#endif + #ifdef __cplusplus } #endif diff --git a/tools/sdk/include/lwip/lwipopts.h b/tools/sdk/include/lwip/lwipopts.h index 29506c0b0..e0a6d4db3 100755 --- a/tools/sdk/include/lwip/lwipopts.h +++ b/tools/sdk/include/lwip/lwipopts.h @@ -37,7 +37,6 @@ #include "sdkconfig.h" /* Enable all Espressif-only options */ -#define LWIP_ESP8266 /* ----------------------------------------------- @@ -225,18 +224,21 @@ extern unsigned long os_random(void); * TCP_WND: The size of a TCP window. This must be at least * (2 * TCP_MSS) for things to work well */ -#define PERF 1 + +#define ESP_PER_SOC_TCP_WND 1 +#if ESP_PER_SOC_TCP_WND +#define TCP_WND_DEFAULT (4*TCP_MSS) +#define TCP_SND_BUF_DEFAULT (2*TCP_MSS) + +#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd) +#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf) +#else #ifdef PERF extern unsigned char misc_prof_get_tcpw(void); extern unsigned char misc_prof_get_tcp_snd_buf(void); -#define TCP_WND (misc_prof_get_tcpw()*TCP_MSS) -#define TCP_SND_BUF (misc_prof_get_tcp_snd_buf()*TCP_MSS) - -#else - -#define TCP_WND (4 * TCP_MSS) -#define TCP_SND_BUF (2 * TCP_MSS) - +#define TCP_WND(pcb) (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF(pcb) (misc_prof_get_tcp_snd_buf()*TCP_MSS) +#endif #endif @@ -507,14 +509,42 @@ extern unsigned char misc_prof_get_tcp_snd_buf(void); */ #define TCPIP_DEBUG LWIP_DBG_OFF +/* Enable all Espressif-only options */ + +#define ESP_LWIP 1 +#define ESP_PER_SOC_TCP_WND 1 +#define ESP_THREAD_SAFE 1 +#define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF +#define ESP_DHCP 1 +#define ESP_DNS 1 +#define ESP_IPV6_AUTOCONFIG 1 +#define ESP_PERF 0 +#define ESP_RANDOM_TCP_PORT 1 +#define ESP_IP4_ATON 1 +#define ESP_LIGHT_SLEEP 1 + + +#if ESP_PER_SOC_TCP_WND +#define TCP_WND_DEFAULT (4*TCP_MSS) +#define TCP_SND_BUF_DEFAULT (2*TCP_MSS) +#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd) +#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf) +#else +#if ESP_PERF +extern unsigned char misc_prof_get_tcpw(void); +extern unsigned char misc_prof_get_tcp_snd_buf(void); +#define TCP_WND(pcb) (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF(pcb) (misc_prof_get_tcp_snd_buf()*TCP_MSS) +#endif +#endif + /** * DHCP_DEBUG: Enable debugging in dhcp.c. */ #define DHCP_DEBUG LWIP_DBG_OFF #define LWIP_DEBUG 0 #define TCP_DEBUG LWIP_DBG_OFF -#define THREAD_SAFE_DEBUG LWIP_DBG_OFF -#define LWIP_THREAD_SAFE 1 +#define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF #define CHECKSUM_CHECK_UDP 0 #define CHECKSUM_CHECK_IP 0 diff --git a/tools/sdk/include/lwip/netif/wlanif.h b/tools/sdk/include/lwip/netif/wlanif.h index 7eb303eab..c6f7831b3 100755 --- a/tools/sdk/include/lwip/netif/wlanif.h +++ b/tools/sdk/include/lwip/netif/wlanif.h @@ -8,6 +8,8 @@ #include "esp_wifi.h" +#include "esp_wifi_internal.h" + #include "lwip/err.h" #ifdef __cplusplus @@ -18,8 +20,6 @@ err_t wlanif_init(struct netif *netif); void wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb); -bool ieee80211_output(wifi_interface_t wifi_if, void *buffer, u16_t len); - wifi_interface_t wifi_get_interface(void *dev); void netif_reg_addr_change_cb(void* cb); diff --git a/tools/sdk/include/lwip/port/lwipopts.h b/tools/sdk/include/lwip/port/lwipopts.h index 29506c0b0..e0a6d4db3 100755 --- a/tools/sdk/include/lwip/port/lwipopts.h +++ b/tools/sdk/include/lwip/port/lwipopts.h @@ -37,7 +37,6 @@ #include "sdkconfig.h" /* Enable all Espressif-only options */ -#define LWIP_ESP8266 /* ----------------------------------------------- @@ -225,18 +224,21 @@ extern unsigned long os_random(void); * TCP_WND: The size of a TCP window. This must be at least * (2 * TCP_MSS) for things to work well */ -#define PERF 1 + +#define ESP_PER_SOC_TCP_WND 1 +#if ESP_PER_SOC_TCP_WND +#define TCP_WND_DEFAULT (4*TCP_MSS) +#define TCP_SND_BUF_DEFAULT (2*TCP_MSS) + +#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd) +#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf) +#else #ifdef PERF extern unsigned char misc_prof_get_tcpw(void); extern unsigned char misc_prof_get_tcp_snd_buf(void); -#define TCP_WND (misc_prof_get_tcpw()*TCP_MSS) -#define TCP_SND_BUF (misc_prof_get_tcp_snd_buf()*TCP_MSS) - -#else - -#define TCP_WND (4 * TCP_MSS) -#define TCP_SND_BUF (2 * TCP_MSS) - +#define TCP_WND(pcb) (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF(pcb) (misc_prof_get_tcp_snd_buf()*TCP_MSS) +#endif #endif @@ -507,14 +509,42 @@ extern unsigned char misc_prof_get_tcp_snd_buf(void); */ #define TCPIP_DEBUG LWIP_DBG_OFF +/* Enable all Espressif-only options */ + +#define ESP_LWIP 1 +#define ESP_PER_SOC_TCP_WND 1 +#define ESP_THREAD_SAFE 1 +#define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF +#define ESP_DHCP 1 +#define ESP_DNS 1 +#define ESP_IPV6_AUTOCONFIG 1 +#define ESP_PERF 0 +#define ESP_RANDOM_TCP_PORT 1 +#define ESP_IP4_ATON 1 +#define ESP_LIGHT_SLEEP 1 + + +#if ESP_PER_SOC_TCP_WND +#define TCP_WND_DEFAULT (4*TCP_MSS) +#define TCP_SND_BUF_DEFAULT (2*TCP_MSS) +#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd) +#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf) +#else +#if ESP_PERF +extern unsigned char misc_prof_get_tcpw(void); +extern unsigned char misc_prof_get_tcp_snd_buf(void); +#define TCP_WND(pcb) (misc_prof_get_tcpw()*TCP_MSS) +#define TCP_SND_BUF(pcb) (misc_prof_get_tcp_snd_buf()*TCP_MSS) +#endif +#endif + /** * DHCP_DEBUG: Enable debugging in dhcp.c. */ #define DHCP_DEBUG LWIP_DBG_OFF #define LWIP_DEBUG 0 #define TCP_DEBUG LWIP_DBG_OFF -#define THREAD_SAFE_DEBUG LWIP_DBG_OFF -#define LWIP_THREAD_SAFE 1 +#define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF #define CHECKSUM_CHECK_UDP 0 #define CHECKSUM_CHECK_IP 0 diff --git a/tools/sdk/include/lwip/port/netif/wlanif.h b/tools/sdk/include/lwip/port/netif/wlanif.h index 7eb303eab..c6f7831b3 100755 --- a/tools/sdk/include/lwip/port/netif/wlanif.h +++ b/tools/sdk/include/lwip/port/netif/wlanif.h @@ -8,6 +8,8 @@ #include "esp_wifi.h" +#include "esp_wifi_internal.h" + #include "lwip/err.h" #ifdef __cplusplus @@ -18,8 +20,6 @@ err_t wlanif_init(struct netif *netif); void wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb); -bool ieee80211_output(wifi_interface_t wifi_if, void *buffer, u16_t len); - wifi_interface_t wifi_get_interface(void *dev); void netif_reg_addr_change_cb(void* cb); diff --git a/tools/sdk/include/tcpip_adapter/tcpip_adapter.h b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h index 5b0fc4c62..218325320 100644 --- a/tools/sdk/include/tcpip_adapter/tcpip_adapter.h +++ b/tools/sdk/include/tcpip_adapter/tcpip_adapter.h @@ -67,11 +67,15 @@ typedef struct { typedef dhcps_lease_t tcpip_adapter_dhcps_lease_t; #if CONFIG_DHCP_STA_LIST -struct station_list { - STAILQ_ENTRY(station_list) next; +typedef struct { uint8_t mac[6]; ip4_addr_t ip; -}; +}tcpip_adapter_sta_info_t; + +typedef struct { + tcpip_adapter_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM+2]; + uint8_t num; +}tcpip_adapter_sta_list_t; #endif #endif @@ -359,26 +363,14 @@ wifi_interface_t tcpip_adapter_get_wifi_if(void *dev); /** * @brief Get the station information list * - * @note This function should be called in AP mode and dhcp server started, and the list should - * be by using tcpip_adapter_free_sta_list. - * - * @param[in] sta_info: station information - * @param[out] sta_list: station information list + * @param[in] wifi_sta_list_t *wifi_sta_list: station list info + * @param[out] tcpip_adapter_sta_list_t *tcpip_sta_list: station list info * * @return ESP_OK * ESP_ERR_TCPIP_ADAPTER_NO_MEM * ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS */ -esp_err_t tcpip_adapter_get_sta_list(struct station_info *sta_info, struct station_list **sta_list); - -/** - * @brief Free the station information list's memory - * - * @param sta_list: station information list - * - * @return ESP_OK - */ -esp_err_t tcpip_adapter_free_sta_list(struct station_list *sta_list); +esp_err_t tcpip_adapter_get_sta_list(wifi_sta_list_t *wifi_sta_list, tcpip_adapter_sta_list_t *tcpip_sta_list); #ifdef __cplusplus } diff --git a/tools/sdk/include/vfs/esp_vfs.h b/tools/sdk/include/vfs/esp_vfs.h new file mode 100644 index 000000000..2d9e52c5a --- /dev/null +++ b/tools/sdk/include/vfs/esp_vfs.h @@ -0,0 +1,157 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __ESP_VFS_H__ +#define __ESP_VFS_H__ + +#include +#include +#include "esp_err.h" +#include +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Maximum length of path prefix (not including zero terminator) + */ +#define ESP_VFS_PATH_MAX 15 + +/** + * Default value of flags member in esp_vfs_t structure. + */ +#define ESP_VFS_FLAG_DEFAULT 0 + +/** + * Flag which indicates that FS needs extra context pointer in syscalls. + */ +#define ESP_VFS_FLAG_CONTEXT_PTR 1 + +/** + * @brief VFS definition structure + * + * This structure should be filled with pointers to corresponding + * FS driver functions. + * + * If the FS implementation has an option to use certain offset for + * all file descriptors, this value should be passed into fd_offset + * field. Otherwise VFS component will translate all FDs to start + * at zero offset. + * + * Some FS implementations expect some state (e.g. pointer to some structure) + * to be passed in as a first argument. For these implementations, + * populate the members of this structure which have _p suffix, set + * flags member to ESP_VFS_FLAG_CONTEXT_PTR and provide the context pointer + * to esp_vfs_register function. + * If the implementation doesn't use this extra argument, populate the + * members without _p suffix and set flags memeber to ESP_VFS_FLAG_DEFAULT. + * + * If the FS driver doesn't provide some of the functions, set corresponding + * members to NULL. + */ +typedef struct +{ + int fd_offset; + int flags; + union { + size_t (*write_p)(void* p, int fd, const void * data, size_t size); + size_t (*write)(int fd, const void * data, size_t size); + }; + union { + off_t (*lseek_p)(void* p, int fd, off_t size, int mode); + off_t (*lseek)(int fd, off_t size, int mode); + }; + union { + ssize_t (*read_p)(void* ctx, int fd, void * dst, size_t size); + ssize_t (*read)(int fd, void * dst, size_t size); + }; + union { + int (*open_p)(void* ctx, const char * path, int flags, int mode); + int (*open)(const char * path, int flags, int mode); + }; + union { + int (*close_p)(void* ctx, int fd); + int (*close)(int fd); + }; + union { + int (*fstat_p)(void* ctx, int fd, struct stat * st); + int (*fstat)(int fd, struct stat * st); + }; + union { + int (*stat_p)(void* ctx, const char * path, struct stat * st); + int (*stat)(const char * path, struct stat * st); + }; + union { + int (*link_p)(void* ctx, const char* n1, const char* n2); + int (*link)(const char* n1, const char* n2); + }; + union { + int (*unlink_p)(void* ctx, const char *path); + int (*unlink)(const char *path); + }; + union { + int (*rename_p)(void* ctx, const char *src, const char *dst); + int (*rename)(const char *src, const char *dst); + }; +} esp_vfs_t; + + +/** + * Register a virtual filesystem for given path prefix. + * + * @param base_path file path prefix associated with the filesystem. + * Must be a zero-terminated C string, up to ESP_VFS_PATH_MAX + * characters long, and at least 2 characters long. + * Name must start with a "/" and must not end with "/". + * For example, "/data" or "/dev/spi" are valid. + * These VFSes would then be called to handle file paths such as + * "/data/myfile.txt" or "/dev/spi/0". + * @param vfs Pointer to esp_vfs_t, a structure which maps syscalls to + * the filesystem driver functions. VFS component doesn't + * assume ownership of this pointer. + * @param ctx If vfs->flags has ESP_VFS_FLAG_CONTEXT_PTR set, a pointer + * which should be passed to VFS functions. Otherwise, NULL. + * + * @return ESP_OK if successful, ESP_ERR_NO_MEM if too many VFSes are + * registered. + */ +esp_err_t esp_vfs_register(const char* base_path, const esp_vfs_t* vfs, void* ctx); + + +/** + * These functions are to be used in newlib syscall table. They will be called by + * newlib when it needs to use any of the syscalls. + */ + +ssize_t esp_vfs_write(struct _reent *r, int fd, const void * data, size_t size); +off_t esp_vfs_lseek(struct _reent *r, int fd, off_t size, int mode); +ssize_t esp_vfs_read(struct _reent *r, int fd, void * dst, size_t size); +int esp_vfs_open(struct _reent *r, const char * path, int flags, int mode); +int esp_vfs_close(struct _reent *r, int fd); +int esp_vfs_fstat(struct _reent *r, int fd, struct stat * st); +int esp_vfs_stat(struct _reent *r, const char * path, struct stat * st); +int esp_vfs_link(struct _reent *r, const char* n1, const char* n2); +int esp_vfs_unlink(struct _reent *r, const char *path); +int esp_vfs_rename(struct _reent *r, const char *src, const char *dst); + + + +#ifdef __cplusplus +} // extern "C" +#endif + + +#endif //__ESP_VFS_H__ diff --git a/tools/sdk/include/vfs/esp_vfs_dev.h b/tools/sdk/include/vfs/esp_vfs_dev.h new file mode 100644 index 000000000..bb2579ee0 --- /dev/null +++ b/tools/sdk/include/vfs/esp_vfs_dev.h @@ -0,0 +1,28 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __ESP_VFS_DEV_H__ +#define __ESP_VFS_DEV_H__ + +#include "esp_vfs.h" + +/** + * @brief add /dev/uart virtual filesystem driver + * + * This function is called from startup code to enable serial output + */ +void esp_vfs_dev_uart_register(); + + +#endif //__ESP_VFS_DEV_H__ diff --git a/tools/sdk/ld/esp32.peripherals.ld b/tools/sdk/ld/esp32.peripherals.ld index aaadedce4..95aaadcbc 100644 --- a/tools/sdk/ld/esp32.peripherals.ld +++ b/tools/sdk/ld/esp32.peripherals.ld @@ -9,6 +9,7 @@ PROVIDE ( UART1 = 0x3ff50000 ); PROVIDE ( I2C0 = 0x3ff53000 ); PROVIDE ( UHCI0 = 0x3ff54000 ); PROVIDE ( RMT = 0x3ff56000 ); +PROVIDE ( RMTMEM = 0x3ff56800 ); PROVIDE ( PCNT = 0x3ff57000 ); PROVIDE ( LEDC = 0x3ff59000 ); PROVIDE ( TIMERG0 = 0x3ff5F000 ); diff --git a/tools/sdk/ld/esp32.rom.ld b/tools/sdk/ld/esp32.rom.ld index cc14d3258..5266a679b 100644 --- a/tools/sdk/ld/esp32.rom.ld +++ b/tools/sdk/ld/esp32.rom.ld @@ -286,6 +286,7 @@ PROVIDE ( _global_impure_ptr = 0x3ffae0b0 ); PROVIDE ( gmtime = 0x40059848 ); PROVIDE ( gmtime_r = 0x40059868 ); PROVIDE ( g_phyFuns_instance = 0x3ffae0c4 ); +PROVIDE ( g_rom_flashchip = 0x3ffae270 ); PROVIDE ( gpio_init = 0x40009c20 ); PROVIDE ( gpio_input_get = 0x40009b88 ); PROVIDE ( gpio_input_get_high = 0x40009b9c ); @@ -1584,6 +1585,8 @@ PROVIDE ( SPIEraseBlock = 0x40062c4c ); PROVIDE ( SPIEraseChip = 0x40062c14 ); PROVIDE ( SPIEraseSector = 0x40062ccc ); PROVIDE ( spi_flash_attach = 0x40062a6c ); +/* NB: SPIUnlock @ 0x400628b0 has been replaced with an updated + version in the "spi_flash" component */ PROVIDE ( SPILock = 0x400628f0 ); PROVIDE ( SPIMasterReadModeCnfig = 0x40062b64 ); PROVIDE ( spi_modes = 0x3ff99270 ); @@ -1595,9 +1598,8 @@ PROVIDE ( SPIReadModeCnfig = 0x40062944 ); PROVIDE ( SPI_read_status = 0x4006226c ); /* This is static function, but can be used, not generated by script*/ PROVIDE ( SPI_read_status_high = 0x40062448 ); -PROVIDE ( SPIUnlock = 0x400628b0 ); PROVIDE ( SPI_user_command_read = 0x400621b0 ); -PROVIDE ( spi_w25q16 = 0x3ffae270 ); +PROVIDE ( SPI_flashchip_data = 0x3ffae270 ); PROVIDE ( SPIWrite = 0x40062d50 ); /* This is static function, but can be used, not generated by script*/ PROVIDE ( SPI_write_enable = 0x40062320 ); diff --git a/tools/sdk/ld/esp32_out.ld b/tools/sdk/ld/esp32_out.ld index 5e7cd392c..8ff6b9a5c 100644 --- a/tools/sdk/ld/esp32_out.ld +++ b/tools/sdk/ld/esp32_out.ld @@ -45,8 +45,8 @@ MEMORY Start of RTC slow memory is reserved for ULP co-processor code + data, if enabled. */ - rtc_slow_seg(RW) : org = 0x50000000 + 0, - len = 0x1000 - 0 + rtc_slow_seg(RW) : org = 0x50000000 + 32, + len = 0x1000 - 32 } /* Heap ends at top of dram0_0_seg */ _heap_end = 0x40000000 - 0x0; diff --git a/tools/sdk/lib/libbt.a b/tools/sdk/lib/libbt.a index 40e814d02a0b630910b1e2eb3b36280626fb8de3..fcad7f2b4d50e463531dc911b2f5c78e06984a19 100644 GIT binary patch delta 936 zcmZ9L&ubGw6vyAp?qn0}t{Y+qvWjD?QK=1^n#Ly9AK<|v8uca!O54OVL{mvtK@kIb z5fm}xFc%Nv!T&(;SfR&Wyn5D~kQ_XzhrTyS%ILt%`+UFe?d;6*_SdVa_x{_!Ib95k zrBc|NF3pTl%7rj5rJN6Ok@+wz777?kg+(cQ&$8VE0st(40tSHN;DZY-BwK5nEn{Rk z2C%IS0B(y$D+0@Q$gsFGOM%4>=@3s~sl~-PQgIQHiaVc3*&;*AcH}6yWTsgB1WI5@ zcGOGlvAn?Z`)95B>V7miq$tJycrLC?*P#Y@*y=Ruty)#mN$zd5>hd3FoLpO9X+vjy zqaFR1))qe6uQUUvUR{-Q*E;=n^NNx~mg#@EHLb3GX2Fr&J@rQVHT1qt<4G-g{GbM8 ztFKvh$u7AE=i#(fV#ovW5ivU|SsHSmZ-c4~d3Mgn zj-@X~rPPD86={8FjFa&l;h=v0OcRj~7mjn(O3%rdXpAHujpL;51qXFrSm|^Z6T06q r(%9kvi=(qW6_zjlqJFJ?35{&M%KTDhv1 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 a{K@m(9DgF(a(Tz?Ki0WWCSvAe%lm&@ra*82 diff --git a/tools/sdk/lib/libcore.a b/tools/sdk/lib/libcore.a index 18ad4b16bce6c9369fef2dab8e7c7ffb2cf0dafe..d25bf275dc413ab45dc886a201cd65b246371a8b 100644 GIT binary patch delta 4371 zcmb_feQ;D)6~A{k3xSuw?qT!jx2sQckBN&{QZ4pDBvl(T;;1to(r$J0Ml-lz_FZ!%PPUa8z2W>+igGA6egD zj^mj<_nh;)=Xc)ye7k$&vTOfA*RGu5x^QS-Fc>k6puv*d8b)<>C}hIM>X|}_un;My z|91`D7Q(5+PT;?ZAODIF|0i{$Q2YT|?uwstuamUIV@y{oLMOv|{5enNv^6sJQR39c ziDRh;K1}5H-TImLSMEty?32VFQpFoh2mY9tbm#WQu5ozkYQlKScy<5G*vA}JPbQw( zzwL}6%H7rPCtf`y;6CTB{(ZuPVw0Q$Gf#%6+Ge(H0xOU%L>laX z@>5}VDL)H#T=}`M6UsMWf2{ms*tcj#Nyo|&g@j<)*Ba44B2Zaox?&FuKanx^HHAL_ zUpAqE9ENfZV~6RdC3^bX3TcFWn?3+?Ng*w;m*Sq%e`pfxQ?o?&(?d0-p8jblM>i`o z==mD2jM6x;D6kaj+!CP4n%Tgv-@$zMWl%-PD>qX^sMNC$c@dL40PGU&3@wv2G>P`> zbYHkso~4!HQcp@ih~H8yTw))L_{s3#y>@_8lIf|fn`anwbFefJ;hk~gn8OHBCT56f zg1l*u?e^!)j&^U3ips9eXs4)L)89|+J9YYXMLwl1YNIO^c{Fsekb zl?tk?D)Cn^01ZM}LW1UpbPP*OH)E@L6vmoO%b?fuT|^7bxfv(D>F*+14NZkkqt0-S zCxn95x}6@(NSaKRt1dz}2Fpr&i;$Z%lNQkgz>?Y~5&I_}-q`1~e5i3+cWqryuqQq? z^k@pDY~3JJ>FKT8>Du7~8US*AwZ;A)E}Adt&n?KB<8AtaBa4sbl(&jF0i%gNn8u6SoqZRLnE<<09=)@qiiMBlbJ^uOlu--xlrSnj89LDIzs7E%? z-$sk(HX(%Y3pX&sbWLAVI3u!|=8x&=Tv&;0p*3S$yf+1C`# zbCa!9xmO=nZwGUBUjhv2fHI3Q_BDl@vs(fH(hKDr#@N>sZqAM$1sQ^J4rA8-eky2Q05xS*A$Kr`^7ElK?Ac)*E~J)LCV{wqpjU{L@uK%`}FK( zRxeL7faz?6HD|hrX1%NrtJN^)6|yp;Dw8qxHHDk=YPWLu+H*C=*w++p&g)?-=NXm5 z82g&S4fs;|bm(Q@u=0x;UycTH3(EBwV_#Ev8GJkEGnK;_`*uzR=d3^jap6{R9md$# z6dpuu=TKz;71i>c|TUVqrZ9tHb7#m-A&pL4JW=!K(t`Oh8f z4VZ|zHeeb_><=k+G=n}m8YsWwU<@QN3X>Rax(LRLVEoI$7y-kcA6t8VWmIr1gSH(D z)ED6`%xEK&Wg>}Dg4kv(Mjr2=y;m3L;xU~Lg}mh#z~CFT5Xz_8X7o51m#N^mUf=0> z-Zij$6`Ow$+3aT>?8oS-<9b8P!Cr9})(*qsXY*~b*(V(A&#^9d(Z$Vyh@(I>$NKrh z1uByYyyGa4MZOby{VyEsAAoHSo-e2U`0Eb#D0PB;&B4yai94hQ&lkgHf9haQ(5VwT zm96%cpSgSLdhz?sW@Nxg-kh@}C-nMRKslok%94sRYHw66Vw)XyurE;igicu#-U0&* z`-n!87|RvIMXeM0{wGw#E5P#C6#VnZ^gRVQ`L9P7HNB?K*{YJQR3X~%4L`zvLDmnU z2cJ8`t-!<2Bj&B)uU+or!R&HWcn=k#+^K{Yf@KFVh8sD6+(tdl<9Z9ohrc&VX9_V! g=_iZQui@KhKk782uaf`zWQ_#yes(d>61(cZ0kJ7Q)c^nh delta 10264 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 A!T7>$HsDu6E7UTDrJ z#t9Qh6q4A!)PYe8<_@46CAYr|Wz2b##LM}PGcqGE-4ttaSEdl z+@m0e6wG40&xf!^e0$DH#&$KBz(;SX?ZOurTVU2q25H%HgHalxMFZ%NXN>Cv0axx~ AMgRZ+ diff --git a/tools/sdk/lib/libdriver.a b/tools/sdk/lib/libdriver.a index 0095d9809d8a704129584d8ec9e79ebd950fd87b..32f5cbe1c62a75e26c057794156d2070dbee9e49 100644 GIT binary patch literal 98594 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 PLjC3Ae6j{Q4#FYi>){rA5@MN1SbQM5>r5{2B| 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

F^FXsRo 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