mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-30 04:19:59 -07:00
Changed protocol info
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "../subbrute_i.h"
|
||||
#include "subbrute_scene.h"
|
||||
#include <core/string.h>
|
||||
#include <lib/toolbox/random_name.h>
|
||||
|
||||
#define TAG "SubBruteSceneSaveFile"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
typedef enum {
|
||||
// Reserve first 100 events for button types and indexes, starting from 0
|
||||
SubBruteCustomEventTypeReserved = 100,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -47,7 +47,6 @@ struct SubBruteState {
|
||||
Popup* popup;
|
||||
Widget* widget;
|
||||
DialogsApp* dialogs;
|
||||
Loading* loading;
|
||||
|
||||
// Text store
|
||||
char text_store[SUBBRUTE_MAX_LEN_NAME];
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
#include "../subbrute_i.h"
|
||||
#include "../subbrute_protocols.h"
|
||||
|
||||
#include "assets_icons.h"
|
||||
#include <input/input.h>
|
||||
#include <gui/elements.h>
|
||||
#include <gui/icon_i.h>
|
||||
#include <gui/icon_animation_i.h>
|
||||
#include <gui/icon.h>
|
||||
#include <gui/icon_animation.h>
|
||||
#include <assets_icons.h>
|
||||
|
||||
#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(
|
||||
|
||||
@@ -2,11 +2,8 @@
|
||||
|
||||
#include "../subbrute_custom_event.h"
|
||||
#include <gui/view.h>
|
||||
#include "assets_icons.h"
|
||||
#include <input/input.h>
|
||||
#include <gui/elements.h>
|
||||
#include <gui/icon.h>
|
||||
#include <subghz/types.h>
|
||||
|
||||
typedef void (*SubBruteAttackViewCallback)(SubBruteCustomEvent event, void* context);
|
||||
typedef struct SubBruteAttackView SubBruteAttackView;
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
#include <input/input.h>
|
||||
#include <gui/elements.h>
|
||||
#include "assets_icons.h"
|
||||
#include <gui/icon.h>
|
||||
#include <assets_icons.h>
|
||||
|
||||
#define STATUS_BAR_Y_SHIFT 14
|
||||
#define TAG "SubBruteMainView"
|
||||
|
||||
@@ -2,10 +2,8 @@
|
||||
|
||||
#include "../subbrute_custom_event.h"
|
||||
#include <gui/view.h>
|
||||
#include "assets_icons.h"
|
||||
#include <input/input.h>
|
||||
#include <gui/elements.h>
|
||||
#include <gui/icon.h>
|
||||
|
||||
typedef void (*SubBruteMainViewCallback)(SubBruteCustomEvent event, void* context);
|
||||
typedef struct SubBruteMainView SubBruteMainView;
|
||||
|
||||
Reference in New Issue
Block a user