diff --git a/src/trx-core/src/client.rs b/src/trx-core/src/client.rs index 96041fb..52ec299 100644 --- a/src/trx-core/src/client.rs +++ b/src/trx-core/src/client.rs @@ -21,6 +21,10 @@ pub enum ClientCommand { Unlock, GetTxLimit, SetTxLimit { limit: u8 }, + SetAprsDecodeEnabled { enabled: bool }, + SetCwDecodeEnabled { enabled: bool }, + ResetAprsDecoder, + ResetCwDecoder, } /// Envelope for client commands with optional authentication token. diff --git a/src/trx-core/src/rig/command.rs b/src/trx-core/src/rig/command.rs index ee2fbcc..be9f858 100644 --- a/src/trx-core/src/rig/command.rs +++ b/src/trx-core/src/rig/command.rs @@ -19,4 +19,8 @@ pub enum RigCommand { SetTxLimit(u8), Lock, Unlock, + SetAprsDecodeEnabled(bool), + SetCwDecodeEnabled(bool), + ResetAprsDecoder, + ResetCwDecoder, } diff --git a/src/trx-core/src/rig/controller/handlers.rs b/src/trx-core/src/rig/controller/handlers.rs index 4059ec0..f6f2e5e 100644 --- a/src/trx-core/src/rig/controller/handlers.rs +++ b/src/trx-core/src/rig/controller/handlers.rs @@ -500,6 +500,12 @@ pub fn command_from_rig_command(cmd: RigCommand) -> Box { RigCommand::SetTxLimit(limit) => Box::new(SetTxLimitCommand::new(limit)), RigCommand::Lock => Box::new(LockCommand), RigCommand::Unlock => Box::new(UnlockCommand), + // Decoder commands are handled before reaching this function; + // map to GetSnapshot as a safe fallback. + RigCommand::SetAprsDecodeEnabled(_) + | RigCommand::SetCwDecodeEnabled(_) + | RigCommand::ResetAprsDecoder + | RigCommand::ResetCwDecoder => Box::new(GetSnapshotCommand), } } diff --git a/src/trx-core/src/rig/state.rs b/src/trx-core/src/rig/state.rs index 0ce1a79..0de9404 100644 --- a/src/trx-core/src/rig/state.rs +++ b/src/trx-core/src/rig/state.rs @@ -23,6 +23,14 @@ pub struct RigState { pub server_latitude: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub server_longitude: Option, + #[serde(default)] + pub aprs_decode_enabled: bool, + #[serde(default)] + pub cw_decode_enabled: bool, + #[serde(default, skip_serializing)] + pub aprs_decode_reset_seq: u64, + #[serde(default, skip_serializing)] + pub cw_decode_reset_seq: u64, } /// Mode supported by the rig. @@ -68,6 +76,8 @@ impl RigState { server_version: self.server_version.clone(), server_latitude: self.server_latitude, server_longitude: self.server_longitude, + aprs_decode_enabled: self.aprs_decode_enabled, + cw_decode_enabled: self.cw_decode_enabled, }) } @@ -110,4 +120,8 @@ pub struct RigSnapshot { pub server_latitude: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub server_longitude: Option, + #[serde(default)] + pub aprs_decode_enabled: bool, + #[serde(default)] + pub cw_decode_enabled: bool, }