Przeglądaj źródła

Started 2 bytes feat

derskythe 3 lat temu
rodzic
commit
7b65217399

+ 59 - 0
gui_top_buttons.c

@@ -0,0 +1,59 @@
+#include "gui_top_buttons.h"
+
+void elements_button_top_left(Canvas* canvas, const char* str) {
+    const Icon* icon = &I_ButtonUp_7x4;
+
+    const uint8_t button_height = 12;
+    const uint8_t vertical_offset = 3;
+    const uint8_t horizontal_offset = 3;
+    const uint8_t string_width = canvas_string_width(canvas, str);
+    const uint8_t icon_h_offset = 3;
+    const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset;
+    const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset;
+    const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
+
+    const uint8_t x = 0;
+    const uint8_t y = 0 + button_height;
+
+    uint8_t line_x = x + button_width;
+    uint8_t line_y = y - button_height;
+    canvas_draw_box(canvas, x, line_y, button_width, button_height);
+    canvas_draw_line(canvas, line_x + 0, line_y, line_x + 0, y - 1);
+    canvas_draw_line(canvas, line_x + 1, line_y, line_x + 1, y - 2);
+    canvas_draw_line(canvas, line_x + 2, line_y, line_x + 2, y - 3);
+
+    canvas_invert_color(canvas);
+    canvas_draw_icon(canvas, x + horizontal_offset, y - icon_v_offset, icon);
+    canvas_draw_str(
+        canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str);
+    canvas_invert_color(canvas);
+}
+
+void elements_button_top_right(Canvas* canvas, const char* str) {
+    const Icon* icon = &I_ButtonDown_7x4;
+
+    const uint8_t button_height = 12;
+    const uint8_t vertical_offset = 3;
+    const uint8_t horizontal_offset = 3;
+    const uint8_t string_width = canvas_string_width(canvas, str);
+    const uint8_t icon_h_offset = 3;
+    const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset;
+    const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset + 1;
+    const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
+
+    const uint8_t x = canvas_width(canvas);
+    const uint8_t y = 0 + button_height;
+
+    uint8_t line_x = x - button_width;
+    uint8_t line_y = y - button_height;
+    canvas_draw_box(canvas, line_x, line_y, button_width, button_height);
+    canvas_draw_line(canvas, line_x - 1, line_y, line_x - 1, y - 1);
+    canvas_draw_line(canvas, line_x - 2, line_y, line_x - 2, y - 2);
+    canvas_draw_line(canvas, line_x - 3, line_y, line_x - 3, y - 3);
+
+    canvas_invert_color(canvas);
+    canvas_draw_str(canvas, x - button_width + horizontal_offset, y - vertical_offset, str);
+    canvas_draw_icon(
+        canvas, x - horizontal_offset - icon_get_width(icon), y - icon_v_offset, icon);
+    canvas_invert_color(canvas);
+}

+ 21 - 0
gui_top_buttons.h

@@ -0,0 +1,21 @@
+#pragma once
+
+#include <input/input.h>
+#include <gui/elements.h>
+#include <gui/icon.h>
+#include <gui/icon_animation.h>
+#include <assets_icons.h>
+
+/**
+ * Thanks to the author of metronome
+ * @param canvas
+ * @param str
+ */
+void elements_button_top_left(Canvas* canvas, const char* str);
+
+/**
+ * Thanks to the author of metronome
+ * @param canvas
+ * @param str
+ */
+void elements_button_top_right(Canvas* canvas, const char* str);

+ 0 - 7
scenes/subbrute_scene_load_file.c

@@ -3,13 +3,6 @@
 
 #define TAG "SubBruteSceneLoadFile"
 
-//void subbrute_scene_load_file_callback(SubBruteCustomEvent event, void* context) {
-////    furi_assert(context);
-////
-////    SubBruteState* instance = (SubBruteState*)context;
-////    view_dispatcher_send_custom_event(instance->view_dispatcher, event);
-//}
-
 void subbrute_scene_load_file_on_enter(void* context) {
     furi_assert(context);
     SubBruteState* instance = (SubBruteState*)context;

+ 1 - 1
subbrute_i.h

@@ -16,7 +16,7 @@
 #include <gui/modules/widget.h>
 #include <gui/modules/loading.h>
 
-#include <SubGHz_Bruteforcer_icons.h>
+#include "SubGHz_Bruteforcer_icons.h"
 
 #include <dialogs/dialogs.h>
 

+ 11 - 3
subbrute_protocols.c

@@ -483,9 +483,17 @@ void subbrute_protocol_file_generate_file(
     uint8_t load_index,
     const char* file_key) {
     FuriString* candidate = furi_string_alloc();
-    char subbrute_payload_byte[4];
+    char subbrute_payload_byte[8];
     furi_string_set_str(candidate, file_key);
-    snprintf(subbrute_payload_byte, 4, "%02X ", (uint8_t)step);
+
+    for(int8_t shift = 8 * sizeof(step) - 4; shift >= 0; shift -= 4) {
+        uint8_t hexDigit = (step >> shift) & 0xF;
+        snprintf(subbrute_payload_byte, 4, "%02X ", hexDigit);
+
+        if(((shift & 0xF) == 0) && (shift > 0)) {
+            //ptr->print(" ");
+        }
+    }
     furi_string_replace_at(candidate, load_index * 3, 3, subbrute_payload_byte);
 
 #ifdef FURI_DEBUG
@@ -521,7 +529,7 @@ void subbrute_protocol_file_generate_file(
 uint64_t subbrute_protocol_calc_max_value(SubBruteAttacks attack_type, uint8_t bits) {
     uint64_t max_value;
     if(attack_type == SubBruteAttackLoadFile) {
-        max_value = 0xFF;
+        max_value = 0xFFFF;
     } else {
         FuriString* max_value_s;
         max_value_s = furi_string_alloc();

+ 1 - 68
views/subbrute_attack_view.c

@@ -1,6 +1,7 @@
 #include "subbrute_attack_view.h"
 #include "../subbrute_i.h"
 #include "../subbrute_protocols.h"
+#include "../gui_top_buttons.h"
 
 #include <input/input.h>
 #include <gui/elements.h>
@@ -255,74 +256,6 @@ void subbrute_attack_view_exit(void* context) {
         false);
 }
 
-/**
- * Thanks to the author of metronome
- * @param canvas
- * @param str
- */
-void elements_button_top_left(Canvas* canvas, const char* str) {
-    const Icon* icon = &I_ButtonUp_7x4;
-
-    const uint8_t button_height = 12;
-    const uint8_t vertical_offset = 3;
-    const uint8_t horizontal_offset = 3;
-    const uint8_t string_width = canvas_string_width(canvas, str);
-    const uint8_t icon_h_offset = 3;
-    const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset;
-    const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset;
-    const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
-
-    const uint8_t x = 0;
-    const uint8_t y = 0 + button_height;
-
-    uint8_t line_x = x + button_width;
-    uint8_t line_y = y - button_height;
-    canvas_draw_box(canvas, x, line_y, button_width, button_height);
-    canvas_draw_line(canvas, line_x + 0, line_y, line_x + 0, y - 1);
-    canvas_draw_line(canvas, line_x + 1, line_y, line_x + 1, y - 2);
-    canvas_draw_line(canvas, line_x + 2, line_y, line_x + 2, y - 3);
-
-    canvas_invert_color(canvas);
-    canvas_draw_icon(canvas, x + horizontal_offset, y - icon_v_offset, icon);
-    canvas_draw_str(
-        canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str);
-    canvas_invert_color(canvas);
-}
-
-/**
- * Thanks to the author of metronome
- * @param canvas
- * @param str
- */
-void elements_button_top_right(Canvas* canvas, const char* str) {
-    const Icon* icon = &I_ButtonDown_7x4;
-
-    const uint8_t button_height = 12;
-    const uint8_t vertical_offset = 3;
-    const uint8_t horizontal_offset = 3;
-    const uint8_t string_width = canvas_string_width(canvas, str);
-    const uint8_t icon_h_offset = 3;
-    const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset;
-    const uint8_t icon_v_offset = icon_get_height(icon) + vertical_offset + 1;
-    const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
-
-    const uint8_t x = canvas_width(canvas);
-    const uint8_t y = 0 + button_height;
-
-    uint8_t line_x = x - button_width;
-    uint8_t line_y = y - button_height;
-    canvas_draw_box(canvas, line_x, line_y, button_width, button_height);
-    canvas_draw_line(canvas, line_x - 1, line_y, line_x - 1, y - 1);
-    canvas_draw_line(canvas, line_x - 2, line_y, line_x - 2, y - 2);
-    canvas_draw_line(canvas, line_x - 3, line_y, line_x - 3, y - 3);
-
-    canvas_invert_color(canvas);
-    canvas_draw_str(canvas, x - button_width + horizontal_offset, y - vertical_offset, str);
-    canvas_draw_icon(
-        canvas, x - horizontal_offset - icon_get_width(icon), y - icon_v_offset, icon);
-    canvas_invert_color(canvas);
-}
-
 void subbrute_attack_view_draw(Canvas* canvas, void* context) {
     furi_assert(context);
     SubBruteAttackViewModel* model = (SubBruteAttackViewModel*)context;

+ 44 - 37
views/subbrute_main_view.c

@@ -1,6 +1,7 @@
 #include "subbrute_main_view.h"
 #include "../subbrute_i.h"
 #include "../subbrute_protocols.h"
+#include "../gui_top_buttons.h"
 
 #include <input/input.h>
 #include <gui/elements.h>
@@ -47,42 +48,45 @@ FuriString* center_displayed_key(const char* key_cstr, uint8_t index) {
     char display_menu[] = {
         'X', 'X', ' ', 'X', 'X', ' ', '<', 'X', 'X', '>', ' ', 'X', 'X', ' ', 'X', 'X', '\0'};
 
-    if(key_cstr != NULL) {
-        if(index > 1) {
-            display_menu[0] = key_cstr[str_index - 6];
-            display_menu[1] = key_cstr[str_index - 5];
-        } else {
-            display_menu[0] = ' ';
-            display_menu[1] = ' ';
-        }
+    if(key_cstr == NULL) {
+        return furi_string_alloc_set(display_menu);
+    }
+    if(index > 1) {
+        display_menu[0] = key_cstr[str_index - 6];
+        display_menu[1] = key_cstr[str_index - 5];
+    } else {
+        display_menu[0] = ' ';
+        display_menu[1] = ' ';
+    }
 
-        if(index > 0) {
-            display_menu[3] = key_cstr[str_index - 3];
-            display_menu[4] = key_cstr[str_index - 2];
-        } else {
-            display_menu[3] = ' ';
-            display_menu[4] = ' ';
-        }
+    if(index > 0) {
+        display_menu[3] = key_cstr[str_index - 3];
+        display_menu[4] = key_cstr[str_index - 2];
+    } else {
+        display_menu[3] = ' ';
+        display_menu[4] = ' ';
+    }
 
-        display_menu[7] = key_cstr[str_index];
-        display_menu[8] = key_cstr[str_index + 1];
+    display_menu[7] = key_cstr[str_index];
+    display_menu[8] = key_cstr[str_index + 1];
+    uint8_t key_len = (uint8_t)strlen(key_cstr);
 
-        if((str_index + 4) <= (uint8_t)strlen(key_cstr)) {
-            display_menu[11] = key_cstr[str_index + 3];
-            display_menu[12] = key_cstr[str_index + 4];
-        } else {
-            display_menu[11] = ' ';
-            display_menu[12] = ' ';
-        }
+    if((str_index + 4) <= key_len) {
+        display_menu[11] = key_cstr[str_index + 3];
+        display_menu[12] = key_cstr[str_index + 4];
+    } else {
+        display_menu[11] = ' ';
+        display_menu[12] = ' ';
+    }
 
-        if((str_index + 8) <= (uint8_t)strlen(key_cstr)) {
-            display_menu[14] = key_cstr[str_index + 6];
-            display_menu[15] = key_cstr[str_index + 7];
-        } else {
-            display_menu[14] = ' ';
-            display_menu[15] = ' ';
-        }
+    if((str_index + 8) <= key_len) {
+        display_menu[14] = key_cstr[str_index + 6];
+        display_menu[15] = key_cstr[str_index + 7];
+    } else {
+        display_menu[14] = ' ';
+        display_menu[15] = ' ';
     }
+
     return furi_string_alloc_set(display_menu);
 }
 
@@ -91,7 +95,7 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
     canvas_set_font(canvas, FontPrimary);
     canvas_draw_box(canvas, 0, 0, canvas_width(canvas), STATUS_BAR_Y_SHIFT);
     canvas_invert_color(canvas);
-    canvas_draw_str_aligned(canvas, 64, 3, AlignCenter, AlignTop, "Sub-GHz BruteForcer 3.2");
+    canvas_draw_str_aligned(canvas, 64, 3, AlignCenter, AlignTop, "Sub-GHz BruteForcer 3.3");
     canvas_invert_color(canvas);
 
     uint16_t screen_width = canvas_width(canvas);
@@ -102,8 +106,8 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
         //FURI_LOG_D(TAG, "key_field: %s", model->key_field);
 #endif
         char msg_index[18];
-        snprintf(msg_index, sizeof(msg_index), "Field index : %d", model->index);
-        canvas_draw_str_aligned(canvas, 64, 26, AlignCenter, AlignTop, msg_index);
+        snprintf(msg_index, sizeof(msg_index), "Field index: %d", model->index);
+        canvas_draw_str_aligned(canvas, 64, 20, AlignCenter, AlignTop, msg_index);
 
         FuriString* menu_items;
 
@@ -113,9 +117,12 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
             canvas, 64, 40, AlignCenter, AlignTop, furi_string_get_cstr(menu_items));
 
         elements_button_center(canvas, "Select");
-        elements_button_left(canvas, "<");
-        elements_button_right(canvas, ">");
-
+        if(model->index > 0) {
+            elements_button_left(canvas, " ");
+        }
+        if(model->index < 7) {
+            elements_button_right(canvas, " ");
+        }
         furi_string_reset(menu_items);
         furi_string_free(menu_items);
     } else {