Skip to content

Commit

Permalink
merged upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
v1nc committed Aug 17, 2022
2 parents 63f1da3 + d5eff94 commit dda4812
Show file tree
Hide file tree
Showing 183 changed files with 7,763 additions and 778 deletions.
2 changes: 2 additions & 0 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ steps:
- cp assets/resources/subghz/assets/keeloq_mfcodes sd-card/subghz/assets/keeloq_mfcodes
- cp assets/resources/nfc/assets/mf_classic_dict.nfc sd-card/nfc/assets/mf_classic_dict.nfc
- cp assets/resources/infrared/assets/tv.ir sd-card/infrared/assets/tv.ir
- cp assets/resources/infrared/assets/ac.ir sd-card/infrared/assets/ac.ir
- cp assets/resources/infrared/assets/audio.ir sd-card/infrared/assets/audio.ir
- cp assets/resources/unirf/unirf_map_example.txt sd-card/unirf/unirf_map_example.txt
- cp assets/resources/Manifest sd-card/Manifest
- zip -r artifacts-default/sd-card-${DRONE_TAG}.zip sd-card
Expand Down
17 changes: 17 additions & 0 deletions .vscode/ReadMe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Visual Studio Code workspace for Flipper Zero

## Setup

* To start developing with VSCode, run `./fbt vscode_dist` in project root. _That should only be done once_
* After that, open firmware folder in VSCode: "File" > "Open folder"

For more details on fbt, see [fbt docs](../documentation/fbt.md).


## Workflow

Commands for building firmware are invoked through Build menu: Ctrl+Shift+B.

To attach a debugging session, first build and flash firmware, then choose your debug probe in Debug menu (Ctrl+Shift+D).

Note that you have to detach debugging session before rebuilding and re-flashing firmware.
4 changes: 2 additions & 2 deletions .vscode/example/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@
"label": "[Release] Build update bundle",
"group": "build",
"type": "shell",
"command": "./fbt update_package COMPACT=1 DEBUG=0"
"command": "./fbt updater_package COMPACT=1 DEBUG=0"
},
{
"label": "[Debug] Build update bundle",
"group": "build",
"type": "shell",
"command": "./fbt update_package"
"command": "./fbt updater_package"
},
{
"label": "[Release] Build updater",
Expand Down
16 changes: 5 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
### New changes
* New frequency analyzer - [(by ClusterM)](https://github.com/ClusterM) - see PR #43 for details
* BadUSB keyboard layouts - now its possible to load keyboard layouts from microSD - [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
* Simple Clock - make the clock simple while the new update is in the works
* Lowered time required to hold back button to poweroff - from 5sec to 3sec - PR #42
* OFW: NFC: make dict attack more interactive
* OFW: NFC: Edit UID feature
* OFW: MPU Hal
* OFW: Make printf great again
* OFW: IR remote app fixes
* OFW: other changes
* Added Volume buttons support for Universal audio remote
* Updated Universal remote assets and nfc dict
* Added some extra checks for custom flipper names
* OFW: replaced icon and some gui changes

**Note: Prefer installing using web updater or by self update package**
**Note: Prefer installing using web updater or by self update package, all needed assets will be installed**

Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip`

Expand Down
4 changes: 3 additions & 1 deletion applications/about/about.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <gui/modules/empty_screen.h>
#include <m-string.h>
#include <furi_hal_version.h>
#include <furi_hal_region.h>
#include <furi_hal_bt.h>

typedef DialogMessageButton (*AboutDialogScreen)(DialogsApp* dialogs, DialogMessage* message);
Expand Down Expand Up @@ -114,12 +115,13 @@ static DialogMessageButton hw_version_screen(DialogsApp* dialogs, DialogMessage*

string_cat_printf(
buffer,
"%d.F%dB%dC%d %s %s\n",
"%d.F%dB%dC%d %s:%s %s\n",
furi_hal_version_get_hw_version(),
furi_hal_version_get_hw_target(),
furi_hal_version_get_hw_body(),
furi_hal_version_get_hw_connect(),
furi_hal_version_get_hw_region_name(),
furi_hal_region_get_name(),
my_name ? my_name : "Unknown");

string_cat_printf(buffer, "Serial number:\n");
Expand Down
4 changes: 2 additions & 2 deletions applications/accessor/accessor_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ void AccessorApp::run(void) {
}

AccessorApp::AccessorApp() {
notification = static_cast<NotificationApp*>(furi_record_open("notification"));
notification = static_cast<NotificationApp*>(furi_record_open(RECORD_NOTIFICATION));
onewire_host = onewire_host_alloc();
furi_hal_power_enable_otg();
}

AccessorApp::~AccessorApp() {
furi_hal_power_disable_otg();
furi_record_close("notification");
furi_record_close(RECORD_NOTIFICATION);
onewire_host_free(onewire_host);
}

Expand Down
3 changes: 2 additions & 1 deletion applications/accessor/accessor_view_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ AccessorAppViewManager::AccessorAppViewManager() {
popup = popup_alloc();
add_view(ViewType::Popup, popup_get_view(popup));

gui = static_cast<Gui*>(furi_record_open("gui"));
gui = static_cast<Gui*>(furi_record_open(RECORD_GUI));
view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen);

// set previous view callback for all views
Expand All @@ -31,6 +31,7 @@ AccessorAppViewManager::~AccessorAppViewManager() {
view_dispatcher, static_cast<uint32_t>(AccessorAppViewManager::ViewType::Popup));

// free view modules
furi_record_close(RECORD_GUI);
submenu_free(submenu);
popup_free(popup);

Expand Down
2 changes: 2 additions & 0 deletions applications/applications.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ typedef struct {

typedef void (*FlipperOnStartHook)(void);

extern const char* FLIPPER_AUTORUN_APP_NAME;

/* Services list
* Spawned on startup
*/
Expand Down
12 changes: 6 additions & 6 deletions applications/archive/helpers/archive_favorites.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ uint16_t archive_favorites_count(void* context) {
break;
}
if(!string_size(buffer)) {
break;
continue; // Skip empty lines
}
++lines;
}
Expand Down Expand Up @@ -93,7 +93,7 @@ static bool archive_favourites_rescan() {
break;
}
if(!string_size(buffer)) {
break;
continue;
}

if(string_search(buffer, "/app:") == 0) {
Expand Down Expand Up @@ -152,7 +152,7 @@ bool archive_favorites_read(void* context) {
break;
}
if(!string_size(buffer)) {
break;
continue;
}

if(string_search(buffer, "/app:") == 0) {
Expand Down Expand Up @@ -215,7 +215,7 @@ bool archive_favorites_delete(const char* format, ...) {
break;
}
if(!string_size(buffer)) {
break;
continue;
}

if(string_search(buffer, filename)) {
Expand Down Expand Up @@ -259,7 +259,7 @@ bool archive_is_favorite(const char* format, ...) {
break;
}
if(!string_size(buffer)) {
break;
continue;
}
if(!string_search(buffer, filename)) {
found = true;
Expand Down Expand Up @@ -299,7 +299,7 @@ bool archive_favorites_rename(const char* src, const char* dst) {
break;
}
if(!string_size(buffer)) {
break;
continue;
}

archive_file_append(
Expand Down
5 changes: 3 additions & 2 deletions applications/bad_usb/bad_usb_app.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ BadUsbApp* bad_usb_app_alloc(char* arg) {
scene_manager_next_scene(app->scene_manager, BadUsbSceneError);
} else {
if(!string_empty_p(app->file_path)) {
app->bad_usb_script = bad_usb_script_open(app->file_path);
bad_usb_script_set_keyboard_layout(app->bad_usb_script, app->keyboard_layout);
scene_manager_next_scene(app->scene_manager, BadUsbSceneWork);
} else {
string_set_str(app->file_path, BAD_USB_APP_BASE_FOLDER);
Expand All @@ -122,7 +124,6 @@ void bad_usb_app_free(BadUsbApp* app) {

// Views
view_dispatcher_remove_view(app->view_dispatcher, BadUsbAppViewWork);

bad_usb_free(app->bad_usb_view);

// Custom Widget
Expand Down Expand Up @@ -157,4 +158,4 @@ int32_t bad_usb_app(void* p) {

bad_usb_app_free(bad_usb_app);
return 0;
}
}
2 changes: 1 addition & 1 deletion applications/bad_usb/bad_usb_script.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,4 +661,4 @@ void bad_usb_script_toggle(BadUsbScript* bad_usb) {
BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb) {
furi_assert(bad_usb);
return &(bad_usb->st);
}
}
2 changes: 1 addition & 1 deletion applications/bad_usb/bad_usb_script.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,4 @@ BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb);

#ifdef __cplusplus
}
#endif
#endif
6 changes: 6 additions & 0 deletions applications/bad_usb/scenes/bad_usb_scene_work.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ void bad_usb_scene_work_on_enter(void* context) {
bad_usb_set_file_name(app->bad_usb_view, string_get_cstr(file_name));
string_clear(file_name);

string_t layout;
string_init(layout);
path_extract_filename(app->keyboard_layout, layout, true);
bad_usb_set_layout(app->bad_usb_view, string_get_cstr(layout));
string_clear(layout);

bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script));

bad_usb_set_button_callback(app->bad_usb_view, bad_usb_scene_work_button_callback, app);
Expand Down
71 changes: 47 additions & 24 deletions applications/bad_usb/views/bad_usb_view.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "bad_usb_view.h"
#include "../bad_usb_script.h"
#include <toolbox/path.h>
#include <gui/elements.h>

#define MAX_NAME_LEN 64
Expand All @@ -12,6 +13,7 @@ struct BadUsb {

typedef struct {
char file_name[MAX_NAME_LEN];
char layout[MAX_NAME_LEN];
BadUsbState state;
uint8_t anim_frame;
} BadUsbModel;
Expand All @@ -24,9 +26,22 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
elements_string_fit_width(canvas, disp_str, 128 - 2);
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 2, 8, string_get_cstr(disp_str));

if(strlen(model->layout) == 0) {
string_set(disp_str, "(default)");
} else {
string_reset(disp_str);
string_push_back(disp_str, '(');
for(size_t i = 0; i < strlen(model->layout); i++)
string_push_back(disp_str, model->layout[i]);
string_push_back(disp_str, ')');
}
elements_string_fit_width(canvas, disp_str, 128 - 2);
canvas_draw_str(canvas, 2, 8 + canvas_current_font_height(canvas), string_get_cstr(disp_str));

string_reset(disp_str);

canvas_draw_icon(canvas, 22, 20, &I_UsbTree_48x22);
canvas_draw_icon(canvas, 22, 24, &I_UsbTree_48x22);

if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) {
elements_button_center(canvas, "Run");
Expand All @@ -40,17 +55,17 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
}

if(model->state.state == BadUsbStateNotConnected) {
canvas_draw_icon(canvas, 4, 22, &I_Clock_18x18);
canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 27, AlignRight, AlignBottom, "Connect");
canvas_draw_str_aligned(canvas, 127, 39, AlignRight, AlignBottom, "to USB");
canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Connect");
canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "to USB");
} else if(model->state.state == BadUsbStateFileError) {
canvas_draw_icon(canvas, 4, 22, &I_Error_18x18);
canvas_draw_icon(canvas, 4, 26, &I_Error_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 27, AlignRight, AlignBottom, "File");
canvas_draw_str_aligned(canvas, 127, 39, AlignRight, AlignBottom, "ERROR");
canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "File");
canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR");
} else if(model->state.state == BadUsbStateScriptError) {
canvas_draw_icon(canvas, 4, 22, &I_Error_18x18);
canvas_draw_icon(canvas, 4, 26, &I_Error_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:");
canvas_set_font(canvas, FontSecondary);
Expand All @@ -59,47 +74,47 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
canvas, 127, 46, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
} else if(model->state.state == BadUsbStateIdle) {
canvas_draw_icon(canvas, 4, 22, &I_Smile_18x18);
canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18);
canvas_set_font(canvas, FontBigNumbers);
canvas_draw_str_aligned(canvas, 114, 36, AlignRight, AlignBottom, "0");
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0");
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateRunning) {
if(model->anim_frame == 0) {
canvas_draw_icon(canvas, 4, 19, &I_EviSmile1_18x21);
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
} else {
canvas_draw_icon(canvas, 4, 19, &I_EviSmile2_18x21);
canvas_draw_icon(canvas, 4, 23, &I_EviSmile2_18x21);
}
canvas_set_font(canvas, FontBigNumbers);
string_printf(disp_str, "%u", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
canvas_draw_str_aligned(
canvas, 114, 36, AlignRight, AlignBottom, string_get_cstr(disp_str));
canvas, 114, 40, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateDone) {
canvas_draw_icon(canvas, 4, 19, &I_EviSmile1_18x21);
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
canvas_set_font(canvas, FontBigNumbers);
canvas_draw_str_aligned(canvas, 114, 36, AlignRight, AlignBottom, "100");
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100");
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateDelay) {
if(model->anim_frame == 0) {
canvas_draw_icon(canvas, 4, 19, &I_EviWaiting1_18x21);
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21);
} else {
canvas_draw_icon(canvas, 4, 19, &I_EviWaiting2_18x21);
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting2_18x21);
}
canvas_set_font(canvas, FontBigNumbers);
string_printf(disp_str, "%u", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
canvas_draw_str_aligned(
canvas, 114, 36, AlignRight, AlignBottom, string_get_cstr(disp_str));
canvas, 114, 40, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
canvas_set_font(canvas, FontSecondary);
string_printf(disp_str, "delay %us", model->state.delay_remain);
canvas_draw_str_aligned(
canvas, 127, 46, AlignRight, AlignBottom, string_get_cstr(disp_str));
canvas, 127, 50, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
} else {
canvas_draw_icon(canvas, 4, 22, &I_Clock_18x18);
canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
}

string_clear(disp_str);
Expand Down Expand Up @@ -165,6 +180,14 @@ void bad_usb_set_file_name(BadUsb* bad_usb, const char* name) {
});
}

void bad_usb_set_layout(BadUsb* bad_usb, const char* layout) {
furi_assert(layout);
with_view_model(
bad_usb->view, (BadUsbModel * model) {
strlcpy(model->layout, layout, MAX_NAME_LEN);
return true;
});
}
void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) {
furi_assert(st);
with_view_model(
Expand Down
2 changes: 2 additions & 0 deletions applications/bad_usb/views/bad_usb_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback,

void bad_usb_set_file_name(BadUsb* bad_usb, const char* name);

void bad_usb_set_layout(BadUsb* bad_usb, const char* layout);

void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st);
Loading

0 comments on commit dda4812

Please sign in to comment.