mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-23 05:24:46 -07:00
merge ofw pr 4136 [ci skip]
BadUSB: Full USB/BLE parameter customization, UI improvements, and more by Willy-JL
This commit is contained in:
@@ -24,8 +24,7 @@ typedef struct {
|
||||
static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
|
||||
BadUsbModel* model = _model;
|
||||
|
||||
FuriString* disp_str;
|
||||
disp_str = furi_string_alloc_set(model->file_name);
|
||||
FuriString* disp_str = furi_string_alloc_set(model->file_name);
|
||||
elements_string_fit_width(canvas, disp_str, 128 - 2);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str(canvas, 2, 8, furi_string_get_cstr(disp_str));
|
||||
@@ -35,6 +34,8 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
|
||||
} else {
|
||||
furi_string_printf(disp_str, "(%s)", model->layout);
|
||||
}
|
||||
uint32_t e = model->state.elapsed;
|
||||
furi_string_cat_printf(disp_str, " %02lu:%02lu.%ld", e / 60 / 1000, e / 1000, e % 1000);
|
||||
elements_string_fit_width(canvas, disp_str, 128 - 2);
|
||||
canvas_draw_str(
|
||||
canvas, 2, 8 + canvas_current_font_height(canvas), furi_string_get_cstr(disp_str));
|
||||
@@ -52,13 +53,8 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
|
||||
if((state == BadUsbStateIdle) || (state == BadUsbStateDone) ||
|
||||
(state == BadUsbStateNotConnected)) {
|
||||
elements_button_center(canvas, "Run");
|
||||
if(model->interface == BadUsbHidInterfaceBle) {
|
||||
elements_button_right(canvas, "USB");
|
||||
elements_button_left(canvas, "Config");
|
||||
} else {
|
||||
elements_button_right(canvas, "BLE");
|
||||
elements_button_left(canvas, "Layout");
|
||||
}
|
||||
elements_button_left(canvas, "Config");
|
||||
elements_button_right(canvas, model->interface == BadUsbHidInterfaceBle ? "USB" : "BLE");
|
||||
} else if((state == BadUsbStateRunning) || (state == BadUsbStateDelay)) {
|
||||
elements_button_center(canvas, "Stop");
|
||||
if(!model->pause_wait) {
|
||||
@@ -90,77 +86,85 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
|
||||
canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR");
|
||||
} else if(state == BadUsbStateScriptError) {
|
||||
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);
|
||||
furi_string_printf(disp_str, "line %zu", model->state.error_line);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
|
||||
furi_string_set_str(disp_str, model->state.error);
|
||||
elements_string_fit_width(canvas, disp_str, canvas_width(canvas));
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 127, 56, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:");
|
||||
} else if(state == BadUsbStateIdle) {
|
||||
canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18);
|
||||
furi_string_printf(disp_str, "0/%zu", model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 124, 47, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_set_font(canvas, FontBigNumbers);
|
||||
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0");
|
||||
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
|
||||
canvas_draw_str_aligned(canvas, 112, 37, AlignRight, AlignBottom, "0");
|
||||
canvas_draw_icon(canvas, 115, 23, &I_Percent_10x14);
|
||||
} else if(state == BadUsbStateRunning) {
|
||||
if(model->anim_frame == 0) {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviSmile2_18x21);
|
||||
}
|
||||
furi_string_printf(disp_str, "%zu/%zu", model->state.line_cur, model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 124, 47, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_set_font(canvas, FontBigNumbers);
|
||||
furi_string_printf(
|
||||
disp_str, "%zu", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
|
||||
canvas, 112, 37, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_draw_icon(canvas, 115, 23, &I_Percent_10x14);
|
||||
} else if(state == BadUsbStateDone) {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
|
||||
furi_string_printf(disp_str, "%zu/%zu", model->state.line_nb, model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 124, 47, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_set_font(canvas, FontBigNumbers);
|
||||
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100");
|
||||
furi_string_reset(disp_str);
|
||||
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
|
||||
canvas_draw_str_aligned(canvas, 112, 37, AlignRight, AlignBottom, "100");
|
||||
canvas_draw_icon(canvas, 115, 23, &I_Percent_10x14);
|
||||
} else if(state == BadUsbStateDelay) {
|
||||
if(model->anim_frame == 0) {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting2_18x21);
|
||||
}
|
||||
uint32_t delay = model->state.delay_remain / 10;
|
||||
if(delay) {
|
||||
furi_string_printf(disp_str, "Delay %lus", delay);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 4, 61, AlignLeft, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
}
|
||||
furi_string_printf(disp_str, "%zu/%zu", model->state.line_cur, model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 124, 47, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_set_font(canvas, FontBigNumbers);
|
||||
furi_string_printf(
|
||||
disp_str, "%zu", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
furi_string_printf(disp_str, "delay %lus", model->state.delay_remain);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 127, 50, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
canvas, 112, 37, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_draw_icon(canvas, 115, 23, &I_Percent_10x14);
|
||||
} else if((state == BadUsbStatePaused) || (state == BadUsbStateWaitForBtn)) {
|
||||
if(model->anim_frame == 0) {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting2_18x21);
|
||||
}
|
||||
if(state != BadUsbStateWaitForBtn) {
|
||||
canvas_draw_str_aligned(canvas, 4, 61, AlignLeft, AlignBottom, "Paused");
|
||||
}
|
||||
furi_string_printf(disp_str, "%zu/%zu", model->state.line_cur, model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 124, 47, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_set_font(canvas, FontBigNumbers);
|
||||
furi_string_printf(
|
||||
disp_str, "%zu", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
|
||||
canvas_draw_str_aligned(
|
||||
canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
furi_string_reset(disp_str);
|
||||
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str_aligned(canvas, 127, 50, AlignRight, AlignBottom, "Paused");
|
||||
furi_string_reset(disp_str);
|
||||
canvas, 112, 37, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
|
||||
canvas_draw_icon(canvas, 115, 23, &I_Percent_10x14);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user