#pragma once #ifdef __cplusplus extern "C" { #endif #include #include #include #define FILE_BUFFER_LEN 16 typedef enum { LevelRssi122_100, LevelRssi99_80, LevelRssi79_60, LevelRssi59_40, LevelRssi39_0, LevelRssiNum, LevelRssiError = 0xFF, } LevelRssiRange; extern const uint8_t bt_hid_delays[LevelRssiNum]; extern uint8_t bt_timeout; typedef enum { BadKbStateInit, BadKbStateNotConnected, BadKbStateIdle, BadKbStateWillRun, BadKbStateRunning, BadKbStateDelay, BadKbStateStringDelay, BadKbStateDone, BadKbStateScriptError, BadKbStateFileError, } BadKbWorkerState; typedef struct { BadKbWorkerState state; bool is_bt; uint32_t pin; uint16_t line_cur; uint16_t line_nb; uint32_t delay_remain; uint16_t error_line; char error[64]; } BadKbState; typedef struct { FuriHalUsbHidConfig hid_cfg; FuriThread* thread; BadKbState st; FuriString* file_path; FuriString* keyboard_layout; uint8_t file_buf[FILE_BUFFER_LEN + 1]; uint8_t buf_start; uint8_t buf_len; bool file_end; uint32_t defdelay; uint32_t stringdelay; uint16_t layout[128]; FuriString* line; FuriString* line_prev; uint32_t repeat_cnt; uint8_t key_hold_nb; FuriString* string_print; size_t string_print_pos; Bt* bt; } BadKbScript; BadKbScript* bad_kb_script_open(FuriString* file_path, Bt* bt); void bad_kb_script_close(BadKbScript* bad_kb); void bad_kb_script_set_keyboard_layout(BadKbScript* bad_kb, FuriString* layout_path); void bad_kb_script_start(BadKbScript* bad_kb); void bad_kb_script_stop(BadKbScript* bad_kb); void bad_kb_script_toggle(BadKbScript* bad_kb); BadKbState* bad_kb_script_get_state(BadKbScript* bad_kb); #ifdef __cplusplus } #endif