2024A-SW/components/Serial_Console/Commands/KEvent_Command.c
Joe Kearney a65c53f4b2 Cleanup
2026-03-01 16:17:04 -06:00

99 lines
No EOL
2.4 KiB
C

/*
* 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 <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <errno.h>
#include <limits.h>
#include "esp_console.h"
#include "esp_log.h"
#include "SystemK.h"
static uint32_t parse_uint32(const char *str, bool *ok)
{
char *end;
errno = 0;
unsigned long val = strtoul(str, &end, 10);
if (errno != 0 || end == str || *end != '\0' || val > UINT32_MAX)
{
*ok = false;
return 0;
}
*ok = true;
return (uint32_t)val;
}
static void print_usage(void)
{
printf(
"Usage:\n"
" KEvent <Event ID> <Event Data>\n"
" (Note that IDs may be SystemK version-dependent.)\n");
}
static int cmd_KEvent(int argc, char **argv)
{
KEvent_T event;
uint32_t data;
if (argc < 2)
{
print_usage();
return 0;
}
if (Parse_KEvent_ID(argv[1], &event) == SYSTEMK_RESULT_SUCCESS)
{
bool ok;
data = parse_uint32(argv[2], &ok);
if (ok == true)
{
event.Data = (void *)data;
Post_KEvent(&event);
return 0;
}
else
{
printf("ERROR: Couldn't parse data!");
return (-1);
}
}
else
{
printf("ERROR: Couldn't parse SystemK event!");
return (-1);
}
}
void Register_KEvent_Command(void)
{
const esp_console_cmd_t cmd = {
.command = "KEvent",
.help = "Send arbitrary KEvents by ID",
.func = &cmd_KEvent,
};
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
}