mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-27 15:00:46 +00:00
enable hopping with detect raw, and trying to fix crashes
feature still very unstable, use at your own risk!!!
This commit is contained in:
parent
b6b33a70e9
commit
acbe7a10e2
4 changed files with 70 additions and 46 deletions
|
@ -167,6 +167,7 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
|
|||
subghz_sleep(subghz);
|
||||
}
|
||||
subghz->txrx->hopper_state = SubGhzHopperStateOFF;
|
||||
subghz_history_set_hopper_state(subghz->txrx->history, false);
|
||||
subghz->txrx->idx_menu_chosen = 0;
|
||||
subghz_receiver_set_rx_callback(subghz->txrx->receiver, NULL, subghz);
|
||||
|
||||
|
|
|
@ -189,64 +189,64 @@ static void subghz_scene_receiver_config_set_detect_raw(VariableItem* item) {
|
|||
SubGhz* subghz = variable_item_get_context(item);
|
||||
uint8_t index = variable_item_get_current_value_index(item);
|
||||
|
||||
if(subghz->txrx->hopper_state == 0) {
|
||||
variable_item_set_current_value_text(item, detect_raw_text[index]);
|
||||
//if(subghz->txrx->hopper_state == 0) {
|
||||
variable_item_set_current_value_text(item, detect_raw_text[index]);
|
||||
#ifdef SUBGHZ_SAVE_DETECT_RAW_SETTING
|
||||
subghz->last_settings->detect_raw = index;
|
||||
subghz->last_settings->detect_raw = index;
|
||||
|
||||
subghz_last_settings_set_detect_raw_values(subghz);
|
||||
subghz_last_settings_set_detect_raw_values(subghz);
|
||||
#else
|
||||
subghz_receiver_set_filter(subghz->txrx->receiver, detect_raw_value[index]);
|
||||
subghz_receiver_set_filter(subghz->txrx->receiver, detect_raw_value[index]);
|
||||
|
||||
subghz_protocol_decoder_raw_set_auto_mode(
|
||||
subghz_receiver_search_decoder_base_by_name(
|
||||
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
|
||||
(index == 1));
|
||||
subghz_protocol_decoder_raw_set_auto_mode(
|
||||
subghz_receiver_search_decoder_base_by_name(
|
||||
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
|
||||
(index == 1));
|
||||
#endif
|
||||
} else {
|
||||
/*} else {
|
||||
variable_item_set_current_value_index(item, 0);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) {
|
||||
SubGhz* subghz = variable_item_get_context(item);
|
||||
uint8_t index = variable_item_get_current_value_index(item);
|
||||
|
||||
if(subghz_receiver_get_filter(subghz->txrx->receiver) == SubGhzProtocolFlag_Decodable) {
|
||||
variable_item_set_current_value_text(item, hopping_text[index]);
|
||||
if(hopping_value[index] == SubGhzHopperStateOFF) {
|
||||
char text_buf[10] = {0};
|
||||
snprintf(
|
||||
text_buf,
|
||||
sizeof(text_buf),
|
||||
"%lu.%02lu",
|
||||
subghz_setting_get_default_frequency(subghz->setting) / 1000000,
|
||||
(subghz_setting_get_default_frequency(subghz->setting) % 1000000) / 10000);
|
||||
variable_item_set_current_value_text(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
text_buf);
|
||||
subghz->txrx->preset->frequency =
|
||||
subghz_setting_get_default_frequency(subghz->setting);
|
||||
variable_item_set_current_value_index(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
subghz_setting_get_frequency_default_index(subghz->setting));
|
||||
} else {
|
||||
variable_item_set_current_value_text(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
" -----");
|
||||
variable_item_set_current_value_index(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
subghz_setting_get_frequency_default_index(subghz->setting));
|
||||
}
|
||||
|
||||
subghz->txrx->hopper_state = hopping_value[index];
|
||||
//if(subghz_receiver_get_filter(subghz->txrx->receiver) == SubGhzProtocolFlag_Decodable) {
|
||||
variable_item_set_current_value_text(item, hopping_text[index]);
|
||||
if(hopping_value[index] == SubGhzHopperStateOFF) {
|
||||
char text_buf[10] = {0};
|
||||
snprintf(
|
||||
text_buf,
|
||||
sizeof(text_buf),
|
||||
"%lu.%02lu",
|
||||
subghz_setting_get_default_frequency(subghz->setting) / 1000000,
|
||||
(subghz_setting_get_default_frequency(subghz->setting) % 1000000) / 10000);
|
||||
variable_item_set_current_value_text(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
text_buf);
|
||||
subghz->txrx->preset->frequency = subghz_setting_get_default_frequency(subghz->setting);
|
||||
variable_item_set_current_value_index(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
subghz_setting_get_frequency_default_index(subghz->setting));
|
||||
} else {
|
||||
variable_item_set_current_value_index(item, 0);
|
||||
variable_item_set_current_value_text(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
" -----");
|
||||
variable_item_set_current_value_index(
|
||||
(VariableItem*)scene_manager_get_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||
subghz_setting_get_frequency_default_index(subghz->setting));
|
||||
}
|
||||
|
||||
subghz->txrx->hopper_state = hopping_value[index];
|
||||
subghz_history_set_hopper_state(subghz->txrx->history, (index == 1));
|
||||
/*} else {
|
||||
variable_item_set_current_value_index(item, 0);
|
||||
}*/
|
||||
}
|
||||
|
||||
static void subghz_scene_receiver_config_var_list_enter_callback(void* context, uint32_t index) {
|
||||
|
|
|
@ -41,6 +41,7 @@ struct SubGhzHistory {
|
|||
uint8_t code_last_hash_data;
|
||||
FuriString* tmp_string;
|
||||
bool write_tmp_files;
|
||||
bool is_hopper_running;
|
||||
Storage* storage;
|
||||
SubGhzHistoryStruct* history;
|
||||
};
|
||||
|
@ -134,6 +135,8 @@ SubGhzHistory* subghz_history_alloc(void) {
|
|||
instance->storage = furi_record_open(RECORD_STORAGE);
|
||||
instance->write_tmp_files = subghz_history_check_sdcard(instance);
|
||||
|
||||
instance->is_hopper_running = false;
|
||||
|
||||
if(!instance->write_tmp_files) {
|
||||
FURI_LOG_E(TAG, "Unstable work! Cannot use SD Card!");
|
||||
}
|
||||
|
@ -209,6 +212,12 @@ void subghz_history_reset(SubGhzHistory* instance) {
|
|||
instance->code_last_hash_data = 0;
|
||||
}
|
||||
|
||||
void subghz_history_set_hopper_state(SubGhzHistory* instance, bool hopper_state) {
|
||||
furi_assert(instance);
|
||||
|
||||
instance->is_hopper_running = hopper_state;
|
||||
}
|
||||
|
||||
uint16_t subghz_history_get_item(SubGhzHistory* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->last_index_write;
|
||||
|
@ -354,16 +363,23 @@ bool subghz_history_add_to_history(
|
|||
item->protocol_name, "%s", furi_string_get_cstr(instance->tmp_string));
|
||||
}
|
||||
if(!strcmp(furi_string_get_cstr(instance->tmp_string), "RAW")) {
|
||||
// Check if hopper enabled we need to add little delay
|
||||
if(instance->is_hopper_running) {
|
||||
furi_delay_ms(40);
|
||||
}
|
||||
// Enable writing temp files to micro sd
|
||||
tmp_file_for_raw = true;
|
||||
// Write display name
|
||||
furi_string_printf(
|
||||
item->item_str,
|
||||
"RAW %03ld.%02ld",
|
||||
preset->frequency / 1000000 % 1000,
|
||||
preset->frequency / 10000 % 100);
|
||||
|
||||
// Rewind
|
||||
if(!flipper_format_rewind(item->flipper_string)) {
|
||||
FURI_LOG_E(TAG, "Rewind error");
|
||||
}
|
||||
tmp_file_for_raw = true;
|
||||
|
||||
break;
|
||||
} else if(!strcmp(furi_string_get_cstr(instance->tmp_string), "KeeLoq")) {
|
||||
furi_string_set(instance->tmp_string, "KL ");
|
||||
|
|
|
@ -103,3 +103,10 @@ bool subghz_history_add_to_history(
|
|||
* @return SubGhzProtocolCommonLoad*
|
||||
*/
|
||||
FlipperFormat* subghz_history_get_raw_data(SubGhzHistory* instance, uint16_t idx);
|
||||
|
||||
/** Set hopper state for internal usage in history
|
||||
*
|
||||
* @param instance - SubGhzHistory instance
|
||||
* @param hopper_state - bool is hopper running?
|
||||
*/
|
||||
void subghz_history_set_hopper_state(SubGhzHistory* instance, bool hopper_state);
|
||||
|
|
Loading…
Reference in a new issue