mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-23 05:24: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 "../subghz_i.h"
|
||||||
|
|
||||||
#include <lib/subghz/blocks/custom_btn.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 {
|
typedef enum {
|
||||||
SubGhzRpcStateIdle,
|
SubGhzRpcStateIdle,
|
||||||
@@ -52,9 +54,13 @@ 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) {
|
||||||
|
// START endless TX until user release button
|
||||||
|
// variable used in protocol yield for endless TX
|
||||||
|
subghz_block_generic_global.endless_tx = true;
|
||||||
switch(
|
switch(
|
||||||
subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) {
|
||||||
case SubGhzTxRxStartTxStateErrorOnlyRx:
|
case SubGhzTxRxStartTxStateErrorOnlyRx:
|
||||||
|
subghz_block_generic_global.endless_tx = false;
|
||||||
rpc_system_app_set_error_code(
|
rpc_system_app_set_error_code(
|
||||||
subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock);
|
subghz->rpc_ctx, RpcAppSystemErrorCodeRegionLock);
|
||||||
rpc_system_app_set_error_text(
|
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");
|
"Transmission on this frequency is restricted in your settings");
|
||||||
break;
|
break;
|
||||||
case SubGhzTxRxStartTxStateErrorParserOthers:
|
case SubGhzTxRxStartTxStateErrorParserOthers:
|
||||||
|
subghz_block_generic_global.endless_tx = false;
|
||||||
rpc_system_app_set_error_code(
|
rpc_system_app_set_error_code(
|
||||||
subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse);
|
subghz->rpc_ctx, RpcAppSystemErrorCodeInternalParse);
|
||||||
rpc_system_app_set_error_text(
|
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) {
|
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if(state == SubGhzRpcStateTx) {
|
if(state == SubGhzRpcStateTx) {
|
||||||
subghz_txrx_stop(subghz->txrx);
|
// user release button
|
||||||
subghz_blink_stop(subghz);
|
// set endless TX to OFF and switch off TX in section event.type == SceneManagerEventTypeTick
|
||||||
|
subghz_block_generic_global.endless_tx = false;
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
scene_manager_set_scene_state(
|
// scene_manager_set_scene_state(
|
||||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
// subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
||||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
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)
|
// USELESS PART
|
||||||
result = true;
|
// } else if(event.event == SubGhzCustomEventSceneRpcButtonPressRelease) {
|
||||||
subghz_blink_start(subghz);
|
// bool result = false;
|
||||||
scene_manager_set_scene_state(
|
// if(state == SubGhzRpcStateLoaded) {
|
||||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateTx);
|
// switch(
|
||||||
break;
|
// 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
|
// default: //if(SubGhzTxRxStartTxStateOk)
|
||||||
if(state == SubGhzRpcStateTx) {
|
// result = true;
|
||||||
subghz_txrx_stop(subghz->txrx);
|
// subghz_blink_start(subghz);
|
||||||
subghz_blink_stop(subghz);
|
// scene_manager_set_scene_state(
|
||||||
result = true;
|
// subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateTx);
|
||||||
}
|
// break;
|
||||||
scene_manager_set_scene_state(
|
// }
|
||||||
subghz->scene_manager, SubGhzSceneRpc, SubGhzRpcStateIdle);
|
// }
|
||||||
rpc_system_app_confirm(subghz->rpc_ctx, result);
|
|
||||||
|
// // 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) {
|
} else if(event.event == SubGhzCustomEventSceneRpcLoad) {
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if(state == SubGhzRpcStateIdle) {
|
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);
|
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;
|
return consumed;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user