#include "freertos/FreeRTOS.h" #include #include #include "esp_wifi_types_generic.h" #include "freertos/projdefs.h" #include "sdkconfig.h" #include "freertos/task.h" #include "esp_chip_info.h" #include "esp_flash.h" #include "esp_system.h" #include "blk_box.h" #include "blk_box_drivers/i2c.h" #include "blk_box_drivers/inputs.hpp" #include "blk_box_drivers/leds.hpp" #include "blk_box_drivers/char_lcd.hpp" #include "blk_box_drivers/ssegs.hpp" #include "blk_box_drivers/helpers.hpp" #include "blk_box_drivers/tft.hpp" #include "blk_box_drivers/bbnow.hpp" #include #include "esp_log.h" #include "esp_event.h" #include "esp_netif.h" #include "esp_wifi.h" #include "esp_log.h" #include "esp_mac.h" #include "esp_now.h" #include "esp_crc.h" #include "nvs_flash.h" const static char TAG[] = "main"; extern "C" void app_main(void) { BlkBoxInitConfig blk_box_cfg = {}; init_blk_box(blk_box_cfg); LCDController::set_backlight(true); lcd_do_splash(); lvgl_lock(portMAX_DELAY); // Get the default screen lv_obj_t * scr = lv_scr_act(); // Create a title label lv_obj_t * title = lv_label_create(scr); lv_label_set_text(title, "Display Test"); lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10); lv_obj_set_style_text_font(title, &lv_font_montserrat_24, 0); // Create a status label lv_obj_t * status = lv_label_create(scr); lv_label_set_text(status, "Testing display..."); lv_obj_align(status, LV_ALIGN_CENTER, 0, -20); // Create a progress bar lv_obj_t * bar = lv_bar_create(scr); lv_obj_set_size(bar, 200, 20); lv_obj_align(bar, LV_ALIGN_CENTER, 0, 30); lv_bar_set_value(bar, 50, LV_ANIM_OFF); // Create a button with callback lv_obj_t * btn = lv_btn_create(scr); lv_obj_set_size(btn, 100, 40); lv_obj_align(btn, LV_ALIGN_BOTTOM_MID, 0, -20); lv_obj_t * btn_label = lv_label_create(btn); lv_label_set_text(btn_label, "Test"); lv_obj_center(btn_label); // Create a color test area lv_obj_t * color_test = lv_obj_create(scr); lv_obj_set_size(color_test, 80, 60); lv_obj_align(color_test, LV_ALIGN_BOTTOM_LEFT, 10, -20); lv_obj_set_style_bg_color(color_test, lv_color_hex(0xFF0000), 0); // Red lvgl_unlock(); LCDController::set_resting_cursor_mode(CursorMode::Show); LCDController::set_resting_cursor_pos(0, 0); SSegController::enable_game_timer(); SSegController::enable_module_timer(); // uint8_t mac[6]; // ESP_ERROR_CHECK(esp_wifi_get_mac(WIFI_IF_STA, mac)); // ESP_LOGI(TAG, "My MAC: %02X:%02X:%02X:%02X:%02X:%02X", // mac[0], mac[1], mac[2], // mac[3], mac[4], mac[5]); // BBNowPubPacket tens_discovery_packet = BBNowPubPacket::new_discovery(BlkBoxNowPubDiscoveryData { // .expantion_type = BlkBoxExpantion::TENS, // }); // while (1) { // auto buf = tens_discovery_packet.serialize(); // ESP_LOGI(TAG, "sending packet of size %d from main", buf.size()); // ESP_ERROR_CHECK(esp_now_send(BROADCAST_MAC, buf.data(), buf.size())); // vTaskDelay(pdMS_TO_TICKS(1000)); // } uint32_t i = 0; while (1) { if (InputsController::has_button_press()) { Button b = InputsController::wait_button_press(); printf("Button pressed: %d\n", raw_value(b)); if (b == Button::GREEN) { LEDController::set_indicator(static_cast(i + LED_SHAPE_COUNT), LEDColor::GREEN); LEDController::flush(); } else if (b == Button::YELLOW) { LEDController::set_indicator(static_cast(i + LED_SHAPE_COUNT), LEDColor::YELLOW); LEDController::flush(); } else if (b == Button::RED) { i = (i + 1) % LED_INDICATOR_COUNT; LCDController::set_resting_cursor_pos(0, i % 20); } else if (b == Button::BLUE) { i = (i + LED_INDICATOR_COUNT - 1) % LED_INDICATOR_COUNT; LCDController::set_resting_cursor_pos(0, i % 20); } } if (InputsController::has_switch_flip()) { SwitchFlip flip = InputsController::wait_switch_flip(); printf("Switch flipped: %d, new state: %d\n", raw_value(flip.get_switch()), flip.is_up()); if (flip.get_switch() == Switch::S1) { SSegController::set_game_time(SSegController::get_game_time() + 10000); } if (flip.get_switch() == Switch::S2) { SSegController::set_module_time(SSegController::get_module_time() + 10000); } if (flip.get_switch() == Switch::S3) { SSegController::start_game_timer(); } if (flip.get_switch() == Switch::S4) { if (flip.is_up()) { SSegController::start_module_timer(); } else { SSegController::stop_module_timer(); } } } if (InputsController::has_keypad_press()) { KeypadKey k = InputsController::wait_keypad_press(); printf("Keypad key pressed: %c\n", keypad_key_to_char(k)); LEDController::flush(); } vTaskDelay(10 / portTICK_PERIOD_MS); } }