Input, Gui: total events complementarity on all levels (#681)
* Cli: add missing const in cli_write. * Gui, Input: bit fields based key complementarity on all levels, key and type names API. * Gui: minor cleanup of bit filed usage
This commit is contained in:
@@ -91,6 +91,31 @@ void input_cli_send(Cli* cli, string_t args, void* context) {
|
||||
notify_pubsub(&input->event_pubsub, &event);
|
||||
}
|
||||
|
||||
const char* input_get_key_name(InputKey key) {
|
||||
for(size_t i = 0; i < input_pins_count; i++) {
|
||||
if(input_pins[i].key == key) {
|
||||
return input_pins[i].name;
|
||||
}
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
const char* input_get_type_name(InputType type) {
|
||||
switch(type) {
|
||||
case InputTypePress:
|
||||
return "Press";
|
||||
case InputTypeRelease:
|
||||
return "Release";
|
||||
case InputTypeShort:
|
||||
return "Short";
|
||||
case InputTypeLong:
|
||||
return "Long";
|
||||
case InputTypeRepeat:
|
||||
return "Repeat";
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
int32_t input_srv() {
|
||||
input = furi_alloc(sizeof(Input));
|
||||
input->thread = osThreadGetId();
|
||||
@@ -103,10 +128,9 @@ int32_t input_srv() {
|
||||
input->cli, "input_send", CliCommandFlagParallelSafe, input_cli_send, input);
|
||||
}
|
||||
|
||||
const size_t pin_count = input_pins_count;
|
||||
input->pin_states = furi_alloc(pin_count * sizeof(InputPinState));
|
||||
input->pin_states = furi_alloc(input_pins_count * sizeof(InputPinState));
|
||||
|
||||
for(size_t i = 0; i < pin_count; i++) {
|
||||
for(size_t i = 0; i < input_pins_count; i++) {
|
||||
GpioPin gpio = {(GPIO_TypeDef*)input_pins[i].port, (uint16_t)input_pins[i].pin};
|
||||
hal_gpio_add_int_callback(&gpio, input_isr, NULL);
|
||||
input->pin_states[i].pin = &input_pins[i];
|
||||
@@ -119,7 +143,7 @@ int32_t input_srv() {
|
||||
|
||||
while(1) {
|
||||
bool is_changing = false;
|
||||
for(size_t i = 0; i < pin_count; i++) {
|
||||
for(size_t i = 0; i < input_pins_count; i++) {
|
||||
bool state = GPIO_Read(input->pin_states[i]);
|
||||
if(input->pin_states[i].debounce > 0 &&
|
||||
input->pin_states[i].debounce < INPUT_DEBOUNCE_TICKS) {
|
||||
|
@@ -18,3 +18,15 @@ typedef struct {
|
||||
InputKey key;
|
||||
InputType type;
|
||||
} InputEvent;
|
||||
|
||||
/** Get human readable input key name
|
||||
* @param key - InputKey
|
||||
* @return string
|
||||
*/
|
||||
const char* input_get_key_name(InputKey key);
|
||||
|
||||
/** Get human readable input type name
|
||||
* @param type - InputType
|
||||
* @return string
|
||||
*/
|
||||
const char* input_get_type_name(InputType type);
|
||||
|
Reference in New Issue
Block a user