[FL-3340] SubGhz: fix flipper crashes after exiting broadcast blocking message and crash cli (#2714)
This commit is contained in:
parent
a76c189ca5
commit
d09c59fd2f
@ -10,4 +10,5 @@ typedef enum {
|
|||||||
1, /** File parsing error, or wrong file structure, or missing required parameters. more accurate data can be obtained through the debug port */
|
1, /** File parsing error, or wrong file structure, or missing required parameters. more accurate data can be obtained through the debug port */
|
||||||
SubGhzErrorTypeOnlyRX =
|
SubGhzErrorTypeOnlyRX =
|
||||||
2, /** Transmission on this frequency is blocked by regional settings */
|
2, /** Transmission on this frequency is blocked by regional settings */
|
||||||
|
SubGhzErrorTypeParserOthers = 3, /** Error in protocol parameters description */
|
||||||
} SubGhzErrorType;
|
} SubGhzErrorType;
|
||||||
|
|||||||
@ -40,15 +40,26 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
|||||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonPress) {
|
} else if(event.event == SubGhzCustomEventSceneRpcButtonPress) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if((state == SubGhzRpcStateLoaded)) {
|
if((state == SubGhzRpcStateLoaded)) {
|
||||||
result = subghz_tx_start(subghz, subghz_txrx_get_fff_data(subghz->txrx));
|
switch(
|
||||||
state = SubGhzRpcStateTx;
|
subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
||||||
if(result) subghz_blink_start(subghz);
|
case SubGhzTxRxStartTxStateErrorOnlyRx:
|
||||||
}
|
rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX);
|
||||||
if(!result) {
|
rpc_system_app_set_error_text(
|
||||||
rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX);
|
subghz->rpc_ctx,
|
||||||
rpc_system_app_set_error_text(
|
"Transmission on this frequency is restricted in your region");
|
||||||
subghz->rpc_ctx,
|
break;
|
||||||
"Transmission on this frequency is restricted in your region");
|
case SubGhzTxRxStartTxStateErrorParserOthers:
|
||||||
|
rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeParserOthers);
|
||||||
|
rpc_system_app_set_error_text(
|
||||||
|
subghz->rpc_ctx, "Error in protocol parameters description");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: //if(SubGhzTxRxStartTxStateOk)
|
||||||
|
result = true;
|
||||||
|
subghz_blink_start(subghz);
|
||||||
|
state = SubGhzRpcStateTx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonPress, result);
|
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonPress, result);
|
||||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
||||||
@ -56,9 +67,9 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
|||||||
if(state == SubGhzRpcStateTx) {
|
if(state == SubGhzRpcStateTx) {
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_txrx_stop(subghz->txrx);
|
||||||
subghz_blink_stop(subghz);
|
subghz_blink_stop(subghz);
|
||||||
state = SubGhzRpcStateIdle;
|
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
state = SubGhzRpcStateIdle;
|
||||||
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonRelease, result);
|
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonRelease, result);
|
||||||
} else if(event.event == SubGhzCustomEventSceneRpcLoad) {
|
} else if(event.event == SubGhzCustomEventSceneRpcLoad) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
@ -95,7 +106,7 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
|||||||
void subghz_scene_rpc_on_exit(void* context) {
|
void subghz_scene_rpc_on_exit(void* context) {
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
SubGhzRpcState state = scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneRpc);
|
SubGhzRpcState state = scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneRpc);
|
||||||
if(state != SubGhzRpcStateIdle) {
|
if(state == SubGhzRpcStateTx) {
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_txrx_stop(subghz->txrx);
|
||||||
subghz_blink_stop(subghz);
|
subghz_blink_stop(subghz);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -176,16 +176,19 @@ void subghz_cli_command_tx(Cli* cli, FuriString* args, void* context) {
|
|||||||
|
|
||||||
furi_hal_power_suppress_charge_enter();
|
furi_hal_power_suppress_charge_enter();
|
||||||
|
|
||||||
furi_hal_subghz_start_async_tx(subghz_transmitter_yield, transmitter);
|
if(furi_hal_subghz_start_async_tx(subghz_transmitter_yield, transmitter)) {
|
||||||
|
while(!(furi_hal_subghz_is_async_tx_complete() || cli_cmd_interrupt_received(cli))) {
|
||||||
|
printf(".");
|
||||||
|
fflush(stdout);
|
||||||
|
furi_delay_ms(333);
|
||||||
|
}
|
||||||
|
furi_hal_subghz_stop_async_tx();
|
||||||
|
|
||||||
while(!(furi_hal_subghz_is_async_tx_complete() || cli_cmd_interrupt_received(cli))) {
|
} else {
|
||||||
printf(".");
|
printf("Transmission on this frequency is restricted in your region\r\n");
|
||||||
fflush(stdout);
|
|
||||||
furi_delay_ms(333);
|
|
||||||
}
|
}
|
||||||
furi_hal_subghz_stop_async_tx();
|
|
||||||
furi_hal_subghz_sleep();
|
|
||||||
|
|
||||||
|
furi_hal_subghz_sleep();
|
||||||
furi_hal_power_suppress_charge_exit();
|
furi_hal_power_suppress_charge_exit();
|
||||||
|
|
||||||
flipper_format_free(flipper_format);
|
flipper_format_free(flipper_format);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user