7
mirror of https://github.com/tenderlove/initial-v.git synced 2025-04-22 04:13:22 +00:00

add mode for vim and general os

This commit is contained in:
Aaron Patterson 2023-02-13 16:34:02 -08:00
parent b248c87e84
commit f9eb3098bf
No known key found for this signature in database
GPG Key ID: 953170BCB4FFAFC6

View File

@ -25,6 +25,8 @@ typedef enum {
NEUTRAL,
REVERSE,
PARK,
VIM,
GENERAL,
} handle_state_t;
#define PRESSED (1 << 7)
@ -33,6 +35,7 @@ typedef enum {
handle_state_t handle_mode = NONE;
handle_position_t current_pos = SHIFTER_CENTER;
uint16_t command_pos = 0;
uint8_t mode = VIM;
uint8_t brightness = 0xFF;
@ -69,6 +72,13 @@ class HIDDataCallbacks : public NimBLECharacteristicCallbacks
case PARK:
handle_mode = requested_state;
break;
case VIM:
mode = VIM;
break;
case GENERAL:
mode = GENERAL;
handle_mode = DRIVE;
break;
}
printf("onwrite!!\n");
@ -296,6 +306,76 @@ vim_park_mode(handle_position_t from, handle_position_t to)
vim_drive_mode(from, to);
}
static void
general_drive_mode(handle_position_t from, handle_position_t to)
{
// Lock the screen
if (to == SHIFTER_CENTER_PARK) {
kb->press(KEY_LEFT_CTRL);
kb->press(KEY_LEFT_GUI);
kb->press('q');
kb->releaseAll();
return;
}
handle_position_t no_park = (handle_position_t)(to & SHIFTER_POSITION_MASK);
switch(no_park) {
case SHIFTER_CENTER:
kb->releaseAll();
break;
case SHIFTER_SIDE:
kb->press(KEY_LEFT_GUI);
break;
case SHIFTER_UP_UP:
kb->press(KEY_LEFT_GUI);
kb->press(KEY_LEFT_SHIFT);
kb->press(']');
kb->releaseAll();
break;
case SHIFTER_DOWN_DOWN:
kb->press(KEY_LEFT_GUI);
kb->press(KEY_LEFT_SHIFT);
kb->press('[');
kb->releaseAll();
break;
case SHIFTER_UP:
kb->press(KEY_PAGE_UP);
kb->release(KEY_PAGE_UP);
break;
case SHIFTER_DOWN:
kb->press(KEY_PAGE_DOWN);
kb->release(KEY_PAGE_DOWN);
break;
case SHIFTER_SIDE_UP:
kb->press(KEY_TAB);
kb->release(KEY_TAB);
break;
case SHIFTER_SIDE_DOWN:
kb->press(KEY_LEFT_SHIFT);
kb->press(KEY_TAB);
kb->release(KEY_TAB);
kb->release(KEY_LEFT_SHIFT);
break;
default:
break;
}
}
static void
general_neutral_mode(handle_position_t from, handle_position_t to)
{
}
static void
general_reverse_mode(handle_position_t from, handle_position_t to)
{
}
static void
general_park_mode(handle_position_t from, handle_position_t to)
{
}
selection_handler_t * vim_lut[(PARK - DRIVE) + 1] = {
vim_drive_mode, // NORMAL mode
vim_neutral_mode, // INSERT mode
@ -303,6 +383,13 @@ selection_handler_t * vim_lut[(PARK - DRIVE) + 1] = {
vim_park_mode, // NORMAL mode, but buffer is saved
};
selection_handler_t * general_lut[(PARK - DRIVE) + 1] = {
general_drive_mode,
general_neutral_mode,
general_reverse_mode,
general_park_mode,
};
void
kb_transmit_task(void *arg)
{
@ -311,7 +398,14 @@ kb_transmit_task(void *arg)
xQueueReceive(buttons_queue, &pressed, portMAX_DELAY);
if (kb->isConnected()) {
selection_handler_t * cb = vim_lut[handle_mode - DRIVE];
selection_handler_t * cb;
if (mode == VIM) {
cb = vim_lut[handle_mode - DRIVE];
}
else {
cb = general_lut[handle_mode - DRIVE];
}
if (cb) {
printf("found handler\n");
handle_position_t from;
@ -362,6 +456,10 @@ transmit_task(void *arg)
break;
case NONE:
break;
case VIM:
case GENERAL:
printf("shouldn't happen\n");
break;
}
}
}