Fix external radio SPI handlers

This commit is contained in:
MX
2023-04-24 01:56:43 +03:00
parent 69530cd50f
commit 8cb3b67295
14 changed files with 51 additions and 16 deletions

View File

@@ -209,14 +209,16 @@ bool subghz_scene_ext_module_settings_on_event(void* context, SceneManagerEvent
UNUSED(event);
// Set selected radio module
furi_hal_subghz_set_radio_type(value_index_exm);
furi_hal_subghz_select_radio_type(value_index_exm);
furi_hal_subghz_init_radio_type(value_index_exm);
furi_hal_subghz_enable_ext_power();
// Check if module is present, if no -> show error
if(!furi_hal_subghz_check_radio()) {
value_index_exm = 0;
furi_hal_subghz_set_radio_type(SubGhzRadioInternal);
furi_hal_subghz_select_radio_type(SubGhzRadioInternal);
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
furi_string_set(subghz->error_str, "Please connect\nexternal radio");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub);
}

View File

@@ -84,7 +84,8 @@ bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) {
furi_hal_subghz_enable_ext_power();
if(!furi_hal_subghz_check_radio()) {
furi_hal_subghz_set_radio_type(SubGhzRadioInternal);
furi_hal_subghz_select_radio_type(SubGhzRadioInternal);
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
subghz->last_settings->external_module_enabled = false;
furi_string_set(subghz->error_str, "Please connect\nexternal radio");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowErrorSub);

View File

@@ -451,7 +451,8 @@ int32_t subghz_app(void* p) {
// Auto switch to internal radio if external radio is not available
if(!furi_hal_subghz_check_radio()) {
subghz->last_settings->external_module_enabled = false;
furi_hal_subghz_set_radio_type(SubGhzRadioInternal);
furi_hal_subghz_select_radio_type(SubGhzRadioInternal);
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
}
// Check argument and run corresponding scene
if(p && strlen(p)) {
@@ -507,6 +508,8 @@ int32_t subghz_app(void* p) {
furi_hal_power_suppress_charge_exit();
// Disable power for External CC1101 if it was enabled and module is connected
furi_hal_subghz_disable_ext_power();
// Reinit SPI handles for internal radio / nfc
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
subghz_free(subghz, alloc_for_tx);

View File

@@ -129,7 +129,8 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count
// Set selected radio module
if(instance->external_module_enabled) {
furi_hal_subghz_set_radio_type(SubGhzRadioExternal);
furi_hal_subghz_select_radio_type(SubGhzRadioExternal);
furi_hal_subghz_init_radio_type(SubGhzRadioExternal);
}
/*/} else {

View File

@@ -765,7 +765,8 @@ SubGHzRemote* subghz_remote_alloc(void) {
// Auto switch to internal radio if external radio is not available
furi_delay_ms(15);
if(!furi_hal_subghz_check_radio()) {
furi_hal_subghz_set_radio_type(SubGhzRadioInternal);
furi_hal_subghz_select_radio_type(SubGhzRadioInternal);
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
}
furi_hal_power_suppress_charge_enter();
@@ -792,6 +793,8 @@ void subghz_remote_free(SubGHzRemote* app, bool with_subghz) {
// Disable power for External CC1101 if it was enabled and module is connected
furi_hal_subghz_disable_ext_power();
// Reinit SPI handles for internal radio / nfc
furi_hal_subghz_init_radio_type(SubGhzRadioInternal);
furi_string_free(app->up_file);
furi_string_free(app->down_file);