Преглед изворни кода

fix crashes and implement repeats for bf exisiting dump

MX пре 3 година
родитељ
комит
623f34284b

+ 3 - 2
helpers/subbrute_worker.c

@@ -123,7 +123,8 @@ bool subbrute_worker_init_file_attack(
     uint64_t step,
     uint64_t step,
     uint8_t load_index,
     uint8_t load_index,
     const char* file_key,
     const char* file_key,
-    SubBruteProtocol* protocol) {
+    SubBruteProtocol* protocol,
+    uint8_t extra_repeats) {
     furi_assert(instance);
     furi_assert(instance);
 
 
     if(instance->worker_running) {
     if(instance->worker_running) {
@@ -139,7 +140,7 @@ bool subbrute_worker_init_file_attack(
     instance->bits = protocol->bits;
     instance->bits = protocol->bits;
     instance->te = protocol->te;
     instance->te = protocol->te;
     instance->load_index = load_index;
     instance->load_index = load_index;
-    instance->repeat = protocol->repeat;
+    instance->repeat = protocol->repeat + extra_repeats;
     instance->file_key = file_key;
     instance->file_key = file_key;
     instance->max_value = subbrute_protocol_calc_max_value(instance->attack, instance->bits);
     instance->max_value = subbrute_protocol_calc_max_value(instance->attack, instance->bits);
 
 

+ 2 - 1
helpers/subbrute_worker.h

@@ -29,7 +29,8 @@ bool subbrute_worker_init_file_attack(
     uint64_t step,
     uint64_t step,
     uint8_t load_index,
     uint8_t load_index,
     const char* file_key,
     const char* file_key,
-    SubBruteProtocol* protocol);
+    SubBruteProtocol* protocol,
+    uint8_t extra_repeats);
 bool subbrute_worker_start(SubBruteWorker* instance);
 bool subbrute_worker_start(SubBruteWorker* instance);
 void subbrute_worker_stop(SubBruteWorker* instance);
 void subbrute_worker_stop(SubBruteWorker* instance);
 bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t step);
 bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t step);

+ 6 - 2
scenes/subbrute_scene_load_file.c

@@ -37,14 +37,18 @@ void subbrute_scene_load_file_on_enter(void* context) {
         load_result =
         load_result =
             subbrute_device_load_from_file(instance->device, furi_string_get_cstr(load_path));
             subbrute_device_load_from_file(instance->device, furi_string_get_cstr(load_path));
         if(load_result == SubBruteFileResultOk) {
         if(load_result == SubBruteFileResultOk) {
-            load_result = subbrute_device_attack_set(instance->device, SubBruteAttackLoadFile, 0);
+            uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
+
+            load_result = subbrute_device_attack_set(
+                instance->device, SubBruteAttackLoadFile, extra_repeats);
             if(load_result == SubBruteFileResultOk) {
             if(load_result == SubBruteFileResultOk) {
                 if(!subbrute_worker_init_file_attack(
                 if(!subbrute_worker_init_file_attack(
                        instance->worker,
                        instance->worker,
                        instance->device->key_index,
                        instance->device->key_index,
                        instance->device->load_index,
                        instance->device->load_index,
                        instance->device->file_key,
                        instance->device->file_key,
-                       instance->device->file_protocol_info)) {
+                       instance->device->file_protocol_info,
+                       extra_repeats)) {
                     furi_crash("Invalid attack set!");
                     furi_crash("Invalid attack set!");
                 }
                 }
                 // Ready to run!
                 // Ready to run!

+ 4 - 1
scenes/subbrute_scene_load_select.c

@@ -39,12 +39,15 @@ bool subbrute_scene_load_select_on_event(void* context, SceneManagerEvent event)
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
         if(event.event == SubBruteCustomEventTypeIndexSelected) {
         if(event.event == SubBruteCustomEventTypeIndexSelected) {
             instance->device->load_index = subbrute_main_view_get_index(instance->view_main);
             instance->device->load_index = subbrute_main_view_get_index(instance->view_main);
+            uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
+
             if(!subbrute_worker_init_file_attack(
             if(!subbrute_worker_init_file_attack(
                    instance->worker,
                    instance->worker,
                    instance->device->key_index,
                    instance->device->key_index,
                    instance->device->load_index,
                    instance->device->load_index,
                    instance->device->file_key,
                    instance->device->file_key,
-                   instance->device->file_protocol_info)) {
+                   instance->device->file_protocol_info,
+                   extra_repeats)) {
                 furi_crash("Invalid attack set!");
                 furi_crash("Invalid attack set!");
             }
             }
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);

+ 7 - 5
scenes/subbrute_scene_start.c

@@ -52,21 +52,23 @@ bool subbrute_scene_start_on_event(void* context, SceneManagerEvent event) {
             SubBruteAttacks attack = subbrute_main_view_get_index(instance->view_main);
             SubBruteAttacks attack = subbrute_main_view_get_index(instance->view_main);
             uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
             uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
 
 
-            if(subbrute_device_attack_set(instance->device, attack, extra_repeats) !=
-                   SubBruteFileResultOk ||
-               !subbrute_worker_init_default_attack(
+            if((subbrute_device_attack_set(instance->device, attack, extra_repeats) !=
+                SubBruteFileResultOk) ||
+               (!subbrute_worker_init_default_attack(
                    instance->worker,
                    instance->worker,
                    attack,
                    attack,
                    instance->device->key_index,
                    instance->device->key_index,
                    instance->device->protocol_info,
                    instance->device->protocol_info,
-                   instance->device->extra_repeats)) {
+                   instance->device->extra_repeats))) {
                 furi_crash("Invalid attack set!");
                 furi_crash("Invalid attack set!");
             }
             }
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
 
 
             consumed = true;
             consumed = true;
         } else if(event.event == SubBruteCustomEventTypeLoadFile) {
         } else if(event.event == SubBruteCustomEventTypeLoadFile) {
-            instance->device->extra_repeats = 0;
+            //uint8_t extra_repeats = subbrute_main_view_get_extra_repeats(instance->view_main);
+
+            //instance->device->extra_repeats = extra_repeats;
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadFile);
             scene_manager_next_scene(instance->scene_manager, SubBruteSceneLoadFile);
             consumed = true;
             consumed = true;
         }
         }

+ 2 - 1
subbrute_device.c

@@ -146,9 +146,10 @@ SubBruteFileResult subbrute_device_attack_set(
     if(type != SubBruteAttackLoadFile) {
     if(type != SubBruteAttackLoadFile) {
         subbrute_device_free_protocol_info(instance);
         subbrute_device_free_protocol_info(instance);
         instance->protocol_info = subbrute_protocol(type);
         instance->protocol_info = subbrute_protocol(type);
-        instance->extra_repeats = extra_repeats;
     }
     }
 
 
+    instance->extra_repeats = extra_repeats;
+
     // For non-file types we didn't set SubGhzProtocolDecoderBase
     // For non-file types we didn't set SubGhzProtocolDecoderBase
     instance->receiver = subghz_receiver_alloc_init(instance->environment);
     instance->receiver = subghz_receiver_alloc_init(instance->environment);
     subghz_receiver_set_filter(instance->receiver, SubGhzProtocolFlag_Decodable);
     subghz_receiver_set_filter(instance->receiver, SubGhzProtocolFlag_Decodable);

+ 4 - 13
views/subbrute_main_view.c

@@ -200,7 +200,6 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
     const uint8_t min_value = 0;
     const uint8_t min_value = 0;
     const uint8_t correct_total = SubBruteAttackTotalCount - 1;
     const uint8_t correct_total = SubBruteAttackTotalCount - 1;
     uint8_t max_repeats = 9 - subbrute_protocol_repeats_count(instance->index);
     uint8_t max_repeats = 9 - subbrute_protocol_repeats_count(instance->index);
-    uint8_t index = 0;
 
 
     bool updated = false;
     bool updated = false;
     bool consumed = false;
     bool consumed = false;
@@ -227,14 +226,16 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
             consumed = true;
             consumed = true;
         } else if(event->key == InputKeyLeft && is_short) {
         } else if(event->key == InputKeyLeft && is_short) {
             instance->extra_repeats = CLAMP(instance->extra_repeats - 1, max_repeats, 0);
             instance->extra_repeats = CLAMP(instance->extra_repeats - 1, max_repeats, 0);
+
             updated = true;
             updated = true;
             consumed = true;
             consumed = true;
         } else if(event->key == InputKeyRight && is_short) {
         } else if(event->key == InputKeyRight && is_short) {
             instance->extra_repeats = CLAMP(instance->extra_repeats + 1, max_repeats, 0);
             instance->extra_repeats = CLAMP(instance->extra_repeats + 1, max_repeats, 0);
+
             updated = true;
             updated = true;
             consumed = true;
             consumed = true;
         } else if(event->key == InputKeyOk && is_short) {
         } else if(event->key == InputKeyOk && is_short) {
-            if(index == SubBruteAttackLoadFile) {
+            if(instance->index == SubBruteAttackLoadFile) {
                 instance->callback(SubBruteCustomEventTypeLoadFile, instance->context);
                 instance->callback(SubBruteCustomEventTypeLoadFile, instance->context);
             } else {
             } else {
                 instance->callback(SubBruteCustomEventTypeMenuSelected, instance->context);
                 instance->callback(SubBruteCustomEventTypeMenuSelected, instance->context);
@@ -293,16 +294,6 @@ bool subbrute_main_view_input(InputEvent* event, void* context) {
 
 
 void subbrute_main_view_enter(void* context) {
 void subbrute_main_view_enter(void* context) {
     furi_assert(context);
     furi_assert(context);
-    SubBruteMainView* instance = context;
-
-    with_view_model(
-        instance->view,
-        SubBruteMainViewModel * model,
-        {
-            model->key_field = NULL;
-            model->is_select_byte = false;
-        },
-        true);
 
 
 #ifdef FURI_DEBUG
 #ifdef FURI_DEBUG
     FURI_LOG_D(TAG, "subbrute_main_view_enter");
     FURI_LOG_D(TAG, "subbrute_main_view_enter");
@@ -368,7 +359,7 @@ void subbrute_main_view_set_index(
     furi_assert(instance);
     furi_assert(instance);
     furi_assert(idx < SubBruteAttackTotalCount);
     furi_assert(idx < SubBruteAttackTotalCount);
 #ifdef FURI_DEBUG
 #ifdef FURI_DEBUG
-    FURI_LOG_I(TAG, "Set index: %d", idx);
+    FURI_LOG_I(TAG, "Set index: %d, IS_SELECT_BYTE: %d", idx, is_select_byte);
 #endif
 #endif
     instance->is_select_byte = is_select_byte;
     instance->is_select_byte = is_select_byte;
     instance->key_field = key_field;
     instance->key_field = key_field;