From b86f42e7fbc372cf07fffcf54aa628aed0f6cd26 Mon Sep 17 00:00:00 2001 From: DerSkythe Date: Sat, 8 Oct 2022 21:53:31 +0400 Subject: [PATCH] Changed protocol info --- .../scenes/subbrute_scene_run_attack.c | 2 - .../scenes/subbrute_scene_save_name.c | 1 - applications/plugins/subbrute/subbrute.c | 63 +---- .../plugins/subbrute/subbrute_custom_event.h | 3 - .../plugins/subbrute/subbrute_device.c | 196 +++++++++------ .../plugins/subbrute/subbrute_device.h | 3 +- applications/plugins/subbrute/subbrute_i.h | 1 - .../plugins/subbrute/subbrute_protocols.c | 226 +++++++++++++----- .../plugins/subbrute/subbrute_protocols.h | 3 +- .../subbrute/views/subbrute_attack_view.c | 20 +- .../subbrute/views/subbrute_attack_view.h | 3 - .../subbrute/views/subbrute_main_view.c | 2 +- .../subbrute/views/subbrute_main_view.h | 2 - 13 files changed, 310 insertions(+), 215 deletions(-) diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c index 3d6bfde37..b37ac34f9 100644 --- a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c +++ b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c @@ -1,7 +1,5 @@ #include "../subbrute_i.h" #include "subbrute_scene.h" -#include "../subbrute_custom_event.h" -#include "../views/subbrute_attack_view.h" #define TAG "SubBruteSceneRunAttack" diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c b/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c index 9a010a2ba..f0acb30df 100644 --- a/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c +++ b/applications/plugins/subbrute/scenes/subbrute_scene_save_name.c @@ -1,6 +1,5 @@ #include "../subbrute_i.h" #include "subbrute_scene.h" -#include #include #define TAG "SubBruteSceneSaveFile" diff --git a/applications/plugins/subbrute/subbrute.c b/applications/plugins/subbrute/subbrute.c index 200b42c3c..0e226f9e4 100644 --- a/applications/plugins/subbrute/subbrute.c +++ b/applications/plugins/subbrute/subbrute.c @@ -40,7 +40,7 @@ SubBruteState* subbrute_alloc() { view_dispatcher_set_navigation_event_callback( instance->view_dispatcher, subbrute_back_event_callback); view_dispatcher_set_tick_event_callback( - instance->view_dispatcher, subbrute_tick_event_callback, 10); + instance->view_dispatcher, subbrute_tick_event_callback, 100); //Dialog instance->dialogs = furi_record_open(RECORD_DIALOGS); @@ -87,8 +87,6 @@ SubBruteState* subbrute_alloc() { SubBruteViewAttack, subbrute_attack_view_get_view(instance->view_attack)); - // Loading - instance->loading = loading_alloc(); //instance->flipper_format = flipper_format_string_alloc(); //instance->environment = subghz_environment_alloc(); @@ -99,91 +97,49 @@ void subbrute_free(SubBruteState* instance) { furi_assert(instance); // SubBruteDevice -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteDevice"); -#endif subbrute_worker_stop(instance->device); subbrute_device_free(instance->device); // Notifications -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free Notifications"); -#endif notification_message(instance->notifications, &sequence_blink_stop); furi_record_close(RECORD_NOTIFICATION); instance->notifications = NULL; - // Loading -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free loading"); -#endif - loading_free(instance->loading); - // View Main -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewMain"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewMain); subbrute_main_view_free(instance->view_main); // View Attack -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewAttack"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewAttack); subbrute_attack_view_free(instance->view_attack); // TextInput -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewTextInput"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewTextInput); text_input_free(instance->text_input); // Custom Widget -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewWidget"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewWidget); widget_free(instance->widget); // Popup -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewPopup"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewPopup); popup_free(instance->popup); // ViewStack -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free SubBruteViewStack"); -#endif view_dispatcher_remove_view(instance->view_dispatcher, SubBruteViewStack); view_stack_free(instance->view_stack); //Dialog -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free RECORD_DIALOGS"); -#endif furi_record_close(RECORD_DIALOGS); instance->dialogs = NULL; // Scene manager -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free scene_manager"); -#endif scene_manager_free(instance->scene_manager); // View Dispatcher -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free view_dispatcher"); -#endif view_dispatcher_free(instance->view_dispatcher); // GUI -#ifdef FURI_DEBUG - FURI_LOG_D(TAG, "free RECORD_GUI"); -#endif furi_record_close(RECORD_GUI); instance->gui = NULL; @@ -193,23 +149,6 @@ void subbrute_free(SubBruteState* instance) { free(instance); } -void subbrute_show_loading_popup(void* context, bool show) { - TaskHandle_t timer_task = xTaskGetHandle(configTIMER_SERVICE_TASK_NAME); - SubBruteState* instance = context; - ViewStack* view_stack = instance->view_stack; - Loading* loading = instance->loading; - - if(show) { - // Raise timer priority so that animations can play - vTaskPrioritySet(timer_task, configMAX_PRIORITIES - 1); - view_stack_add_view(view_stack, loading_get_view(loading)); - } else { - view_stack_remove_view(view_stack, loading_get_view(loading)); - // Restore default timer priority - vTaskPrioritySet(timer_task, configTIMER_TASK_PRIORITY); - } -} - void subbrute_text_input_callback(void* context) { furi_assert(context); SubBruteState* instance = context; diff --git a/applications/plugins/subbrute/subbrute_custom_event.h b/applications/plugins/subbrute/subbrute_custom_event.h index 8478a6750..2864f8934 100644 --- a/applications/plugins/subbrute/subbrute_custom_event.h +++ b/applications/plugins/subbrute/subbrute_custom_event.h @@ -1,8 +1,5 @@ #pragma once -#include -#include - typedef enum { // Reserve first 100 events for button types and indexes, starting from 0 SubBruteCustomEventTypeReserved = 100, diff --git a/applications/plugins/subbrute/subbrute_device.c b/applications/plugins/subbrute/subbrute_device.c index 311b6eba2..e6292b0e9 100644 --- a/applications/plugins/subbrute/subbrute_device.c +++ b/applications/plugins/subbrute/subbrute_device.c @@ -40,6 +40,7 @@ SubBruteDevice* subbrute_device_alloc() { instance->callback = NULL; instance->protocol_info = NULL; + instance->file_protocol_info = NULL; instance->decoder_result = NULL; instance->transmitter = NULL; instance->receiver = NULL; @@ -150,7 +151,8 @@ bool subbrute_worker_start(SubBruteDevice* instance) { FURI_LOG_W(TAG, "Worker cannot start, invalid device state: %d", instance->state); return false; } - if(instance->protocol_info == NULL) { + if((instance->protocol_info == NULL && instance->attack != SubBruteAttackLoadFile) || + (instance->attack == SubBruteAttackLoadFile && instance->file_protocol_info == NULL)) { FURI_LOG_W(TAG, "Worker cannot start, protocol_info is NULL!"); return false; } @@ -230,9 +232,13 @@ void subbrute_device_subghz_transmit(SubBruteDevice* instance, FlipperFormat* fl instance->environment, subbrute_protocol_name(instance->attack)); subghz_transmitter_deserialize(instance->transmitter, flipper_format); furi_hal_subghz_reset(); - furi_hal_subghz_load_preset(instance->protocol_info->preset); - furi_hal_subghz_set_frequency_and_path(instance->protocol_info->preset); - + if(instance->attack == SubBruteAttackLoadFile) { + furi_hal_subghz_load_preset(instance->file_protocol_info->preset); + furi_hal_subghz_set_frequency_and_path(instance->file_protocol_info->preset); + } else { + furi_hal_subghz_load_preset(instance->protocol_info->preset); + furi_hal_subghz_set_frequency_and_path(instance->protocol_info->preset); + } furi_hal_subghz_start_async_tx(subghz_transmitter_yield, instance->transmitter); while(!furi_hal_subghz_is_async_tx_complete()) { @@ -348,6 +354,9 @@ bool subbrute_device_create_packet_parsed( FuriString* candidate = furi_string_alloc(); + Stream* stream = flipper_format_get_raw_stream(flipper_format); + stream_clean(stream); + if(instance->attack == SubBruteAttackLoadFile) { if(step >= sizeof(instance->file_key)) { return false; @@ -357,6 +366,42 @@ bool subbrute_device_create_packet_parsed( snprintf(subbrute_payload_byte, 4, "%02X ", (uint8_t)step); furi_string_replace_at(candidate, instance->load_index * 3, 3, subbrute_payload_byte); //snprintf(step_payload, sizeof(step_payload), "%02X", (uint8_t)instance->file_key[step]); + + if(small) { + if(instance->file_protocol_info->te) { + stream_write_format( + stream, + subbrute_key_small_with_tail, + instance->file_protocol_info->bits, + furi_string_get_cstr(candidate), + instance->file_protocol_info->te, + instance->file_protocol_info->repeat); + } else { + stream_write_format( + stream, + subbrute_key_small_no_tail, + instance->file_protocol_info->bits, + furi_string_get_cstr(candidate), + instance->file_protocol_info->repeat); + } + } else { + if(instance->file_protocol_info->te) { + stream_write_format( + stream, + subbrute_key_file_key_with_tail, + instance->file_template, + furi_string_get_cstr(candidate), + instance->file_protocol_info->te, + instance->file_protocol_info->repeat); + } else { + stream_write_format( + stream, + subbrute_key_file_key, + instance->file_template, + furi_string_get_cstr(candidate), + instance->file_protocol_info->repeat); + } + } } else { //snprintf(step_payload, sizeof(step_payload), "%16X", step); //snprintf(step_payload, sizeof(step_payload), "%016llX", step); @@ -375,53 +420,50 @@ bool subbrute_device_create_packet_parsed( } } furi_string_free(buffer); - } #ifdef FURI_DEBUG - FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); + FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step); #endif - Stream* stream = flipper_format_get_raw_stream(flipper_format); - stream_clean(stream); - - if(small) { - if(instance->protocol_info->te) { - stream_write_format( - stream, - subbrute_key_small_with_tail, - instance->protocol_info->bits, - furi_string_get_cstr(candidate), - instance->protocol_info->te, - instance->protocol_info->repeat); + if(small) { + if(instance->protocol_info->te) { + stream_write_format( + stream, + subbrute_key_small_with_tail, + instance->protocol_info->bits, + furi_string_get_cstr(candidate), + instance->protocol_info->te, + instance->protocol_info->repeat); + } else { + stream_write_format( + stream, + subbrute_key_small_no_tail, + instance->protocol_info->bits, + furi_string_get_cstr(candidate), + instance->protocol_info->repeat); + } } else { - stream_write_format( - stream, - subbrute_key_small_no_tail, - instance->protocol_info->bits, - furi_string_get_cstr(candidate), - instance->protocol_info->repeat); + if(instance->protocol_info->te) { + stream_write_format( + stream, + subbrute_key_file_key_with_tail, + instance->file_template, + furi_string_get_cstr(candidate), + instance->protocol_info->te, + instance->protocol_info->repeat); + } else { + stream_write_format( + stream, + subbrute_key_file_key, + instance->file_template, + furi_string_get_cstr(candidate), + instance->protocol_info->repeat); + } } - } else { - if(instance->protocol_info->te) { - stream_write_format( - stream, - subbrute_key_file_key_with_tail, - instance->file_template, - furi_string_get_cstr(candidate), - instance->protocol_info->te, - instance->protocol_info->repeat); - } else { - stream_write_format( - stream, - subbrute_key_file_key, - instance->file_template, - furi_string_get_cstr(candidate), - instance->protocol_info->repeat); - } - } #ifdef FURI_DEBUG - //FURI_LOG_D(TAG, "payload: %s", instance->payload); + //FURI_LOG_D(TAG, "payload: %s", instance->payload); #endif + } furi_string_free(candidate); @@ -471,6 +513,17 @@ SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* instance, SubBrute // Calc max value if(instance->attack == SubBruteAttackLoadFile) { instance->max_value = 0x3F; + + // Now we are ready to set file template for using in the future with snprintf + // for sending attack payload ONLY for files! + snprintf( + instance->file_template, + sizeof(instance->file_template), + subbrute_key_file_start, + instance->file_protocol_info->frequency, + subbrute_protocol_preset(instance->file_protocol_info->preset), + subbrute_protocol_file(instance->file_protocol_info->file), + instance->file_protocol_info->bits); } else { FuriString* max_value_s; max_value_s = furi_string_alloc(); @@ -479,22 +532,22 @@ SubBruteFileResult subbrute_device_attack_set(SubBruteDevice* instance, SubBrute } instance->max_value = (uint64_t)strtol(furi_string_get_cstr(max_value_s), NULL, 2); furi_string_free(max_value_s); - } - // Now we are ready to set file template for using in the future with snprintf - // for sending attack payload - snprintf( - instance->file_template, - sizeof(instance->file_template), - subbrute_key_file_start, - instance->protocol_info->frequency, - subbrute_protocol_preset(instance->protocol_info->preset), - subbrute_protocol_file(instance->protocol_info->file), - instance->protocol_info->bits); + // Now we are ready to set file template for using in the future with snprintf + // for sending attack payload + snprintf( + instance->file_template, + sizeof(instance->file_template), + subbrute_key_file_start, + instance->protocol_info->frequency, + subbrute_protocol_preset(instance->protocol_info->preset), + subbrute_protocol_file(instance->protocol_info->file), + instance->protocol_info->bits); #ifdef FURI_DEBUG - FURI_LOG_D( - TAG, "tail: %d, file_template: %s", instance->protocol_info->te, instance->file_template); + FURI_LOG_D( + TAG, "tail: %d, file_template: %s", instance->protocol_info->te, instance->file_template); #endif + } // Init payload FlipperFormat* flipper_format = flipper_format_string_alloc(); @@ -517,6 +570,9 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil Storage* storage = furi_record_open(RECORD_STORAGE); FlipperFormat* fff_data_file = flipper_format_file_alloc(storage); + subbrute_device_free_protocol_info(instance); + instance->file_protocol_info = malloc(sizeof(SubBruteProtocol)); + FuriString* temp_str; temp_str = furi_string_alloc(); uint32_t temp_data32; @@ -539,8 +595,8 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil // Frequency if(flipper_format_read_uint32(fff_data_file, "Frequency", &temp_data32, 1)) { - instance->protocol_info->frequency = temp_data32; - if(!furi_hal_subghz_is_tx_allowed(instance->protocol_info->frequency)) { + instance->file_protocol_info->frequency = temp_data32; + if(!furi_hal_subghz_is_tx_allowed(instance->file_protocol_info->frequency)) { result = SubBruteFileResultFrequencyNotAllowed; break; } @@ -555,7 +611,7 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil FURI_LOG_E(TAG, "Preset FAIL"); result = SubBruteFileResultPresetInvalid; } else { - instance->protocol_info->preset = subbrute_protocol_convert_preset(temp_str); + instance->file_protocol_info->preset = subbrute_protocol_convert_preset(temp_str); } const char* protocol_file = NULL; @@ -565,8 +621,8 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil result = SubBruteFileResultMissingProtocol; break; } else { - instance->protocol_info->file = subbrute_protocol_file_protocol_name(temp_str); - protocol_file = subbrute_protocol_file(instance->protocol_info->file); + instance->file_protocol_info->file = subbrute_protocol_file_protocol_name(temp_str); + protocol_file = subbrute_protocol_file(instance->file_protocol_info->file); #ifdef FURI_DEBUG FURI_LOG_D(TAG, "Protocol: %s", protocol_file); #endif @@ -598,9 +654,9 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil result = SubBruteFileResultMissingOrIncorrectBit; break; } else { - instance->protocol_info->bits = temp_data32; + instance->file_protocol_info->bits = temp_data32; #ifdef FURI_DEBUG - FURI_LOG_D(TAG, "Bit: %d", instance->protocol_info->bits); + FURI_LOG_D(TAG, "Bit: %d", instance->file_protocol_info->bits); #endif } @@ -626,7 +682,7 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil //result = SubBruteFileResultMissingOrIncorrectTe; //break; } else { - instance->protocol_info->te = temp_data32 != 0; + instance->file_protocol_info->te = temp_data32 != 0; } // Repeat @@ -634,12 +690,12 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil #ifdef FURI_DEBUG FURI_LOG_D(TAG, "Repeat: %ld", temp_data32); #endif - instance->protocol_info->repeat = (uint8_t)temp_data32; + instance->file_protocol_info->repeat = (uint8_t)temp_data32; } else { #ifdef FURI_DEBUG FURI_LOG_D(TAG, "Repeat: 3 (default)"); #endif - instance->protocol_info->repeat = 3; + instance->file_protocol_info->repeat = 3; } result = SubBruteFileResultOk; @@ -659,6 +715,8 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil #ifdef FURI_DEBUG FURI_LOG_D(TAG, "Loaded successfully"); #endif + } else { + subbrute_device_free_protocol_info(instance); } return result; @@ -742,7 +800,9 @@ const char* subbrute_device_error_get_desc(SubBruteFileResult error_id) { void subbrute_device_free_protocol_info(SubBruteDevice* instance) { furi_assert(instance); - - free(instance->protocol_info); instance->protocol_info = NULL; + if(instance->file_protocol_info) { + free(instance->file_protocol_info); + } + instance->file_protocol_info = NULL; } \ No newline at end of file diff --git a/applications/plugins/subbrute/subbrute_device.h b/applications/plugins/subbrute/subbrute_device.h index bdcaa11bd..e3b327b85 100644 --- a/applications/plugins/subbrute/subbrute_device.h +++ b/applications/plugins/subbrute/subbrute_device.h @@ -41,7 +41,8 @@ typedef enum { typedef void (*SubBruteDeviceWorkerCallback)(void* context, SubBruteDeviceState state); typedef struct { SubBruteDeviceState state; - SubBruteProtocol* protocol_info; + const SubBruteProtocol* protocol_info; + SubBruteProtocol* file_protocol_info; volatile bool worker_running; // Current step diff --git a/applications/plugins/subbrute/subbrute_i.h b/applications/plugins/subbrute/subbrute_i.h index 02f91f93d..b4264c0d6 100644 --- a/applications/plugins/subbrute/subbrute_i.h +++ b/applications/plugins/subbrute/subbrute_i.h @@ -47,7 +47,6 @@ struct SubBruteState { Popup* popup; Widget* widget; DialogsApp* dialogs; - Loading* loading; // Text store char text_store[SUBBRUTE_MAX_LEN_NAME]; diff --git a/applications/plugins/subbrute/subbrute_protocols.c b/applications/plugins/subbrute/subbrute_protocols.c index 3bedcb23c..462732937 100644 --- a/applications/plugins/subbrute/subbrute_protocols.c +++ b/applications/plugins/subbrute/subbrute_protocols.c @@ -1,41 +1,155 @@ #include "subbrute_protocols.h" -static const SubBruteProtocol subbrute_protocols[SubBruteAttackTotalCount] = { - [SubBruteAttackCAME12bit303] = - {303875000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, - [SubBruteAttackCAME12bit307] = - {307800000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, - [SubBruteAttackCAME12bit433] = - {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, - [SubBruteAttackCAME12bit868] = - {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, - [SubBruteAttackNICE12bit433] = - {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, - [SubBruteAttackNICE12bit868] = - {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, - [SubBruteAttackChamberlain9bit300] = - {300000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, - [SubBruteAttackChamberlain9bit315] = - {315000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, - [SubBruteAttackChamberlain9bit390] = - {390000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, - [SubBruteAttackLinear10bit300] = - {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, - [SubBruteAttackLinear10bit310] = - {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, - [SubBruteAttackLoadFile] = {0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, RAWFileProtocol}, -}; -//static const uint32_t subbrute_protocols[SubBruteAttackTotalCount][TotalProtocolFields] = { -// [SubBruteAttackCAME12bit307] = {307800000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, -// [SubBruteAttackCAME12bit433] = {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, -// [SubBruteAttackCAME12bit868] = {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, -// [SubBruteAttackNICE12bit433] = {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, -// [SubBruteAttackNICE12bit868] = {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, -// [SubBruteAttackChamberlain9bit300] = {300000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, -// [SubBruteAttackChamberlain9bit315] = {315000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, -// [SubBruteAttackChamberlain9bit390] = {390000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, -// [SubBruteAttackLinear10bit300] = {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, -// [SubBruteAttackLinear10bit310] = {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, +/** + * CAME 12bit 303MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_303 = { + .frequency = 303875000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 307MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_307 = { + .frequency = 307800000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * CAME 12bit 868MHz + */ +const SubBruteProtocol subbrute_protocol_came_12bit_868 = { + .frequency = 868350000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = CAMEFileProtocol}; + +/** + * NICE 12bit 433MHz + */ +const SubBruteProtocol subbrute_protocol_nice_12bit_433 = { + .frequency = 433920000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = NICEFileProtocol}; + +/** + * NICE 12bit 868MHz + */ +const SubBruteProtocol subbrute_protocol_nice_12bit_868 = { + .frequency = 868350000, + .bits = 12, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = NICEFileProtocol}; + +/** + * Chamberlain 9bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_300 = { + .frequency = 300000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 9bit 315MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_315 = { + .frequency = 315000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Chamberlain 9bit 390MHz + */ +const SubBruteProtocol subbrute_protocol_chamberlain_9bit_390 = { + .frequency = 390000000, + .bits = 9, + .te = 0, + .repeat = 3, + .preset = FuriHalSubGhzPresetOok650Async, + .file = ChamberlainFileProtocol}; + +/** + * Linear 10bit 300MHz + */ +const SubBruteProtocol subbrute_protocol_linear_10bit_300 = { + .frequency = 300000000, + .bits = 10, + .te = 0, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = LinearFileProtocol}; + +/** + * Linear 10bit 310MHz + */ +const SubBruteProtocol subbrute_protocol_linear_10bit_310 = { + .frequency = 310000000, + .bits = 10, + .te = 0, + .repeat = 5, + .preset = FuriHalSubGhzPresetOok650Async, + .file = LinearFileProtocol}; + +/** + * BF existing dump + */ +const SubBruteProtocol subbrute_protocol_load_file = + {0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, RAWFileProtocol}; + +//static const SubBruteProtocol subbrute_protocols[SubBruteAttackTotalCount] = { +// [SubBruteAttackCAME12bit303] = +// {303875000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, +// [SubBruteAttackCAME12bit307] = +// {307800000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, +// [SubBruteAttackCAME12bit433] = +// {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, +// [SubBruteAttackCAME12bit868] = +// {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, CAMEFileProtocol}, +// [SubBruteAttackNICE12bit433] = +// {433920000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, +// [SubBruteAttackNICE12bit868] = +// {868350000, 12, 0, 3, FuriHalSubGhzPresetOok650Async, NICEFileProtocol}, +// [SubBruteAttackChamberlain9bit300] = +// {300000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, +// [SubBruteAttackChamberlain9bit315] = +// {315000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, +// [SubBruteAttackChamberlain9bit390] = +// {390000000, 9, 0, 3, FuriHalSubGhzPresetOok650Async, ChamberlainFileProtocol}, +// [SubBruteAttackLinear10bit300] = +// {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, +// [SubBruteAttackLinear10bit310] = +// {300000000, 10, 0, 5, FuriHalSubGhzPresetOok650Async, LinearFileProtocol}, // [SubBruteAttackLoadFile] = {0, 0, 0, 3, FuriHalSubGhzPresetOok650Async, RAWFileProtocol}, //}; @@ -65,7 +179,21 @@ static const char* subbrute_protocol_presets[] = { [FuriHalSubGhzPresetGFSK9_99KbAsync] = "FuriHalSubGhzPresetGFSK9_99KbAsync", }; -static const char* subbrute_protocol_file_types[TotalFileProtocol] = { +const SubBruteProtocol* subbrute_protocol_registry[] = { + [SubBruteAttackCAME12bit303] = &subbrute_protocol_came_12bit_303, + [SubBruteAttackCAME12bit307] = &subbrute_protocol_came_12bit_307, + [SubBruteAttackCAME12bit433] = &subbrute_protocol_came_12bit_433, + [SubBruteAttackCAME12bit868] = &subbrute_protocol_came_12bit_868, + [SubBruteAttackNICE12bit433] = &subbrute_protocol_nice_12bit_433, + [SubBruteAttackNICE12bit868] = &subbrute_protocol_nice_12bit_868, + [SubBruteAttackChamberlain9bit300] = &subbrute_protocol_chamberlain_9bit_300, + [SubBruteAttackChamberlain9bit315] = &subbrute_protocol_chamberlain_9bit_315, + [SubBruteAttackChamberlain9bit390] = &subbrute_protocol_chamberlain_9bit_390, + [SubBruteAttackLinear10bit300] = &subbrute_protocol_linear_10bit_300, + [SubBruteAttackLinear10bit310] = &subbrute_protocol_linear_10bit_310, + [SubBruteAttackLoadFile] = &subbrute_protocol_load_file}; + +static const char* subbrute_protocol_file_types[] = { [CAMEFileProtocol] = "CAME", [NICEFileProtocol] = "Nice FLO", [ChamberlainFileProtocol] = "Cham_Code", @@ -73,32 +201,12 @@ static const char* subbrute_protocol_file_types[TotalFileProtocol] = { [PrincetonFileProtocol] = "Princeton", [RAWFileProtocol] = "RAW"}; -SubBruteProtocol* subbrute_protocol_alloc(void) { - SubBruteProtocol* protocol = malloc(sizeof(SubBruteProtocol)); - protocol->frequency = subbrute_protocols[SubBruteAttackLoadFile].frequency; - protocol->repeat = subbrute_protocols[SubBruteAttackLoadFile].repeat; - protocol->preset = subbrute_protocols[SubBruteAttackLoadFile].preset; - protocol->file = subbrute_protocols[SubBruteAttackLoadFile].file; - protocol->te = subbrute_protocols[SubBruteAttackLoadFile].te; - protocol->bits = subbrute_protocols[SubBruteAttackLoadFile].bits; - - return protocol; -} - const char* subbrute_protocol_name(SubBruteAttacks index) { return subbrute_protocol_names[index]; } -SubBruteProtocol* subbrute_protocol(SubBruteAttacks index) { - SubBruteProtocol* protocol = subbrute_protocol_alloc(); - protocol->frequency = subbrute_protocols[index].frequency; - protocol->repeat = subbrute_protocols[index].repeat; - protocol->preset = subbrute_protocols[index].preset; - protocol->file = subbrute_protocols[index].file; - protocol->te = subbrute_protocols[index].te; - protocol->bits = subbrute_protocols[index].bits; - - return protocol; +const SubBruteProtocol* subbrute_protocol(SubBruteAttacks index) { + return subbrute_protocol_registry[index]; } const char* subbrute_protocol_preset(FuriHalSubGhzPreset preset) { diff --git a/applications/plugins/subbrute/subbrute_protocols.h b/applications/plugins/subbrute/subbrute_protocols.h index 34502572c..f876ed756 100644 --- a/applications/plugins/subbrute/subbrute_protocols.h +++ b/applications/plugins/subbrute/subbrute_protocols.h @@ -49,8 +49,7 @@ typedef struct { SubBruteFileProtocol file; } SubBruteProtocol; -SubBruteProtocol* subbrute_protocol_alloc(void); -SubBruteProtocol* subbrute_protocol(SubBruteAttacks index); +const SubBruteProtocol* subbrute_protocol(SubBruteAttacks index); const char* subbrute_protocol_preset(FuriHalSubGhzPreset preset); const char* subbrute_protocol_file(SubBruteFileProtocol protocol); FuriHalSubGhzPreset subbrute_protocol_convert_preset(FuriString* preset_name); diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.c b/applications/plugins/subbrute/views/subbrute_attack_view.c index 197cf8239..63328d771 100644 --- a/applications/plugins/subbrute/views/subbrute_attack_view.c +++ b/applications/plugins/subbrute/views/subbrute_attack_view.c @@ -2,11 +2,11 @@ #include "../subbrute_i.h" #include "../subbrute_protocols.h" -#include "assets_icons.h" #include #include -#include -#include +#include +#include +#include #define TAG "SubBruteAttackView" @@ -291,8 +291,8 @@ void elements_button_top_left(Canvas* canvas, const char* str) { 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->width + icon_h_offset; - const uint8_t icon_v_offset = icon->height; // + const uint8_t icon_width_with_offset = icon_get_width(icon) + icon_h_offset; + const uint8_t icon_v_offset = icon_get_height(icon); // const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset + 1; const uint8_t x = 0; @@ -318,8 +318,8 @@ void elements_button_top_right(Canvas* canvas, const char* str) { 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->width + icon_h_offset; - const uint8_t icon_v_offset = icon->height; // + vertical_offset; + 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 + 1; const uint8_t x = canvas_width(canvas); @@ -332,7 +332,7 @@ void elements_button_top_right(Canvas* canvas, const char* str) { 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->width, y + icon_v_offset, icon); + canvas_draw_icon(canvas, x - horizontal_offset - icon_get_width(icon), y + icon_v_offset, icon); canvas_invert_color(canvas); } @@ -371,8 +371,8 @@ void subbrute_attack_view_draw(Canvas* canvas, void* context) { } // canvas_draw_icon_animation const uint8_t icon_h_offset = 0; - const uint8_t icon_width_with_offset = model->icon->icon->width + icon_h_offset; - const uint8_t icon_v_offset = model->icon->icon->height; // + vertical_offset; + const uint8_t icon_width_with_offset = icon_animation_get_width(model->icon) + icon_h_offset; + const uint8_t icon_v_offset = icon_animation_get_height(model->icon); // + vertical_offset; const uint8_t x = canvas_width(canvas); const uint8_t y = canvas_height(canvas); canvas_draw_icon_animation( diff --git a/applications/plugins/subbrute/views/subbrute_attack_view.h b/applications/plugins/subbrute/views/subbrute_attack_view.h index b10f8b17b..1e25379e2 100644 --- a/applications/plugins/subbrute/views/subbrute_attack_view.h +++ b/applications/plugins/subbrute/views/subbrute_attack_view.h @@ -2,11 +2,8 @@ #include "../subbrute_custom_event.h" #include -#include "assets_icons.h" #include #include -#include -#include typedef void (*SubBruteAttackViewCallback)(SubBruteCustomEvent event, void* context); typedef struct SubBruteAttackView SubBruteAttackView; diff --git a/applications/plugins/subbrute/views/subbrute_main_view.c b/applications/plugins/subbrute/views/subbrute_main_view.c index c3f56cae2..23095e17f 100644 --- a/applications/plugins/subbrute/views/subbrute_main_view.c +++ b/applications/plugins/subbrute/views/subbrute_main_view.c @@ -4,8 +4,8 @@ #include #include -#include "assets_icons.h" #include +#include #define STATUS_BAR_Y_SHIFT 14 #define TAG "SubBruteMainView" diff --git a/applications/plugins/subbrute/views/subbrute_main_view.h b/applications/plugins/subbrute/views/subbrute_main_view.h index 02eb3305a..361dbc22b 100644 --- a/applications/plugins/subbrute/views/subbrute_main_view.h +++ b/applications/plugins/subbrute/views/subbrute_main_view.h @@ -2,10 +2,8 @@ #include "../subbrute_custom_event.h" #include -#include "assets_icons.h" #include #include -#include typedef void (*SubBruteMainViewCallback)(SubBruteCustomEvent event, void* context); typedef struct SubBruteMainView SubBruteMainView;