update unirf / other fixes

This commit is contained in:
MX
2022-08-01 23:20:04 +03:00
parent a5dd804d3e
commit a74262cef2
17 changed files with 351 additions and 98 deletions

View File

@@ -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

View File

@@ -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`
`sd-card-(version).zip`

View File

@@ -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;

View File

@@ -30,7 +30,7 @@ typedef struct {
typedef struct {
MusicPlayerModel* model;
FuriMutex** model_mutex;
FuriMutex* model_mutex;
FuriMessageQueue* input_queue;

View File

@@ -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");
}

View File

@@ -1,22 +1,21 @@
#include <furi.h>
#include <gui/gui.h>
#include <input/input.h>
#include <dialogs/dialogs.h>
#include <flipper_format/flipper_format_i.h>
#include <lib/toolbox/path.h>
#include <storage/storage.h>
#include <notification/notification_messages.h>
#include <lib/subghz/receiver.h>
#include <lib/subghz/transmitter.h>
#include <lib/subghz/subghz_file_encoder_worker.h>
#include <assets_icons.h>
#define TAG "UniRF Remix"
#include <flipper_format/flipper_format_i.h>
#include <lib/toolbox/path.h>
#include <applications/subghz/subghz_i.h>
#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;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 B

View File

@@ -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 {

View File

@@ -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),

View File

@@ -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,