some header work

This commit is contained in:
Mitchell Marino 2025-07-12 18:53:52 -05:00
parent e27fb6f015
commit 4a47558ef6
8 changed files with 77 additions and 12 deletions

View File

@ -6,6 +6,7 @@ set(SOURCES
"esp_lcd_ili9488/esp_lcd_ili9488.c"
"bottom_half.cpp"
"char_lcd.cpp"
"game_info.cpp"
"game_timer.cpp"
"i2c_lcd_pcf8574.c"
"i2c.cpp"

View File

@ -4,6 +4,7 @@
#include <esp_log.h>
#include "state_tracking.h"
#include <cstring>
#include "power.h"
i2c_lcd_pcf8574_handle_t lcd;
@ -223,6 +224,7 @@ void lcd_create_char(uint8_t location, uint8_t* charmap) {
}
}
// TODO: switch to row, col
void lcd_print(uint8_t col, uint8_t row, const char* str) {
lcd_set_cursor_pos(col, row);
lcd_print(&lcd, str);
@ -236,7 +238,7 @@ void lcd_print(uint8_t col, uint8_t row, const char* str) {
void set_lcd_header_enabled(bool enable) {
if (!header_enabled && enable) {
// enabling header
// TODO: enable header
lcd_print_header();
} else if (header_enabled && !enable) {
// disabling header
lcd_print(1, 1, EMPTY_ROW);
@ -254,14 +256,4 @@ void lcd_print_header() {
lcd_print_header_bat();
}
void lcd_print_header_star_code() {
}
void lcd_print_header_step() {
}
void lcd_print_header_bat() {
}
// TODO: add task to continoususly print the header.

View File

@ -0,0 +1,20 @@
#include "game_info.h"
#include <stdio.h>
#include "char_lcd.h"
static char game_state[GAME_STATE_MAX_LEN+1] = " ";
void set_game_state(char* new_state) {
snprintf(game_state, sizeof(game_state), "%-5s", new_state);
}
void reset_game_state() {
for (int i = 0; i < GAME_STATE_MAX_LEN; i++) {
game_state[i] = '\0';
}
game_state[GAME_STATE_MAX_LEN] = '\0';
}
void lcd_print_header_step() {
lcd_print(11, 1, game_state);
}

17
main/drivers/game_info.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef GAME_INFO_H
#define GAME_INFO_H
#define GAME_STATE_MAX_LEN 5
/// @brief Sets the game state, used for the header.
///
/// Must be <= 5 characters
void set_game_state(char* new_state);
/// @brief Resets the game state to be blank.
void reset_game_state();
/// @brief Prints the game state section of the header to the char_lcd. (row 1, columns 11-15)
void lcd_print_header_step();
#endif /* GAME_INFO_H */

View File

@ -53,3 +53,19 @@ void init_power_board() {
uint16_t get_bat_voltage() {
return lipo.voltage();
}
void lcd_print_header_bat() {
uint8_t soc = lipo.soc();
char buf[5];
if (soc < 5) {
sprintf(buf, "LOW ");
} else {
snprintf(buf, sizeof(buf), "%3d%%", soc);
}
if (lipo.chgFlag()) {
buf[4] = '+';
}
lcd_print(17, 1, buf);
}

View File

@ -14,4 +14,7 @@ void init_power_board();
/// @return battery voltage in mV.
uint16_t get_bat_voltage();
/// @brief Prints the battery section of the header to the char_lcd. (row 1, columns 17-20)
void lcd_print_header_bat();
#endif /* POWER_H */

View File

@ -5,6 +5,7 @@
#include <stdint.h>
#include <esp_log.h>
#include "drivers/bottom_half.h"
#include "char_lcd.h"
static const char* TAG = "star_code";
@ -14,6 +15,8 @@ static volatile bool system_initialized = false;
static volatile SemaphoreHandle_t star_codes_sem;
static std::vector<StarCodeEntry> star_codes;
static const char EMPTY_STAR_CODE_HEADER[] = " ";
static volatile bool doing_starcode = false;
static uint16_t starcode_waiting_on_release;
static char current[STARCODE_MAX_LEN + 1];
@ -185,3 +188,13 @@ void pause_star_code_system() {
void resume_star_code_system() {
handling_new_starcodes = system_initialized;
}
void lcd_print_header_star_code() {
if (doing_starcode) {
char buf[STARCODE_MAX_LEN + 2];
sprintf(buf, "*%-8s", current);
lcd_print(1, 1, buf);
} else {
lcd_print(1, 1, EMPTY_STAR_CODE_HEADER);
}
}

View File

@ -81,4 +81,7 @@ void set_star_code_sys_enabled(bool enable);
/// @return `true` if the star code system is handling star codes.
bool star_code_sys_enabled();
/// @brief Prints the star code section of the header to the char_lcd. (row 1, columns 1-10)
void lcd_print_header_star_code();
#endif /* STAR_CODE_H */