update unirf / other fixes
17
.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
|
||||
|
||||
19
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`
|
||||
`sd-card-(version).zip`
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -30,7 +30,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
MusicPlayerModel* model;
|
||||
FuriMutex** model_mutex;
|
||||
FuriMutex* model_mutex;
|
||||
|
||||
FuriMessageQueue* input_queue;
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 166 B |
|
Before Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 171 B |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 170 B |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 169 B |
|
Before Width: | Height: | Size: 165 B |
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||