update steps 3 & 5
This commit is contained in:
+141
-132
@@ -6,13 +6,15 @@ static const char* TAG = "step0";
|
||||
extern uint32_t initial_game_time;
|
||||
extern uint32_t skip_to_step;
|
||||
|
||||
static SemaphoreHandle_t continue_sem;
|
||||
|
||||
static void set_game_time();
|
||||
static void skip_to_step1() { skip_to_step = 1; }
|
||||
static void skip_to_step2() { skip_to_step = 2; }
|
||||
static void skip_to_step3() { skip_to_step = 3; }
|
||||
static void skip_to_step4() { skip_to_step = 4; }
|
||||
static void skip_to_step5() { skip_to_step = 5; }
|
||||
static void skip_to_step6() { skip_to_step = 6; }
|
||||
static void skip_to_step1() { skip_to_step = 1; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void skip_to_step2() { skip_to_step = 2; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void skip_to_step3() { skip_to_step = 3; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void skip_to_step4() { skip_to_step = 4; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void skip_to_step5() { skip_to_step = 5; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void skip_to_step6() { skip_to_step = 6; xSemaphoreGive(continue_sem, portMAX_DELAY); }
|
||||
static void try_step1() { clean_bomb(); step1(); }
|
||||
static void try_step2() { clean_bomb(); step2(); }
|
||||
static void try_step3() { clean_bomb(); step3(); }
|
||||
@@ -45,138 +47,145 @@ static void replay_last() {
|
||||
start_playback();
|
||||
}
|
||||
|
||||
/// Wait for "*9819"
|
||||
static const StarCodeEntry star_codes[] = {
|
||||
{
|
||||
.code = "9819",
|
||||
.display_text = "Defusal Initiated",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = nullptr,
|
||||
},
|
||||
{
|
||||
.code = "*9861",
|
||||
.display_text = "Set Up Wires",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = setup_wires,
|
||||
},
|
||||
{
|
||||
.code = "59862",
|
||||
.display_text = "Set Game Time",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = set_game_time,
|
||||
},
|
||||
{
|
||||
.code = "59863",
|
||||
.display_text = "Debug Switches",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = debug_switches,
|
||||
},
|
||||
{
|
||||
.code = "59864",
|
||||
.display_text = "Battery Stats",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = battery_stats,
|
||||
},
|
||||
{
|
||||
.code = "59871",
|
||||
.display_text = "Try Step 1",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step1,
|
||||
},
|
||||
{
|
||||
.code = "59872",
|
||||
.display_text = "Try Step 2",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step2,
|
||||
},
|
||||
{
|
||||
.code = "59873",
|
||||
.display_text = "Try Step 3",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step3,
|
||||
},
|
||||
{
|
||||
.code = "59874",
|
||||
.display_text = "Try Step 4",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step4,
|
||||
},
|
||||
{
|
||||
.code = "59875",
|
||||
.display_text = "Try Step 5",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step5,
|
||||
},
|
||||
{
|
||||
.code = "59876",
|
||||
.display_text = "Try Step 6",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = try_step6,
|
||||
},
|
||||
{
|
||||
.code = "59881",
|
||||
.display_text = "Skip To Step 1",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step1,
|
||||
},
|
||||
{
|
||||
.code = "59882",
|
||||
.display_text = "Skip To Step 2",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step2,
|
||||
},
|
||||
{
|
||||
.code = "59883",
|
||||
.display_text = "Skip To Step 3",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step3,
|
||||
},
|
||||
{
|
||||
.code = "59884",
|
||||
.display_text = "Skip To Step 4",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step4,
|
||||
},
|
||||
{
|
||||
.code = "59885",
|
||||
.display_text = "Skip To Step 5",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step5,
|
||||
},
|
||||
{
|
||||
.code = "59886",
|
||||
.display_text = "Skip To Step 6",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = skip_to_step6,
|
||||
},
|
||||
{
|
||||
.code = "1111",
|
||||
.display_text = "Issue Strike",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = issue_strike,
|
||||
},
|
||||
{
|
||||
.code = "1112",
|
||||
.display_text = "????",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = flashbang,
|
||||
},
|
||||
{
|
||||
.code = "1113",
|
||||
.display_text = "replay_last",
|
||||
.delay_ticks = pdMS_TO_TICKS(2000),
|
||||
.callback = replay_last,
|
||||
},
|
||||
};
|
||||
const static size_t len = sizeof(star_codes)/sizeof(star_codes[0]);
|
||||
|
||||
void step0() {
|
||||
uint8_t _byte;
|
||||
continue_sem = xSemaphoreCreateBinary();
|
||||
if (continue_sem == nullptr) {
|
||||
ESP_FAIL("could not create semaphore");
|
||||
}
|
||||
|
||||
led_set(IndicatorLED::LED_SPEAKER, LEDColor::LED_COLOR_BLUE);
|
||||
leds_flush();
|
||||
|
||||
StarCodeHandler star_codes[] = {
|
||||
{
|
||||
.code = "*9819",
|
||||
.display_text = "Defusal Initiated",
|
||||
.should_exit = true,
|
||||
.callback = nullptr,
|
||||
},
|
||||
{
|
||||
.code = "*59861",
|
||||
.display_text = "Set Up Wires",
|
||||
.should_exit = false,
|
||||
.callback = setup_wires,
|
||||
},
|
||||
{
|
||||
.code = "*59862",
|
||||
.display_text = "Set Game Time",
|
||||
.should_exit = false,
|
||||
.callback = set_game_time,
|
||||
},
|
||||
{
|
||||
.code = "*59863",
|
||||
.display_text = "Debug Switches",
|
||||
.should_exit = false,
|
||||
.callback = debug_switches,
|
||||
},
|
||||
{
|
||||
.code = "*59864",
|
||||
.display_text = "Battery Stats",
|
||||
.should_exit = false,
|
||||
.callback = battery_stats,
|
||||
},
|
||||
{
|
||||
.code = "*59871",
|
||||
.display_text = "Try Step 1",
|
||||
.should_exit = false,
|
||||
.callback = try_step1,
|
||||
},
|
||||
{
|
||||
.code = "*59872",
|
||||
.display_text = "Try Step 2",
|
||||
.should_exit = false,
|
||||
.callback = try_step2,
|
||||
},
|
||||
{
|
||||
.code = "*59873",
|
||||
.display_text = "Try Step 3",
|
||||
.should_exit = false,
|
||||
.callback = try_step3,
|
||||
},
|
||||
{
|
||||
.code = "*59874",
|
||||
.display_text = "Try Step 4",
|
||||
.should_exit = false,
|
||||
.callback = try_step4,
|
||||
},
|
||||
{
|
||||
.code = "*59875",
|
||||
.display_text = "Try Step 5",
|
||||
.should_exit = false,
|
||||
.callback = try_step5,
|
||||
},
|
||||
{
|
||||
.code = "*59876",
|
||||
.display_text = "Try Step 6",
|
||||
.should_exit = false,
|
||||
.callback = try_step6,
|
||||
},
|
||||
{
|
||||
.code = "*59881",
|
||||
.display_text = "Skip To Step 1",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step1,
|
||||
},
|
||||
{
|
||||
.code = "*59882",
|
||||
.display_text = "Skip To Step 2",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step2,
|
||||
},
|
||||
{
|
||||
.code = "*59883",
|
||||
.display_text = "Skip To Step 3",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step3,
|
||||
},
|
||||
{
|
||||
.code = "*59884",
|
||||
.display_text = "Skip To Step 4",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step4,
|
||||
},
|
||||
{
|
||||
.code = "*59885",
|
||||
.display_text = "Skip To Step 5",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step5,
|
||||
},
|
||||
{
|
||||
.code = "*59886",
|
||||
.display_text = "Skip To Step 6",
|
||||
.should_exit = true,
|
||||
.callback = skip_to_step6,
|
||||
},
|
||||
{
|
||||
.code = "*1111",
|
||||
.display_text = "Issue Strike",
|
||||
.should_exit = false,
|
||||
.callback = issue_strike,
|
||||
},
|
||||
{
|
||||
.code = "*1112",
|
||||
.display_text = "????",
|
||||
.should_exit = false,
|
||||
.callback = flashbang,
|
||||
},
|
||||
{
|
||||
.code = "*1113",
|
||||
.display_text = "replay_last",
|
||||
.should_exit = false,
|
||||
.callback = replay_last,
|
||||
},
|
||||
};
|
||||
int len = sizeof(star_codes)/sizeof(StarCodeHandler);
|
||||
do_star_codes(star_codes, len);
|
||||
add_star_codes(star_codes, len);
|
||||
xSemaphoreTake(continue_sem, portMAX_DELAY);
|
||||
rm_star_codes(star_codes, len);
|
||||
}
|
||||
|
||||
|
||||
static const int CURSOR_POS_MAP[5] = {1, 3, 4, 6, 7};
|
||||
static char str_buf[18] = {0};
|
||||
static void _update_display(uint8_t* digits, uint8_t cursor_pos) {
|
||||
|
||||
+1
-6
@@ -1,12 +1,7 @@
|
||||
#ifndef STEP_0_H
|
||||
#define STEP_0_H
|
||||
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/char_lcd.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/power.h"
|
||||
#include "setup_wires.h"
|
||||
#include "../helper.h"
|
||||
#include "../drivers/all.h"
|
||||
|
||||
#include "step1.h"
|
||||
#include "step2.h"
|
||||
|
||||
+2
-7
@@ -2,13 +2,8 @@
|
||||
#define STEP_1_H
|
||||
|
||||
#include <random>
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/tft.h"
|
||||
#include "../drivers/leds.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/speaker.h"
|
||||
#include "../drivers/game_timer.h"
|
||||
#include "../drivers/char_lcd.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
|
||||
void step1(void);
|
||||
|
||||
|
||||
+1
-5
@@ -1,11 +1,7 @@
|
||||
#ifndef STEP_2_H
|
||||
#define STEP_2_H
|
||||
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/game_timer.h"
|
||||
#include "../drivers/leds.h"
|
||||
#include "../drivers/speaker.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
|
||||
+21
-12
@@ -21,6 +21,8 @@ static const char* TONE_FILES[] = {
|
||||
MOUNT_POINT "/high-6.wav",
|
||||
};
|
||||
|
||||
static const size_t LCD_STRING_SOMETHING = 0;
|
||||
static const size_t LCD_STRING_NOTHING = 1;
|
||||
static const char* LCD_STRINGS[] = {
|
||||
"something",
|
||||
"nothing",
|
||||
@@ -49,13 +51,20 @@ static std::uniform_int_distribution<> lcd_rand_char_dist(0, sizeof(lcd_random_c
|
||||
static std::uniform_int_distribution<> has_coconut_dist(0, 2);
|
||||
static std::uniform_int_distribution<> coconut_position_dist(0, 13);
|
||||
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_RED = 0;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_YELLOW = 1;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_GREEN = 2;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_BLUE = 3;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_PINK = 4;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_WHITE = 5;
|
||||
const static uint32_t NEOPIXEL_COLOR_IDX_OFF = 6;
|
||||
static uint32_t NEOPIXEL_COLORS[7] = {
|
||||
LEDColor::LED_COLOR_RED,
|
||||
LEDColor::LED_COLOR_ORANGE,
|
||||
LEDColor::LED_COLOR_YELLOW,
|
||||
LEDColor::LED_COLOR_GREEN,
|
||||
LEDColor::LED_COLOR_BLUE,
|
||||
LEDColor::LED_COLOR_PINK,
|
||||
LEDColor::LED_COLOR_WHITE,
|
||||
LEDColor::LED_COLOR_OFF,
|
||||
};
|
||||
|
||||
@@ -82,7 +91,7 @@ void step3(void) {
|
||||
|
||||
play_clip_wav(MOUNT_POINT "/ready.wav", true, false, 3, 0);
|
||||
// The high pitched tones need to be scaled down by 3 more
|
||||
play_clip_wav(TONE_FILES[tone], false, false, 2 + (tone/3) * 3, 0);
|
||||
play_clip_wav(TONE_FILES[tone], false, false, 1 + (tone/3) * 4, 0);
|
||||
|
||||
bool correct = false;
|
||||
switch (tone % 3) {
|
||||
@@ -221,16 +230,16 @@ static bool one_second() {
|
||||
int red_led_count = 0;
|
||||
int blue_led_count = 0;
|
||||
for (int i = 0; i < LED_COUNT; i++) {
|
||||
if (indicator_led_idxs[i] == 0) {
|
||||
if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_RED) {
|
||||
red_led_count++;
|
||||
} else if (indicator_led_idxs[i] == 4) {
|
||||
} else if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_BLUE) {
|
||||
blue_led_count++;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t correct_switches = four_bit_flag(
|
||||
speaker_color == 0 || speaker_color == 1 || speaker_color == 2,
|
||||
lcd_string_idx == 0 || lcd_string_idx == 1,
|
||||
speaker_color == NEOPIXEL_COLOR_IDX_RED || speaker_color == NEOPIXEL_COLOR_IDX_YELLOW || speaker_color == NEOPIXEL_COLOR_IDX_PINK,
|
||||
lcd_string_idx == LCD_STRING_SOMETHING || lcd_string_idx == LCD_STRING_NOTHING,
|
||||
was_high,
|
||||
!was_high
|
||||
);
|
||||
@@ -280,9 +289,9 @@ static bool three_second() {
|
||||
int red_led_count = 0;
|
||||
int blue_led_count = 0;
|
||||
for (int i = 0; i < LED_COUNT; i++) {
|
||||
if (indicator_led_idxs[i] == 0) {
|
||||
if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_RED) {
|
||||
red_led_count++;
|
||||
} else if (indicator_led_idxs[i] == 4) {
|
||||
} else if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_BLUE) {
|
||||
blue_led_count++;
|
||||
}
|
||||
}
|
||||
@@ -345,7 +354,7 @@ static bool six_second() {
|
||||
|
||||
bool was_high = (tone / 3) == 1;
|
||||
|
||||
bool second_switch_correct_state = (indicator_led_idxs[IndicatorLED::LED_S2] == 0) || (indicator_led_idxs[IndicatorLED::LED_S2] == 6);
|
||||
bool second_switch_correct_state = (indicator_led_idxs[IndicatorLED::LED_S2] == NEOPIXEL_COLOR_IDX_RED) || (indicator_led_idxs[IndicatorLED::LED_S2] == NEOPIXEL_COLOR_IDX_OFF);
|
||||
second_switch_correct_state = second_switch_correct_state || was_high;
|
||||
|
||||
rng_leds();
|
||||
@@ -354,16 +363,16 @@ static bool six_second() {
|
||||
int green_led_count = 0;
|
||||
int blue_led_count = 0;
|
||||
for (int i = 0; i < LED_COUNT; i++) {
|
||||
if (indicator_led_idxs[i] == 4) {
|
||||
if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_BLUE) {
|
||||
blue_led_count++;
|
||||
} else if (indicator_led_idxs[i] == 3) {
|
||||
} else if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_GREEN) {
|
||||
green_led_count++;
|
||||
}
|
||||
}
|
||||
|
||||
int pink_led_on_bottom_count = 0;
|
||||
for (int i = IndicatorLED::LED_RFID; i < LED_COUNT; i++) {
|
||||
if (indicator_led_idxs[i] == 5) {
|
||||
if (indicator_led_idxs[i] == NEOPIXEL_COLOR_IDX_PINK) {
|
||||
pink_led_on_bottom_count++;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-6
@@ -2,12 +2,7 @@
|
||||
#define STEP_3_H
|
||||
|
||||
#include <random>
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/speaker.h"
|
||||
#include "../drivers/leds.h"
|
||||
#include "../drivers/char_lcd.h"
|
||||
#include "../drivers/game_timer.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
|
||||
void step3(void);
|
||||
|
||||
+1
-6
@@ -2,12 +2,7 @@
|
||||
#define STEP_4_H
|
||||
|
||||
#include <random>
|
||||
#include "../drivers/tft.h"
|
||||
#include "../drivers/speaker.h"
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/game_timer.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/char_lcd.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
|
||||
#define TETRIS_USE_FLASH_IMG
|
||||
|
||||
+8
-12
@@ -179,16 +179,13 @@ bool submit_6(bool* buttons_cycling, bool button_turned_on, int led_off) {
|
||||
}
|
||||
|
||||
void step5(void) {
|
||||
StarCodeHandler star_codes[] = {
|
||||
{
|
||||
.code = "*2648",
|
||||
.display_text = "Starting...",
|
||||
.should_exit = true,
|
||||
.callback = nullptr,
|
||||
},
|
||||
StarCodeEntry star_code = {
|
||||
.code = "*2648",
|
||||
.display_text = "Starting...",
|
||||
.should_exit = true,
|
||||
.callback = nullptr,
|
||||
};
|
||||
int len = sizeof(star_codes)/sizeof(StarCodeHandler);
|
||||
do_star_codes(star_codes, len);
|
||||
add_star_code(star_code);
|
||||
|
||||
std::vector<int> all_leds;
|
||||
|
||||
@@ -226,7 +223,6 @@ void step5(void) {
|
||||
bool solved_correctly = false;
|
||||
|
||||
int puzzle = puzzle_dist(gen);
|
||||
// int puzzle = 2;
|
||||
|
||||
switch (puzzle) {
|
||||
case 0: {
|
||||
@@ -900,13 +896,13 @@ void step5(void) {
|
||||
stop_module_timer();
|
||||
if (solved_correctly) {
|
||||
solved_puzzles++;
|
||||
play_clip_wav(MOUNT_POINT "/correct.wav", true, false, 3, 0);
|
||||
play_clip_wav(MOUNT_POINT "/partdone.wav", true, false, 0, 0);
|
||||
vTaskDelay(pdMS_TO_TICKS(500));
|
||||
solved_correctly = false;
|
||||
} else {
|
||||
vTaskDelay(pdMS_TO_TICKS(3000));
|
||||
}
|
||||
clear_all_pressed_released();
|
||||
play_clip_wav(MOUNT_POINT "/stepdone.wav", true, false, 1, 0);
|
||||
clean_bomb();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -1,11 +1,7 @@
|
||||
#ifndef STEP_5_H
|
||||
#define STEP_5_H
|
||||
|
||||
#include "../drivers/bottom_half.h"
|
||||
#include "../drivers/game_timer.h"
|
||||
#include "../drivers/char_lcd.h"
|
||||
#include "../drivers/leds.h"
|
||||
#include "../drivers/wires.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
#include <random>
|
||||
#include <iostream>
|
||||
|
||||
+2
-4
@@ -2,10 +2,8 @@
|
||||
#define STEP_6_H
|
||||
|
||||
#include "wires_puzzle.h"
|
||||
#include "drivers/wires.h"
|
||||
#include "drivers/bottom_half.h"
|
||||
#include "drivers/sd.h"
|
||||
#include "drivers/speaker.h"
|
||||
#include "../drivers/all.h"
|
||||
#include "../helper.h"
|
||||
|
||||
void step6(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user