Merge branch 'main' into ESP-NOW_experiments
This commit is contained in:
commit
32a0681435
33 changed files with 529 additions and 61 deletions
|
|
@ -13,7 +13,7 @@ You can ask questions (and get answers!) about this software on the KTag forum a
|
|||
|
||||
This software is part of the KTag project, a DIY laser tag game with customizable features and wide interoperability.
|
||||
|
||||
🛡️ <https://ktag.clubk.club> 🃞
|
||||
🛡 <https://ktag.clubk.club> 🃞
|
||||
|
||||
Copyright © 2023-2026 Joseph P. Kearney and the KTag developers.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
@ -91,7 +91,7 @@ static esp_err_t I2S_Audio_Write(void *audio_buffer, size_t len, size_t *bytes_w
|
|||
|
||||
static esp_err_t I2S_Audio_Reconfigure_Clock(uint32_t rate, uint32_t bits_cfg, i2s_slot_mode_t ch)
|
||||
{
|
||||
KLOG_INFO(TAG, "Reconfiguring clock for %lu sps, %lu bps, %d channels.", rate, bits_cfg, ch);
|
||||
KLOG_DEBUG(TAG, "Reconfiguring clock for %lu sps, %lu bps, %d channels.", rate, bits_cfg, ch);
|
||||
|
||||
esp_err_t ret = ESP_OK;
|
||||
i2s_std_config_t std_cfg = {
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
15
components/Console/CMakeLists.txt
Normal file
15
components/Console/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
idf_component_register(
|
||||
SRCS
|
||||
"Console.c"
|
||||
"Commands/Log_Command.c"
|
||||
INCLUDE_DIRS
|
||||
"."
|
||||
"./Commands"
|
||||
REQUIRES
|
||||
"SystemK"
|
||||
"System_Events"
|
||||
"console"
|
||||
"log"
|
||||
"nvs_flash"
|
||||
"vfs"
|
||||
)
|
||||
358
components/Console/Commands/Log_Command.c
Normal file
358
components/Console/Commands/Log_Command.c
Normal file
|
|
@ -0,0 +1,358 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* There should be a copy of the GNU Affero General Public License in the LICENSE
|
||||
* file in the root of this repository. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "esp_console.h"
|
||||
#include "esp_log.h"
|
||||
#include "nvs.h"
|
||||
#include "nvs_flash.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "linenoise/linenoise.h"
|
||||
#include "esp_vfs_dev.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#define LOG_NVS_NS "logcfg"
|
||||
#define LOGCFG_VERSION 1
|
||||
#define MAX_TAGS 16
|
||||
#define MAX_TAGLEN 16
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char tag[MAX_TAGLEN];
|
||||
uint8_t level;
|
||||
} tag_entry_t;
|
||||
|
||||
static esp_log_level_t Saved_Global_Level = ESP_LOG_INFO;
|
||||
static tag_entry_t Tag_Table[MAX_TAGS] = {0};
|
||||
static size_t Tag_Count = 0;
|
||||
|
||||
static bool parse_level(const char *s, esp_log_level_t *out)
|
||||
{
|
||||
if (!strcmp(s, "none"))
|
||||
*out = ESP_LOG_NONE;
|
||||
else if (!strcmp(s, "error"))
|
||||
*out = ESP_LOG_ERROR;
|
||||
else if (!strcmp(s, "warn"))
|
||||
*out = ESP_LOG_WARN;
|
||||
else if (!strcmp(s, "info"))
|
||||
*out = ESP_LOG_INFO;
|
||||
else if (!strcmp(s, "debug"))
|
||||
*out = ESP_LOG_DEBUG;
|
||||
else if (!strcmp(s, "verbose"))
|
||||
*out = ESP_LOG_VERBOSE;
|
||||
else
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static const char *level_str(esp_log_level_t lvl)
|
||||
{
|
||||
switch (lvl)
|
||||
{
|
||||
case ESP_LOG_NONE:
|
||||
return "none";
|
||||
case ESP_LOG_ERROR:
|
||||
return "error";
|
||||
case ESP_LOG_WARN:
|
||||
return "warn";
|
||||
case ESP_LOG_INFO:
|
||||
return "info";
|
||||
case ESP_LOG_DEBUG:
|
||||
return "debug";
|
||||
case ESP_LOG_VERBOSE:
|
||||
return "verbose";
|
||||
default:
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
|
||||
static void nvs_save(void)
|
||||
{
|
||||
nvs_handle_t h;
|
||||
esp_err_t err = nvs_open(LOG_NVS_NS, NVS_READWRITE, &h);
|
||||
if (err != ESP_OK)
|
||||
return;
|
||||
|
||||
nvs_set_u8(h, "ver", LOGCFG_VERSION);
|
||||
nvs_set_u8(h, "global", esp_log_get_default_level());
|
||||
nvs_set_u8(h, "tagcnt", Tag_Count);
|
||||
nvs_set_blob(h, "tags", Tag_Table, Tag_Count * sizeof(tag_entry_t));
|
||||
|
||||
nvs_commit(h);
|
||||
nvs_close(h);
|
||||
}
|
||||
|
||||
static void nvs_clear_tags(void)
|
||||
{
|
||||
nvs_handle_t h;
|
||||
if (nvs_open(LOG_NVS_NS, NVS_READWRITE, &h) != ESP_OK)
|
||||
return;
|
||||
nvs_erase_key(h, "tagcnt");
|
||||
nvs_erase_key(h, "tags");
|
||||
nvs_commit(h);
|
||||
nvs_close(h);
|
||||
}
|
||||
|
||||
static void log_config_load(void)
|
||||
{
|
||||
nvs_handle_t h;
|
||||
if (nvs_open(LOG_NVS_NS, NVS_READONLY, &h) != ESP_OK)
|
||||
return;
|
||||
|
||||
uint8_t ver;
|
||||
if (nvs_get_u8(h, "ver", &ver) != ESP_OK || ver != LOGCFG_VERSION)
|
||||
{
|
||||
nvs_close(h);
|
||||
nvs_clear_tags();
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t lvl;
|
||||
if (nvs_get_u8(h, "global", &lvl) == ESP_OK)
|
||||
{
|
||||
esp_log_level_set("*", lvl);
|
||||
Saved_Global_Level = lvl;
|
||||
}
|
||||
|
||||
uint8_t cnt;
|
||||
if (nvs_get_u8(h, "tagcnt", &cnt) == ESP_OK && cnt <= MAX_TAGS)
|
||||
{
|
||||
size_t sz = cnt * sizeof(tag_entry_t);
|
||||
if (nvs_get_blob(h, "tags", Tag_Table, &sz) == ESP_OK)
|
||||
{
|
||||
Tag_Count = cnt;
|
||||
for (size_t i = 0; i < Tag_Count; i++)
|
||||
{
|
||||
esp_log_level_set(Tag_Table[i].tag, Tag_Table[i].level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nvs_close(h);
|
||||
}
|
||||
|
||||
static void clear_tag_levels(void)
|
||||
{
|
||||
esp_log_level_t def = esp_log_get_default_level();
|
||||
for (size_t i = 0; i < Tag_Count; i++)
|
||||
{
|
||||
esp_log_level_set(Tag_Table[i].tag, def);
|
||||
}
|
||||
Tag_Count = 0;
|
||||
}
|
||||
|
||||
static bool set_tag_level(const char *tag, esp_log_level_t level)
|
||||
{
|
||||
for (size_t i = 0; i < Tag_Count; i++)
|
||||
{
|
||||
if (Tag_Table[i].tag[0] != '\0' && !strcmp(Tag_Table[i].tag, tag))
|
||||
{
|
||||
Tag_Table[i].level = level;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (Tag_Count >= MAX_TAGS)
|
||||
return false;
|
||||
|
||||
strncpy(Tag_Table[Tag_Count].tag, tag, MAX_TAGLEN - 1);
|
||||
Tag_Table[Tag_Count].tag[MAX_TAGLEN - 1] = 0;
|
||||
Tag_Table[Tag_Count].level = level;
|
||||
Tag_Count++;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf(
|
||||
"Usage:\n"
|
||||
" log show\n"
|
||||
" log reset\n"
|
||||
" log off | on\n"
|
||||
" log <level>\n"
|
||||
" log tag <tag> [level|off]\n"
|
||||
"Levels: none error warn info debug verbose\n");
|
||||
}
|
||||
|
||||
static int log_cmd_show(void)
|
||||
{
|
||||
printf("Global level: %s\n",
|
||||
level_str(esp_log_get_default_level()));
|
||||
|
||||
if (Tag_Count == 0)
|
||||
{
|
||||
printf("No tag overrides\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Tag overrides:\n");
|
||||
for (size_t i = 0; i < Tag_Count; i++)
|
||||
{
|
||||
printf(" %-10s : %s\n",
|
||||
Tag_Table[i].tag,
|
||||
level_str(Tag_Table[i].level));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_cmd_reset(void)
|
||||
{
|
||||
esp_log_level_set("*", ESP_LOG_INFO);
|
||||
Saved_Global_Level = ESP_LOG_INFO;
|
||||
clear_tag_levels();
|
||||
nvs_clear_tags();
|
||||
nvs_save();
|
||||
printf("Logging reset to defaults\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_cmd_off(void)
|
||||
{
|
||||
Saved_Global_Level = esp_log_get_default_level();
|
||||
esp_log_level_set("*", ESP_LOG_NONE);
|
||||
nvs_save();
|
||||
printf("Global logging disabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_cmd_on(void)
|
||||
{
|
||||
esp_log_level_set("*", Saved_Global_Level);
|
||||
nvs_save();
|
||||
printf("Global logging restored\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_cmd_tag(int argc, char **argv)
|
||||
{
|
||||
if (argc < 3)
|
||||
{
|
||||
printf("Usage: log tag <tag> [level|off]\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Ensure tag is null-terminated and within bounds
|
||||
char tag[MAX_TAGLEN];
|
||||
strncpy(tag, argv[2], MAX_TAGLEN - 1);
|
||||
tag[MAX_TAGLEN - 1] = '\0';
|
||||
|
||||
if (argc == 3)
|
||||
{
|
||||
printf("Tag '%s' is %s\n",
|
||||
tag,
|
||||
level_str(esp_log_level_get(tag)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
esp_log_level_t level;
|
||||
if (!strcmp(argv[3], "off"))
|
||||
{
|
||||
level = ESP_LOG_NONE;
|
||||
}
|
||||
else if (!parse_level(argv[3], &level))
|
||||
{
|
||||
printf("Invalid level\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!set_tag_level(tag, level))
|
||||
{
|
||||
printf("Tag table full (%d max)\n", MAX_TAGS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
esp_log_level_set(tag, level);
|
||||
nvs_save();
|
||||
printf("Tag '%s' set to %s\n", tag, argv[3]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int log_cmd_set_global(const char *lvl)
|
||||
{
|
||||
esp_log_level_t level;
|
||||
if (!parse_level(lvl, &level))
|
||||
{
|
||||
print_usage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
esp_log_level_set("*", level);
|
||||
Saved_Global_Level = level;
|
||||
nvs_save();
|
||||
printf("Global level set to %s\n", lvl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_log(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
print_usage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[1], "show"))
|
||||
return log_cmd_show();
|
||||
if (!strcmp(argv[1], "reset"))
|
||||
return log_cmd_reset();
|
||||
if (!strcmp(argv[1], "off"))
|
||||
return log_cmd_off();
|
||||
if (!strcmp(argv[1], "on"))
|
||||
return log_cmd_on();
|
||||
if (!strcmp(argv[1], "tag"))
|
||||
return log_cmd_tag(argc, argv);
|
||||
|
||||
return log_cmd_set_global(argv[1]);
|
||||
}
|
||||
|
||||
static void log_completion(const char *buf, linenoiseCompletions *lc)
|
||||
{
|
||||
if (!strncmp(buf, "log", 3))
|
||||
{
|
||||
linenoiseAddCompletion(lc, "log show");
|
||||
linenoiseAddCompletion(lc, "log clear");
|
||||
linenoiseAddCompletion(lc, "log reset");
|
||||
linenoiseAddCompletion(lc, "log off");
|
||||
linenoiseAddCompletion(lc, "log on");
|
||||
linenoiseAddCompletion(lc, "log info");
|
||||
linenoiseAddCompletion(lc, "log debug");
|
||||
linenoiseAddCompletion(lc, "log warn");
|
||||
}
|
||||
}
|
||||
|
||||
void Register_Log_Command(void)
|
||||
{
|
||||
log_config_load();
|
||||
|
||||
linenoiseSetCompletionCallback(log_completion);
|
||||
|
||||
const esp_console_cmd_t cmd = {
|
||||
.command = "log",
|
||||
.help = "Control logging levels",
|
||||
.func = &cmd_log,
|
||||
};
|
||||
|
||||
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
||||
}
|
||||
23
components/Console/Commands/Log_Command.h
Normal file
23
components/Console/Commands/Log_Command.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* There should be a copy of the GNU Affero General Public License in the LICENSE
|
||||
* file in the root of this repository. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
void Register_Log_Command(void);
|
||||
48
components/Console/Console.c
Normal file
48
components/Console/Console.c
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* There should be a copy of the GNU Affero General Public License in the LICENSE
|
||||
* file in the root of this repository. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "esp_console.h"
|
||||
#include <Log_Command.h>
|
||||
|
||||
static void register_commands()
|
||||
{
|
||||
Register_Log_Command();
|
||||
esp_console_register_help_command();
|
||||
}
|
||||
|
||||
void Initialize_Console(void)
|
||||
{
|
||||
esp_console_repl_t *repl = NULL;
|
||||
esp_console_repl_config_t repl_cfg = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
|
||||
repl_cfg.prompt = "KTag>";
|
||||
repl_cfg.max_cmdline_length = 1024;
|
||||
repl_cfg.max_history_len = 16;
|
||||
|
||||
register_commands();
|
||||
|
||||
esp_console_dev_uart_config_t hw_cfg =
|
||||
ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
|
||||
|
||||
ESP_ERROR_CHECK(
|
||||
esp_console_new_repl_uart(&hw_cfg, &repl_cfg, &repl));
|
||||
ESP_ERROR_CHECK(esp_console_start_repl(repl));
|
||||
}
|
||||
23
components/Console/Console.h
Normal file
23
components/Console/Console.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* There should be a copy of the GNU Affero General Public License in the LICENSE
|
||||
* file in the root of this repository. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
void Initialize_Console(void);
|
||||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
@ -384,7 +384,7 @@ static inline void PrintPulseTrainToConsole(TimedPulseTrain_T *train)
|
|||
{
|
||||
for (uint_fast16_t i = 0; i < train->count; i += 2)
|
||||
{
|
||||
KLOG_INFO(TAG, "%2d: (%d, %4d) (%d, %4d)", i + 1, train->bitstream[i].symbol, train->bitstream[i].duration, train->bitstream[i + 1].symbol, train->bitstream[i + 1].duration);
|
||||
KLOG_DEBUG(TAG, "%2d: (%d, %4d) (%d, %4d)", i + 1, train->bitstream[i].symbol, train->bitstream[i].duration, train->bitstream[i + 1].symbol, train->bitstream[i + 1].duration);
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit f80cb59828aca6f784adcc898aa2603303c5cf2f
|
||||
Subproject commit 45df6f952abb82c2825a8bb16783c10a150adeba
|
||||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2025-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2025-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of the KTag project, a DIY laser tag
|
||||
* game with customizable features and wide interoperability.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
* 🛡 <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2026 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
#include <BLE.h>
|
||||
#include <IR.h>
|
||||
#include <WiFi.h>
|
||||
#include <Console.h>
|
||||
#include <ESP-NOW.h>
|
||||
#include "nvs_flash.h"
|
||||
#include "HW_NeoPixels.h"
|
||||
|
|
@ -83,6 +84,8 @@ void app_main(void)
|
|||
KLOG_ERROR(TAG, "Error initializing NVS: %s", esp_err_to_name(ret));
|
||||
}
|
||||
|
||||
Initialize_Console();
|
||||
|
||||
Initialize_SPIFFS();
|
||||
Wait_For_System_Event(SYS_SPIFFS_READY, "Timeout initializing SPIFFS!", INITIALIZATION_TIMEOUT_IN_ms);
|
||||
|
||||
|
|
|
|||
20
sdkconfig
20
sdkconfig
|
|
@ -390,7 +390,7 @@ CONFIG_IDF_TOOLCHAIN_GCC=y
|
|||
CONFIG_IDF_TARGET_ARCH_XTENSA=y
|
||||
CONFIG_IDF_TARGET_ARCH="xtensa"
|
||||
CONFIG_IDF_TARGET="esp32s3"
|
||||
CONFIG_IDF_INIT_VERSION="5.5.1"
|
||||
CONFIG_IDF_INIT_VERSION="5.5.2"
|
||||
CONFIG_IDF_TARGET_ESP32S3=y
|
||||
CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009
|
||||
|
||||
|
|
@ -450,7 +450,7 @@ CONFIG_BOOTLOADER_LOG_LEVEL=3
|
|||
#
|
||||
# Format
|
||||
#
|
||||
# CONFIG_BOOTLOADER_LOG_COLORS is not set
|
||||
CONFIG_BOOTLOADER_LOG_COLORS=y
|
||||
CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
|
||||
# end of Format
|
||||
|
||||
|
|
@ -998,7 +998,7 @@ CONFIG_BT_ALARM_MAX_NUM=50
|
|||
#
|
||||
# Console Library
|
||||
#
|
||||
# CONFIG_CONSOLE_SORTED_HELP is not set
|
||||
CONFIG_CONSOLE_SORTED_HELP=y
|
||||
# end of Console Library
|
||||
|
||||
#
|
||||
|
|
@ -1952,19 +1952,17 @@ CONFIG_LOG_VERSION=1
|
|||
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
|
||||
# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
|
||||
# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
|
||||
CONFIG_LOG_DEFAULT_LEVEL_INFO=y
|
||||
# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set
|
||||
# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
|
||||
# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
|
||||
CONFIG_LOG_DEFAULT_LEVEL=3
|
||||
# CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT is not set
|
||||
CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y
|
||||
# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
|
||||
CONFIG_LOG_MAXIMUM_LEVEL=4
|
||||
CONFIG_LOG_DEFAULT_LEVEL_VERBOSE=y
|
||||
CONFIG_LOG_DEFAULT_LEVEL=5
|
||||
CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
|
||||
CONFIG_LOG_MAXIMUM_LEVEL=5
|
||||
|
||||
#
|
||||
# Level Settings
|
||||
#
|
||||
# CONFIG_LOG_MASTER_LEVEL is not set
|
||||
CONFIG_LOG_MASTER_LEVEL=y
|
||||
CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
|
||||
# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
|
||||
# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
; Example configuration file for the KTag 2024A.
|
||||
;
|
||||
; 🛡️ <https://ktag.clubk.club> 🃞
|
||||
; 🛡 <https://ktag.clubk.club> 🃞
|
||||
|
||||
; Metadata
|
||||
Config_Version=1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue