diff --git a/.drone.yml b/.drone.yml index 2904d35b1..e915bf91b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -22,6 +22,8 @@ steps: - mv dist/f7-C/* artifacts-default/ - ls -laS artifacts-default - ls -laS artifacts-default/f7-update-${DRONE_TAG} + - sed -i 's/(version)/'${DRONE_TAG}'/g' CHANGELOG.md + - echo '# [Install via Web Updater](https://my.flipp.dev/?url=https://unleashedflip.com/builds/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=dev-cfw&version='${DRONE_TAG})'' >> CHANGELOG.md environment: FBT_TOOLS_CUSTOM_LINK: from_secret: fbt_link @@ -53,6 +55,21 @@ steps: - rm -rf artifacts-default/f7-update-${DRONE_TAG} - ls -laS artifacts-default + - name: "Upload to updates server" + image: appleboy/drone-scp + settings: + host: + from_secret: dep_host + username: + from_secret: dep_user + password: + from_secret: dep_passwd + port: + from_secret: dep_port + target: + from_secret: dep_target + source: artifacts-default/flipper-z-f7-update-${DRONE_TAG}.tgz + - name: "Do Github release" image: ddplugins/github-release pull: never diff --git a/CHANGELOG.md b/CHANGELOG.md index ccbe87eb5..6ebb7d117 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,17 @@ ### New changes -* Added pack of community apps with some fixes/changes - [(Full list)](https://github.com/Eng1n33r/flipperzero-firmware#apps-included) -* BadUSB extra keyboard layouts [(By v1nc)](https://github.com/v1nc/flipperzero-firmware) - [How to use](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/BadUSBLayouts.md) -* UniRF app update - now its possible to select any `.txt` map file, instructions updated -* Added ability to extend subghz frequency range -* Updated docs and readme +* UniRF app update - re-done [(by ESurge)](https://github.com/ESurge/flipperzero-firmware-unirfremix/tree/minimal-fbt) and some changes by MX/Nano +* BadUSB Hungarian (HU) keyboard layout [(By ut1s)](https://github.com/ut1s) - PR #36 +* SubGHz GUI text fixes +* Music player plugin - removed second pointer +* Snake, Tetris, PicoPass plugin gui fixes - [(By TQMatvey)](https://github.com/TQMatvey) - PR #37/#38 +* OFW: SubGHz: checking saved key files for length -- [!!!] Replace your subghz/assets/setting_user with file from `sd-card-(version).zip` because file format has been changed - -**Note: We changed version names, because our releases not based on official releases, now versions is called -cg1-(commit-sha) - where "cg" = "Code Grabber", 1 = number of build(if ofw commit doesnt change), and (commit sha) - means ofw dev commit on which our version is based** +**Note: Prefer installing using web updater or by self update package** Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip` DFU for update using qFlipper - `flipper-z-f7-full-(version).dfu` If using DFU update method, download this archive and unpack it to your microSD, replacing all files except files you have edited manually - -`sd-card-(version).zip` \ No newline at end of file +`sd-card-(version).zip` + diff --git a/applications/bad_usb/bad_usb_script.c b/applications/bad_usb/bad_usb_script.c index 8a35650fa..84661296a 100644 --- a/applications/bad_usb/bad_usb_script.c +++ b/applications/bad_usb/bad_usb_script.c @@ -321,6 +321,8 @@ static uint16_t ducky_get_layout(const char* line) { layout = 1; } else if(strcmp(line, "FR") == 0) { layout = 2; + } else if(strcmp(line, "HU") == 0) { + layout = 3; } FURI_LOG_D(WORKER_TAG, "keyboard layout set: %hu", layout); return layout; diff --git a/applications/music_player/music_player.c b/applications/music_player/music_player.c index 3c6d4207f..b788361af 100644 --- a/applications/music_player/music_player.c +++ b/applications/music_player/music_player.c @@ -30,7 +30,7 @@ typedef struct { typedef struct { MusicPlayerModel* model; - FuriMutex** model_mutex; + FuriMutex* model_mutex; FuriMessageQueue* input_queue; diff --git a/applications/subghz/views/transmitter.c b/applications/subghz/views/transmitter.c index 3cbcf098a..be9c0fe09 100644 --- a/applications/subghz/views/transmitter.c +++ b/applications/subghz/views/transmitter.c @@ -79,9 +79,9 @@ void subghz_view_transmitter_draw(Canvas* canvas, SubGhzViewTransmitterModel* mo canvas_clear(canvas); canvas_set_color(canvas, ColorBlack); canvas_set_font(canvas, FontSecondary); - elements_multiline_text(canvas, 0, 8, string_get_cstr(model->key_str)); - canvas_draw_str(canvas, 78, 8, string_get_cstr(model->frequency_str)); - canvas_draw_str(canvas, 113, 8, string_get_cstr(model->preset_str)); + elements_multiline_text(canvas, 0, 7, string_get_cstr(model->key_str)); + canvas_draw_str(canvas, 78, 7, string_get_cstr(model->frequency_str)); + canvas_draw_str(canvas, 113, 7, string_get_cstr(model->preset_str)); if(model->show_button) subghz_view_transmitter_button_right(canvas, "Send"); } diff --git a/applications/unirfremix/unirfremix_app.c b/applications/unirfremix/unirfremix_app.c index 77eb64261..23d3786c8 100644 --- a/applications/unirfremix/unirfremix_app.c +++ b/applications/unirfremix/unirfremix_app.c @@ -1,22 +1,21 @@ #include + #include #include #include -#include - -#include +#include #include -#include -#include -#include - #include -#define TAG "UniRF Remix" +#include +#include +#include -#define UNIRF_APP_PATH_FOLDER "/ext/unirf" -#define UNIRF_APP_PATH_EXTENSION ".txt" +#define UNIRFMAP_FOLDER "/ext/unirf" +#define UNIRFMAP_EXTENSION ".txt" + +#define TAG "UniRF Remix" typedef struct { FuriMutex* model_mutex; @@ -39,6 +38,8 @@ typedef struct { string_t down_l; string_t ok_l; + string_t file_path; + char* up_label; char* down_label; char* left_label; @@ -151,10 +152,9 @@ static char* extract_filename(const char* name, int len) { *set error flag if missing map file */ -void unirfremix_cfg_set_check(UniRFRemix* app) { +void unirfremix_cfg_set_check(UniRFRemix* app, string_t file_name) { Storage* storage = furi_record_open("storage"); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); - storage_common_mkdir(storage, UNIRF_APP_PATH_FOLDER); app->file_result = 3; app->file_blank = 0; @@ -167,22 +167,8 @@ void unirfremix_cfg_set_check(UniRFRemix* app) { int label_len = 12; - DialogsApp* dialogs = furi_record_open("dialogs"); - bool select_result = false; - string_t file_name; - string_init(file_name); - string_set_str(file_name, UNIRF_APP_PATH_FOLDER); - bool ret = dialog_file_browser_show( - dialogs, file_name, file_name, UNIRF_APP_PATH_EXTENSION, true, &I_sub1_10px, false); - - furi_record_close("dialogs"); - if(ret) { - select_result = true; - } - //check that map file exists - if(!flipper_format_file_open_existing(fff_data_file, string_get_cstr(file_name)) && - !select_result) { + if(!flipper_format_file_open_existing(fff_data_file, string_get_cstr(file_name))) { FURI_LOG_I(TAG, "Could not open MAP file %s", string_get_cstr(file_name)); } else { //Filename Assignment/Check Start @@ -359,7 +345,7 @@ void unirfremix_cfg_set_check(UniRFRemix* app) { FURI_LOG_I(TAG, "OK label: %s", app->ok_label); } - app->file_result = 4; + app->file_result = 2; } flipper_format_free(fff_data_file); @@ -376,7 +362,7 @@ void unirfremix_cfg_set_check(UniRFRemix* app) { if(app->file_blank == 5) { //trigger invalid file error screen - app->file_result = 2; + app->file_result = 1; } else { //check all files //reset app->file_blank to redetermine if error needs to be thrown @@ -471,13 +457,11 @@ void unirfremix_cfg_set_check(UniRFRemix* app) { } if(app->file_blank == 5) { - app->file_result = 2; + app->file_result = 1; } else { - app->file_result = 4; + app->file_result = 2; } } - - string_clear(file_name); } static void unirfremix_end_send(UniRFRemix* app) { @@ -530,7 +514,7 @@ static void unirfremix_send_signal( notification_message(notification, &sequence_blink_magenta_10); printf("Sending..."); fflush(stdout); - furi_delay_ms(300); + furi_delay_ms(333); } furi_record_close("notification"); @@ -549,7 +533,6 @@ static void unirfremix_send_signal( } static void unirfremix_process_signal(UniRFRemix* app, string_t signal) { - furi_mutex_release(app->model_mutex); view_port_update(app->view_port); FURI_LOG_I(TAG, "signal = %s", string_get_cstr(signal)); @@ -596,30 +579,13 @@ static void render_callback(Canvas* canvas, void* ctx) { //setup different canvas settings if(app->file_result == 1) { - //If map is missing - canvas_clear(canvas); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 62, 5, AlignCenter, AlignTop, "Map file is missing!"); - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 62, 25, AlignCenter, AlignTop, "Please create"); - canvas_draw_str_aligned(canvas, 62, 35, AlignCenter, AlignTop, "map file."); - canvas_draw_str_aligned(canvas, 62, 60, AlignCenter, AlignBottom, "Hold Back to Exit."); - } else if(app->file_result == 2) { //if map has no valid filenames defined canvas_clear(canvas); canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 62, 5, AlignCenter, AlignTop, "Invalid map file!"); + canvas_draw_str_aligned(canvas, 62, 5, AlignCenter, AlignTop, "Config is incorrect."); canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 62, 25, AlignCenter, AlignTop, "Please reconfigure"); - canvas_draw_str_aligned(canvas, 62, 35, AlignCenter, AlignTop, "your map file."); + canvas_draw_str_aligned(canvas, 62, 30, AlignCenter, AlignTop, "Please configure map."); canvas_draw_str_aligned(canvas, 62, 60, AlignCenter, AlignBottom, "Hold Back to Exit."); - } else if(app->file_result == 3) { - //if map has no valid filenames defined - canvas_clear(canvas); - canvas_set_font(canvas, FontPrimary); - canvas_draw_str_aligned(canvas, 62, 5, AlignCenter, AlignTop, "Config is loading."); - canvas_set_font(canvas, FontSecondary); - canvas_draw_str_aligned(canvas, 62, 35, AlignCenter, AlignTop, "Please wait."); } else { //map found, draw all the things canvas_clear(canvas); @@ -634,45 +600,57 @@ static void render_callback(Canvas* canvas, void* ctx) { //PNGs are located in assets/icons/UniRFRemix before compiliation //Icons for Labels - canvas_draw_icon(canvas, 0, 0, &I_UniRFRemix_LeftAlignedButtons_9x64); + //canvas_draw_icon(canvas, 0, 0, &I_UniRFRemix_LeftAlignedButtons_9x64); + canvas_draw_icon(canvas, 1, 5, &I_ButtonUp_7x4); + canvas_draw_icon(canvas, 1, 15, &I_ButtonDown_7x4); + canvas_draw_icon(canvas, 2, 23, &I_ButtonLeft_4x7); + canvas_draw_icon(canvas, 2, 33, &I_ButtonRight_4x7); + canvas_draw_icon(canvas, 0, 42, &I_Ok_btn_9x9); + canvas_draw_icon(canvas, 0, 53, &I_back_10px); //Labels canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 12, 10, app->up_label); - canvas_draw_str(canvas, 12, 20, app->down_label); - canvas_draw_str(canvas, 12, 30, app->left_label); - canvas_draw_str(canvas, 12, 40, app->right_label); - canvas_draw_str(canvas, 12, 50, app->ok_label); + canvas_draw_str(canvas, 10, 10, app->up_label); + canvas_draw_str(canvas, 10, 20, app->down_label); + canvas_draw_str(canvas, 10, 30, app->left_label); + canvas_draw_str(canvas, 10, 40, app->right_label); + canvas_draw_str(canvas, 10, 50, app->ok_label); - canvas_draw_str_aligned(canvas, 12, 62, AlignLeft, AlignBottom, "Repeat # - Hold to exit"); + canvas_draw_str_aligned( + canvas, 11, 62, AlignLeft, AlignBottom, "Hold=Exit. Tap for Repeat:"); //Status text and indicator - canvas_draw_str_aligned(canvas, 125, 10, AlignRight, AlignBottom, app->send_status); + canvas_draw_str_aligned(canvas, 126, 10, AlignRight, AlignBottom, app->send_status); switch(app->send_status_c) { case 0: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Outline_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); break; case 1: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Left_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 116, 17, &I_Pin_arrow_up7x9); break; case 2: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Right_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 116, 17, &I_Pin_arrow_down_7x9); break; case 3: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Up_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 115, 18, &I_Pin_arrow_right_9x7); break; case 4: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Down_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 115, 18, &I_Pin_arrow_left_9x7); break; case 5: - canvas_draw_icon(canvas, 110, 15, &I_UniRFRemix_Center_14x14); + canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); + canvas_draw_icon(canvas, 116, 18, &I_Pin_star_7x7); break; } //Repeat indicator //canvas_draw_str_aligned(canvas, 125, 40, AlignRight, AlignBottom, "Repeat:"); - canvas_draw_icon(canvas, 115, 39, &I_UniRFRemix_Repeat_12x14); + //canvas_draw_icon(canvas, 115, 39, &I_UniRFRemix_Repeat_12x14); canvas_draw_str_aligned( canvas, 125, 62, AlignRight, AlignBottom, int_to_char(app->repeat)); } @@ -683,7 +661,7 @@ static void render_callback(Canvas* canvas, void* ctx) { static void input_callback(InputEvent* input_event, void* ctx) { UniRFRemix* app = ctx; - furi_message_queue_put(app->input_queue, input_event, FuriWaitForever); + furi_message_queue_put(app->input_queue, input_event, 0); } UniRFRemix* unirfremix_alloc() { @@ -698,7 +676,7 @@ UniRFRemix* unirfremix_alloc() { view_port_input_callback_set(app->view_port, input_callback, app); // Open GUI and register view_port - app->gui = furi_record_open("gui"); + app->gui = furi_record_open(RECORD_GUI); gui_add_view_port(app->gui, app->view_port, GuiLayerFullscreen); return app; @@ -718,8 +696,10 @@ void unirfremix_free(UniRFRemix* app) { string_clear(app->right_l); string_clear(app->ok_l); + string_clear(app->file_path); + gui_remove_view_port(app->gui, app->view_port); - furi_record_close("gui"); + furi_record_close(RECORD_GUI); view_port_free(app->view_port); furi_message_queue_free(app->input_queue); @@ -733,6 +713,8 @@ int32_t unirfremix_app(void* p) { UNUSED(p); UniRFRemix* app = unirfremix_alloc(); + string_init(app->file_path); + //setup variables before population string_init(app->up_file); string_init(app->down_file); @@ -749,12 +731,29 @@ int32_t unirfremix_app(void* p) { app->file_result = 3; - //check map and population variables - unirfremix_cfg_set_check(app); + Storage* storage = furi_record_open("storage"); + if(!storage_simply_mkdir(storage, UNIRFMAP_FOLDER)) { + FURI_LOG_E(TAG, "Could not create folder %s", UNIRFMAP_FOLDER); + } + furi_record_close("storage"); + + string_set_str(app->file_path, UNIRFMAP_FOLDER); + + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + bool res = dialog_file_browser_show( + dialogs, app->file_path, app->file_path, UNIRFMAP_EXTENSION, true, &I_sub1_10px, false); + + furi_record_close(RECORD_DIALOGS); + if(!res) { + FURI_LOG_E(TAG, "No file selected"); + } else { + //check map and population variables + unirfremix_cfg_set_check(app, app->file_path); + } bool exit_loop = false; - if(app->file_result == 4) { + if(app->file_result == 2) { FURI_LOG_I( TAG, "U: %s - D: %s - L: %s - R: %s - O: %s ", @@ -793,7 +792,7 @@ int32_t unirfremix_app(void* p) { if(app->processing == 0) { *app->signal = *app->empty; *app->signal = *app->up_file; - app->button = 3; + app->button = 1; app->processing = 1; } } @@ -806,7 +805,7 @@ int32_t unirfremix_app(void* p) { if(app->processing == 0) { *app->signal = *app->empty; *app->signal = *app->down_file; - app->button = 4; + app->button = 2; app->processing = 1; } } @@ -819,7 +818,7 @@ int32_t unirfremix_app(void* p) { if(app->processing == 0) { *app->signal = *app->empty; *app->signal = *app->right_file; - app->button = 1; + app->button = 3; app->processing = 1; } } @@ -832,7 +831,7 @@ int32_t unirfremix_app(void* p) { if(app->processing == 0) { *app->signal = *app->empty; *app->signal = *app->left_file; - app->button = 2; + app->button = 4; app->processing = 1; } } @@ -908,7 +907,7 @@ int32_t unirfremix_app(void* p) { furi_mutex_release(app->model_mutex); view_port_update(app->view_port); } - } else { + } else if(app->file_result == 1) { //refresh screen to update variables before processing main screen or error screens view_port_update(app->view_port); @@ -948,10 +947,12 @@ int32_t unirfremix_app(void* p) { furi_mutex_release(app->model_mutex); view_port_update(app->view_port); } + } else { + furi_mutex_release(app->model_mutex); } // remove & free all stuff created by app unirfremix_free(app); return 0; -} +} \ No newline at end of file diff --git a/assets/icons/UniRFRemix/UniRFRemix_Center-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Center-14x14.png deleted file mode 100644 index d41a66495..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Center-14x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Down-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Down-14x14.png deleted file mode 100644 index efd7181f0..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Down-14x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Left-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Left-14x14.png deleted file mode 100644 index c64bad5f2..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Left-14x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_LeftAlignedButtons_9x64.png b/assets/icons/UniRFRemix/UniRFRemix_LeftAlignedButtons_9x64.png deleted file mode 100644 index d05541e01..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_LeftAlignedButtons_9x64.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Outline-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Outline-14x14.png deleted file mode 100644 index 8d135853f..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Outline-14x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Repeat_12x14.png b/assets/icons/UniRFRemix/UniRFRemix_Repeat_12x14.png deleted file mode 100644 index b3b3def06..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Repeat_12x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Right-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Right-14x14.png deleted file mode 100644 index 300f00128..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Right-14x14.png and /dev/null differ diff --git a/assets/icons/UniRFRemix/UniRFRemix_Up-14x14.png b/assets/icons/UniRFRemix/UniRFRemix_Up-14x14.png deleted file mode 100644 index 24c349ead..000000000 Binary files a/assets/icons/UniRFRemix/UniRFRemix_Up-14x14.png and /dev/null differ diff --git a/firmware/targets/furi_hal_include/furi_hal_usb_hid.h b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h index 997cacc56..7a36965bd 100644 --- a/firmware/targets/furi_hal_include/furi_hal_usb_hid.h +++ b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h @@ -622,9 +622,243 @@ static const uint16_t hid_asciimap_fr[] = { HID_KEYBOARD_NONE, // DEL }; +/** HID keyboard key codes HU by ut1s */ +enum HidKeyboardKeysHU { + HID_KEYBOARD_HU_ERROR_ROLLOVER = 0x01, + HID_KEYBOARD_HU_POST_FAIL = 0x02, + HID_KEYBOARD_HU_ERROR_UNHUFINED = 0x03, + + HID_KEYBOARD_HU_ENTER = 0x28, + HID_KEYBOARD_HU_ESC = 0x29, + HID_KEYBOARD_HU_BACKSPACE = 0x2A, + HID_KEYBOARD_HU_TAB = 0x2B, + HID_KEYBOARD_HU_SPACE = 0x2C, + + HID_KEYBOARD_HU_A = 0x04, + HID_KEYBOARD_HU_B = 0x05, + HID_KEYBOARD_HU_C = 0x06, + HID_KEYBOARD_HU_D = 0x07, + HID_KEYBOARD_HU_E = 0x08, + HID_KEYBOARD_HU_F = 0x09, + HID_KEYBOARD_HU_G = 0x0A, + HID_KEYBOARD_HU_H = 0x0B, + HID_KEYBOARD_HU_I = 0x0C, + HID_KEYBOARD_HU_J = 0x0D, + HID_KEYBOARD_HU_K = 0x0E, + HID_KEYBOARD_HU_L = 0x0F, + HID_KEYBOARD_HU_M = 0x10, + HID_KEYBOARD_HU_N = 0x11, + HID_KEYBOARD_HU_O = 0x12, + HID_KEYBOARD_HU_P = 0x13, + HID_KEYBOARD_HU_Q = 0x14, + HID_KEYBOARD_HU_R = 0x15, + HID_KEYBOARD_HU_S = 0x16, + HID_KEYBOARD_HU_T = 0x17, + HID_KEYBOARD_HU_U = 0x18, + HID_KEYBOARD_HU_V = 0x19, + HID_KEYBOARD_HU_W = 0x1A, + HID_KEYBOARD_HU_X = 0x1B, + HID_KEYBOARD_HU_Y = 0x1D, + HID_KEYBOARD_HU_Z = 0x1C, + + HID_KEYBOARD_HU_1 = 0x1E, + HID_KEYBOARD_HU_2 = 0x1F, + HID_KEYBOARD_HU_3 = 0x20, + HID_KEYBOARD_HU_4 = 0x21, + HID_KEYBOARD_HU_5 = 0x22, + HID_KEYBOARD_HU_6 = 0x23, + HID_KEYBOARD_HU_7 = 0x24, + HID_KEYBOARD_HU_8 = 0x25, + HID_KEYBOARD_HU_9 = 0x26, + HID_KEYBOARD_HU_0 = 0x35, + + HID_KEYBOARD_HU_EXCLAMATION = 0x21, //! + HID_KEYBOARD_HU_DOUBLE_QUOTE = 0x1F, //" + HID_KEYBOARD_HU_DOLLAR = 0x33, //$ + HID_KEYBOARD_HU_PERCENT = 0x22, //% + HID_KEYBOARD_HU_AND = 0x06, //& + HID_KEYBOARD_HU_SINGLE_QUOTE = 0x1E, //tocheck ' + HID_KEYBOARD_HU_LEFT_PARENTHESIS = 0x25, //( + HID_KEYBOARD_HU_RIGHT_PARENTHESIS = 0x26, //) + HID_KEYBOARD_HU_STAR = 0x38, //* + HID_KEYBOARD_HU_EQUAL = 0x24, //= + HID_KEYBOARD_HU_COMMA = 0x36, //, + HID_KEYBOARD_HU_DASH = 0x38, // - + HID_KEYBOARD_HU_SEMI_COLON = 0x36, // ; + HID_KEYBOARD_HU_DOUBLE_POINTS = 0x37, //: + HID_KEYBOARD_HU_SMALLER = 0x64, //todo < + HID_KEYBOARD_HU_UNDERSCORE = 0x38, //_ + HID_KEYBOARD_HU_CIRCUMFLEX = 0x20, //tocheck ^ + HID_KEYBOARD_HU_BACKTICK = 0x24, // ` + + HID_KEYBOARD_HU_CAPS_LOCK = 0xC1, + HID_KEYBOARD_HU_F1 = 0xC2, + HID_KEYBOARD_HU_F2 = 0xC3, + HID_KEYBOARD_HU_F3 = 0xC4, + HID_KEYBOARD_HU_F4 = 0xC5, + HID_KEYBOARD_HU_F5 = 0xC6, + HID_KEYBOARD_HU_F6 = 0xC7, + HID_KEYBOARD_HU_F7 = 0xC8, + HID_KEYBOARD_HU_F8 = 0xC9, + HID_KEYBOARD_HU_F9 = 0xCA, + HID_KEYBOARD_HU_F10 = 0xCB, + HID_KEYBOARD_HU_F11 = 0xCC, + HID_KEYBOARD_HU_F12 = 0xCD, + HID_KEYBOARD_HU_PRINT = 0x63, + HID_KEYBOARD_HU_SCROLL_LOCK = 0x47, + HID_KEYBOARD_HU_PAUSE = 0x48, + HID_KEYBOARD_HU_INSERT = 0xD1, + HID_KEYBOARD_HU_HOME = 0xD2, + HID_KEYBOARD_HU_PAGE_UP = 0xD3, + HID_KEYBOARD_HU_DELETE = 0xD4, + HID_KEYBOARD_HU_END = 0xD5, + HID_KEYBOARD_HU_PAGE_DOWN = 0xD6, + HID_KEYBOARD_HU_RIGHT_ARROW = 0xD7, + HID_KEYBOARD_HU_LEFT_ARROW = 0xD8, + HID_KEYBOARD_HU_DOWN_ARROW = 0xD9, + HID_KEYBOARD_HU_UP_ARROW = 0xDA, + HID_KEYBOARD_HU_NUM_LOCK = 0x53, + HID_KEYBOARD_HU_NON_US = 0x64, + HID_KEYBOARD_HU_APPLICATION = 0x65, + + HID_KEYBOARD_HU_SHARP_SS = 0x36, +}; + +static const uint16_t hid_asciimap_hu[] = { + HID_KEYBOARD_NONE, // NUL + HID_KEYBOARD_NONE, // SOH + HID_KEYBOARD_NONE, // STX + HID_KEYBOARD_NONE, // ETX + HID_KEYBOARD_NONE, // EOT + HID_KEYBOARD_NONE, // ENQ + HID_KEYBOARD_NONE, // ACK + HID_KEYBOARD_NONE, // BEL + HID_KEYBOARD_HU_BACKSPACE, // BS Backspace + HID_KEYBOARD_HU_TAB, // TAB Tab + HID_KEYBOARD_HU_ENTER, // LF Enter + HID_KEYBOARD_NONE, // VT + HID_KEYBOARD_NONE, // FF + HID_KEYBOARD_NONE, // CR + HID_KEYBOARD_NONE, // SO + HID_KEYBOARD_NONE, // SI + HID_KEYBOARD_NONE, // DEL + HID_KEYBOARD_NONE, // DC1 + HID_KEYBOARD_NONE, // DC2 + HID_KEYBOARD_NONE, // DC3 + HID_KEYBOARD_NONE, // DC4 + HID_KEYBOARD_NONE, // NAK + HID_KEYBOARD_NONE, // SYN + HID_KEYBOARD_NONE, // ETB + HID_KEYBOARD_NONE, // CAN + HID_KEYBOARD_NONE, // EM + HID_KEYBOARD_NONE, // SUB + HID_KEYBOARD_NONE, // ESC + HID_KEYBOARD_NONE, // FS + HID_KEYBOARD_NONE, // GS + HID_KEYBOARD_NONE, // RS + HID_KEYBOARD_NONE, // US + HID_KEYBOARD_HU_SPACE, // ' ' Space + HID_KEYBOARD_HU_EXCLAMATION | KEY_MOD_LEFT_SHIFT, // ! + HID_KEYBOARD_HU_DOUBLE_QUOTE | KEY_MOD_LEFT_SHIFT, // " + HID_KEYBOARD_HU_X | KEY_MOD_RIGHT_ALT, // # + HID_KEYBOARD_HU_DOLLAR | KEY_MOD_RIGHT_ALT, // $ + HID_KEYBOARD_HU_PERCENT | KEY_MOD_LEFT_SHIFT, // % + HID_KEYBOARD_HU_AND | KEY_MOD_RIGHT_ALT, // & + HID_KEYBOARD_HU_SINGLE_QUOTE | KEY_MOD_LEFT_SHIFT, // ' + HID_KEYBOARD_HU_LEFT_PARENTHESIS | KEY_MOD_LEFT_SHIFT, // ( + HID_KEYBOARD_HU_RIGHT_PARENTHESIS | KEY_MOD_LEFT_SHIFT, // ) + HID_KEYBOARD_HU_STAR | KEY_MOD_RIGHT_ALT, // * + HID_KEYBOARD_HU_3 | KEY_MOD_LEFT_SHIFT, // + + HID_KEYBOARD_HU_COMMA, // , + HID_KEYBOARD_HU_DASH, // - + HID_KEYBOARD_HU_DOUBLE_POINTS, // . + HID_KEYBOARD_HU_6 | KEY_MOD_LEFT_SHIFT, // / + HID_KEYBOARD_HU_0, // 0 + HID_KEYBOARD_HU_1, // 1 + HID_KEYBOARD_HU_2, // 2 + HID_KEYBOARD_HU_3, // 3 + HID_KEYBOARD_HU_4, // 4 + HID_KEYBOARD_HU_5, // 5 + HID_KEYBOARD_HU_6, // 6 + HID_KEYBOARD_HU_7, // 7 + HID_KEYBOARD_HU_8, // 8 + HID_KEYBOARD_HU_9, // 9 + HID_KEYBOARD_HU_DOUBLE_POINTS | KEY_MOD_LEFT_SHIFT, // : + HID_KEYBOARD_HU_SEMI_COLON | KEY_MOD_RIGHT_ALT, // ; + HID_KEYBOARD_HU_SMALLER | KEY_MOD_RIGHT_ALT, // < + HID_KEYBOARD_HU_EQUAL | KEY_MOD_LEFT_SHIFT, // = + HID_KEYBOARD_HU_Y | KEY_MOD_RIGHT_ALT, // > + HID_KEYBOARD_HU_SHARP_SS | KEY_MOD_LEFT_SHIFT, // ? + HID_KEYBOARD_HU_V | KEY_MOD_RIGHT_ALT, // @ + HID_KEYBOARD_HU_A | KEY_MOD_LEFT_SHIFT, // A + HID_KEYBOARD_HU_B | KEY_MOD_LEFT_SHIFT, // B + HID_KEYBOARD_HU_C | KEY_MOD_LEFT_SHIFT, // C + HID_KEYBOARD_HU_D | KEY_MOD_LEFT_SHIFT, // D + HID_KEYBOARD_HU_E | KEY_MOD_LEFT_SHIFT, // E + HID_KEYBOARD_HU_F | KEY_MOD_LEFT_SHIFT, // F + HID_KEYBOARD_HU_G | KEY_MOD_LEFT_SHIFT, // G + HID_KEYBOARD_HU_H | KEY_MOD_LEFT_SHIFT, // H + HID_KEYBOARD_HU_I | KEY_MOD_LEFT_SHIFT, // I + HID_KEYBOARD_HU_J | KEY_MOD_LEFT_SHIFT, // J + HID_KEYBOARD_HU_K | KEY_MOD_LEFT_SHIFT, // K + HID_KEYBOARD_HU_L | KEY_MOD_LEFT_SHIFT, // L + HID_KEYBOARD_HU_M | KEY_MOD_LEFT_SHIFT, // M + HID_KEYBOARD_HU_N | KEY_MOD_LEFT_SHIFT, // N + HID_KEYBOARD_HU_O | KEY_MOD_LEFT_SHIFT, // O + HID_KEYBOARD_HU_P | KEY_MOD_LEFT_SHIFT, // P + HID_KEYBOARD_HU_Q | KEY_MOD_LEFT_SHIFT, // Q + HID_KEYBOARD_HU_R | KEY_MOD_LEFT_SHIFT, // R + HID_KEYBOARD_HU_S | KEY_MOD_LEFT_SHIFT, // S + HID_KEYBOARD_HU_T | KEY_MOD_LEFT_SHIFT, // T + HID_KEYBOARD_HU_U | KEY_MOD_LEFT_SHIFT, // U + HID_KEYBOARD_HU_V | KEY_MOD_LEFT_SHIFT, // V + HID_KEYBOARD_HU_W | KEY_MOD_LEFT_SHIFT, // W + HID_KEYBOARD_HU_X | KEY_MOD_LEFT_SHIFT, // X + HID_KEYBOARD_HU_Y | KEY_MOD_LEFT_SHIFT, // Y + HID_KEYBOARD_HU_Z | KEY_MOD_LEFT_SHIFT, // Z + HID_KEYBOARD_HU_F | KEY_MOD_RIGHT_ALT, // [ + HID_KEYBOARD_HU_Q | KEY_MOD_RIGHT_ALT, // bslash + HID_KEYBOARD_HU_G | KEY_MOD_RIGHT_ALT, // ] + HID_KEYBOARD_HU_CIRCUMFLEX | KEY_MOD_RIGHT_ALT, // ^ + HID_KEYBOARD_HU_UNDERSCORE | KEY_MOD_LEFT_SHIFT, // _ + HID_KEYBOARD_HU_BACKTICK | KEY_MOD_RIGHT_ALT, // ` + HID_KEYBOARD_HU_A, // a + HID_KEYBOARD_HU_B, // b + HID_KEYBOARD_HU_C, // c + HID_KEYBOARD_HU_D, // d + HID_KEYBOARD_HU_E, // e + HID_KEYBOARD_HU_F, // f + HID_KEYBOARD_HU_G, // g + HID_KEYBOARD_HU_H, // h + HID_KEYBOARD_HU_I, // i + HID_KEYBOARD_HU_J, // j + HID_KEYBOARD_HU_K, // k + HID_KEYBOARD_HU_L, // l + HID_KEYBOARD_HU_M, // m + HID_KEYBOARD_HU_N, // n + HID_KEYBOARD_HU_O, // o + HID_KEYBOARD_HU_P, // p + HID_KEYBOARD_HU_Q, // q + HID_KEYBOARD_HU_R, // r + HID_KEYBOARD_HU_S, // s + HID_KEYBOARD_HU_T, // t + HID_KEYBOARD_HU_U, // u + HID_KEYBOARD_HU_V, // v + HID_KEYBOARD_HU_W, // w + HID_KEYBOARD_HU_X, // x + HID_KEYBOARD_HU_Y, // y + HID_KEYBOARD_HU_Z, // z + HID_KEYBOARD_HU_B | KEY_MOD_RIGHT_ALT, // { + HID_KEYBOARD_HU_W | KEY_MOD_RIGHT_ALT, // | + HID_KEYBOARD_HU_N | KEY_MOD_RIGHT_ALT, // } + HID_KEYBOARD_HU_SINGLE_QUOTE | KEY_MOD_RIGHT_ALT, // ~ + HID_KEYBOARD_NONE, // HUL +}; + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" -static const uint16_t* hid_asciimaps[] = {hid_asciimap, hid_asciimap_de, hid_asciimap_fr}; +static const uint16_t* hid_asciimaps[] = + {hid_asciimap, hid_asciimap_de, hid_asciimap_fr, hid_asciimap_hu}; #pragma GCC diagnostic pop typedef struct { diff --git a/lib/subghz/protocols/faac_slh.c b/lib/subghz/protocols/faac_slh.c index d4169ef86..03c2786bf 100644 --- a/lib/subghz/protocols/faac_slh.c +++ b/lib/subghz/protocols/faac_slh.c @@ -497,7 +497,7 @@ void subghz_protocol_decoder_faac_slh_get_string(void* context, string_t output) "Key:%lX%08lX\r\n" "Fix:%08lX Cnt:%05X\r\n" "Hop:%08lX Btn:%lX\r\n" - "Sn:%07lX\nSd:%08lX", + "Sn:%07lX Sd:%08lX", instance->generic.protocol_name, instance->generic.data_count_bit, (uint32_t)(instance->generic.data >> 32), diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c index f8ac57411..28a9609d2 100644 --- a/lib/subghz/protocols/keeloq.c +++ b/lib/subghz/protocols/keeloq.c @@ -945,7 +945,7 @@ void subghz_protocol_decoder_keeloq_get_string(void* context, string_t output) { "Key:%08lX%08lX\r\n" "Fix:0x%08lX Cnt:%04X\r\n" "Hop:0x%08lX Btn:%01lX\r\n" - "MF:%s\nSd:0x%08lX\r\n", + "MF:%s Sd:%08lX", instance->generic.protocol_name, instance->generic.data_count_bit, code_found_hi,