|
@@ -1,39 +1,9 @@
|
|
|
#include "type_code_common.h"
|
|
#include "type_code_common.h"
|
|
|
#include <furi_hal_usb_hid.h>
|
|
#include <furi_hal_usb_hid.h>
|
|
|
#include <furi/core/kernel.h>
|
|
#include <furi/core/kernel.h>
|
|
|
|
|
+#include <furi/core/log.h>
|
|
|
#include "../../services/convert/convert.h"
|
|
#include "../../services/convert/convert.h"
|
|
|
-
|
|
|
|
|
-#define HID_KEYS_MAP_LENGTH (36)
|
|
|
|
|
-
|
|
|
|
|
-static const uint8_t hid_qwerty_keys_map[HID_KEYS_MAP_LENGTH] = {
|
|
|
|
|
- HID_KEYBOARD_0, HID_KEYBOARD_1, HID_KEYBOARD_2, HID_KEYBOARD_3, HID_KEYBOARD_4,
|
|
|
|
|
- HID_KEYBOARD_5, HID_KEYBOARD_6, HID_KEYBOARD_7, HID_KEYBOARD_8, HID_KEYBOARD_9,
|
|
|
|
|
- HID_KEYBOARD_A, HID_KEYBOARD_B, HID_KEYBOARD_C, HID_KEYBOARD_D, HID_KEYBOARD_E,
|
|
|
|
|
- HID_KEYBOARD_F, HID_KEYBOARD_G, HID_KEYBOARD_H, HID_KEYBOARD_I, HID_KEYBOARD_J,
|
|
|
|
|
- HID_KEYBOARD_K, HID_KEYBOARD_L, HID_KEYBOARD_M, HID_KEYBOARD_N, HID_KEYBOARD_O,
|
|
|
|
|
- HID_KEYBOARD_P, HID_KEYBOARD_Q, HID_KEYBOARD_R, HID_KEYBOARD_S, HID_KEYBOARD_T,
|
|
|
|
|
- HID_KEYBOARD_U, HID_KEYBOARD_V, HID_KEYBOARD_W, HID_KEYBOARD_X, HID_KEYBOARD_Y,
|
|
|
|
|
- HID_KEYBOARD_Z};
|
|
|
|
|
-
|
|
|
|
|
-static const uint8_t hid_azerty_keys_map[HID_KEYS_MAP_LENGTH] = {
|
|
|
|
|
- HID_KEYBOARD_0, HID_KEYBOARD_1, HID_KEYBOARD_2, HID_KEYBOARD_3, HID_KEYBOARD_4,
|
|
|
|
|
- HID_KEYBOARD_5, HID_KEYBOARD_6, HID_KEYBOARD_7, HID_KEYBOARD_8, HID_KEYBOARD_9,
|
|
|
|
|
- HID_KEYBOARD_Q, HID_KEYBOARD_B, HID_KEYBOARD_C, HID_KEYBOARD_D, HID_KEYBOARD_E,
|
|
|
|
|
- HID_KEYBOARD_F, HID_KEYBOARD_G, HID_KEYBOARD_H, HID_KEYBOARD_I, HID_KEYBOARD_J,
|
|
|
|
|
- HID_KEYBOARD_K, HID_KEYBOARD_L, HID_KEYBOARD_SEMICOLON, HID_KEYBOARD_N, HID_KEYBOARD_O,
|
|
|
|
|
- HID_KEYBOARD_P, HID_KEYBOARD_A, HID_KEYBOARD_R, HID_KEYBOARD_S, HID_KEYBOARD_T,
|
|
|
|
|
- HID_KEYBOARD_U, HID_KEYBOARD_V, HID_KEYBOARD_Z, HID_KEYBOARD_X, HID_KEYBOARD_Y,
|
|
|
|
|
- HID_KEYBOARD_W};
|
|
|
|
|
-
|
|
|
|
|
-static const uint8_t hid_qwertz_keys_map[HID_KEYS_MAP_LENGTH] = {
|
|
|
|
|
- HID_KEYBOARD_0, HID_KEYBOARD_1, HID_KEYBOARD_2, HID_KEYBOARD_3, HID_KEYBOARD_4,
|
|
|
|
|
- HID_KEYBOARD_5, HID_KEYBOARD_6, HID_KEYBOARD_7, HID_KEYBOARD_8, HID_KEYBOARD_9,
|
|
|
|
|
- HID_KEYBOARD_A, HID_KEYBOARD_B, HID_KEYBOARD_C, HID_KEYBOARD_D, HID_KEYBOARD_E,
|
|
|
|
|
- HID_KEYBOARD_F, HID_KEYBOARD_G, HID_KEYBOARD_H, HID_KEYBOARD_I, HID_KEYBOARD_J,
|
|
|
|
|
- HID_KEYBOARD_K, HID_KEYBOARD_L, HID_KEYBOARD_M, HID_KEYBOARD_N, HID_KEYBOARD_O,
|
|
|
|
|
- HID_KEYBOARD_P, HID_KEYBOARD_Q, HID_KEYBOARD_R, HID_KEYBOARD_S, HID_KEYBOARD_T,
|
|
|
|
|
- HID_KEYBOARD_U, HID_KEYBOARD_V, HID_KEYBOARD_W, HID_KEYBOARD_X, HID_KEYBOARD_Z,
|
|
|
|
|
- HID_KEYBOARD_Y};
|
|
|
|
|
|
|
+#include "../../services/kb_layouts/kb_layout_provider.h"
|
|
|
|
|
|
|
|
static uint32_t get_keystroke_delay(TokenAutomationFeature features) {
|
|
static uint32_t get_keystroke_delay(TokenAutomationFeature features) {
|
|
|
if(features & TokenAutomationFeatureTypeSlower) {
|
|
if(features & TokenAutomationFeatureTypeSlower) {
|
|
@@ -69,24 +39,13 @@ void totp_type_code_worker_execute_automation(
|
|
|
TokenAutomationFeature features,
|
|
TokenAutomationFeature features,
|
|
|
AutomationKeyboardLayout keyboard_layout,
|
|
AutomationKeyboardLayout keyboard_layout,
|
|
|
uint16_t initial_delay) {
|
|
uint16_t initial_delay) {
|
|
|
- furi_delay_ms(initial_delay);
|
|
|
|
|
-
|
|
|
|
|
- const uint8_t* keyboard_layout_dict;
|
|
|
|
|
- switch(keyboard_layout) {
|
|
|
|
|
- case AutomationKeyboardLayoutQWERTY:
|
|
|
|
|
- keyboard_layout_dict = &hid_qwerty_keys_map[0];
|
|
|
|
|
- break;
|
|
|
|
|
- case AutomationKeyboardLayoutAZERTY:
|
|
|
|
|
- keyboard_layout_dict = &hid_azerty_keys_map[0];
|
|
|
|
|
- break;
|
|
|
|
|
- case AutomationKeyboardLayoutQWERTZ:
|
|
|
|
|
- keyboard_layout_dict = &hid_qwertz_keys_map[0];
|
|
|
|
|
- break;
|
|
|
|
|
-
|
|
|
|
|
- default:
|
|
|
|
|
|
|
+ uint16_t keyboard_layout_dict[TOTP_KB_LAYOUT_DATA_LENGTH];
|
|
|
|
|
+ if(!totp_kb_layout_provider_get_layout_data(keyboard_layout, &keyboard_layout_dict[0])) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ furi_delay_ms(initial_delay);
|
|
|
|
|
+
|
|
|
uint32_t keystroke_delay = get_keystroke_delay(features);
|
|
uint32_t keystroke_delay = get_keystroke_delay(features);
|
|
|
|
|
|
|
|
char cb_char;
|
|
char cb_char;
|
|
@@ -97,16 +56,9 @@ void totp_type_code_worker_execute_automation(
|
|
|
char_index = cb_char - 'A' + 10;
|
|
char_index = cb_char - 'A' + 10;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(char_index >= HID_KEYS_MAP_LENGTH) break;
|
|
|
|
|
|
|
+ if(char_index >= TOTP_KB_LAYOUT_DATA_LENGTH) break;
|
|
|
|
|
|
|
|
uint16_t hid_kb_key = keyboard_layout_dict[char_index];
|
|
uint16_t hid_kb_key = keyboard_layout_dict[char_index];
|
|
|
-
|
|
|
|
|
- // For non-AZERTY press shift for all non-digit chars
|
|
|
|
|
- // For AZERTY press shift for all characters
|
|
|
|
|
- if(char_index > 9 || keyboard_layout == AutomationKeyboardLayoutAZERTY) {
|
|
|
|
|
- hid_kb_key |= KEY_MOD_LEFT_SHIFT;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
totp_type_code_worker_press_key(hid_kb_key, key_press_fn, key_release_fn, features);
|
|
totp_type_code_worker_press_key(hid_kb_key, key_press_fn, key_release_fn, features);
|
|
|
furi_delay_ms(keystroke_delay);
|
|
furi_delay_ms(keystroke_delay);
|
|
|
i++;
|
|
i++;
|