mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-12-18 00:33:09 +00:00
fix send with dump file
This commit is contained in:
parent
eed8cd1824
commit
b65a2e9c94
6 changed files with 111 additions and 110 deletions
|
@ -225,11 +225,11 @@ bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t ste
|
|||
FlipperFormat* flipper_format = flipper_format_string_alloc();
|
||||
Stream* stream = flipper_format_get_raw_stream(flipper_format);
|
||||
|
||||
FuriString* payload = NULL;
|
||||
stream_clean(stream);
|
||||
|
||||
if(instance->attack == SubBruteAttackLoadFile) {
|
||||
payload = subbrute_protocol_file_payload(
|
||||
subbrute_protocol_file_payload(
|
||||
stream,
|
||||
step,
|
||||
instance->bits,
|
||||
instance->te,
|
||||
|
@ -237,25 +237,25 @@ bool subbrute_worker_transmit_current_key(SubBruteWorker* instance, uint64_t ste
|
|||
instance->load_index,
|
||||
instance->file_key);
|
||||
} else {
|
||||
payload = subbrute_protocol_default_payload(
|
||||
step, instance->bits, instance->te, instance->repeat);
|
||||
subbrute_protocol_default_payload(
|
||||
stream, step, instance->bits, instance->te, instance->repeat);
|
||||
}
|
||||
|
||||
size_t written = stream_write_string(stream, payload);
|
||||
if(written <= 0) {
|
||||
FURI_LOG_W(TAG, "Error creating packet! EXIT");
|
||||
result = false;
|
||||
} else {
|
||||
// size_t written = stream_write_string(stream, payload);
|
||||
// if(written <= 0) {
|
||||
// FURI_LOG_W(TAG, "Error creating packet! EXIT");
|
||||
// result = false;
|
||||
// } else {
|
||||
subbrute_worker_subghz_transmit(instance, flipper_format);
|
||||
|
||||
result = true;
|
||||
#if FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "Manual transmit done");
|
||||
#endif
|
||||
}
|
||||
// }
|
||||
|
||||
flipper_format_free(flipper_format);
|
||||
furi_string_free(payload);
|
||||
// furi_string_free(payload);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -353,11 +353,10 @@ int32_t subbrute_worker_thread(void* context) {
|
|||
Stream* stream = flipper_format_get_raw_stream(flipper_format);
|
||||
|
||||
while(instance->worker_running) {
|
||||
FuriString* payload = NULL;
|
||||
stream_clean(stream);
|
||||
|
||||
if(instance->attack == SubBruteAttackLoadFile) {
|
||||
payload = subbrute_protocol_file_payload(
|
||||
subbrute_protocol_file_payload(
|
||||
stream,
|
||||
instance->step,
|
||||
instance->bits,
|
||||
instance->te,
|
||||
|
@ -365,22 +364,22 @@ int32_t subbrute_worker_thread(void* context) {
|
|||
instance->load_index,
|
||||
instance->file_key);
|
||||
} else {
|
||||
payload = subbrute_protocol_default_payload(
|
||||
instance->step, instance->bits, instance->te, instance->repeat);
|
||||
subbrute_protocol_default_payload(
|
||||
stream, instance->step, instance->bits, instance->te, instance->repeat);
|
||||
}
|
||||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_I(TAG, "Payload: %s", furi_string_get_cstr(payload));
|
||||
furi_delay_ms(SUBBRUTE_MANUAL_TRANSMIT_INTERVAL / 4);
|
||||
//FURI_LOG_I(TAG, "Payload: %s", furi_string_get_cstr(payload));
|
||||
//furi_delay_ms(SUBBRUTE_MANUAL_TRANSMIT_INTERVAL / 4);
|
||||
#endif
|
||||
|
||||
size_t written = stream_write_string(stream, payload);
|
||||
if(written <= 0) {
|
||||
FURI_LOG_W(TAG, "Error creating packet! BREAK");
|
||||
instance->worker_running = false;
|
||||
local_state = SubBruteWorkerStateIDLE;
|
||||
furi_string_free(payload);
|
||||
break;
|
||||
}
|
||||
// size_t written = stream_write_stream_write_string(stream, payload);
|
||||
// if(written <= 0) {
|
||||
// FURI_LOG_W(TAG, "Error creating packet! BREAK");
|
||||
// instance->worker_running = false;
|
||||
// local_state = SubBruteWorkerStateIDLE;
|
||||
// furi_string_free(payload);
|
||||
// break;
|
||||
// }
|
||||
|
||||
subbrute_worker_subghz_transmit(instance, flipper_format);
|
||||
|
||||
|
@ -389,12 +388,12 @@ int32_t subbrute_worker_thread(void* context) {
|
|||
FURI_LOG_I(TAG, "Worker finished to end");
|
||||
#endif
|
||||
local_state = SubBruteWorkerStateFinished;
|
||||
furi_string_free(payload);
|
||||
// furi_string_free(payload);
|
||||
break;
|
||||
}
|
||||
instance->step++;
|
||||
|
||||
furi_string_free(payload);
|
||||
// furi_string_free(payload);
|
||||
furi_delay_ms(SUBBRUTE_TX_TIMEOUT);
|
||||
}
|
||||
|
||||
|
|
|
@ -46,9 +46,13 @@ void subbrute_scene_run_attack_on_enter(void* context) {
|
|||
instance->worker, subbrute_scene_run_attack_device_state_changed, instance);
|
||||
|
||||
if(!subbrute_worker_is_running(instance->worker)) {
|
||||
subbrute_worker_set_step(instance->worker, instance->device->key_index);
|
||||
if(!subbrute_worker_start(instance->worker)) {
|
||||
view_dispatcher_send_custom_event(
|
||||
instance->view_dispatcher, SubBruteCustomEventTypeError);
|
||||
} else {
|
||||
notification_message(instance->notifications, &sequence_single_vibro);
|
||||
notification_message(instance->notifications, &sequence_blink_start_yellow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -60,11 +64,14 @@ bool subbrute_scene_run_attack_on_event(void* context, SceneManagerEvent event)
|
|||
bool consumed = false;
|
||||
|
||||
if(event.type == SceneManagerEventTypeCustom) {
|
||||
subbrute_attack_view_set_current_step(view, subbrute_worker_get_step(instance->worker));
|
||||
uint64_t step = subbrute_worker_get_step(instance->worker);
|
||||
instance->device->key_index = step;
|
||||
subbrute_attack_view_set_current_step(view, step);
|
||||
|
||||
if(event.event == SubBruteCustomEventTypeTransmitFinished) {
|
||||
notification_message(instance->notifications, &sequence_display_backlight_on);
|
||||
notification_message(instance->notifications, &sequence_single_vibro);
|
||||
notification_message(instance->notifications, &sequence_double_vibro);
|
||||
|
||||
|
||||
scene_manager_next_scene(instance->scene_manager, SubBruteSceneSetupAttack);
|
||||
} else if(
|
||||
|
@ -84,7 +91,9 @@ bool subbrute_scene_run_attack_on_event(void* context, SceneManagerEvent event)
|
|||
}
|
||||
consumed = true;
|
||||
} else if(event.type == SceneManagerEventTypeTick) {
|
||||
subbrute_attack_view_set_current_step(view, subbrute_worker_get_step(instance->worker));
|
||||
uint64_t step = subbrute_worker_get_step(instance->worker);
|
||||
instance->device->key_index = step;
|
||||
subbrute_attack_view_set_current_step(view, step);
|
||||
|
||||
consumed = true;
|
||||
}
|
||||
|
|
|
@ -19,8 +19,11 @@ SubBruteDevice* subbrute_device_alloc() {
|
|||
instance->receiver = NULL;
|
||||
instance->environment = subghz_environment_alloc();
|
||||
|
||||
#ifdef FURI_DEBUG
|
||||
subbrute_device_attack_set_default_values(instance, SubBruteAttackLoadFile);
|
||||
#else
|
||||
subbrute_device_attack_set_default_values(instance, SubBruteAttackCAME12bit433);
|
||||
|
||||
#endif
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
@ -61,7 +64,7 @@ uint64_t subbrute_device_add_step(SubBruteDevice* instance, int8_t step) {
|
|||
} else if(instance->key_index == 0) {
|
||||
instance->key_index = instance->max_value;
|
||||
} else {
|
||||
uint64_t value = ((instance->key_index - step) + instance->max_value);
|
||||
uint64_t value = ((instance->key_index + step) + instance->max_value);
|
||||
if(value == instance->max_value) {
|
||||
instance->key_index = value;
|
||||
} else {
|
||||
|
@ -82,16 +85,15 @@ bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_na
|
|||
|
||||
Storage* storage = furi_record_open(RECORD_STORAGE);
|
||||
FlipperFormat* file = flipper_format_file_alloc(storage);
|
||||
FuriString* file_content = furi_string_alloc();
|
||||
|
||||
bool result = false;
|
||||
do {
|
||||
if(!flipper_format_file_open_always(file, dev_file_name)) {
|
||||
break;
|
||||
}
|
||||
|
||||
Stream* stream = flipper_format_get_raw_stream(file);
|
||||
if(instance->attack == SubBruteAttackLoadFile) {
|
||||
file_content = subbrute_protocol_file_generate_file(
|
||||
subbrute_protocol_file_generate_file(
|
||||
stream,
|
||||
instance->file_protocol_info->frequency,
|
||||
instance->file_protocol_info->preset,
|
||||
instance->file_protocol_info->file,
|
||||
|
@ -102,7 +104,8 @@ bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_na
|
|||
instance->load_index,
|
||||
instance->file_key);
|
||||
} else {
|
||||
file_content = subbrute_protocol_default_generate_file(
|
||||
subbrute_protocol_default_generate_file(
|
||||
stream,
|
||||
instance->protocol_info->frequency,
|
||||
instance->protocol_info->preset,
|
||||
instance->protocol_info->file,
|
||||
|
@ -112,14 +115,6 @@ bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_na
|
|||
instance->protocol_info->repeat);
|
||||
}
|
||||
|
||||
Stream* stream = flipper_format_get_raw_stream(file);
|
||||
stream_clean(stream);
|
||||
size_t written = stream_write_string(stream, file_content);
|
||||
if(written <= 0) {
|
||||
FURI_LOG_E(TAG, "create_packet_parsed failed!");
|
||||
break;
|
||||
}
|
||||
|
||||
result = true;
|
||||
} while(false);
|
||||
|
||||
|
@ -130,7 +125,6 @@ bool subbrute_device_save_file(SubBruteDevice* instance, const char* dev_file_na
|
|||
flipper_format_file_close(file);
|
||||
flipper_format_free(file);
|
||||
furi_record_close(RECORD_STORAGE);
|
||||
furi_string_free(file_content);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -342,7 +336,7 @@ uint8_t subbrute_device_load_from_file(SubBruteDevice* instance, const char* fil
|
|||
//result = SubBruteFileResultMissingOrIncorrectTe;
|
||||
//break;
|
||||
} else {
|
||||
instance->file_protocol_info->te = temp_data32 != 0;
|
||||
instance->file_protocol_info->te = temp_data32 != 0 ? temp_data32 : 0;
|
||||
}
|
||||
|
||||
// Repeat
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "subbrute_protocols.h"
|
||||
#include <string.h>
|
||||
|
||||
#define TAG "SubBruteProtocols"
|
||||
|
||||
|
@ -249,8 +250,12 @@ SubBruteFileProtocol subbrute_protocol_file_protocol_name(FuriString* name) {
|
|||
return RAWFileProtocol;
|
||||
}
|
||||
|
||||
FuriString*
|
||||
subbrute_protocol_default_payload(uint64_t step, uint8_t bits, uint8_t te, uint8_t repeat) {
|
||||
void subbrute_protocol_default_payload(
|
||||
Stream* stream,
|
||||
uint64_t step,
|
||||
uint8_t bits,
|
||||
uint8_t te,
|
||||
uint8_t repeat) {
|
||||
FuriString* candidate = furi_string_alloc_set_str(" ");
|
||||
|
||||
FuriString* buffer = furi_string_alloc_printf("%16llX", step);
|
||||
|
@ -270,25 +275,25 @@ FuriString*
|
|||
#ifdef FURI_DEBUG
|
||||
//FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step);
|
||||
#endif
|
||||
FuriString* result;
|
||||
|
||||
stream_clean(stream);
|
||||
if(te) {
|
||||
result = furi_string_alloc_printf(
|
||||
subbrute_key_small_with_tail, bits, furi_string_get_cstr(candidate), te, repeat);
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_small_with_tail,
|
||||
bits,
|
||||
furi_string_get_cstr(candidate),
|
||||
te,
|
||||
repeat);
|
||||
} else {
|
||||
result = furi_string_alloc_printf(
|
||||
subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat);
|
||||
stream_write_format(
|
||||
stream, subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat);
|
||||
}
|
||||
#ifdef FURI_DEBUG
|
||||
//FURI_LOG_D(TAG, "result: %s", furi_string_get_cstr(result));
|
||||
#endif
|
||||
|
||||
furi_string_free(candidate);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
FuriString* subbrute_protocol_file_payload(
|
||||
void subbrute_protocol_file_payload(
|
||||
Stream* stream,
|
||||
uint64_t step,
|
||||
uint8_t bits,
|
||||
uint8_t te,
|
||||
|
@ -296,9 +301,6 @@ FuriString* subbrute_protocol_file_payload(
|
|||
uint8_t load_index,
|
||||
const char* file_key) {
|
||||
FuriString* candidate = furi_string_alloc();
|
||||
if(step >= sizeof(file_key)) {
|
||||
return false;
|
||||
}
|
||||
char subbrute_payload_byte[4];
|
||||
furi_string_set_str(candidate, file_key);
|
||||
snprintf(subbrute_payload_byte, 4, "%02X ", (uint8_t)step);
|
||||
|
@ -307,26 +309,26 @@ FuriString* subbrute_protocol_file_payload(
|
|||
#ifdef FURI_DEBUG
|
||||
//FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step);
|
||||
#endif
|
||||
FuriString* result;
|
||||
stream_clean(stream);
|
||||
|
||||
if(te) {
|
||||
result = furi_string_alloc_printf(
|
||||
subbrute_key_small_with_tail, bits, furi_string_get_cstr(candidate), te, repeat);
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_small_with_tail,
|
||||
bits,
|
||||
furi_string_get_cstr(candidate),
|
||||
te,
|
||||
repeat);
|
||||
} else {
|
||||
result = furi_string_alloc_printf(
|
||||
subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat);
|
||||
stream_write_format(
|
||||
stream, subbrute_key_small_no_tail, bits, furi_string_get_cstr(candidate), repeat);
|
||||
}
|
||||
|
||||
#ifdef FURI_DEBUG
|
||||
//FURI_LOG_D(TAG, "result: %s", furi_string_get_cstr(result));
|
||||
#endif
|
||||
|
||||
furi_string_free(candidate);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
FuriString* subbrute_protocol_default_generate_file(
|
||||
void subbrute_protocol_default_generate_file(
|
||||
Stream* stream,
|
||||
uint32_t frequency,
|
||||
FuriHalSubGhzPreset preset,
|
||||
SubBruteFileProtocol file,
|
||||
|
@ -353,10 +355,11 @@ FuriString* subbrute_protocol_default_generate_file(
|
|||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step);
|
||||
#endif
|
||||
FuriString* result;
|
||||
stream_clean(stream);
|
||||
|
||||
if(te) {
|
||||
result = furi_string_alloc_printf(
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_file_start_with_tail,
|
||||
frequency,
|
||||
preset,
|
||||
|
@ -366,7 +369,8 @@ FuriString* subbrute_protocol_default_generate_file(
|
|||
te,
|
||||
repeat);
|
||||
} else {
|
||||
result = furi_string_alloc_printf(
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_file_start_no_tail,
|
||||
frequency,
|
||||
preset,
|
||||
|
@ -375,16 +379,12 @@ FuriString* subbrute_protocol_default_generate_file(
|
|||
furi_string_get_cstr(candidate),
|
||||
repeat);
|
||||
}
|
||||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "result: %s", furi_string_get_cstr(result));
|
||||
#endif
|
||||
|
||||
furi_string_free(candidate);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
FuriString* subbrute_protocol_file_generate_file(
|
||||
void subbrute_protocol_file_generate_file(
|
||||
Stream* stream,
|
||||
uint32_t frequency,
|
||||
FuriHalSubGhzPreset preset,
|
||||
SubBruteFileProtocol file,
|
||||
|
@ -395,9 +395,6 @@ FuriString* subbrute_protocol_file_generate_file(
|
|||
uint8_t load_index,
|
||||
const char* file_key) {
|
||||
FuriString* candidate = furi_string_alloc();
|
||||
if(step >= sizeof(file_key)) {
|
||||
return false;
|
||||
}
|
||||
char subbrute_payload_byte[4];
|
||||
furi_string_set_str(candidate, file_key);
|
||||
snprintf(subbrute_payload_byte, 4, "%02X ", (uint8_t)step);
|
||||
|
@ -406,10 +403,10 @@ FuriString* subbrute_protocol_file_generate_file(
|
|||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "candidate: %s, step: %lld", furi_string_get_cstr(candidate), step);
|
||||
#endif
|
||||
FuriString* result;
|
||||
|
||||
stream_clean(stream);
|
||||
if(te) {
|
||||
result = furi_string_alloc_printf(
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_file_start_with_tail,
|
||||
frequency,
|
||||
preset,
|
||||
|
@ -419,7 +416,8 @@ FuriString* subbrute_protocol_file_generate_file(
|
|||
te,
|
||||
repeat);
|
||||
} else {
|
||||
result = furi_string_alloc_printf(
|
||||
stream_write_format(
|
||||
stream,
|
||||
subbrute_key_file_start_no_tail,
|
||||
frequency,
|
||||
preset,
|
||||
|
@ -429,13 +427,7 @@ FuriString* subbrute_protocol_file_generate_file(
|
|||
repeat);
|
||||
}
|
||||
|
||||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "result: %s", furi_string_get_cstr(result));
|
||||
#endif
|
||||
|
||||
furi_string_free(candidate);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
uint64_t subbrute_protocol_calc_max_value(SubBruteAttacks attack_type, uint8_t bits) {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <furi.h>
|
||||
#include <furi_hal_subghz.h>
|
||||
#include <core/string.h>
|
||||
|
||||
#include <toolbox/stream/stream.h>
|
||||
//typedef enum {
|
||||
// FrequencyProtocolField,
|
||||
// BitsProtocolField,
|
||||
|
@ -56,16 +56,22 @@ FuriHalSubGhzPreset subbrute_protocol_convert_preset(FuriString* preset_name);
|
|||
SubBruteFileProtocol subbrute_protocol_file_protocol_name(FuriString* name);
|
||||
const char* subbrute_protocol_name(SubBruteAttacks index);
|
||||
|
||||
FuriString*
|
||||
subbrute_protocol_default_payload(uint64_t step, uint8_t bits, uint8_t te, uint8_t repeat);
|
||||
FuriString* subbrute_protocol_file_payload(
|
||||
void subbrute_protocol_default_payload(
|
||||
Stream* stream,
|
||||
uint64_t step,
|
||||
uint8_t bits,
|
||||
uint8_t te,
|
||||
uint8_t repeat);
|
||||
void subbrute_protocol_file_payload(
|
||||
Stream* stream,
|
||||
uint64_t step,
|
||||
uint8_t bits,
|
||||
uint8_t te,
|
||||
uint8_t repeat,
|
||||
uint8_t load_index,
|
||||
const char* file_key);
|
||||
FuriString* subbrute_protocol_default_generate_file(
|
||||
void subbrute_protocol_default_generate_file(
|
||||
Stream* stream,
|
||||
uint32_t frequency,
|
||||
FuriHalSubGhzPreset preset,
|
||||
SubBruteFileProtocol file,
|
||||
|
@ -73,7 +79,8 @@ FuriString* subbrute_protocol_default_generate_file(
|
|||
uint8_t bits,
|
||||
uint8_t te,
|
||||
uint8_t repeat);
|
||||
FuriString* subbrute_protocol_file_generate_file(
|
||||
void subbrute_protocol_file_generate_file(
|
||||
Stream* stream,
|
||||
uint32_t frequency,
|
||||
FuriHalSubGhzPreset preset,
|
||||
SubBruteFileProtocol file,
|
||||
|
|
|
@ -91,7 +91,7 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
|
|||
|
||||
if(m->is_select_byte) {
|
||||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "key_field: %s", m->key_field);
|
||||
//FURI_LOG_D(TAG, "key_field: %s", m->key_field);
|
||||
#endif
|
||||
char msg_index[18];
|
||||
snprintf(msg_index, sizeof(msg_index), "Field index : %d", m->index);
|
||||
|
@ -118,7 +118,7 @@ void subbrute_main_view_draw(Canvas* canvas, SubBruteMainViewModel* model) {
|
|||
const uint8_t item_height = 16;
|
||||
|
||||
#ifdef FURI_DEBUG
|
||||
FURI_LOG_D(TAG, "window_position: %d, index: %d", model->window_position, m->index);
|
||||
//FURI_LOG_D(TAG, "window_position: %d, index: %d", model->window_position, m->index);
|
||||
#endif
|
||||
for(uint8_t position = 0; position < SubBruteAttackTotalCount; ++position) {
|
||||
uint8_t item_position = position - model->window_position;
|
||||
|
|
Loading…
Reference in a new issue