Skip to content

Commit 93b1b1a

Browse files
author
Astra
authored
Merge branch 'flipperdevices:dev' into gen-totp
2 parents 0c156b9 + 6ac1ed2 commit 93b1b1a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+2872
-926
lines changed

.gitattributes

+3
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
* text=auto eol=lf
2+
*.bat eol=crlf
3+
*.ps1 eol=crlf
4+
*.cmd eol=crlf

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@ dist
4646
build/
4747

4848
# Toolchain
49-
toolchain*/
49+
/toolchain
50+
51+
# openocd output file
52+
openocd.log

SConstruct

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import os
1010

11+
EnsurePythonVersion(3, 8)
12+
1113
DefaultEnvironment(tools=[])
1214
# Progress(["OwO\r", "owo\r", "uwu\r", "owo\r"], interval=15)
1315

@@ -32,7 +34,7 @@ coreenv["ROOT_DIR"] = Dir(".")
3234
# Create a separate "dist" environment and add construction envs to it
3335
distenv = coreenv.Clone(
3436
tools=["fbt_dist", "openocd", "blackmagic"],
35-
OPENOCD_GDB_PIPE=["|openocd -c 'gdb_port pipe' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"],
37+
OPENOCD_GDB_PIPE=["|openocd -c 'gdb_port pipe; log_output debug/openocd.log' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"],
3638
GDBOPTS_BASE=[
3739
"-ex",
3840
"target extended-remote ${GDBREMOTE}",
@@ -145,6 +147,8 @@ distenv.Alias("copro_dist", copro_dist)
145147

146148
firmware_flash = distenv.AddOpenOCDFlashTarget(firmware_env)
147149
distenv.Alias("flash", firmware_flash)
150+
if distenv["FORCE"]:
151+
distenv.AlwaysBuild(firmware_flash)
148152

149153
firmware_bm_flash = distenv.PhonyTarget(
150154
"flash_blackmagic",

applications/about/about.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,4 @@ int32_t about_settings_app(void* p) {
206206
furi_record_close("gui");
207207

208208
return 0;
209-
}
209+
}

applications/bad_usb/bad_usb_script.c

+59-58
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static const DuckyKey ducky_keys[] = {
4949
{"CTRL-SHIFT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT},
5050
{"ALT-SHIFT", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_SHIFT},
5151
{"ALT-GUI", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_GUI},
52+
{"GUI-SHIFT", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT},
5253

5354
{"CTRL", KEY_MOD_LEFT_CTRL},
5455
{"CONTROL", KEY_MOD_LEFT_CTRL},
@@ -57,48 +58,48 @@ static const DuckyKey ducky_keys[] = {
5758
{"GUI", KEY_MOD_LEFT_GUI},
5859
{"WINDOWS", KEY_MOD_LEFT_GUI},
5960

60-
{"DOWNARROW", KEY_DOWN_ARROW},
61-
{"DOWN", KEY_DOWN_ARROW},
62-
{"LEFTARROW", KEY_LEFT_ARROW},
63-
{"LEFT", KEY_LEFT_ARROW},
64-
{"RIGHTARROW", KEY_RIGHT_ARROW},
65-
{"RIGHT", KEY_RIGHT_ARROW},
66-
{"UPARROW", KEY_UP_ARROW},
67-
{"UP", KEY_UP_ARROW},
68-
69-
{"ENTER", KEY_ENTER},
70-
{"BREAK", KEY_PAUSE},
71-
{"PAUSE", KEY_PAUSE},
72-
{"CAPSLOCK", KEY_CAPS_LOCK},
73-
{"DELETE", KEY_DELETE},
74-
{"BACKSPACE", KEY_BACKSPACE},
75-
{"END", KEY_END},
76-
{"ESC", KEY_ESC},
77-
{"ESCAPE", KEY_ESC},
78-
{"HOME", KEY_HOME},
79-
{"INSERT", KEY_INSERT},
80-
{"NUMLOCK", KEY_NUM_LOCK},
81-
{"PAGEUP", KEY_PAGE_UP},
82-
{"PAGEDOWN", KEY_PAGE_DOWN},
83-
{"PRINTSCREEN", KEY_PRINT},
84-
{"SCROLLOCK", KEY_SCROLL_LOCK},
85-
{"SPACE", KEY_SPACE},
86-
{"TAB", KEY_TAB},
87-
{"MENU", KEY_APPLICATION},
88-
{"APP", KEY_APPLICATION},
89-
90-
{"F1", KEY_F1},
91-
{"F2", KEY_F2},
92-
{"F3", KEY_F3},
93-
{"F4", KEY_F4},
94-
{"F5", KEY_F5},
95-
{"F6", KEY_F6},
96-
{"F7", KEY_F7},
97-
{"F8", KEY_F8},
98-
{"F9", KEY_F9},
99-
{"F10", KEY_F10},
100-
{"F11", KEY_F11},
101-
{"F12", KEY_F12},
61+
{"DOWNARROW", HID_KEYBOARD_DOWN_ARROW},
62+
{"DOWN", HID_KEYBOARD_DOWN_ARROW},
63+
{"LEFTARROW", HID_KEYBOARD_LEFT_ARROW},
64+
{"LEFT", HID_KEYBOARD_LEFT_ARROW},
65+
{"RIGHTARROW", HID_KEYBOARD_RIGHT_ARROW},
66+
{"RIGHT", HID_KEYBOARD_RIGHT_ARROW},
67+
{"UPARROW", HID_KEYBOARD_UP_ARROW},
68+
{"UP", HID_KEYBOARD_UP_ARROW},
69+
70+
{"ENTER", HID_KEYBOARD_RETURN},
71+
{"BREAK", HID_KEYBOARD_PAUSE},
72+
{"PAUSE", HID_KEYBOARD_PAUSE},
73+
{"CAPSLOCK", HID_KEYBOARD_CAPS_LOCK},
74+
{"DELETE", HID_KEYBOARD_DELETE},
75+
{"BACKSPACE", HID_KEYPAD_BACKSPACE},
76+
{"END", HID_KEYBOARD_END},
77+
{"ESC", HID_KEYBOARD_ESCAPE},
78+
{"ESCAPE", HID_KEYBOARD_ESCAPE},
79+
{"HOME", HID_KEYBOARD_HOME},
80+
{"INSERT", HID_KEYBOARD_INSERT},
81+
{"NUMLOCK", HID_KEYPAD_NUMLOCK},
82+
{"PAGEUP", HID_KEYBOARD_PAGE_UP},
83+
{"PAGEDOWN", HID_KEYBOARD_PAGE_DOWN},
84+
{"PRINTSCREEN", HID_KEYBOARD_PRINT_SCREEN},
85+
{"SCROLLOCK", HID_KEYBOARD_SCROLL_LOCK},
86+
{"SPACE", HID_KEYBOARD_SPACEBAR},
87+
{"TAB", HID_KEYBOARD_TAB},
88+
{"MENU", HID_KEYBOARD_APPLICATION},
89+
{"APP", HID_KEYBOARD_APPLICATION},
90+
91+
{"F1", HID_KEYBOARD_F1},
92+
{"F2", HID_KEYBOARD_F2},
93+
{"F3", HID_KEYBOARD_F3},
94+
{"F4", HID_KEYBOARD_F4},
95+
{"F5", HID_KEYBOARD_F5},
96+
{"F6", HID_KEYBOARD_F6},
97+
{"F7", HID_KEYBOARD_F7},
98+
{"F8", HID_KEYBOARD_F8},
99+
{"F9", HID_KEYBOARD_F9},
100+
{"F10", HID_KEYBOARD_F10},
101+
{"F11", HID_KEYBOARD_F11},
102+
{"F12", HID_KEYBOARD_F12},
102103
};
103104

104105
static const char ducky_cmd_comment[] = {"REM"};
@@ -114,16 +115,16 @@ static const char ducky_cmd_altstr_1[] = {"ALTSTRING "};
114115
static const char ducky_cmd_altstr_2[] = {"ALTCODE "};
115116

116117
static const uint8_t numpad_keys[10] = {
117-
KEYPAD_0,
118-
KEYPAD_1,
119-
KEYPAD_2,
120-
KEYPAD_3,
121-
KEYPAD_4,
122-
KEYPAD_5,
123-
KEYPAD_6,
124-
KEYPAD_7,
125-
KEYPAD_8,
126-
KEYPAD_9,
118+
HID_KEYPAD_0,
119+
HID_KEYPAD_1,
120+
HID_KEYPAD_2,
121+
HID_KEYPAD_3,
122+
HID_KEYPAD_4,
123+
HID_KEYPAD_5,
124+
HID_KEYPAD_6,
125+
HID_KEYPAD_7,
126+
HID_KEYPAD_8,
127+
HID_KEYPAD_9,
127128
};
128129

129130
static bool ducky_get_number(const char* param, uint32_t* val) {
@@ -149,8 +150,8 @@ static bool ducky_is_line_end(const char chr) {
149150

150151
static void ducky_numlock_on() {
151152
if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) {
152-
furi_hal_hid_kb_press(KEY_NUM_LOCK);
153-
furi_hal_hid_kb_release(KEY_NUM_LOCK);
153+
furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK);
154+
furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK);
154155
}
155156
}
156157

@@ -170,15 +171,15 @@ static bool ducky_altchar(const char* charcode) {
170171

171172
FURI_LOG_I(WORKER_TAG, "char %s", charcode);
172173

173-
furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT);
174+
furi_hal_hid_kb_press(HID_KEYBOARD_L_ALT);
174175

175176
while(!ducky_is_line_end(charcode[i])) {
176177
state = ducky_numpad_press(charcode[i]);
177178
if(state == false) break;
178179
i++;
179180
}
180181

181-
furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT);
182+
furi_hal_hid_kb_release(HID_KEYBOARD_L_ALT);
182183
return state;
183184
}
184185

@@ -206,7 +207,7 @@ static bool ducky_string(const char* param) {
206207
uint32_t i = 0;
207208
while(param[i] != '\0') {
208209
uint16_t keycode = HID_ASCII_TO_KEY(param[i]);
209-
if(keycode != KEY_NONE) {
210+
if(keycode != HID_KEYBOARD_NONE) {
210211
furi_hal_hid_kb_press(keycode);
211212
furi_hal_hid_kb_release(keycode);
212213
}
@@ -294,7 +295,7 @@ static int32_t ducky_parse_line(BadUsbScript* bad_usb, string_t line) {
294295
} else {
295296
// Special keys + modifiers
296297
uint16_t key = ducky_get_keycode(line_tmp, false);
297-
if(key == KEY_NONE) return SCRIPT_STATE_ERROR;
298+
if(key == HID_KEYBOARD_NONE) return SCRIPT_STATE_ERROR;
298299
if((key & 0xFF00) != 0) {
299300
// It's a modifier key
300301
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];

applications/bt/bt_hid_app/bt_hid.c

+34-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
enum BtDebugSubmenuIndex {
88
BtHidSubmenuIndexKeynote,
9+
BtHidSubmenuIndexKeyboard,
910
BtHidSubmenuIndexMedia,
11+
BtHidSubmenuIndexMouse,
1012
};
1113

1214
void bt_hid_submenu_callback(void* context, uint32_t index) {
@@ -15,20 +17,27 @@ void bt_hid_submenu_callback(void* context, uint32_t index) {
1517
if(index == BtHidSubmenuIndexKeynote) {
1618
app->view_id = BtHidViewKeynote;
1719
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeynote);
20+
} else if(index == BtHidSubmenuIndexKeyboard) {
21+
app->view_id = BtHidViewKeyboard;
22+
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeyboard);
1823
} else if(index == BtHidSubmenuIndexMedia) {
1924
app->view_id = BtHidViewMedia;
2025
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewMedia);
26+
} else if(index == BtHidSubmenuIndexMouse) {
27+
app->view_id = BtHidViewMouse;
28+
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewMouse);
2129
}
2230
}
2331

2432
void bt_hid_dialog_callback(DialogExResult result, void* context) {
2533
furi_assert(context);
2634
BtHid* app = context;
2735
if(result == DialogExResultLeft) {
28-
// TODO switch to Submenu after Media is done
2936
view_dispatcher_stop(app->view_dispatcher);
3037
} else if(result == DialogExResultRight) {
31-
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeynote);
38+
view_dispatcher_switch_to_view(app->view_dispatcher, app->view_id); // Show last view
39+
} else if(result == DialogExResultCenter) {
40+
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewSubmenu);
3241
}
3342
}
3443

@@ -52,7 +61,9 @@ void bt_hid_connection_status_changed_callback(BtStatus status, void* context) {
5261
notification_internal_message(bt_hid->notifications, &sequence_reset_blue);
5362
}
5463
bt_hid_keynote_set_connected_status(bt_hid->bt_hid_keynote, connected);
64+
bt_hid_keyboard_set_connected_status(bt_hid->bt_hid_keyboard, connected);
5565
bt_hid_media_set_connected_status(bt_hid->bt_hid_media, connected);
66+
bt_hid_mouse_set_connected_status(bt_hid->bt_hid_mouse, connected);
5667
}
5768

5869
BtHid* bt_hid_app_alloc() {
@@ -76,8 +87,11 @@ BtHid* bt_hid_app_alloc() {
7687
app->submenu = submenu_alloc();
7788
submenu_add_item(
7889
app->submenu, "Keynote", BtHidSubmenuIndexKeynote, bt_hid_submenu_callback, app);
90+
submenu_add_item(
91+
app->submenu, "Keyboard", BtHidSubmenuIndexKeyboard, bt_hid_submenu_callback, app);
7992
submenu_add_item(
8093
app->submenu, "Media player", BtHidSubmenuIndexMedia, bt_hid_submenu_callback, app);
94+
submenu_add_item(app->submenu, "Mouse", BtHidSubmenuIndexMouse, bt_hid_submenu_callback, app);
8195
view_set_previous_callback(submenu_get_view(app->submenu), bt_hid_exit);
8296
view_dispatcher_add_view(
8397
app->view_dispatcher, BtHidViewSubmenu, submenu_get_view(app->submenu));
@@ -88,6 +102,7 @@ BtHid* bt_hid_app_alloc() {
88102
dialog_ex_set_context(app->dialog, app);
89103
dialog_ex_set_left_button_text(app->dialog, "Exit");
90104
dialog_ex_set_right_button_text(app->dialog, "Stay");
105+
dialog_ex_set_center_button_text(app->dialog, "Menu");
91106
dialog_ex_set_header(app->dialog, "Close current app?", 16, 12, AlignLeft, AlignTop);
92107
view_dispatcher_add_view(
93108
app->view_dispatcher, BtHidViewExitConfirm, dialog_ex_get_view(app->dialog));
@@ -99,12 +114,25 @@ BtHid* bt_hid_app_alloc() {
99114
view_dispatcher_add_view(
100115
app->view_dispatcher, BtHidViewKeynote, bt_hid_keynote_get_view(app->bt_hid_keynote));
101116

117+
// Keyboard view
118+
app->bt_hid_keyboard = bt_hid_keyboard_alloc();
119+
view_set_previous_callback(
120+
bt_hid_keyboard_get_view(app->bt_hid_keyboard), bt_hid_exit_confirm_view);
121+
view_dispatcher_add_view(
122+
app->view_dispatcher, BtHidViewKeyboard, bt_hid_keyboard_get_view(app->bt_hid_keyboard));
123+
102124
// Media view
103125
app->bt_hid_media = bt_hid_media_alloc();
104126
view_set_previous_callback(bt_hid_media_get_view(app->bt_hid_media), bt_hid_exit_confirm_view);
105127
view_dispatcher_add_view(
106128
app->view_dispatcher, BtHidViewMedia, bt_hid_media_get_view(app->bt_hid_media));
107129

130+
// Mouse view
131+
app->bt_hid_mouse = bt_hid_mouse_alloc();
132+
view_set_previous_callback(bt_hid_mouse_get_view(app->bt_hid_mouse), bt_hid_exit_confirm_view);
133+
view_dispatcher_add_view(
134+
app->view_dispatcher, BtHidViewMouse, bt_hid_mouse_get_view(app->bt_hid_mouse));
135+
108136
// TODO switch to menu after Media is done
109137
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeynote);
110138

@@ -124,8 +152,12 @@ void bt_hid_app_free(BtHid* app) {
124152
dialog_ex_free(app->dialog);
125153
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewKeynote);
126154
bt_hid_keynote_free(app->bt_hid_keynote);
155+
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewKeyboard);
156+
bt_hid_keyboard_free(app->bt_hid_keyboard);
127157
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewMedia);
128158
bt_hid_media_free(app->bt_hid_media);
159+
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewMouse);
160+
bt_hid_mouse_free(app->bt_hid_mouse);
129161
view_dispatcher_free(app->view_dispatcher);
130162

131163
// Close records

applications/bt/bt_hid_app/bt_hid.h

+6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
#include <gui/modules/submenu.h>
1111
#include <gui/modules/dialog_ex.h>
1212
#include "views/bt_hid_keynote.h"
13+
#include "views/bt_hid_keyboard.h"
1314
#include "views/bt_hid_media.h"
15+
#include "views/bt_hid_mouse.h"
1416

1517
typedef struct {
1618
Bt* bt;
@@ -20,13 +22,17 @@ typedef struct {
2022
Submenu* submenu;
2123
DialogEx* dialog;
2224
BtHidKeynote* bt_hid_keynote;
25+
BtHidKeyboard* bt_hid_keyboard;
2326
BtHidMedia* bt_hid_media;
27+
BtHidMouse* bt_hid_mouse;
2428
uint32_t view_id;
2529
} BtHid;
2630

2731
typedef enum {
2832
BtHidViewSubmenu,
2933
BtHidViewKeynote,
34+
BtHidViewKeyboard,
3035
BtHidViewMedia,
36+
BtHidViewMouse,
3137
BtHidViewExitConfirm,
3238
} BtHidView;

0 commit comments

Comments
 (0)