commit 97d050bdd6b32e9a84fcbd6b88a70d16e84a7843 Author: Ondřej Hruška Date: Wed Jan 1 19:24:01 2020 +0100 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..12896c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +cmake-build-debug +*.o +build/ +.idea/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5493ae5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,10 @@ +# The following lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(CMAKE_C_COMPILER xtensa-esp32-elf-gcc) +set(CMAKE_CXX_COMPILER xtensa-esp32-elf-g++) +set(CMAKE_ASM_COMPILER xtensa-esp32-elf-as) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(hello-world) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0d1f5e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := hello-world + +include $(IDF_PATH)/make/project.mk + diff --git a/README.md b/README.md new file mode 100644 index 0000000..4fb3c40 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Hello World Example + +Starts a FreeRTOS task to print "Hello World" + +See the README.md file in the upper level 'examples' directory for more information about examples. diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt new file mode 100644 index 0000000..c7a6e20 --- /dev/null +++ b/main/CMakeLists.txt @@ -0,0 +1,4 @@ +set(COMPONENT_SRCS "hello_world_main.c" "nokia.c") +set(COMPONENT_ADD_INCLUDEDIRS "") + +register_component() diff --git a/main/component.mk b/main/component.mk new file mode 100644 index 0000000..0b9d758 --- /dev/null +++ b/main/component.mk @@ -0,0 +1,5 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) + diff --git a/main/hello_world_main.c b/main/hello_world_main.c new file mode 100644 index 0000000..c17eb1b --- /dev/null +++ b/main/hello_world_main.c @@ -0,0 +1,40 @@ +/* Hello World Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_system.h" +#include "esp_spi_flash.h" + + +void app_main() +{ + printf("Hello world!\n"); + + /* Print chip information */ + esp_chip_info_t chip_info; + esp_chip_info(&chip_info); + printf("This is ESP32 chip with %d CPU cores, WiFi%s%s, ", + chip_info.cores, + (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "", + (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : ""); + + printf("silicon revision %d, ", chip_info.revision); + + printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024), + (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external"); + + for (int i = 10; i >= 0; i--) { + printf("Restarting in %d seconds...\n", i); + vTaskDelay(1000 / portTICK_PERIOD_MS); + } + printf("Restarting now.\n"); + fflush(stdout); + esp_restart(); +} diff --git a/main/nokia.c b/main/nokia.c new file mode 100644 index 0000000..0c9bcd9 --- /dev/null +++ b/main/nokia.c @@ -0,0 +1,504 @@ +#include "nokia.h" + +/* Pin definitions: +Most of these pins can be moved to any digital or analog pin. +DN(MOSI)and SCLK should be left where they are (SPI pins). The +LED (backlight) pin should remain on a PWM-capable pin. */ +static const int scePin = 7; // SCE - Chip select, pin 3 on LCD. +static const int rstPin = 6; // RST - Reset, pin 4 on LCD. +static const int dcPin = 5; // DC - Data/Command, pin 5 on LCD. +static const int sdinPin = 11; // DN(MOSI) - Serial data, pin 6 on LCD. +static const int sclkPin = 13; // SCLK - Serial clock, pin 7 on LCD. +static const int blPin = 9; // LED - Backlight LED, pin 8 on LCD. + +/* PCD8544-specific defines: */ +#define LCD_COMMAND 0 +#define LCD_DATA 1 + +/* Font table: +This table contains the hex values that represent pixels for a +font that is 5 pixels wide and 8 pixels high. Each byte in a row +represents one, 8-pixel, vertical column of a character. 5 bytes +per character. */ +static const uint8_t ASCII[][5] = { + // First 32 characters (0x00-0x19) are ignored. These are + // non-displayable, control characters. + {0x00, 0x00, 0x00, 0x00, 0x00} // 0x20 + ,{0x00, 0x00, 0x5f, 0x00, 0x00} // 0x21 ! + ,{0x00, 0x07, 0x00, 0x07, 0x00} // 0x22 " + ,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 0x23 # + ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 0x24 $ + ,{0x23, 0x13, 0x08, 0x64, 0x62} // 0x25 % + ,{0x36, 0x49, 0x55, 0x22, 0x50} // 0x26 & + ,{0x00, 0x05, 0x03, 0x00, 0x00} // 0x27 ' + ,{0x00, 0x1c, 0x22, 0x41, 0x00} // 0x28 ( + ,{0x00, 0x41, 0x22, 0x1c, 0x00} // 0x29 ) + ,{0x14, 0x08, 0x3e, 0x08, 0x14} // 0x2a * + ,{0x08, 0x08, 0x3e, 0x08, 0x08} // 0x2b + + ,{0x00, 0x50, 0x30, 0x00, 0x00} // 0x2c , + ,{0x08, 0x08, 0x08, 0x08, 0x08} // 0x2d - + ,{0x00, 0x60, 0x60, 0x00, 0x00} // 0x2e . + ,{0x20, 0x10, 0x08, 0x04, 0x02} // 0x2f / + ,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 0x30 0 + ,{0x00, 0x42, 0x7f, 0x40, 0x00} // 0x31 1 + ,{0x42, 0x61, 0x51, 0x49, 0x46} // 0x32 2 + ,{0x21, 0x41, 0x45, 0x4b, 0x31} // 0x33 3 + ,{0x18, 0x14, 0x12, 0x7f, 0x10} // 0x34 4 + ,{0x27, 0x45, 0x45, 0x45, 0x39} // 0x35 5 + ,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 0x36 6 + ,{0x01, 0x71, 0x09, 0x05, 0x03} // 0x37 7 + ,{0x36, 0x49, 0x49, 0x49, 0x36} // 0x38 8 + ,{0x06, 0x49, 0x49, 0x29, 0x1e} // 0x39 9 + ,{0x00, 0x36, 0x36, 0x00, 0x00} // 0x3a : + ,{0x00, 0x56, 0x36, 0x00, 0x00} // 0x3b ; + ,{0x08, 0x14, 0x22, 0x41, 0x00} // 0x3c < + ,{0x14, 0x14, 0x14, 0x14, 0x14} // 0x3d = + ,{0x00, 0x41, 0x22, 0x14, 0x08} // 0x3e > + ,{0x02, 0x01, 0x51, 0x09, 0x06} // 0x3f ? + ,{0x32, 0x49, 0x79, 0x41, 0x3e} // 0x40 @ + ,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 0x41 A + ,{0x7f, 0x49, 0x49, 0x49, 0x36} // 0x42 B + ,{0x3e, 0x41, 0x41, 0x41, 0x22} // 0x43 C + ,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 0x44 D + ,{0x7f, 0x49, 0x49, 0x49, 0x41} // 0x45 E + ,{0x7f, 0x09, 0x09, 0x09, 0x01} // 0x46 F + ,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 0x47 G + ,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 0x48 H + ,{0x00, 0x41, 0x7f, 0x41, 0x00} // 0x49 I + ,{0x20, 0x40, 0x41, 0x3f, 0x01} // 0x4a J + ,{0x7f, 0x08, 0x14, 0x22, 0x41} // 0x4b K + ,{0x7f, 0x40, 0x40, 0x40, 0x40} // 0x4c L + ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 0x4d M + ,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 0x4e N + ,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 0x4f O + ,{0x7f, 0x09, 0x09, 0x09, 0x06} // 0x50 P + ,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 0x51 Q + ,{0x7f, 0x09, 0x19, 0x29, 0x46} // 0x52 R + ,{0x46, 0x49, 0x49, 0x49, 0x31} // 0x53 S + ,{0x01, 0x01, 0x7f, 0x01, 0x01} // 0x54 T + ,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 0x55 U + ,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 0x56 V + ,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 0x57 W + ,{0x63, 0x14, 0x08, 0x14, 0x63} // 0x58 X + ,{0x07, 0x08, 0x70, 0x08, 0x07} // 0x59 Y + ,{0x61, 0x51, 0x49, 0x45, 0x43} // 0x5a Z + ,{0x00, 0x7f, 0x41, 0x41, 0x00} // 0x5b [ + ,{0x02, 0x04, 0x08, 0x10, 0x20} // 0x5c \ (keep this to escape the backslash) + ,{0x00, 0x41, 0x41, 0x7f, 0x00} // 0x5d ] + ,{0x04, 0x02, 0x01, 0x02, 0x04} // 0x5e ^ + ,{0x40, 0x40, 0x40, 0x40, 0x40} // 0x5f _ + ,{0x00, 0x01, 0x02, 0x04, 0x00} // 0x60 ` + ,{0x20, 0x54, 0x54, 0x54, 0x78} // 0x61 a + ,{0x7f, 0x48, 0x44, 0x44, 0x38} // 0x62 b + ,{0x38, 0x44, 0x44, 0x44, 0x20} // 0x63 c + ,{0x38, 0x44, 0x44, 0x48, 0x7f} // 0x64 d + ,{0x38, 0x54, 0x54, 0x54, 0x18} // 0x65 e + ,{0x08, 0x7e, 0x09, 0x01, 0x02} // 0x66 f + ,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 0x67 g + ,{0x7f, 0x08, 0x04, 0x04, 0x78} // 0x68 h + ,{0x00, 0x44, 0x7d, 0x40, 0x00} // 0x69 i + ,{0x20, 0x40, 0x44, 0x3d, 0x00} // 0x6a j + ,{0x7f, 0x10, 0x28, 0x44, 0x00} // 0x6b k + ,{0x00, 0x41, 0x7f, 0x40, 0x00} // 0x6c l + ,{0x7c, 0x04, 0x18, 0x04, 0x78} // 0x6d m + ,{0x7c, 0x08, 0x04, 0x04, 0x78} // 0x6e n + ,{0x38, 0x44, 0x44, 0x44, 0x38} // 0x6f o + ,{0x7c, 0x14, 0x14, 0x14, 0x08} // 0x70 p + ,{0x08, 0x14, 0x14, 0x18, 0x7c} // 0x71 q + ,{0x7c, 0x08, 0x04, 0x04, 0x08} // 0x72 r + ,{0x48, 0x54, 0x54, 0x54, 0x20} // 0x73 s + ,{0x04, 0x3f, 0x44, 0x40, 0x20} // 0x74 t + ,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 0x75 u + ,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 0x76 v + ,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 0x77 w + ,{0x44, 0x28, 0x10, 0x28, 0x44} // 0x78 x + ,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 0x79 y + ,{0x44, 0x64, 0x54, 0x4c, 0x44} // 0x7a z + ,{0x00, 0x08, 0x36, 0x41, 0x00} // 0x7b { + ,{0x00, 0x00, 0x7f, 0x00, 0x00} // 0x7c | + ,{0x00, 0x41, 0x36, 0x08, 0x00} // 0x7d } + ,{0x10, 0x08, 0x08, 0x10, 0x08} // 0x7e ~ + ,{0x78, 0x46, 0x41, 0x46, 0x78} // 0x7f DEL +}; + +/* The displayMap variable stores a buffer representation of the +pixels on our display. There are 504 total bits in this array, +same as how many pixels there are on a 84 x 48 display. + +Each byte in this array covers a 8-pixel vertical block on the +display. Each successive byte covers the next 8-pixel column over +until you reach the right-edge of the display and step down 8 rows. + +To update the display, we first have to write to this array, then +call the updateDisplay() function, which sends this whole array +to the PCD8544. + +Because the PCD8544 won't let us write individual pixels at a +time, this is how we can make targeted changes to the display. */ +static uint8_t displayMap[LCD_WIDTH * LCD_HEIGHT / 8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,0)->(11,7) ~ These 12 bytes cover an 8x12 block in the left corner of the display + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,0)->(23,7) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, // (24,0)->(35,7) + 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0x1E, 0x0E, 0x02, 0x00, // (36,0)->(47,7) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (48,0)->(59,7) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,0)->(71,7) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,0)->(83,7) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,8)->(11,15) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,8)->(23,15) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // (24,8)->(35,15) + 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, // (36,8)->(47,15) + 0xF8, 0xF0, 0xF8, 0xFE, 0xFE, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, // (48,8)->(59,15) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,8)->(71,15) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,8)->(83,15) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,16)->(11,23) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,16)->(23,23) + 0x00, 0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xF3, 0xE0, 0xE0, 0xC0, // (24,16)->(35,23) + 0xC0, 0xC0, 0xE0, 0xE0, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // (36,16)->(47,23) + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, // (48,16)->(59,23) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,16)->(71,23) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,16)->(83,23) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,24)->(11,31) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,24)->(23,31) + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // (24,24)->(35,31) + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // (36,24)->(47,31) + 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, // (48,24)->(59,31) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,24)->(71,31) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,24)->(83,31) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,32)->(11,39) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,32)->(23,39) + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, // (24,32)->(35,39) + 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, // (36,32)->(47,39) + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (48,32)->(59,39) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,32)->(71,39) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,32)->(83,39) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (0,40)->(11,47) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (12,40)->(23,47) + 0x00, 0x00, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, // (24,40)->(35,47) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (36,40)->(47,47) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (48,40)->(59,47) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (60,40)->(71,47) + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // (72,40)->(83,47) !!! The bottom right pixel! +}; + +// There are two memory banks in the LCD, data/RAM and commands. +// This function sets the DC pin high or low depending, and then +// sends the data byte +static void LCDWrite(uint8_t data_or_command, uint8_t data) +{ + //Tell the LCD that we are writing either to data or a command + digitalWrite(dcPin, data_or_command); + + //Send the data + digitalWrite(scePin, LOW); + SPI.transfer(data); //shiftOut(sdinPin, sclkPin, MSBFIRST, data); + digitalWrite(scePin, HIGH); +} + + +// This function sets a pixel on displayMap to your preferred +// color. 1=Black, 0= white. +void LCD_setPixel(int x, int y, boolean bw) +{ + // First, double check that the coordinate is in range. + if ((x >= 0) && (x < LCD_WIDTH) && (y >= 0) && (y < LCD_HEIGHT)) + { + uint8_t shift = y % 8; + + if (bw) // If black, set the bit. + displayMap[x + (y/8)*LCD_WIDTH] |= 1< dy) + { + int fraction = dy - (dx >> 1); + while (x0 != x1) + { + if (fraction >= 0) + { + y0 += stepy; + fraction -= dx; + } + x0 += stepx; + fraction += dy; + LCD_setPixel(x0, y0, bw); + } + } + else + { + int fraction = dx - (dy >> 1); + while (y0 != y1) + { + if (fraction >= 0) + { + x0 += stepx; + fraction -= dy; + } + y0 += stepy; + fraction += dx; + LCD_setPixel(x0, y0, bw); + } + } +} + +// setRect will draw a rectangle from x0,y0 top-left corner to +// a x1,y1 bottom-right corner. Can be filled with the fill +// parameter, and colored with bw. +// This function was grabbed from the SparkFun ColorLCDShield +// library. +void LCD_setRect(int x0, int y0, int x1, int y1, bool fill, bool bw) +{ + // check if the rectangle is to be filled + if (fill == 1) + { + int xDiff; + + if(x0 > x1) + xDiff = x0 - x1; //Find the difference between the x vars + else + xDiff = x1 - x0; + + while(xDiff > 0) + { + LCD_setLine(x0, y0, x0, y1, bw); + + if(x0 > x1) + x0--; + else + x0++; + + xDiff--; + } + } + else + { + // best way to draw an unfilled rectangle is to draw four lines + LCD_setLine(x0, y0, x1, y0, bw); + LCD_setLine(x0, y1, x1, y1, bw); + LCD_setLine(x0, y0, x0, y1, bw); + LCD_setLine(x1, y0, x1, y1, bw); + } +} + +// setCircle draws a circle centered around x0,y0 with a defined +// radius. The circle can be black or white. And have a line +// thickness ranging from 1 to the radius of the circle. +// This function was grabbed from the SparkFun ColorLCDShield +// library. +void LCD_setCircle (int x0, int y0, int radius, bool bw, int lineThickness) +{ + for(int r = 0; r < lineThickness; r++) + { + int f = 1 - radius; + int ddF_x = 0; + int ddF_y = -2 * radius; + int x = 0; + int y = radius; + + LCD_setPixel(x0, y0 + radius, bw); + LCD_setPixel(x0, y0 - radius, bw); + LCD_setPixel(x0 + radius, y0, bw); + LCD_setPixel(x0 - radius, y0, bw); + + while(x < y) + { + if(f >= 0) + { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x + 1; + + LCD_setPixel(x0 + x, y0 + y, bw); + LCD_setPixel(x0 - x, y0 + y, bw); + LCD_setPixel(x0 + x, y0 - y, bw); + LCD_setPixel(x0 - x, y0 - y, bw); + LCD_setPixel(x0 + y, y0 + x, bw); + LCD_setPixel(x0 - y, y0 + x, bw); + LCD_setPixel(x0 + y, y0 - x, bw); + LCD_setPixel(x0 - y, y0 - x, bw); + } + radius--; + } +} + +// This function will draw a char (defined in the ASCII table +// near the beginning of this sketch) at a defined x and y). +// The color can be either black (1) or white (0). +void LCD_setChar(char character, int x, int y, bool bw) +{ + byte column; // temp byte to store character's column bitmap + for (int i=0; i<5; i++) // 5 columns (x) per character + { + column = ASCII[character - 0x20][i]; + for (int j=0; j<8; j++) // 8 rows (y) per character + { + if (column & (0x01 << j)) // test bits to set pixels + LCD_setPixel(x+i, y+j, bw); + else + LCD_setPixel(x+i, y+j, !bw); + } + } +} + +// setStr draws a string of characters, calling setChar with +// progressive coordinates until it's done. +// This function was grabbed from the SparkFun ColorLCDShield +// library. +void LCD_setStr(char * dString, int x, int y, bool bw) +{ + while (*dString != 0x00) // loop until null terminator + { + LCD_setChar(*dString++, x, y, bw); + x+=5; + for (int i=y; i (LCD_WIDTH - 5)) // Enables wrap around + { + x = 0; + y += 8; + } + } +} + +// This function will draw an array over the screen. (For now) the +// array must be the same size as the screen, covering the entirety +// of the display. +// Also, the array must reside in FLASH and declared with PROGMEM. +void LCD_setBitmap(const char * bitArray) +{ + for (int i=0; i<(LCD_WIDTH * LCD_HEIGHT / 8); i++) + { + char c = bitArray[i]; + displayMap[i] = c; + } +} + +// This function clears the entire display either white (0) or +// black (1). +// The screen won't actually clear until you call updateDisplay()! +void LCD_clearDisplay(bool bw) +{ + for (int i=0; i<(LCD_WIDTH * LCD_HEIGHT / 8); i++) + { + if (bw) + displayMap[i] = 0xFF; + else + displayMap[i] = 0; + } +} + +// Helpful function to directly command the LCD to go to a +// specific x,y coordinate. +static void gotoXY(int x, int y) +{ + LCDWrite(0, 0x80 | x); // Column. + LCDWrite(0, 0x40 | y); // Row. ? +} + +// This will actually draw on the display, whatever is currently +// in the displayMap array. +void LCD_updateDisplay() +{ + gotoXY(0, 0); + for (int i=0; i < (LCD_WIDTH * LCD_HEIGHT / 8); i++) + { + LCDWrite(LCD_DATA, displayMap[i]); + } +} + +// Set contrast can set the LCD Vop to a value between 0 and 127. +// 40-60 is usually a pretty good range. +void LCD_setContrast(uint8_t contrast) +{ + LCDWrite(LCD_COMMAND, 0x21); //Tell LCD that extended commands follow + LCDWrite(LCD_COMMAND, 0x80 | contrast); //Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark + LCDWrite(LCD_COMMAND, 0x20); //Set display mode +} + +/* There are two ways to do this. Either through direct commands +to the display, or by swapping each bit in the displayMap array. +We'll leave both methods here, comment one or the other out if +you please. */ +void LCD_invertDisplay() +{ + /* Direct LCD Command option + LCDWrite(LCD_COMMAND, 0x20); //Tell LCD that extended commands follow + LCDWrite(LCD_COMMAND, 0x08 | 0x05); //Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark + LCDWrite(LCD_COMMAND, 0x20); //Set display mode */ + + /* Indirect, swap bits in displayMap option: */ + for (int i=0; i < (LCD_WIDTH * LCD_HEIGHT / 8); i++) + { + displayMap[i] = ~displayMap[i] & 0xFF; + } + LCD_updateDisplay(); +} + +//This sends the magical commands to the PCD8544 +void LCD_setup(void) +{ + //Configure control pins + pinMode(scePin, OUTPUT); + pinMode(rstPin, OUTPUT); + pinMode(dcPin, OUTPUT); + pinMode(sdinPin, OUTPUT); + pinMode(sclkPin, OUTPUT); + pinMode(blPin, OUTPUT); + analogWrite(blPin, 255); + + SPI.begin(); + SPI.setDataMode(SPI_MODE0); + SPI.setBitOrder(MSBFIRST); + + //Reset the LCD to a known state + digitalWrite(rstPin, LOW); + digitalWrite(rstPin, HIGH); + + LCDWrite(LCD_COMMAND, 0x21); //Tell LCD extended commands follow + LCDWrite(LCD_COMMAND, 0xB0); //Set LCD Vop (Contrast) + LCDWrite(LCD_COMMAND, 0x04); //Set Temp coefficent + LCDWrite(LCD_COMMAND, 0x14); //LCD bias mode 1:48 (try 0x13) + //We must send 0x20 before modifying the display control mode + LCDWrite(LCD_COMMAND, 0x20); + LCDWrite(LCD_COMMAND, 0x0C); //Set display control, normal mode. +} + + diff --git a/main/nokia.h b/main/nokia.h new file mode 100644 index 0000000..4ef9835 --- /dev/null +++ b/main/nokia.h @@ -0,0 +1,66 @@ +/* Pin definitions: +Most of these pins can be moved to any digital or analog pin. +DN(MOSI)and SCLK should be left where they are (SPI pins). The +LED (backlight) pin should remain on a PWM-capable pin. */ +// SCE - Chip select, pin 3 on LCD. +// RST - Reset, pin 4 on LCD. +// DC - Data/Command, pin 5 on LCD. +// DN(MOSI) - Serial data, pin 6 on LCD. +// SCLK - Serial clock, pin 7 on LCD. +// LED - Backlight LED, pin 8 on LCD. + +/* 84x48 LCD Defines: */ +#define LCD_WIDTH 84 // Note: x-coordinates go wide +#define LCD_HEIGHT 48 // Note: y-coordinates go high +#define WHITE 0 // For drawing pixels. A 0 draws white. +#define BLACK 1 // A 1 draws black. + +// This function sets a pixel on displayMap to your preferred +// color. 1=Black, 0= white. +void LCD_setPixel(int x, int y, bool bw); + +// setLine draws a line from x0,y0 to x1,y1 with the set color +void LCD_setLine(int x0, int y0, int x1, int y1, bool bw); + +// setRect will draw a rectangle from x0,y0 top-left corner to +// a x1,y1 bottom-right corner. Can be filled with the fill +// parameter, and colored with bw. +void LCD_setRect(int x0, int y0, int x1, int y1, bool fill, bool bw); + +// setCircle draws a circle centered around x0,y0 with a defined +// radius. The circle can be black or white. And have a line +// thickness ranging from 1 to the radius of the circle. +void LCD_setCircle (int x0, int y0, int radius, bool bw, int lineThickness); + +// This function will draw a char (defined in the ASCII table +// near the beginning of this sketch) at a defined x and y). +// The color can be either black (1) or white (0). +void LCD_setChar(char character, int x, int y, bool bw); + +// setStr draws a string of characters, calling setChar with +// progressive coordinates until it's done. +// This function was grabbed from the SparkFun ColorLCDShield +// library. +void LCD_setStr(char * dString, int x, int y, bool bw); + +// This function clears the entire display either white (0) or +// black (1). +// The screen won't actually clear until you call updateDisplay()! +void LCD_clearDisplay(bool bw); + +// This will actually draw on the display, whatever is currently +// in the displayMap array. +void LCD_updateDisplay(); + +// Set contrast can set the LCD Vop to a value between 0 and 127. +// 40-60 is usually a pretty good range. +void LCD_setContrast(uint8_t contrast); + +/* There are two ways to do this. Either through direct commands +to the display, or by swapping each bit in the displayMap array. +We'll leave both methods here, comment one or the other out if +you please. */ +void LCD_invertDisplay(); + +//This sends the magical commands to the PCD8544 +void LCD_setup(void); diff --git a/sdkconfig b/sdkconfig new file mode 100644 index 0000000..9792a52 --- /dev/null +++ b/sdkconfig @@ -0,0 +1,497 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) Project Configuration +# +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# +# SDK tool configuration +# +CONFIG_TOOLPREFIX="xtensa-esp32-elf-" +CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT_ENABLED is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="2MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +# CONFIG_MONITOR_BAUD_9600B is not set +# CONFIG_MONITOR_BAUD_57600B is not set +CONFIG_MONITOR_BAUD_115200B=y +# CONFIG_MONITOR_BAUD_230400B is not set +# CONFIG_MONITOR_BAUD_921600B is not set +# CONFIG_MONITOR_BAUD_2MB is not set +# CONFIG_MONITOR_BAUD_OTHER is not set +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 +CONFIG_PARTITION_TABLE_SINGLE_APP=y +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +# CONFIG_PARTITION_TABLE_CUSTOM is not set +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_STACK_CHECK is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_DISABLE_GCC8_WARNINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +# CONFIG_ESP32_APPTRACE_ENABLE is not set +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +# CONFIG_AWS_IOT_SDK is not set +# CONFIG_BT_ENABLED is not set +CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_BT_RESERVE_DRAM=0 +# CONFIG_ADC_FORCE_XPD_FSM is not set +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 +CONFIG_IDF_TARGET_ESP32=y +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_DPORT_WORKAROUND=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +# CONFIG_SPIRAM_SUPPORT is not set +# CONFIG_MEMMAP_TRACEMEM is not set +# CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set +# CONFIG_ESP32_TRAX is not set +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +# CONFIG_ULP_COPROC_ENABLED is not set +CONFIG_ULP_COPROC_RESERVE_MEM=0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_ESP32_DEBUG_STUBS_ENABLE=y +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +CONFIG_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_REDUCE_PHY_TX_POWER=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_ESP_TIMER_PROFILING is not set +# CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL=5 +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +# CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE is not set +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +# CONFIG_PM_ENABLE is not set +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y +# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_OTA_ALLOW_HTTP is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +# CONFIG_ESP32_ENABLE_COREDUMP is not set +CONFIG_DMA_RX_BUF_NUM=10 +CONFIG_DMA_TX_BUF_NUM=10 +CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE=y +CONFIG_EMAC_CHECK_LINK_PERIOD_MS=2000 +CONFIG_EMAC_TASK_PRIORITY=20 +CONFIG_EMAC_TASK_STACK_SIZE=3072 +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +CONFIG_MB_QUEUE_LENGTH=20 +CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 +CONFIG_MB_SERIAL_BUF_SIZE=256 +CONFIG_MB_SERIAL_TASK_PRIO=10 +# CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT is not set +CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 +CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 +CONFIG_MB_CONTROLLER_STACK_SIZE=4096 +CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 +CONFIG_MB_TIMER_PORT_ENABLED=y +CONFIG_MB_TIMER_GROUP=0 +CONFIG_MB_TIMER_INDEX=0 +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_HZ=100 +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set +# CONFIG_FREERTOS_ASSERT_DISABLE is not set +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +# CONFIG_FREERTOS_LEGACY_HOOKS is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_SUPPORT_STATIC_ALLOCATION is not set +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +# CONFIG_FREERTOS_DEBUG_INTERNALS is not set +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_HEAP_POISONING_DISABLED=y +# CONFIG_HEAP_POISONING_LIGHT is not set +# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set +# CONFIG_HEAP_TRACING is not set +CONFIG_LIBSODIUM_USE_MBEDTLS_SHA=y +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_COLORS=y +# CONFIG_L2_TO_L3_COPY is not set +# CONFIG_LWIP_IRAM_OPTIMIZATION is not set +CONFIG_LWIP_MAX_SOCKETS=10 +# CONFIG_USE_ONLY_LWIP_SELECT is not set +CONFIG_LWIP_SO_REUSE=y +CONFIG_LWIP_SO_REUSE_RXTOALL=y +# CONFIG_LWIP_SO_RCVBUF is not set +# CONFIG_LWIP_IP_FRAG is not set +# CONFIG_LWIP_IP_REASSEMBLY is not set +# CONFIG_LWIP_STATS is not set +# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set +CONFIG_LWIP_DHCPS_LEASE_UNIT=60 +CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +# CONFIG_LWIP_AUTOIP is not set +CONFIG_LWIP_NETIF_LOOPBACK=y +CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 +CONFIG_LWIP_MAX_ACTIVE_TCP=16 +CONFIG_LWIP_MAX_LISTENING_TCP=16 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=6 +CONFIG_TCP_MSS=1436 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set +CONFIG_LWIP_MAX_UDP_PCBS=16 +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set +CONFIG_LWIP_MAX_RAW_PCBS=16 +CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 +CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y +# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set +# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set +CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 +# CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN is not set +# CONFIG_MBEDTLS_DEBUG is not set +# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set +# CONFIG_MBEDTLS_CMAC_C is not set +CONFIG_MBEDTLS_HARDWARE_AES=y +# CONFIG_MBEDTLS_HARDWARE_MPI is not set +# CONFIG_MBEDTLS_HARDWARE_SHA is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +# CONFIG_MBEDTLS_SSL_PROTO_SSL3 is not set +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +CONFIG_MBEDTLS_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_RIPEMD160_C is not set +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +CONFIG_MBEDTLS_ECP_C=y +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y +CONFIG_MDNS_MAX_SERVICES=10 +CONFIG_MQTT_PROTOCOL_311=y +CONFIG_MQTT_TRANSPORT_SSL=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y +# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set +# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +# CONFIG_MQTT_CUSTOM_OUTBOX is not set +# CONFIG_OPENSSL_DEBUG is not set +CONFIG_OPENSSL_ASSERT_DO_NOTHING=y +# CONFIG_OPENSSL_ASSERT_EXIT is not set +CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" +# CONFIG_SPI_FLASH_VERIFY_WRITE is not set +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set +CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y +CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 +CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 +CONFIG_SPIFFS_MAX_PARTITIONS=3 +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +CONFIG_IP_LOST_TIMER_INTERVAL=120 +CONFIG_TCPIP_LWIP=y +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_SUPPORT_TERMIOS=y +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16