Optimize AIME commands

This commit is contained in:
whowechina 2024-04-06 11:17:08 +08:00
parent a69bc79a16
commit ccf9fd547d
5 changed files with 55 additions and 16 deletions

Binary file not shown.

View File

@ -70,6 +70,7 @@ static void disp_aime()
printf("[AIME]\n"); printf("[AIME]\n");
printf(" NFC Module: %s\n", nfc_module_name()); printf(" NFC Module: %s\n", nfc_module_name());
printf(" Virtual AIC: %s\n", mai_cfg->aime.virtual_aic ? "ON" : "OFF"); printf(" Virtual AIC: %s\n", mai_cfg->aime.virtual_aic ? "ON" : "OFF");
printf(" Mode: %d\n", mai_cfg->aime.mode);
} }
static void disp_gpio() static void disp_gpio()
@ -534,25 +535,60 @@ static void handle_touch(int argc, char *argv[])
} }
} }
static void handle_virtual(int argc, char *argv[])
static bool handle_aime_mode(const char *mode)
{ {
const char *usage = "Usage: virtual <on|off>\n"; if (strcmp(mode, "0") == 0) {
if (argc != 1) { mai_cfg->aime.mode = 0;
printf("%s", usage); } else if (strcmp(mode, "1") == 0) {
return; mai_cfg->aime.mode = 1;
} else {
return false;
} }
aime_set_mode(mai_cfg->aime.mode);
config_changed();
return true;
}
const char *commands[] = { "on", "off" }; static bool handle_aime_virtual(const char *onoff)
int match = cli_match_prefix(commands, 2, argv[0]); {
if (match < 0) { if (strcasecmp(onoff, "on") == 0) {
printf("%s", usage); mai_cfg->aime.virtual_aic = 1;
return; } else if (strcasecmp(onoff, "off") == 0) {
mai_cfg->aime.virtual_aic = 0;
} else {
return false;
} }
mai_cfg->aime.virtual_aic = (match == 0);
aime_virtual_aic(mai_cfg->aime.virtual_aic); aime_virtual_aic(mai_cfg->aime.virtual_aic);
config_changed(); config_changed();
return true;
}
static void handle_aime(int argc, char *argv[])
{
const char *usage = "Usage:\n"
" aime mode <0|1>\n"
" aime virtual <on|off>\n";
if (argc != 2) {
printf("%s", usage);
return;
}
const char *commands[] = { "mode", "virtual" };
int match = cli_match_prefix(commands, 2, argv[0]);
bool ok = false;
if (match == 0) {
ok = handle_aime_mode(argv[1]);
} else if (match == 1) {
ok = handle_aime_virtual(argv[1]);
}
if (ok) {
disp_aime();
} else {
printf("%s", usage);
}
} }
void commands_init() void commands_init()
@ -571,5 +607,5 @@ void commands_init()
cli_register("gpio", handle_gpio, "Set GPIO pins for buttons."); cli_register("gpio", handle_gpio, "Set GPIO pins for buttons.");
cli_register("touch", handle_touch, "Custimze touch mapping."); cli_register("touch", handle_touch, "Custimze touch mapping.");
cli_register("factory", config_factory_reset, "Reset everything to default."); cli_register("factory", config_factory_reset, "Reset everything to default.");
cli_register("virtual", handle_virtual, "Virtual AIC card on AIME."); cli_register("aime", handle_aime, "AIME settings.");
} }

View File

@ -36,7 +36,8 @@ static mai_cfg_t default_cfg = {
.touch = TOUCH_MAP, .touch = TOUCH_MAP,
}, },
.aime = { .aime = {
.virtual_aic = false, .mode = 0,
.virtual_aic = 0,
} }
}; };

View File

@ -37,7 +37,8 @@ typedef struct __attribute__((packed)) {
uint8_t touch[36]; uint8_t touch[36];
} alt; } alt;
struct { struct {
bool virtual_aic; uint8_t mode : 4;
uint8_t virtual_aic : 4;
} aime; } aime;
} mai_cfg_t; } mai_cfg_t;

View File

@ -131,6 +131,7 @@ void init()
nfc_attach_i2c(I2C_PORT); nfc_attach_i2c(I2C_PORT);
nfc_init(); nfc_init();
aime_init(cdc_aime_putc); aime_init(cdc_aime_putc);
aime_set_mode(mai_cfg->aime.mode);
aime_virtual_aic(mai_cfg->aime.virtual_aic); aime_virtual_aic(mai_cfg->aime.virtual_aic);
cli_init("mai_pico>", "\n << Mai Pico Controller >>\n" cli_init("mai_pico>", "\n << Mai Pico Controller >>\n"