91 lines
2.2 KiB
C++
91 lines
2.2 KiB
C++
#include "sseg.h"
|
|
#include <esp_log.h>
|
|
#include "state_tracking.h"
|
|
|
|
TM1640* sseg = nullptr;
|
|
|
|
static const char *TAG = "sseg";
|
|
|
|
void init_sseg() {
|
|
ESP_LOGI(TAG, "Initializing sseg...");
|
|
|
|
sseg = new TM1640(SSEG_PIN_DATA, SSEG_PIN_CLK, 8);
|
|
|
|
ESP_LOGI(TAG, "Sseg initialized!");
|
|
}
|
|
|
|
void set_game_sseg_raw(const uint8_t* segments) {
|
|
sseg->setSegments(segments[0], 0);
|
|
sseg->setSegments(segments[1], 1);
|
|
sseg->setSegments(segments[2], 2);
|
|
sseg->setSegments(segments[3], 3);
|
|
|
|
if (is_state_tracking()) {
|
|
char buf[32];
|
|
sprintf(buf, "%d,%d,%d,%d", segments[0], segments[1], segments[2], segments[3]);
|
|
event_occured("SSEG_G_RAW", buf);
|
|
}
|
|
}
|
|
void clear_game_sseg() {
|
|
sseg->setSegments(0, 0);
|
|
sseg->setSegments(0, 1);
|
|
sseg->setSegments(0, 2);
|
|
sseg->setSegments(0, 3);
|
|
|
|
if (is_state_tracking()) {
|
|
event_occured("SSEG_G_CLR", NULL);
|
|
}
|
|
}
|
|
|
|
void set_module_sseg_raw(const uint8_t* segments) {
|
|
sseg->setSegments(segments[0], 4);
|
|
sseg->setSegments(segments[1], 5);
|
|
sseg->setSegments(segments[2], 6);
|
|
sseg->setSegments(segments[3], 7);
|
|
|
|
if (is_state_tracking()) {
|
|
char buf[32];
|
|
sprintf(buf, "%d,%d,%d,%d", segments[0], segments[1], segments[2], segments[3]);
|
|
event_occured("SSEG_M_RAW", buf);
|
|
}
|
|
}
|
|
|
|
void clear_module_sseg() {
|
|
sseg->setSegments(0, 4);
|
|
sseg->setSegments(0, 5);
|
|
sseg->setSegments(0, 6);
|
|
sseg->setSegments(0, 7);
|
|
|
|
if (is_state_tracking()) {
|
|
event_occured("SSEG_M_CLR", NULL);
|
|
}
|
|
}
|
|
|
|
void set_game_sseg_num(uint32_t value, uint8_t dot_pos) {
|
|
for (int i = 0; i < 4; i++) {
|
|
auto idx = value % 10;
|
|
sseg->sendChar(3-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
|
value = value / 10;
|
|
}
|
|
|
|
if (is_state_tracking()) {
|
|
char buf[16];
|
|
sprintf(buf, "%ld,%d", value, dot_pos);
|
|
event_occured("SSEG_G", buf);
|
|
}
|
|
}
|
|
|
|
void set_module_sseg_num(uint32_t value, uint8_t dot_pos) {
|
|
for (int i = 0; i < 4; i++) {
|
|
auto idx = value % 10;
|
|
sseg->sendChar(7-i, TM16XX_NUMBER_FONT[idx], i == dot_pos);
|
|
value = value / 10;
|
|
}
|
|
|
|
if (is_state_tracking()) {
|
|
char buf[16];
|
|
sprintf(buf, "%ld,%d", value, dot_pos);
|
|
event_occured("SSEG_M", buf);
|
|
}
|
|
}
|