1 Commits
Author SHA1 Message Date
mitchell b2813d62a3 Namespace the p001 steps 2026-04-09 13:36:08 -05:00
44 changed files with 514 additions and 351 deletions
-1
View File
@@ -11,7 +11,6 @@ set(SOURCES
"i2c_lcd_pcf8574.c" "i2c_lcd_pcf8574.c"
"i2c.cpp" "i2c.cpp"
"leds.cpp" "leds.cpp"
"nvs.cpp"
"perh.cpp" "perh.cpp"
"power.cpp" "power.cpp"
"sd.cpp" "sd.cpp"
+78 -95
View File
@@ -9,7 +9,6 @@
#include "game_info.h" #include "game_info.h"
i2c_lcd_pcf8574_handle_t lcd; i2c_lcd_pcf8574_handle_t lcd;
SemaphoreHandle_t lcd_mutex;
static volatile bool header_enabled = false; static volatile bool header_enabled = false;
@@ -18,7 +17,6 @@ static const char* EMPTY_ROW = " ";
static char buf[65]; static char buf[65];
// TODO: move this to power.cpp
static void monitor_battery_task(void* _arg) { static void monitor_battery_task(void* _arg) {
(void) _arg; (void) _arg;
@@ -31,35 +29,53 @@ static void monitor_battery_task(void* _arg) {
static bool replay_handler(const char* event, char* arg) { static bool replay_handler(const char* event, char* arg) {
if (strcmp(event, "LCD_CLEAR") == 0) { if (strcmp(event, "LCD_CLEAR") == 0) {
lcd_clear(); lcd_clear();
return true;
} }
else if (strcmp(event, "LCD_SET_DISPLAY") == 0) { if (strcmp(event, "LCD_CURSOR") == 0) {
char* col_str = strtok(arg, ",");
char* row_str = strtok(NULL, ",");
uint32_t col = atoi(col_str);
uint32_t row = atoi(row_str);
lcd_set_cursor_pos(col, row);
return true;
}
if (strcmp(event, "LCD_SET_DISPLAY") == 0) {
lcd_set_display(strcmp(arg, "true") == 0); lcd_set_display(strcmp(arg, "true") == 0);
return true;
} }
else if (strcmp(event, "LCD_CURSOR_VIS") == 0) { if (strcmp(event, "LCD_CURSOR_VIS") == 0) {
lcd_set_cursor_vis(strcmp(arg, "true") == 0); lcd_set_cursor_vis(strcmp(arg, "true") == 0);
return true;
} }
else if (strcmp(event, "LCD_CURSOR_BLINK") == 0) { if (strcmp(event, "LCD_CURSOR_BLINK") == 0) {
lcd_set_cursor_blink(strcmp(arg, "true") == 0); lcd_set_cursor_blink(strcmp(arg, "true") == 0);
return true;
} }
else if (strcmp(event, "LCD_SCROLL_DISPLAY_LEFT") == 0) { if (strcmp(event, "LCD_SCROLL_DISPLAY_LEFT") == 0) {
lcd_scroll_display_left(); lcd_scroll_display_left();
return true;
} }
else if (strcmp(event, "LCD_SCROLL_DISPLAY_RIGHT") == 0) { if (strcmp(event, "LCD_SCROLL_DISPLAY_RIGHT") == 0) {
lcd_scroll_display_right(); lcd_scroll_display_right();
return true;
} }
else if (strcmp(event, "LCD_LEFT_TO_RIGHT") == 0) { if (strcmp(event, "LCD_LEFT_TO_RIGHT") == 0) {
lcd_left_to_right(); lcd_left_to_right();
return true;
} }
else if (strcmp(event, "LCD_RIGHT_TO_LEFT") == 0) { if (strcmp(event, "LCD_RIGHT_TO_LEFT") == 0) {
lcd_right_to_left(); lcd_right_to_left();
return true;
} }
else if (strcmp(event, "LCD_AUTOSCROLL") == 0) { if (strcmp(event, "LCD_AUTOSCROLL") == 0) {
lcd_set_autoscroll(strcmp(arg, "true") == 0); lcd_set_autoscroll(strcmp(arg, "true") == 0);
return true;
} }
else if (strcmp(event, "LCD_BACKLIGHT") == 0) { if (strcmp(event, "LCD_BACKLIGHT") == 0) {
lcd_set_backlight(strcmp(arg, "true") == 0); lcd_set_backlight(strcmp(arg, "true") == 0);
return true;
} }
else if (strcmp(event, "LCD_CREATE_CHAR") == 0) { if (strcmp(event, "LCD_CREATE_CHAR") == 0) {
char* location_str = strtok(arg, ","); char* location_str = strtok(arg, ",");
uint8_t location = atoi(location_str); uint8_t location = atoi(location_str);
@@ -70,34 +86,24 @@ static bool replay_handler(const char* event, char* arg) {
} }
lcd_create_char(location, charmap); lcd_create_char(location, charmap);
return true;
} }
else if (strcmp(event, "LCD_PRINT") == 0) { if (strcmp(event, "LCD_PRINT") == 0) {
char* str = strtok(arg, ",");
uint8_t row = atoi(str);
str = strtok(NULL, ",");
uint8_t col = atoi(str);
// get remaining part of string.
str = strtok(NULL, "");
// TODO: handle \r and \n // TODO: handle \r and \n
lcd_print(row, col, str); lcd_print(&lcd, arg);
} else { return true;
return false;
} }
return true; return false;
} }
void init_lcd() { void init_lcd() {
ESP_LOGI(TAG, "Initializing LCD..."); ESP_LOGI(TAG, "Initializing LCD...");
lcd_mutex = xSemaphoreCreateMutex();
assert(lcd_mutex != NULL);
lcd_init(&lcd, LCD_ADDR, CHAR_LCD_I2C_NUM); lcd_init(&lcd, LCD_ADDR, CHAR_LCD_I2C_NUM);
lcd_begin(&lcd, LCD_COLS, LCD_ROWS); lcd_begin(&lcd, LCD_COLS, LCD_ROWS);
lcd_set_backlight_to(&lcd, 1); lcd_set_backlight(&lcd, 255);
register_replay_fn(replay_handler); register_replay_fn(replay_handler);
@@ -106,122 +112,115 @@ void init_lcd() {
ESP_LOGI(TAG, "LCD initialized!"); ESP_LOGI(TAG, "LCD initialized!");
} }
void lcd_clear(bool no_lock) { void lcd_clear() {
if (!header_enabled) { if (!header_enabled) {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_clear(&lcd); lcd_clear(&lcd);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_CLEAR", NULL); event_occured("LCD_CLEAR", NULL);
} }
} else { } else {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY); lcd_print(0, 1, EMPTY_ROW);
lcd_print(1, 0, EMPTY_ROW, true); lcd_print(0, 2, EMPTY_ROW);
lcd_print(2, 0, EMPTY_ROW, true); lcd_print(0, 3, EMPTY_ROW);
lcd_print(3, 0, EMPTY_ROW, true);
if (!no_lock) xSemaphoreGive(lcd_mutex);
} }
} }
void lcd_set_display(bool display, bool no_lock) { // TODO: rm
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY); void lcd_cursor_home() {
lcd_set_cursor_pos(0, 0);
}
// TODO: with print requiring you to set a pos every time, this function is not helpful
void lcd_set_cursor_pos(uint8_t col, uint8_t row) {
lcd_set_cursor(&lcd, col, row);
if (is_state_tracking()) {
sprintf(buf, "%d,%d", col, row);
event_occured("LCD_CURSOR", buf);
}
}
void lcd_set_display(bool display) {
if (display) { if (display) {
lcd_display(&lcd); lcd_display(&lcd);
} else { } else {
lcd_no_display(&lcd); lcd_no_display(&lcd);
} }
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_SET_DISPLAY", display ? "true" : "false"); event_occured("LCD_SET_DISPLAY", display ? "true" : "false");
} }
} }
void lcd_set_cursor_vis(bool cursor, bool no_lock) { void lcd_set_cursor_vis(bool cursor) {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
if (cursor) { if (cursor) {
lcd_cursor(&lcd); lcd_cursor(&lcd);
} else { } else {
lcd_no_cursor(&lcd); lcd_no_cursor(&lcd);
} }
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_CURSOR_VIS", cursor ? "true" : "false"); event_occured("LCD_CURSOR_VIS", cursor ? "true" : "false");
} }
} }
void lcd_set_cursor_blink(bool blink, bool no_lock) { void lcd_set_cursor_blink(bool blink) {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
if (blink) { if (blink) {
lcd_blink(&lcd); lcd_blink(&lcd);
} else { } else {
lcd_no_blink(&lcd); lcd_no_blink(&lcd);
} }
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_CURSOR_BLINK", blink ? "true" : "false"); event_occured("LCD_CURSOR_BLINK", blink ? "true" : "false");
} }
} }
void lcd_scroll_display_left(bool no_lock) { void lcd_scroll_display_left() {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_scroll_display_left(&lcd); lcd_scroll_display_left(&lcd);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_SCROLL_DISPLAY_LEFT", NULL); event_occured("LCD_SCROLL_DISPLAY_LEFT", NULL);
} }
} }
void lcd_scroll_display_right(bool no_lock) { void lcd_scroll_display_right() {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_scroll_display_right(&lcd); lcd_scroll_display_right(&lcd);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_SCROLL_DISPLAY_RIGHT", NULL); event_occured("LCD_SCROLL_DISPLAY_RIGHT", NULL);
} }
} }
void lcd_left_to_right(bool no_lock) { void lcd_left_to_right() {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_left_to_right(&lcd); lcd_left_to_right(&lcd);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_LEFT_TO_RIGHT", NULL); event_occured("LCD_LEFT_TO_RIGHT", NULL);
} }
} }
void lcd_right_to_left(bool no_lock) { void lcd_right_to_left() {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_right_to_left(&lcd); lcd_right_to_left(&lcd);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_RIGHT_TO_LEFT", NULL); event_occured("LCD_RIGHT_TO_LEFT", NULL);
} }
} }
void lcd_set_autoscroll(bool autoscroll, bool no_lock) { void lcd_set_autoscroll(bool autoscroll) {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
if (autoscroll) { if (autoscroll) {
lcd_autoscroll(&lcd); lcd_autoscroll(&lcd);
} else { } else {
lcd_no_autoscroll(&lcd); lcd_no_autoscroll(&lcd);
} }
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
event_occured("LCD_AUTOSCROLL", autoscroll ? "true" : "false"); event_occured("LCD_AUTOSCROLL", autoscroll ? "true" : "false");
} }
} }
void lcd_set_backlight(bool backlight, bool no_lock) { void lcd_set_backlight(bool backlight) {
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY); lcd_set_backlight(&lcd, backlight);
lcd_set_backlight_to(&lcd, backlight);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
sprintf(buf, "%d", backlight); sprintf(buf, "%d", backlight);
@@ -229,15 +228,11 @@ void lcd_set_backlight(bool backlight, bool no_lock) {
} }
} }
void lcd_create_char(uint8_t location, const uint8_t charmap[], bool no_lock) { void lcd_create_char(uint8_t location, const uint8_t charmap[]) {
if (location == 8) location = 0;
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY);
lcd_create_char(&lcd, location, charmap); lcd_create_char(&lcd, location, charmap);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
snprintf(buf, sizeof(buf), snprintf(buf, 65,
"%d,%d,%d,%d,%d,%d,%d,%d,%d", location, "%d,%d,%d,%d,%d,%d,%d,%d,%d", location,
charmap[0], charmap[1], charmap[2], charmap[3], charmap[4], charmap[5], charmap[6], charmap[7] charmap[0], charmap[1], charmap[2], charmap[3], charmap[4], charmap[5], charmap[6], charmap[7]
); );
@@ -245,16 +240,14 @@ void lcd_create_char(uint8_t location, const uint8_t charmap[], bool no_lock) {
} }
} }
void lcd_print(uint8_t row, uint8_t col, const char* str, bool no_lock) { // TODO: switch to row, col
if (!no_lock) xSemaphoreTake(lcd_mutex, portMAX_DELAY); void lcd_print(uint8_t col, uint8_t row, const char* str) {
lcd_set_cursor(&lcd, col, row); lcd_set_cursor_pos(col, row);
lcd_print(&lcd, str); lcd_print(&lcd, str);
if (!no_lock) xSemaphoreGive(lcd_mutex);
if (is_state_tracking()) { if (is_state_tracking()) {
// TODO: handle \r and \n and others // TODO: handle \r and \n
snprintf(buf, sizeof(buf), "%d,%d,%s", row, col, str); event_occured("LCD_PRINT", str);
event_occured("LCD_PRINT", buf);
} }
} }
@@ -291,23 +284,13 @@ void lcd_do_splash() {
}; };
// TODO: make the lcd_lib somehow support the custom character 0 which would otherwise be a null terminator // TODO: make the lcd_lib somehow support the custom character 0 which would otherwise be a null terminator
xSemaphoreTake(lcd_mutex, portMAX_DELAY); lcd_create_char(1, custom_char[0]);
lcd_create_char(1, custom_char[0], true); lcd_create_char(2, custom_char[1]);
lcd_create_char(2, custom_char[1], true); lcd_create_char(3, custom_char[2]);
lcd_create_char(3, custom_char[2], true); lcd_create_char(4, custom_char[3]);
lcd_create_char(4, custom_char[3], true); lcd_create_char(5, custom_char[4]);
lcd_create_char(5, custom_char[4], true); lcd_create_char(6, custom_char[5]);
lcd_create_char(6, custom_char[5], true);
lcd_print(1, 6, "\x01\x02Marino", true); lcd_print(6, 1, "\x01\x02Marino");
lcd_print(2, 5, "\x03\x04\x05\x06""DEV", true); lcd_print(5, 2, "\x03\x04\x05\x06""DEV");
xSemaphoreGive(lcd_mutex);
}
bool lcd_lock(uint32_t ticks_to_wait) {
return xSemaphoreTake(lcd_mutex, ticks_to_wait);
}
void lcd_unlock() {
xSemaphoreGive(lcd_mutex);
} }
+32 -42
View File
@@ -6,53 +6,54 @@
#define CHAR_LCD_I2C_NUM I2C_NUM_0 #define CHAR_LCD_I2C_NUM I2C_NUM_0
#define LCD_ADDR 0x27 #define LCD_ADDR 0x27
#define LCD_ROWS 4
#define LCD_COLS 20 #define LCD_COLS 20
#define LCD_ROWS 4
/// @brief Initializes the 2004 Character LCD /// Initializes the 2004 Character LCD
void init_lcd(); void init_lcd();
/// @brief Clear the LCD /// Clear the LCD
void lcd_clear(bool no_lock = false); void lcd_clear();
/// @brief Move cursor to home position /// Move cursor to home position
void lcd_cursor_home(bool no_lock = false); void lcd_cursor_home();
/// @brief Turn the display on/off /// Set cursor position
void lcd_set_display(bool display, bool no_lock = false); void lcd_set_cursor_pos(uint8_t col, uint8_t row);
/// @brief Turn the cursor's visibility on/off /// Turn the display on/off
void lcd_set_cursor_vis(bool cursor, bool no_lock = false); void lcd_set_display(bool display);
/// @brief Turn blinking cursor on/off /// Turn the cursor's visibility on/off
void lcd_set_cursor_blink(bool blink, bool no_lock = false); void lcd_set_cursor_vis(bool cursor);
/// @brief Scroll the display left /// Turn blinking cursor on/off
void lcd_scroll_display_left(bool no_lock = false); void lcd_set_cursor_blink(bool blink);
/// @brief Scroll the display right
void lcd_scroll_display_right(bool no_lock = false);
/// @brief Set the text to flows automatically left to right /// Scroll the display left
void lcd_left_to_right(bool no_lock = false); void lcd_scroll_display_left();
/// @brief Set the text to flows automatically right to left /// Scroll the display right
void lcd_right_to_left(bool no_lock = false); void lcd_scroll_display_right();
/// @brief Turn on/off autoscroll /// Set the text to flows automatically left to right
void lcd_set_autoscroll(bool autoscroll, bool no_lock = false); void lcd_left_to_right();
/// Set the text to flows automatically right to left
void lcd_right_to_left();
/// @brief Set backlight brightness // Turn on/off autoscroll
void lcd_set_backlight(bool backlight, bool no_lock = false); void lcd_set_autoscroll(bool autoscroll);
/// @brief Create a custom character. You get 8 custom characters. // Set backlight brightness
/// You can print custom characters by using escape characters in strings: void lcd_set_backlight(bool backlight);
/// use '\x01' - '\x07' for custom characters 1-7. Use '\x08' for custom char 0.
void lcd_create_char(uint8_t location, const uint8_t charmap[], bool no_lock = false); // Create a custom character
void lcd_create_char(uint8_t location, const uint8_t charmap[]);
/// @brief Print a string to the LCD at a given pos. /// @brief Print a string to the LCD at a given pos.
/// @param row the row the print the string at.
/// @param col the column to print the string at. /// @param col the column to print the string at.
/// @param row the row the print the string at.
/// @param str the string to print. /// @param str the string to print.
void lcd_print(uint8_t row, uint8_t col, const char* str, bool no_lock = false); void lcd_print(uint8_t col, uint8_t row, const char* str);
/// @brief Enables or disables the header on the LCD. /// @brief Enables or disables the header on the LCD.
/// @param enable `true` to enable the header, `false` to disable. /// @param enable `true` to enable the header, `false` to disable.
@@ -68,15 +69,4 @@ void lcd_print_header();
/// @brief Prints the splash screen for the BLK_BOX. /// @brief Prints the splash screen for the BLK_BOX.
void lcd_do_splash(); void lcd_do_splash();
/// @brief Locks the LCD to allow chaining multiple commands without interuptions. #endif /* CHAR_LCD_H */
///
/// Commands you call while you lock the LCD, you must call with the `no_lock` flag set to true.
///
/// Do not hold this lock for an extended period of time.
/// @return `true` iff the lock was aquired.
bool lcd_lock(uint32_t ticks_to_wait);
/// @brief Unlocks the LCD to give away the mutex access to it.
void lcd_unlock();
#endif /* CHAR_LCD_H */
+1 -1
View File
@@ -17,5 +17,5 @@ void lcd_print_header_step() {
if (!lcd_header_enabled()) return; if (!lcd_header_enabled()) return;
if (lcd_starcode_displaying_result()) return; if (lcd_starcode_displaying_result()) return;
lcd_print(0, 10, game_state); lcd_print(10, 0, game_state);
} }
+7 -11
View File
@@ -233,7 +233,7 @@ void lcd_no_autoscroll(i2c_lcd_pcf8574_handle_t* lcd) {
// Setting the backlight: It can only be turn on or off. // Setting the backlight: It can only be turn on or off.
// Current backlight value is saved in the i2c_lcd_pcf8574_handle_t struct for further data transfers // Current backlight value is saved in the i2c_lcd_pcf8574_handle_t struct for further data transfers
void lcd_set_backlight_to(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness) { void lcd_set_backlight(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness) {
// Place the backlight value in the lcd struct // Place the backlight value in the lcd struct
lcd->backlight = brightness; lcd->backlight = brightness;
// Send no data // Send no data
@@ -258,12 +258,7 @@ void lcd_write(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value) {
// Print characters to the LCD: cursor set or clear instruction must preceded this instruction, or it will write on the current text. // Print characters to the LCD: cursor set or clear instruction must preceded this instruction, or it will write on the current text.
void lcd_print(i2c_lcd_pcf8574_handle_t* lcd, const char* str) { void lcd_print(i2c_lcd_pcf8574_handle_t* lcd, const char* str) {
while (*str) { while (*str) {
if (*str == '\x08') { lcd_write(lcd, *str++);
lcd_write(lcd, '\x00');
str++;
} else {
lcd_write(lcd, *str++);
}
} }
} // lcd_print() } // lcd_print()
@@ -301,17 +296,18 @@ void lcd_print_number(i2c_lcd_pcf8574_handle_t* lcd, uint8_t col, uint8_t row, u
// Private functions: derived from the esp32 i2c_master driver // Private functions: derived from the esp32 i2c_master driver
static void lcd_send(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value, bool is_data) { static void lcd_send(i2c_lcd_pcf8574_handle_t* lcd, uint8_t value, bool is_data) {
xSemaphoreTake(main_i2c_mutex, portMAX_DELAY);
i2c_cmd_handle_t cmd = i2c_cmd_link_create(); i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd); i2c_master_start(cmd);
i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true);
xSemaphoreTake(main_i2c_mutex, portMAX_DELAY);
lcd_write_nibble(lcd, (value >> 4 & 0x0F), is_data, cmd); lcd_write_nibble(lcd, (value >> 4 & 0x0F), is_data, cmd);
lcd_write_nibble(lcd, (value & 0x0F), is_data, cmd); lcd_write_nibble(lcd, (value & 0x0F), is_data, cmd);
i2c_master_stop(cmd); i2c_master_stop(cmd);
esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
xSemaphoreGive(main_i2c_mutex);
i2c_cmd_link_delete(cmd); i2c_cmd_link_delete(cmd);
xSemaphoreGive(main_i2c_mutex);
if (ret != ESP_OK) { if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to send data to LCD: %s", esp_err_to_name(ret)); ESP_LOGE(TAG, "Failed to send data to LCD: %s", esp_err_to_name(ret));
@@ -350,15 +346,15 @@ static void lcd_write_i2c(i2c_lcd_pcf8574_handle_t* lcd, uint8_t data, bool is_d
data |= lcd->backlight_mask; data |= lcd->backlight_mask;
} }
xSemaphoreTake(main_i2c_mutex, portMAX_DELAY);
i2c_cmd_handle_t cmd = i2c_cmd_link_create(); i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd); i2c_master_start(cmd);
i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true); i2c_master_write_byte(cmd, (lcd->i2c_addr << 1) | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, data, true); i2c_master_write_byte(cmd, data, true);
i2c_master_stop(cmd); i2c_master_stop(cmd);
xSemaphoreTake(main_i2c_mutex, portMAX_DELAY);
esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); esp_err_t ret = i2c_master_cmd_begin(lcd->i2c_port, cmd, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
xSemaphoreGive(main_i2c_mutex);
i2c_cmd_link_delete(cmd); i2c_cmd_link_delete(cmd);
xSemaphoreGive(main_i2c_mutex);
if (ret != ESP_OK) { if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to write to LCD: %s", esp_err_to_name(ret)); ESP_LOGE(TAG, "Failed to write to LCD: %s", esp_err_to_name(ret));
+1 -1
View File
@@ -91,7 +91,7 @@ void lcd_autoscroll(i2c_lcd_pcf8574_handle_t* lcd);
void lcd_no_autoscroll(i2c_lcd_pcf8574_handle_t* lcd); void lcd_no_autoscroll(i2c_lcd_pcf8574_handle_t* lcd);
// Set backlight brightness // Set backlight brightness
void lcd_set_backlight_to(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness); void lcd_set_backlight(i2c_lcd_pcf8574_handle_t* lcd, uint8_t brightness);
// Create a custom character // Create a custom character
void lcd_create_char(i2c_lcd_pcf8574_handle_t* lcd, uint8_t location, const uint8_t charmap[]); void lcd_create_char(i2c_lcd_pcf8574_handle_t* lcd, uint8_t location, const uint8_t charmap[]);
-3
View File
@@ -1,3 +0,0 @@
#include "nvs.h"
-6
View File
@@ -1,6 +0,0 @@
#ifndef NVS_H
#define NVS_H
#endif /* NVS_H */
+6 -6
View File
@@ -12,9 +12,9 @@ void bat_monitor_task(void* arg) {
sprintf(str_buf, "%d.%03dV", voltage / 1000, voltage % 1000); sprintf(str_buf, "%d.%03dV", voltage / 1000, voltage % 1000);
lcd_clear(); lcd_clear();
lcd_print(0, 1, str_buf); lcd_print(1, 0, str_buf);
int16_t current = lipo.current(); int16_t current = lipo.current(current_measure::AVG);
sprintf(str_buf, "%dmA", current); sprintf(str_buf, "%dmA", current);
lcd_print(1, 1, str_buf); lcd_print(1, 1, str_buf);
@@ -23,12 +23,12 @@ void bat_monitor_task(void* arg) {
int16_t total_cap = lipo.capacity(capacity_measure::FULL); int16_t total_cap = lipo.capacity(capacity_measure::FULL);
sprintf(str_buf, "%dmAh", total_cap); sprintf(str_buf, "%dmAh", total_cap);
lcd_print(2, 1, str_buf); lcd_print(1, 2, str_buf);
int16_t soc = lipo.soc(soc_measure::FILTERED); int16_t soc = lipo.soc(soc_measure::FILTERED);
sprintf(str_buf, "%d%%", soc); sprintf(str_buf, "%d%%", soc);
lcd_print(3, 1, str_buf); lcd_print(1, 3, str_buf);
vTaskDelay(pdMS_TO_TICKS(250)); vTaskDelay(pdMS_TO_TICKS(250));
@@ -60,7 +60,7 @@ void lcd_print_header_bat() {
if (lcd_starcode_displaying_result()) return; if (lcd_starcode_displaying_result()) return;
uint8_t soc = lipo.soc(); uint8_t soc = lipo.soc();
int16_t current = lipo.current(); uint8_t current = lipo.current();
char buf[6]; char buf[6];
if (soc < 5 && current <= 0) { if (soc < 5 && current <= 0) {
snprintf(buf, sizeof(buf), " LOW"); snprintf(buf, sizeof(buf), " LOW");
@@ -74,5 +74,5 @@ void lcd_print_header_bat() {
} }
} }
lcd_print(0, 16, buf); lcd_print(16, 0, buf);
} }
+4 -4
View File
@@ -51,10 +51,10 @@ bool init_sd() {
ESP_LOGE(TAG, "Failed to mount sd card: %s.", esp_err_to_name(ret)); ESP_LOGE(TAG, "Failed to mount sd card: %s.", esp_err_to_name(ret));
lcd_print(0, 0, "SD: "); lcd_print(0, 0, "SD: ");
lcd_print(0, 4, esp_err_to_name(ret)); lcd_print(4, 0, esp_err_to_name(ret));
lcd_print(1, 0, "Press Green to retry"); lcd_print(0, 1, "Press Green to retry");
lcd_print(2, 0, "Press Yellow to skip"); lcd_print(0, 2, "Press Yellow to skip");
lcd_print(3, 0, "Press Red to format"); lcd_print(0, 3, "Press Red to format");
ButtonKey button; ButtonKey button;
while (!( get_button_pressed(&button) && (button == ButtonKey::button_green || button == ButtonKey::button_red || button == ButtonKey::button_yellow) )) vTaskDelay(pdMS_TO_TICKS(10)); while (!( get_button_pressed(&button) && (button == ButtonKey::button_green || button == ButtonKey::button_red || button == ButtonKey::button_yellow) )) vTaskDelay(pdMS_TO_TICKS(10));
+1 -1
View File
@@ -85,7 +85,7 @@ void clear_wires_pressed_released_cut(void) {
void strike(const char* reason) { void strike(const char* reason) {
ESP_LOGW("strike!", "%s", reason); ESP_LOGW("strike!", "%s", reason);
lcd_print(3, 0, reason); lcd_print(0, 3, reason);
time_penalty(STRIKE_TIME_PENALTY); time_penalty(STRIKE_TIME_PENALTY);
if (current_step > 0 && current_step <= N_STEPS) { if (current_step > 0 && current_step <= N_STEPS) {
total_strikes += 1; total_strikes += 1;
+101 -47
View File
@@ -13,19 +13,102 @@
#include "helper.h" #include "helper.h"
#include "steps/step0.h" #include "steps/step0.h"
#include "steps/step1.h" #include "steps/p001_step1.h"
#include "steps/step2.h" #include "steps/p001_step2.h"
#include "steps/step3.h" #include "steps/p001_step3.h"
#include "steps/step4.h" #include "steps/p001_step4.h"
#include "steps/step5.h" #include "steps/p001_step5.h"
#include "steps/step6.h" #include "steps/p001_step6.h"
#include "steps/p002_step1.h"
#include "steps/p002_step2.h"
#include "steps/p002_step3.h"
#include "steps/p002_step4.h"
#include "steps/p002_step5.h"
#include "steps/p002_step6.h"
static const char *TAG = "main"; static const char *TAG = "main";
uint32_t initial_game_time = 90*60*1000 + 1000; uint32_t initial_game_time = 90*60*1000 + 1000;
uint32_t skip_to_step = 0; uint32_t skip_to_step = 0;
uint32_t current_step = 0; uint32_t current_step = 0;
uint32_t puzzle = 0;
extern uint32_t total_strikes; extern uint32_t total_strikes;
static void do_p001() {
set_game_time(initial_game_time);
start_game_timer();
total_strikes = 0;
clean_bomb();
current_step = 1;
if (skip_to_step <= 1) p001_step1();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 2;
if (skip_to_step <= 2) p001_step2();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 3;
if (skip_to_step <= 3) p001_step3();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 4;
if (skip_to_step <= 4) p001_step4();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 5;
if (skip_to_step <= 5) p001_step5();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 6;
if (skip_to_step <= 6) p001_step6();
start_game_timer();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
stop_game_timer();
ESP_LOGI(TAG, "Bomb has been diffused. Counter-Terrorists win.");
play_clip_wav(MOUNT_POINT "/diffuse.wav", true, false, 3, 0);
display_game_results();
}
static void do_p002() {
set_game_time(initial_game_time);
start_game_timer();
total_strikes = 0;
clean_bomb();
current_step = 1;
if (skip_to_step <= 1) p002_step1();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 2;
if (skip_to_step <= 2) p002_step2();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 3;
if (skip_to_step <= 3) p002_step3();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 4;
if (skip_to_step <= 4) p002_step4();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 5;
if (skip_to_step <= 5) p002_step5();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 6;
if (skip_to_step <= 6) p002_step6();
start_game_timer();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
stop_game_timer();
ESP_LOGI(TAG, "Bomb has been diffused. Counter-Terrorists win.");
play_clip_wav(MOUNT_POINT "/diffuse.wav", true, false, 3, 0);
display_game_results();
}
extern "C" void app_main(void) { extern "C" void app_main(void) {
printf("app_main\n"); printf("app_main\n");
@@ -40,49 +123,20 @@ extern "C" void app_main(void) {
lcd_do_splash(); lcd_do_splash();
step0(); step0();
// set_recording_source(stdout, false); if (puzzle == 1) {
FILE* record_file = fopen(MOUNT_POINT "/record.txt", "w"); do_p001();
if (record_file == nullptr) { } else {
ESP_LOGE("main", "failed to open record.txt"); do_p002();
} }
set_recording_source(record_file, true);
start_recording();
set_game_time(initial_game_time); // set_recording_source(stdout, false);
start_game_timer(); // FILE* record_file = fopen(MOUNT_POINT "/record.txt", "w");
total_strikes = 0; // if (record_file == nullptr) {
clean_bomb(); // ESP_LOGE("main", "failed to open record.txt");
current_step = 1; // }
if (skip_to_step <= 1) step1(); // set_recording_source(record_file, true);
step_finish_times[current_step-1] = get_game_time(); // start_recording();
clean_bomb();
current_step = 2;
if (skip_to_step <= 2) step2();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 3;
if (skip_to_step <= 3) step3();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 4;
if (skip_to_step <= 4) step4();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 5;
if (skip_to_step <= 5) step5();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
current_step = 6;
if (skip_to_step <= 6) step6();
start_game_timer();
step_finish_times[current_step-1] = get_game_time();
clean_bomb();
stop_game_timer(); // stop_recording();
ESP_LOGI(TAG, "Bomb has been diffused. Counter-Terrorists win.");
play_clip_wav(MOUNT_POINT "/diffuse.wav", true, false, 3, 0);
display_game_results();
stop_recording();
} }
+12 -6
View File
@@ -1,12 +1,18 @@
set(SOURCES set(SOURCES
"setup_wires.cpp" "setup_wires.cpp"
"step0.cpp" "step0.cpp"
"step1.cpp" "p001_step1.cpp"
"step2.cpp" "p001_step2.cpp"
"step3.cpp" "p001_step3.cpp"
"step4.cpp" "p001_step4.cpp"
"step5.cpp" "p001_step5.cpp"
"step6.cpp" "p001_step6.cpp"
"p002_step1.cpp"
"p002_step2.cpp"
"p002_step3.cpp"
"p002_step4.cpp"
"p002_step5.cpp"
"p002_step6.cpp"
"wires_puzzle.cpp" "wires_puzzle.cpp"
) )
@@ -1,4 +1,4 @@
#include "step1.h" #include "p001_step1.h"
__attribute__((unused)) __attribute__((unused))
static const char *TAG = "step1"; static const char *TAG = "step1";
@@ -199,7 +199,7 @@ static int generate_part(void) {
static void update_lcd_count(int times) { static void update_lcd_count(int times) {
char buf[16] = {0}; char buf[16] = {0};
sprintf(buf, "%d/15", times); sprintf(buf, "%d/15", times);
lcd_print(1, 14, buf); lcd_print(14, 1, buf);
} }
static bool play_part(uint32_t time) { static bool play_part(uint32_t time) {
@@ -275,7 +275,7 @@ static bool play_part(uint32_t time) {
return true; return true;
} }
void step1(void) { void p001_step1(void) {
while (get_switch_flipped(nullptr)); while (get_switch_flipped(nullptr));
init_step(); init_step();
+10
View File
@@ -0,0 +1,10 @@
#ifndef P001_STEP_1_H
#define P001_STEP_1_H
#include <random>
#include "../drivers/all.h"
#include "../helper.h"
void p001_step1(void);
#endif /* P001_STEP_1_H */
@@ -1,4 +1,4 @@
#include "step2.h" #include "p001_step2.h"
__attribute__((unused)) __attribute__((unused))
static const char *TAG = "step2"; static const char *TAG = "step2";
@@ -91,7 +91,7 @@ static void new_puzzle(void) {
set_module_sseg_raw(display_map); set_module_sseg_raw(display_map);
} }
void step2(void) { void p001_step2(void) {
KeypadKey key; KeypadKey key;
int solved_times = 0; int solved_times = 0;
@@ -1,5 +1,5 @@
#ifndef STEP_2_H #ifndef P001_STEP_2_H
#define STEP_2_H #define P001_STEP_2_H
#include "../drivers/all.h" #include "../drivers/all.h"
#include "../helper.h" #include "../helper.h"
@@ -7,6 +7,6 @@
#include <random> #include <random>
#include <map> #include <map>
void step2(void); void p001_step2(void);
#endif /* STEP_2_H */ #endif /* P001_STEP_2_H */
@@ -1,4 +1,4 @@
#include "step3.h" #include "p001_step3.h"
#define ONE_SECOND_TIME 90'000 #define ONE_SECOND_TIME 90'000
#define THREE_SECOND_TIME 90'000 #define THREE_SECOND_TIME 90'000
@@ -72,7 +72,7 @@ static bool one_second();
static bool three_second(); static bool three_second();
static bool six_second(); static bool six_second();
void step3(void) { void p001_step3(void) {
SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary(); SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary();
if (continue_sem == nullptr) { if (continue_sem == nullptr) {
ESP_LOGE(TAG, "could not create semaphore"); ESP_LOGE(TAG, "could not create semaphore");
+10
View File
@@ -0,0 +1,10 @@
#ifndef P001_STEP_3_H
#define P001_STEP_3_H
#include <random>
#include "../drivers/all.h"
#include "../helper.h"
void p001_step3(void);
#endif /* P001_STEP_3_H */
@@ -1,4 +1,4 @@
#include "step4.h" #include "p001_step4.h"
__attribute__((unused)) __attribute__((unused))
static const char *TAG = "step4"; static const char *TAG = "step4";
@@ -379,7 +379,7 @@ static void fail() {
} }
} }
void step4() { void p001_step4() {
// TODO: extract to helper function // TODO: extract to helper function
SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary(); SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary();
if (continue_sem == nullptr) { if (continue_sem == nullptr) {
@@ -1,5 +1,5 @@
#ifndef STEP_4_H #ifndef P001_STEP_4_H
#define STEP_4_H #define P001_STEP_4_H
#include <random> #include <random>
#include "../drivers/all.h" #include "../drivers/all.h"
@@ -9,6 +9,6 @@
#define TETRIS_USE_FLASH_IMG #define TETRIS_USE_FLASH_IMG
#define TETRIS_USE_FLASH_BG_IMG #define TETRIS_USE_FLASH_BG_IMG
void step4(void); void p001_step4(void);
#endif /* STEP_4_H */ #endif /* P001_STEP_4_H */
@@ -1,4 +1,4 @@
#include "step5.h" #include "p001_step5.h"
#define TIME_CLEAR 30'000 #define TIME_CLEAR 30'000
#define TIME_PLANK 40'000 #define TIME_PLANK 40'000
@@ -178,7 +178,7 @@ bool submit_6(bool* buttons_cycling, bool button_turned_on, int led_off) {
return true; return true;
} }
void step5(void) { void p001_step5(void) {
SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary(); SemaphoreHandle_t continue_sem = xSemaphoreCreateBinary();
if (continue_sem == nullptr) { if (continue_sem == nullptr) {
ESP_LOGE(TAG, "could not create semaphore"); ESP_LOGE(TAG, "could not create semaphore");
@@ -729,7 +729,7 @@ void step5(void) {
} }
// display expression // display expression
lcd_print(2, 1, display_expression.c_str()); lcd_print(1, 2, display_expression.c_str());
// set LEDs // set LEDs
const uint32_t COLORS[] = { const uint32_t COLORS[] = {
@@ -790,8 +790,8 @@ void step5(void) {
lcd_clear(); lcd_clear();
lcd_print(1, 1, "What"); lcd_print(1, 1, "What");
lcd_print(2, 1, display_expression.c_str()); lcd_print(1, 2, display_expression.c_str());
lcd_print(3, 1, entered_string.c_str()); lcd_print(1, 3, entered_string.c_str());
} }
if (get_module_time() <= 0) { if (get_module_time() <= 0) {
strike("Ran out of time!"); strike("Ran out of time!");
@@ -849,7 +849,7 @@ void step5(void) {
// ESP_LOGI(TAG, "color string: %s", color_string.c_str()); // ESP_LOGI(TAG, "color string: %s", color_string.c_str());
lcd_print(2, 1, color_string.c_str()); lcd_print(1, 2, color_string.c_str());
std::string entered_string; std::string entered_string;
@@ -880,8 +880,8 @@ void step5(void) {
lcd_clear(); lcd_clear();
lcd_print(1, 1, "Plink"); lcd_print(1, 1, "Plink");
lcd_print(2, 1, color_string.c_str()); lcd_print(1, 2, color_string.c_str());
lcd_print(3, 1, entered_string.c_str()); lcd_print(1, 3, entered_string.c_str());
} }
if (get_module_time() <= 0) { if (get_module_time() <= 0) {
strike("Ran out of time!"); strike("Ran out of time!");
@@ -1,5 +1,5 @@
#ifndef STEP_5_H #ifndef P001_STEP_5_H
#define STEP_5_H #define P001_STEP_5_H
#include "../drivers/all.h" #include "../drivers/all.h"
#include "../helper.h" #include "../helper.h"
@@ -11,6 +11,6 @@
#include <cmath> #include <cmath>
#include <array> #include <array>
void step5(void); void p001_step5(void);
#endif /* STEP_5_H */ #endif /* P001_STEP_5_H */
@@ -1,11 +1,11 @@
#include "step6.h" #include "p001_step6.h"
__attribute__((unused)) __attribute__((unused))
static const char *TAG = "step6"; static const char *TAG = "step6";
static uint8_t cut_wires = 0; static uint8_t cut_wires = 0;
void step6(void) { void p001_step6(void) {
get_cut_wires(); get_cut_wires();
clear_all_pressed_released(); clear_all_pressed_released();
+10
View File
@@ -0,0 +1,10 @@
#ifndef P001_STEP_6_H
#define P001_STEP_6_H
#include "wires_puzzle.h"
#include "../drivers/all.h"
#include "../helper.h"
void p001_step6(void);
#endif /* P001_STEP_6_H */
+10
View File
@@ -0,0 +1,10 @@
#include "p002_step1.h"
__attribute__((unused))
static const char *TAG = "step1";
void p002_step1(void) {
// TODO: implement step 1
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_1_H
#define P002_STEP_1_H
#include "../drivers/all.h"
void p002_step1(void);
#endif /* P002_STEP_1_H */
+8
View File
@@ -0,0 +1,8 @@
#include "p002_step2.h"
__attribute__((unused))
static const char *TAG = "step2";
void p002_step2(void) {
// TODO: implement step 2
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_2_H
#define P002_STEP_2_H
#include "../drivers/all.h"
void p002_step2(void);
#endif /* P002_STEP_2_H */
+8
View File
@@ -0,0 +1,8 @@
#include "p002_step3.h"
__attribute__((unused))
static const char *TAG = "step3";
void p002_step3(void) {
// TODO: implement step 3
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_3_H
#define P002_STEP_3_H
#include "../drivers/all.h"
void p002_step3(void);
#endif /* P002_STEP_3_H */
+8
View File
@@ -0,0 +1,8 @@
#include "p002_step4.h"
__attribute__((unused))
static const char *TAG = "step4";
void p002_step4(void) {
// TODO: implement step 4
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_4_H
#define P002_STEP_4_H
#include "../drivers/all.h"
void p002_step4(void);
#endif /* P002_STEP_4_H */
+8
View File
@@ -0,0 +1,8 @@
#include "p002_step5.h"
__attribute__((unused))
static const char *TAG = "step5";
void p002_step5(void) {
// TODO: implement step 5
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_5_H
#define P002_STEP_5_H
#include "../drivers/all.h"
void p002_step5(void);
#endif /* P002_STEP_5_H */
+8
View File
@@ -0,0 +1,8 @@
#include "p002_step6.h"
__attribute__((unused))
static const char *TAG = "step6";
void p002_step6(void) {
// TODO: implement step 6
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef P002_STEP_6_H
#define P002_STEP_6_H
#include "../drivers/all.h"
void p002_step6(void);
#endif /* P002_STEP_6_H */
+3 -4
View File
@@ -11,7 +11,7 @@ void print_wires(WireColor* wires, int editing_idx) {
lcd_print(1, 1, string_buf); lcd_print(1, 1, string_buf);
cut_to_string(cut, string_buf); cut_to_string(cut, string_buf);
lcd_print(2, 1, string_buf); lcd_print(1, 2, string_buf);
wires_state = get_wires(); wires_state = get_wires();
for (int i = 0; i < NUM_WIRES; i++) { for (int i = 0; i < NUM_WIRES; i++) {
@@ -21,10 +21,9 @@ void print_wires(WireColor* wires, int editing_idx) {
string_buf[i] = '!'; string_buf[i] = '!';
} }
} }
lcd_print(3, 1, string_buf); lcd_print(1, 3, string_buf);
// TODO: find a way to indicate without a cursor. lcd_set_cursor_pos(editing_idx+1, 1);
// lcd_set_cursor_pos(editing_idx+1, 1);
} }
void setup_wires(void) { void setup_wires(void) {
+29 -25
View File
@@ -5,6 +5,7 @@ static const char* TAG = "step0";
extern uint32_t initial_game_time; extern uint32_t initial_game_time;
extern uint32_t skip_to_step; extern uint32_t skip_to_step;
extern uint32_t puzzle;
static void set_game_time(); static void set_game_time();
static void skip_to_step1() { skip_to_step = 1; } static void skip_to_step1() { skip_to_step = 1; }
@@ -13,12 +14,12 @@ static void skip_to_step3() { skip_to_step = 3; }
static void skip_to_step4() { skip_to_step = 4; } static void skip_to_step4() { skip_to_step = 4; }
static void skip_to_step5() { skip_to_step = 5; } static void skip_to_step5() { skip_to_step = 5; }
static void skip_to_step6() { skip_to_step = 6; } static void skip_to_step6() { skip_to_step = 6; }
static void try_step1() { clean_bomb(); step1(); } static void try_step1() { clean_bomb(); p001_step1(); }
static void try_step2() { clean_bomb(); step2(); } static void try_step2() { clean_bomb(); p001_step2(); }
static void try_step3() { clean_bomb(); step3(); } static void try_step3() { clean_bomb(); p001_step3(); }
static void try_step4() { clean_bomb(); step4(); } static void try_step4() { clean_bomb(); p001_step4(); }
static void try_step5() { clean_bomb(); step5(); } static void try_step5() { clean_bomb(); p001_step5(); }
static void try_step6() { clean_bomb(); step6(); } static void try_step6() { clean_bomb(); p001_step6(); }
static void issue_strike() { strike("Strike Issued"); } static void issue_strike() { strike("Strike Issued"); }
static void flashbang(); static void flashbang();
static void debug_switches(); static void debug_switches();
@@ -34,9 +35,6 @@ static void battery_stats() {
vTaskDelete(xHandle); vTaskDelete(xHandle);
} }
} }
static void hardware_config() {
}
// TODO: remove. This is temperary // TODO: remove. This is temperary
static void replay_last() { static void replay_last() {
@@ -48,6 +46,13 @@ static void replay_last() {
start_playback(); start_playback();
} }
static void do_p001() {
puzzle = 1;
}
static void do_p002() {
puzzle = 2;
}
void step0() { void step0() {
led_set(IndicatorLED::LED_SPEAKER, LEDColor::LED_COLOR_BLUE); led_set(IndicatorLED::LED_SPEAKER, LEDColor::LED_COLOR_BLUE);
@@ -62,17 +67,17 @@ void step0() {
StarCodeEntry star_codes[] = { StarCodeEntry star_codes[] = {
{ {
.code = "9819", .code = "9819",
.display_text = "Diffusal Initiated", .display_text = "Start P001",
.delay_us = 2'000'000, .delay_us = 2'000'000,
.callback = nullptr, .callback = do_p001,
.triggered_sem = continue_sem, .triggered_sem = continue_sem,
}, },
{ {
.code = "59860", .code = "3141",
.display_text = "Hardware Config", .display_text = "Start P002",
.delay_us = 2'000'000, .delay_us = 2'000'000,
.callback = hardware_config .callback = do_p002,
.triggered_sem = nullptr, .triggered_sem = continue_sem,
}, },
{ {
.code = "59861", .code = "59861",
@@ -224,8 +229,7 @@ static void _update_display(uint8_t* digits, uint8_t cursor_pos) {
lcd_print(1, 1, str_buf); lcd_print(1, 1, str_buf);
cursor_pos = MAX(0, MIN(4, cursor_pos)); cursor_pos = MAX(0, MIN(4, cursor_pos));
int mapped_cursor_pos = CURSOR_POS_MAP[cursor_pos]; int mapped_cursor_pos = CURSOR_POS_MAP[cursor_pos];
// TODO: find some way to indicate without a cursor. lcd_set_cursor_pos(mapped_cursor_pos, 1);
// lcd_set_cursor_pos(mapped_cursor_pos, 1);
} }
static void set_game_time() { static void set_game_time() {
@@ -346,32 +350,32 @@ static void debug_switches() {
while (1) { while (1) {
if (get_button_pressed(&button)) { if (get_button_pressed(&button)) {
sprintf(buf, "Button Pressed: %d ", button); sprintf(buf, "Button Pressed: %d ", button);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
if (get_button_released(&button)) { if (get_button_released(&button)) {
sprintf(buf, "Button Released: %d", button); sprintf(buf, "Button Released: %d", button);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
if (get_switch_flipped_down(&switch_)) { if (get_switch_flipped_down(&switch_)) {
sprintf(buf, "Switch Down: %d ", switch_); sprintf(buf, "Switch Down: %d ", switch_);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
if (get_switch_flipped_up(&switch_)) { if (get_switch_flipped_up(&switch_)) {
sprintf(buf, "Switch Up: %d ", switch_); sprintf(buf, "Switch Up: %d ", switch_);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
if (get_switch_touch_pressed(&switch_)) { if (get_switch_touch_pressed(&switch_)) {
sprintf(buf, "Switch Touch: %d ", switch_); sprintf(buf, "Switch Touch: %d ", switch_);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
if (get_switch_touch_released(&switch_)) { if (get_switch_touch_released(&switch_)) {
sprintf(buf, "Switch Un-touch: %d", switch_); sprintf(buf, "Switch Un-touch: %d", switch_);
lcd_print(3, 0, buf); lcd_print(0, 3, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
@@ -380,7 +384,7 @@ static void debug_switches() {
switch_touch_state = new_switch_touch_state; switch_touch_state = new_switch_touch_state;
print_4bin_rev(bin_buf, switch_touch_state); print_4bin_rev(bin_buf, switch_touch_state);
sprintf(buf, "t: %s", bin_buf); sprintf(buf, "t: %s", bin_buf);
lcd_print(0, 1, buf); lcd_print(1, 0, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
@@ -398,7 +402,7 @@ static void debug_switches() {
button_state = new_button_state; button_state = new_button_state;
print_4bin_rev(bin_buf, button_state); print_4bin_rev(bin_buf, button_state);
sprintf(buf, "b: %s", bin_buf); sprintf(buf, "b: %s", bin_buf);
lcd_print(2, 1, buf); lcd_print(1, 2, buf);
ESP_LOGI(TAG, "%s", buf); ESP_LOGI(TAG, "%s", buf);
} }
+6 -6
View File
@@ -4,12 +4,12 @@
#include "../drivers/all.h" #include "../drivers/all.h"
#include "setup_wires.h" #include "setup_wires.h"
#include "step1.h" #include "p001_step1.h"
#include "step2.h" #include "p001_step2.h"
#include "step3.h" #include "p001_step3.h"
#include "step4.h" #include "p001_step4.h"
#include "step5.h" #include "p001_step5.h"
#include "step6.h" #include "p001_step6.h"
/// Wait for "*9819" /// Wait for "*9819"
void step0(void); void step0(void);
-10
View File
@@ -1,10 +0,0 @@
#ifndef STEP_1_H
#define STEP_1_H
#include <random>
#include "../drivers/all.h"
#include "../helper.h"
void step1(void);
#endif /* STEP_1_H */
-10
View File
@@ -1,10 +0,0 @@
#ifndef STEP_3_H
#define STEP_3_H
#include <random>
#include "../drivers/all.h"
#include "../helper.h"
void step3(void);
#endif /* STEP_3_H */
-10
View File
@@ -1,10 +0,0 @@
#ifndef STEP_6_H
#define STEP_6_H
#include "wires_puzzle.h"
#include "../drivers/all.h"
#include "../helper.h"
void step6(void);
#endif /* STEP_6_H */
+74 -31
View File
@@ -1,6 +1,6 @@
# #
# Automatically generated file. DO NOT EDIT. # Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.3.2 Project Configuration # Espressif IoT Development Framework (ESP-IDF) 5.3.5 Project Configuration
# #
CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
@@ -11,6 +11,7 @@ CONFIG_SOC_PHY_SUPPORTED=y
CONFIG_SOC_WIFI_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y
CONFIG_SOC_TWAI_SUPPORTED=y CONFIG_SOC_TWAI_SUPPORTED=y
CONFIG_SOC_GDMA_SUPPORTED=y CONFIG_SOC_GDMA_SUPPORTED=y
CONFIG_SOC_UHCI_SUPPORTED=y
CONFIG_SOC_AHB_GDMA_SUPPORTED=y CONFIG_SOC_AHB_GDMA_SUPPORTED=y
CONFIG_SOC_GPTIMER_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y
CONFIG_SOC_LCDCAM_SUPPORTED=y CONFIG_SOC_LCDCAM_SUPPORTED=y
@@ -64,6 +65,7 @@ CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
CONFIG_SOC_PM_SUPPORTED=y CONFIG_SOC_PM_SUPPORTED=y
CONFIG_SOC_SIMD_INSTRUCTION_SUPPORTED=y
CONFIG_SOC_XTAL_SUPPORT_40M=y CONFIG_SOC_XTAL_SUPPORT_40M=y
CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y
CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y
@@ -100,7 +102,8 @@ CONFIG_SOC_CPU_HAS_FPU=y
CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y
CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x40
CONFIG_SOC_SIMD_PREFERRED_DATA_ALIGNMENT=16
CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096
CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16
CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100
@@ -176,7 +179,7 @@ CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8
CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48
CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y
CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y
CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y CONFIG_SOC_RMT_SUPPORT_ASYNC_STOP=y
CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y
CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y
CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y
@@ -203,7 +206,8 @@ CONFIG_SOC_RTCIO_PIN_COUNT=22
CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y
CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y
CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y
CONFIG_SOC_SDM_GROUPS=y CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_SDM_GROUPS=1
CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8
CONFIG_SOC_SDM_CLK_SUPPORT_APB=y CONFIG_SOC_SDM_CLK_SUPPORT_APB=y
CONFIG_SOC_SPI_PERIPH_NUM=3 CONFIG_SOC_SPI_PERIPH_NUM=3
@@ -243,6 +247,8 @@ CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54
CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y
CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y
CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4
CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32
CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16
CONFIG_SOC_TOUCH_SENSOR_VERSION=2 CONFIG_SOC_TOUCH_SENSOR_VERSION=2
CONFIG_SOC_TOUCH_SENSOR_NUM=15 CONFIG_SOC_TOUCH_SENSOR_NUM=15
CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y
@@ -265,6 +271,7 @@ CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
CONFIG_SOC_UART_SUPPORT_APB_CLK=y CONFIG_SOC_UART_SUPPORT_APB_CLK=y
CONFIG_SOC_UART_SUPPORT_RTC_CLK=y CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
CONFIG_SOC_UHCI_NUM=1
CONFIG_SOC_USB_OTG_PERIPH_NUM=1 CONFIG_SOC_USB_OTG_PERIPH_NUM=1
CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968
CONFIG_SOC_SHA_SUPPORT_DMA=y CONFIG_SOC_SHA_SUPPORT_DMA=y
@@ -350,6 +357,7 @@ CONFIG_SOC_WIFI_HW_TSF=y
CONFIG_SOC_WIFI_FTM_SUPPORT=y CONFIG_SOC_WIFI_FTM_SUPPORT=y
CONFIG_SOC_WIFI_GCMP_SUPPORT=y CONFIG_SOC_WIFI_GCMP_SUPPORT=y
CONFIG_SOC_WIFI_WAPI_SUPPORT=y CONFIG_SOC_WIFI_WAPI_SUPPORT=y
CONFIG_SOC_WIFI_TXOP_SUPPORT=y
CONFIG_SOC_WIFI_CSI_SUPPORT=y CONFIG_SOC_WIFI_CSI_SUPPORT=y
CONFIG_SOC_WIFI_MESH_SUPPORT=y CONFIG_SOC_WIFI_MESH_SUPPORT=y
CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
@@ -593,7 +601,21 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth # Bluetooth
# #
# CONFIG_BT_ENABLED is not set # CONFIG_BT_ENABLED is not set
CONFIG_BT_ALARM_MAX_NUM=50
#
# Common Options
#
#
# BLE Log
#
# CONFIG_BLE_LOG_ENABLED is not set
# end of BLE Log
# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
# CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED is not set
# CONFIG_BT_LE_USED_MEM_STATISTICS_ENABLED is not set
# end of Common Options
# end of Bluetooth # end of Bluetooth
# #
@@ -617,6 +639,7 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y
# Legacy ADC Driver Configuration # Legacy ADC Driver Configuration
# #
# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
# #
# Legacy ADC Calibration Configuration # Legacy ADC Calibration Configuration
@@ -629,42 +652,55 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y
# Legacy MCPWM Driver Configurations # Legacy MCPWM Driver Configurations
# #
# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy MCPWM Driver Configurations # end of Legacy MCPWM Driver Configurations
# #
# Legacy Timer Group Driver Configurations # Legacy Timer Group Driver Configurations
# #
# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Timer Group Driver Configurations # end of Legacy Timer Group Driver Configurations
# #
# Legacy RMT Driver Configurations # Legacy RMT Driver Configurations
# #
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy RMT Driver Configurations # end of Legacy RMT Driver Configurations
# #
# Legacy I2S Driver Configurations # Legacy I2S Driver Configurations
# #
# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2S Driver Configurations # end of Legacy I2S Driver Configurations
#
# Legacy I2C Driver Configurations
#
# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2C Driver Configurations
# #
# Legacy PCNT Driver Configurations # Legacy PCNT Driver Configurations
# #
# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy PCNT Driver Configurations # end of Legacy PCNT Driver Configurations
# #
# Legacy SDM Driver Configurations # Legacy SDM Driver Configurations
# #
# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy SDM Driver Configurations # end of Legacy SDM Driver Configurations
# #
# Legacy Temperature Sensor Driver Configurations # Legacy Temperature Sensor Driver Configurations
# #
# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set # CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Temperature Sensor Driver Configurations # end of Legacy Temperature Sensor Driver Configurations
# end of Driver Configurations # end of Driver Configurations
@@ -687,6 +723,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set # CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set # CONFIG_ESP_TLS_INSECURE is not set
CONFIG_ESP_TLS_DYN_BUF_STRATEGY_SUPPORTED=y
# end of ESP-TLS # end of ESP-TLS
# #
@@ -724,6 +761,7 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set # CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set # CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
CONFIG_GPTIMER_OBJ_CACHE_SAFE=y
# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set # CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:GPTimer Configurations # end of ESP-Driver:GPTimer Configurations
@@ -807,6 +845,14 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
# CONFIG_UART_ISR_IN_IRAM is not set # CONFIG_UART_ISR_IN_IRAM is not set
# end of ESP-Driver:UART Configurations # end of ESP-Driver:UART Configurations
#
# ESP-Driver:UHCI Configurations
#
# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
# CONFIG_UHCI_ISR_CACHE_SAFE is not set
# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:UHCI Configurations
# #
# ESP-Driver:USB Serial/JTAG Configuration # ESP-Driver:USB Serial/JTAG Configuration
# #
@@ -842,6 +888,13 @@ CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32 CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub # end of GDB Stub
#
# ESP HID
#
CONFIG_ESPHID_TASK_SIZE_BT=2048
CONFIG_ESPHID_TASK_SIZE_BLE=4096
# end of ESP HID
# #
# ESP HTTP client # ESP HTTP client
# #
@@ -1015,7 +1068,11 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set # CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set # CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0 CONFIG_ESP_PHY_CALIBRATION_MODE=0
CONFIG_ESP_PHY_PLL_TRACK_PERIOD_MS=1000
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set # CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
CONFIG_ESP_PHY_IRAM_OPT=y
# CONFIG_ESP_PHY_DEBUG is not set
# end of PHY # end of PHY
# #
@@ -1052,6 +1109,7 @@ CONFIG_SPIRAM_CS_IO=26
CONFIG_SPIRAM_SPEED_40M=y CONFIG_SPIRAM_SPEED_40M=y
CONFIG_SPIRAM_SPEED=40 CONFIG_SPIRAM_SPEED=40
CONFIG_SPIRAM_BOOT_INIT=y CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_PRE_CONFIGURE_MEMORY_PROTECTION=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set # CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
# CONFIG_SPIRAM_USE_MEMMAP is not set # CONFIG_SPIRAM_USE_MEMMAP is not set
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set # CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
@@ -1216,9 +1274,9 @@ CONFIG_ESP_WIFI_ENABLED=y
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
CONFIG_ESP_WIFI_STATIC_TX_BUFFER=y CONFIG_ESP_WIFI_STATIC_TX_BUFFER=y
# CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER is not set
CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0
CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16
CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM=32
CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set # CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
@@ -1228,7 +1286,6 @@ CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP_WIFI_TX_BA_WIN=6 CONFIG_ESP_WIFI_TX_BA_WIN=6
CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP_WIFI_RX_BA_WIN=6 CONFIG_ESP_WIFI_RX_BA_WIN=6
# CONFIG_ESP_WIFI_AMSDU_TX_ENABLED is not set
CONFIG_ESP_WIFI_NVS_ENABLED=y CONFIG_ESP_WIFI_NVS_ENABLED=y
CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y
# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set # CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set
@@ -1270,7 +1327,6 @@ CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
# end of WPS Configuration Options # end of WPS Configuration Options
# CONFIG_ESP_WIFI_DEBUG_PRINT is not set # CONFIG_ESP_WIFI_DEBUG_PRINT is not set
# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set # CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set
# end of Wi-Fi # end of Wi-Fi
@@ -1400,7 +1456,6 @@ CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
CONFIG_HAL_WDT_USE_ROM_IMPL=y CONFIG_HAL_WDT_USE_ROM_IMPL=y
CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y
CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y
# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set
# end of Hardware Abstraction Layer (HAL) and Low Level (LL) # end of Hardware Abstraction Layer (HAL) and Low Level (LL)
# #
@@ -1489,6 +1544,7 @@ CONFIG_LWIP_DHCPS=y
CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_LEASE_UNIT=60
CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
CONFIG_LWIP_DHCPS_ADD_DNS=y
# end of DHCP server # end of DHCP server
# CONFIG_LWIP_AUTOIP is not set # CONFIG_LWIP_AUTOIP is not set
@@ -1640,6 +1696,7 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set # CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set # CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# CONFIG_MBEDTLS_SSL_KEYING_MATERIAL_EXPORT is not set
CONFIG_MBEDTLS_PKCS7_C=y CONFIG_MBEDTLS_PKCS7_C=y
# end of mbedTLS v3.x related # end of mbedTLS v3.x related
@@ -1673,6 +1730,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y
# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set # CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
CONFIG_MBEDTLS_SHA1_C=y
CONFIG_MBEDTLS_SHA512_C=y CONFIG_MBEDTLS_SHA512_C=y
# CONFIG_MBEDTLS_SHA3_C is not set # CONFIG_MBEDTLS_SHA3_C is not set
CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
@@ -1752,6 +1810,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_THREADING_C is not set # CONFIG_MBEDTLS_THREADING_C is not set
CONFIG_MBEDTLS_ERROR_STRINGS=y CONFIG_MBEDTLS_ERROR_STRINGS=y
CONFIG_MBEDTLS_FS_IO=y CONFIG_MBEDTLS_FS_IO=y
# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
# end of mbedTLS # end of mbedTLS
# #
@@ -1802,25 +1861,12 @@ CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y
# CONFIG_OPENTHREAD_ENABLED is not set # CONFIG_OPENTHREAD_ENABLED is not set
# #
# Thread Operational Dataset # OpenThread Spinel
# #
CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP"
CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64"
CONFIG_OPENTHREAD_NETWORK_CHANNEL=15
CONFIG_OPENTHREAD_NETWORK_PANID=0x1234
CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe"
CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff"
CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53"
# end of Thread Operational Dataset
CONFIG_OPENTHREAD_XTAL_ACCURACY=130
# CONFIG_OPENTHREAD_SPINEL_ONLY is not set # CONFIG_OPENTHREAD_SPINEL_ONLY is not set
CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y # end of OpenThread Spinel
# # CONFIG_OPENTHREAD_DEBUG is not set
# Thread Address Query Config
#
# end of Thread Address Query Config
# end of OpenThread # end of OpenThread
# #
@@ -1829,6 +1875,7 @@ CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y
# end of Protocomm # end of Protocomm
# #
@@ -1880,6 +1927,7 @@ CONFIG_SPI_FLASH_SUSPEND_QVL_SUPPORTED=y
# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set # CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set # CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
# end of Optional and Experimental Features (READ DOCS FIRST) # end of Optional and Experimental Features (READ DOCS FIRST)
# end of Main Flash configuration # end of Main Flash configuration
@@ -2459,7 +2507,6 @@ CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
CONFIG_ESP32S3_DEBUG_OCDAWARE=y CONFIG_ESP32S3_DEBUG_OCDAWARE=y
CONFIG_BROWNOUT_DET=y CONFIG_BROWNOUT_DET=y
CONFIG_ESP32S3_BROWNOUT_DET=y CONFIG_ESP32S3_BROWNOUT_DET=y
CONFIG_ESP32S3_BROWNOUT_DET=y
CONFIG_BROWNOUT_DET_LVL_SEL_7=y CONFIG_BROWNOUT_DET_LVL_SEL_7=y
CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y
# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
@@ -2482,17 +2529,14 @@ CONFIG_ESP32_WIFI_ENABLED=y
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y
# CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER is not set
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0
CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set # CONFIG_ESP32_WIFI_CSI_ENABLED is not set
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_TX_BA_WIN=6
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_RX_BA_WIN=6
CONFIG_ESP32_WIFI_RX_BA_WIN=6
# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set
CONFIG_ESP32_WIFI_NVS_ENABLED=y CONFIG_ESP32_WIFI_NVS_ENABLED=y
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set # CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
@@ -2513,7 +2557,6 @@ CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set # CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set
# CONFIG_WPA_WPS_STRICT is not set # CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_DEBUG_PRINT is not set # CONFIG_WPA_DEBUG_PRINT is not set
# CONFIG_WPA_TESTING_OPTIONS is not set
# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH 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_UART is not set
CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y