derskythe 3 лет назад
Родитель
Сommit
40e4712159

+ 1 - 1
scenes/subbrute_scene_load_file.c

@@ -37,7 +37,7 @@ void subbrute_scene_load_file_on_enter(void* context) {
         load_result =
             subbrute_device_load_from_file(instance->device, furi_string_get_cstr(load_path));
         if(load_result == SubBruteFileResultOk) {
-            load_result = subbrute_device_attack_set(instance->device, SubBruteAttackLoadFile);
+            load_result = subbrute_device_attack_set(instance->device, SubBruteAttackLoadFile, 0);
             if(load_result == SubBruteFileResultOk) {
                 if(!subbrute_worker_init_file_attack(
                        instance->worker,

+ 3 - 4
scenes/subbrute_scene_start.c

@@ -50,18 +50,17 @@ bool subbrute_scene_start_on_event(void* context, SceneManagerEvent event) {
 #endif
         if(event.event == SubBruteCustomEventTypeMenuSelected) {
             SubBruteAttacks attack = subbrute_main_view_get_index(instance->view_main);
+            uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
 
-            if(subbrute_device_attack_set(instance->device, attack) != SubBruteFileResultOk ||
+            if(subbrute_device_attack_set(instance->device, attack, extra_repeats) != SubBruteFileResultOk ||
                !subbrute_worker_init_default_attack(
                    instance->worker,
                    attack,
                    instance->device->key_index,
                    instance->device->protocol_info,
-        instance->device->extra_repeats)) {
+                   instance->device->extra_repeats)) {
                 furi_crash("Invalid attack set!");
             }
-            instance->device->extra_repeats =
-                subbrute_main_view_get_extra_repeats(instance->view_main);
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
 
             consumed = true;

+ 9 - 4
subbrute_device.c

@@ -133,16 +133,20 @@ bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_na
     return result;
 }
 
-SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* instance, SubBruteAttacks type) {
+SubBruteFileResult subbrute_device_attack_set(
+    SubBruteDevice* instance,
+    SubBruteAttacks type,
+    uint8_t extra_repeats) {
     furi_assert(instance);
 #ifdef FURI_DEBUG
-    FURI_LOG_D(TAG, "subbrute_device_attack_set: %d", type);
+    FURI_LOG_D(TAG, "subbrute_device_attack_set: %d, extra_repeats: %d", type, extra_repeats);
 #endif
     subbrute_device_attack_set_default_values(instance, type);
 
     if(type != SubBruteAttackLoadFile) {
         subbrute_device_free_protocol_info(instance);
         instance->protocol_info = subbrute_protocol(type);
+        instance->extra_repeats = extra_repeats;
     }
 
     // For non-file types we didn't set SubGhzProtocolDecoderBase
@@ -175,7 +179,7 @@ SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* instance, SubBrute
 #ifdef FURI_DEBUG
         bits = instance->protocol_info->bits;
         te = instance->protocol_info->te;
-        repeat = instance->protocol_info->repeat;
+        repeat = instance->protocol_info->repeat + instance->extra_repeats;
         preset = instance->protocol_info->preset;
         file = instance->protocol_info->file;
 #endif
@@ -189,7 +193,7 @@ SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* instance, SubBrute
 #ifdef FURI_DEBUG
         bits = instance->file_protocol_info->bits;
         te = instance->file_protocol_info->te;
-        repeat = instance->file_protocol_info->repeat;
+        repeat = instance->file_protocol_info->repeat + instance->extra_repeats;
         preset = instance->file_protocol_info->preset;
         file = instance->file_protocol_info->file;
 #endif
@@ -390,6 +394,7 @@ void subbrute_device_attack_set_default_values(
     instance->attack = default_attack;
     instance->key_index = 0x00;
     instance->load_index = 0x00;
+    instance->extra_repeats = 0;
     memset(instance->current_key, 0, sizeof(instance->current_key));
 
     if(default_attack != SubBruteAttackLoadFile) {

+ 4 - 1
subbrute_device.h

@@ -60,7 +60,10 @@ void subbrute_device_free(SubBruteDevice* instance);
 
 bool subbrute_device_save_file(SubBruteDevice* instance, const char* key_name);
 const char* subbrute_device_error_get_desc(SubBruteFileResult error_id);
-SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* context, SubBruteAttacks type);
+SubBruteFileResult subbrute_device_attack_set(
+    SubBruteDevice* context,
+    SubBruteAttacks type,
+    uint8_t extra_repeats);
 uint8_t subbrute_device_load_from_file(SubBruteDevice* context, const char* file_path);
 
 uint64_t subbrute_device_add_step(SubBruteDevice* instance, int8_t step);

+ 5 - 4
views/subbrute_attack_view.c

@@ -44,10 +44,10 @@ void subbrute_attack_view_set_callback(
 bool subbrute_attack_view_input(InputEvent* event, void* context) {
     furi_assert(event);
     furi_assert(context);
+    SubBruteAttackView* instance = context;
 #ifdef FURI_DEBUG
     FURI_LOG_D(TAG, "InputKey: %d", event->key);
 #endif
-    SubBruteAttackView* instance = context;
 
     if(event->key == InputKeyBack && event->type == InputTypeShort) {
         instance->is_attacking = false;
@@ -210,12 +210,13 @@ void subbrute_attack_view_init_values(
     bool is_attacking,
     uint8_t extra_repeats) {
 #ifdef FURI_DEBUG
-    FURI_LOG_D(
+    FURI_LOG_I(
         TAG,
-        "init, attack_type: %d, max_value: %lld, current_step: %lld",
+        "INIT, attack_type: %d, max_value: %lld, current_step: %lld, extra_repeats: %d",
         index,
         max_value,
-        current_step);
+        current_step,
+        extra_repeats);
 #endif
     instance->attack_type = index;
     instance->max_value = max_value;

+ 7 - 4
views/subbrute_main_view.c

@@ -186,18 +186,21 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
 bool subbrute_main_view_input(InputEvent* event, void* context) {
     furi_assert(event);
     furi_assert(context);
-#ifdef FURI_DEBUG
-    FURI_LOG_D(TAG, "InputKey: %d", event->key);
-#endif
 
     if(event->key == InputKeyBack && event->type == InputTypeShort) {
+#ifdef FURI_DEBUG
+        FURI_LOG_I(TAG, "InputKey: BACK");
+#endif
         return false;
     }
 
     SubBruteMainView* instance = context;
+#ifdef FURI_DEBUG
+    FURI_LOG_D(TAG, "InputKey: %d, extra_repeats: %d", event->key, instance->extra_repeats);
+#endif
     const uint8_t min_value = 0;
     const uint8_t correct_total = SubBruteAttackTotalCount - 1;
-    const uint8_t max_repeats = 9;
+    uint8_t max_repeats = 9 - subbrute_protocol_repeats_count(instance->index);
     uint8_t index = 0;
 
     bool updated = false;