1
0
mirror of https://github.com/whowechina/chu_pico.git synced 2024-11-11 22:47:09 +01:00

More commands

This commit is contained in:
whowechina 2023-09-27 22:38:26 +08:00
parent 2eb1d66fcc
commit 3659448a82
5 changed files with 54 additions and 3 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -64,6 +64,8 @@ static int match_prefix(const char *str[], int num, const char *prefix)
static void handle_help(int argc, char *argv[])
{
printf("\n << Chu Pico Controller >>\n");
printf(" https://github.com/whowechina\n\n");
printf("Available commands:\n");
for (int i = 0; i < num_commands; i++) {
printf("%*s: %s\n", max_cmd_len + 2, commands[i], helps[i]);
@ -183,6 +185,28 @@ static void handle_fps(int argc, char *argv[])
printf("FPS: core 0: %d, core 1: %d\n", fps[0], fps[1]);
}
static void handle_stat(int argc, char *argv[])
{
if (argc == 0) {
for (int col = 0; col < 4; col++) {
printf(" %2dA |", col * 4 + 1);
for (int i = 0; i < 4; i++) {
printf("%6u|", slider_count(col * 8 + i * 2));
}
printf("\n B |");
for (int i = 0; i < 4; i++) {
printf("%6u|", slider_count(col * 8 + i * 2 + 1));
}
printf("\n");
}
} else if ((argc == 1) &&
(strncasecmp(argv[0], "reset", strlen(argv[0])) == 0)) {
slider_reset_stat();
} else {
printf("Usage: stat [reset]\n");
}
}
static void handle_hid(int argc, char *argv[])
{
const char *usage = "Usage: hid <joy|nkro|both>\n";
@ -424,6 +448,7 @@ void cmd_init()
register_command("?", handle_help, "Display this help message.");
register_command("display", handle_display, "Display all config.");
register_command("fps", handle_fps, "Display FPS.");
register_command("stat", handle_stat, "Display or reset statistics.");
register_command("hid", handle_hid, "Set HID mode.");
register_command("tof", handle_tof, "Set ToF config.");
register_command("filter", handle_filter, "Set pre-filter config.");

View File

@ -22,11 +22,9 @@
#define MPR121_ADDR 0x5A
static uint16_t baseline[36];
static int16_t error[36];
static uint16_t readout[36];
static bool touched[36];
static uint16_t touch[3];
static unsigned touch_count[36];
void slider_init()
{
@ -44,9 +42,21 @@ void slider_init()
void slider_update()
{
static uint16_t last_touched[3];
touch[0] = mpr121_touched(MPR121_ADDR);
touch[1] = mpr121_touched(MPR121_ADDR + 1);
touch[2] = mpr121_touched(MPR121_ADDR + 2);
for (int m = 0; m < 3; m++) {
uint16_t just_touched = touch[m] & ~last_touched[m];
last_touched[m] = touch[m];
for (int i = 0; i < 12; i++) {
if (just_touched & (1 << i)) {
touch_count[m * 12 + i]++;
}
}
}
}
const uint16_t *slider_raw()
@ -65,6 +75,19 @@ bool slider_touched(unsigned key)
return touch[key / 12] & (1 << (key % 12));
}
unsigned slider_count(unsigned key)
{
if (key >= 32) {
return 0;
}
return touch_count[key];
}
void slider_reset_stat()
{
memset(touch_count, 0, sizeof(touch_count));
}
void slider_update_config()
{
for (int m = 0; m < 3; m++) {

View File

@ -14,5 +14,8 @@ void slider_update();
bool slider_touched(unsigned key);
const uint16_t *slider_raw();
void slider_update_config();
unsigned slider_count(unsigned key);
void slider_reset_stat();
#endif