mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-22 05:14:46 -07:00
Merge pull request #958 from Dmitry422/dev
subghz rpc refactor to "send signal by one click"
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
#include "../subghz_i.h"
|
||||
|
||||
#include <lib/subghz/blocks/custom_btn.h>
|
||||
#include <lib/subghz/blocks/generic.h>
|
||||
#include "applications/main/subghz/helpers/subghz_txrx_i.h"
|
||||
|
||||
typedef enum {
|
||||
SubGhzRpcStateIdle,
|
||||
@@ -52,9 +54,13 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonPress) {
|
||||
bool result = false;
|
||||
if(state == SubGhzRpcStateLoaded) {
|
||||
// START endless TX until user release button
|
||||
// variable used in protocol yield for endless TX
|
||||
subghz_block_generic_global.endless_tx = true;
|
||||
switch(
|
||||
subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
||||
case SubGhzTxRxStartTxStateErrorOnlyRx:
|
||||
subghz_block_generic_global.endless_tx = false;
|
||||
rpc_system_app_set_error_code(
|
||||
subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock);
|
||||
rpc_system_app_set_error_text(
|
||||
@@ -62,6 +68,7 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
||||
"Transmission on this frequency is restricted in your settings");
|
||||
break;
|
||||
case SubGhzTxRxStartTxStateErrorParserOthers:
|
||||
subghz_block_generic_global.endless_tx = false;
|
||||
rpc_system_app_set_error_code(
|
||||
subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse);
|
||||
rpc_system_app_set_error_text(
|
||||
@@ -80,50 +87,53 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
||||
bool result = false;
|
||||
if(state == SubGhzRpcStateTx) {
|
||||
subghz_txrx_stop(subghz->txrx);
|
||||
subghz_blink_stop(subghz);
|
||||
// user release button
|
||||
// set endless TX to OFF and switch off TX in section event.type == SceneManagerEventTypeTick
|
||||
subghz_block_generic_global.endless_tx = false;
|
||||
result = true;
|
||||
}
|
||||
scene_manager_set_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||
// scene_manager_set_scene_state(
|
||||
// subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonPressRelease) {
|
||||
bool result = false;
|
||||
if(state == SubGhzRpcStateLoaded) {
|
||||
switch(
|
||||
subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
||||
case SubGhzTxRxStartTxStateErrorOnlyRx:
|
||||
rpc_system_app_set_error_code(
|
||||
subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock);
|
||||
rpc_system_app_set_error_text(
|
||||
subghz->rpc_ctx,
|
||||
"Transmission on this frequency is restricted in your region");
|
||||
break;
|
||||
case SubGhzTxRxStartTxStateErrorParserOthers:
|
||||
rpc_system_app_set_error_code(
|
||||
subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse);
|
||||
rpc_system_app_set_error_text(
|
||||
subghz->rpc_ctx, "Error in protocol parameters description");
|
||||
break;
|
||||
|
||||
default: //if(SubGhzTxRxStartTxStateOk)
|
||||
result = true;
|
||||
subghz_blink_start(subghz);
|
||||
scene_manager_set_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateTx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// USELESS PART
|
||||
// } else if(event.event == SubGhzCustomEventSceneRpcButtonPressRelease) {
|
||||
// bool result = false;
|
||||
// if(state == SubGhzRpcStateLoaded) {
|
||||
// switch(
|
||||
// subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
||||
// case SubGhzTxRxStartTxStateErrorOnlyRx:
|
||||
// rpc_system_app_set_error_code(
|
||||
// subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock);
|
||||
// rpc_system_app_set_error_text(
|
||||
// subghz->rpc_ctx,
|
||||
// "Transmission on this frequency is restricted in your region");
|
||||
// break;
|
||||
// case SubGhzTxRxStartTxStateErrorParserOthers:
|
||||
// rpc_system_app_set_error_code(
|
||||
// subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse);
|
||||
// rpc_system_app_set_error_text(
|
||||
// subghz->rpc_ctx, "Error in protocol parameters description");
|
||||
// break;
|
||||
|
||||
// Stop transmission
|
||||
if(state == SubGhzRpcStateTx) {
|
||||
subghz_txrx_stop(subghz->txrx);
|
||||
subghz_blink_stop(subghz);
|
||||
result = true;
|
||||
}
|
||||
scene_manager_set_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
||||
// default: //if(SubGhzTxRxStartTxStateOk)
|
||||
// result = true;
|
||||
// subghz_blink_start(subghz);
|
||||
// scene_manager_set_scene_state(
|
||||
// subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateTx);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// // Stop transmission
|
||||
// if(state == SubGhzRpcStateTx) {
|
||||
// subghz_txrx_stop(subghz->txrx);
|
||||
// subghz_blink_stop(subghz);
|
||||
// result = true;
|
||||
// }
|
||||
// scene_manager_set_scene_state(
|
||||
// subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||
// rpc_system_app_confirm(subghz->rpc_ctx, result);
|
||||
} else if(event.event == SubGhzCustomEventSceneRpcLoad) {
|
||||
bool result = false;
|
||||
if(state == SubGhzRpcStateIdle) {
|
||||
@@ -139,6 +149,19 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
||||
}
|
||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
||||
}
|
||||
} else if(event.type == SceneManagerEventTypeTick) {
|
||||
// if hardware TX finished then stop TX correctly
|
||||
if(subghz_devices_is_async_complete_tx(subghz->txrx->radio_device)) {
|
||||
bool result = false;
|
||||
if(state == SubGhzRpcStateTx) {
|
||||
subghz_txrx_stop(subghz->txrx);
|
||||
subghz_blink_stop(subghz);
|
||||
result = true;
|
||||
}
|
||||
scene_manager_set_scene_state(
|
||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
||||
}
|
||||
}
|
||||
return consumed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user