[refactor](trx-server): use RigState constructors and fix config bug
Replace duplicated RigState initialization with new constructor methods. This fixes a critical bug where rig_task was hardcoding 144.3 MHz/USB instead of respecting config.initial_freq_hz and config.initial_mode. Changes: - Use RigState::new_with_metadata() in main.rs - Use RigState::new_with_metadata() in rig_task.rs (FIX: now respects config) - Remove 45-line build_initial_state() helper function The rig_task bug fix ensures the configured initial frequency and mode are applied when the rig task starts, instead of always using defaults. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
@@ -24,11 +24,9 @@ use tracing::{error, info};
|
|||||||
use trx_core::audio::AudioStreamInfo;
|
use trx_core::audio::AudioStreamInfo;
|
||||||
|
|
||||||
use trx_backend::{is_backend_registered, register_builtin_backends, registered_backends, RigAccess};
|
use trx_backend::{is_backend_registered, register_builtin_backends, registered_backends, RigAccess};
|
||||||
use trx_core::radio::freq::Freq;
|
|
||||||
use trx_core::rig::controller::{AdaptivePolling, ExponentialBackoff};
|
use trx_core::rig::controller::{AdaptivePolling, ExponentialBackoff};
|
||||||
use trx_core::rig::request::RigRequest;
|
use trx_core::rig::request::RigRequest;
|
||||||
use trx_core::rig::state::RigState;
|
use trx_core::rig::state::RigState;
|
||||||
use trx_core::rig::{RigControl, RigRxStatus, RigStatus, RigTxStatus};
|
|
||||||
use trx_core::DynResult;
|
use trx_core::DynResult;
|
||||||
|
|
||||||
use config::ServerConfig;
|
use config::ServerConfig;
|
||||||
@@ -188,51 +186,6 @@ fn resolve_config(cli: &Cli, cfg: &ServerConfig) -> DynResult<ResolvedConfig> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_initial_state(cfg: &ServerConfig, resolved: &ResolvedConfig) -> RigState {
|
|
||||||
let callsign = &resolved.callsign;
|
|
||||||
RigState {
|
|
||||||
rig_info: None,
|
|
||||||
status: RigStatus {
|
|
||||||
freq: Freq {
|
|
||||||
hz: cfg.rig.initial_freq_hz,
|
|
||||||
},
|
|
||||||
mode: cfg.rig.initial_mode.clone(),
|
|
||||||
tx_en: false,
|
|
||||||
vfo: None,
|
|
||||||
tx: Some(RigTxStatus {
|
|
||||||
power: None,
|
|
||||||
limit: None,
|
|
||||||
swr: None,
|
|
||||||
alc: None,
|
|
||||||
}),
|
|
||||||
rx: Some(RigRxStatus { sig: None }),
|
|
||||||
lock: Some(false),
|
|
||||||
},
|
|
||||||
initialized: false,
|
|
||||||
control: RigControl {
|
|
||||||
rpt_offset_hz: None,
|
|
||||||
ctcss_hz: None,
|
|
||||||
dcs_code: None,
|
|
||||||
lock: Some(false),
|
|
||||||
clar_hz: None,
|
|
||||||
clar_on: None,
|
|
||||||
enabled: Some(false),
|
|
||||||
},
|
|
||||||
server_callsign: callsign.clone(),
|
|
||||||
server_version: Some(env!("CARGO_PKG_VERSION").to_string()),
|
|
||||||
server_latitude: resolved.latitude,
|
|
||||||
server_longitude: resolved.longitude,
|
|
||||||
aprs_decode_enabled: false,
|
|
||||||
cw_decode_enabled: false,
|
|
||||||
cw_auto: true,
|
|
||||||
cw_wpm: 15,
|
|
||||||
cw_tone_hz: 700,
|
|
||||||
ft8_decode_enabled: false,
|
|
||||||
aprs_decode_reset_seq: 0,
|
|
||||||
cw_decode_reset_seq: 0,
|
|
||||||
ft8_decode_reset_seq: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn build_rig_task_config(
|
fn build_rig_task_config(
|
||||||
resolved: &ResolvedConfig,
|
resolved: &ResolvedConfig,
|
||||||
@@ -306,7 +259,14 @@ async fn main() -> DynResult<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let (tx, rx) = mpsc::channel::<RigRequest>(RIG_TASK_CHANNEL_BUFFER);
|
let (tx, rx) = mpsc::channel::<RigRequest>(RIG_TASK_CHANNEL_BUFFER);
|
||||||
let initial_state = build_initial_state(&cfg, &resolved);
|
let initial_state = RigState::new_with_metadata(
|
||||||
|
resolved.callsign.clone(),
|
||||||
|
Some(env!("CARGO_PKG_VERSION").to_string()),
|
||||||
|
resolved.latitude,
|
||||||
|
resolved.longitude,
|
||||||
|
cfg.rig.initial_freq_hz,
|
||||||
|
cfg.rig.initial_mode.clone(),
|
||||||
|
);
|
||||||
let (state_tx, state_rx) = watch::channel(initial_state);
|
let (state_tx, state_rx) = watch::channel(initial_state);
|
||||||
// Keep receivers alive so channels don't close prematurely
|
// Keep receivers alive so channels don't close prematurely
|
||||||
let _state_rx = state_rx;
|
let _state_rx = state_rx;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use trx_core::rig::controller::{
|
|||||||
};
|
};
|
||||||
use trx_core::rig::request::RigRequest;
|
use trx_core::rig::request::RigRequest;
|
||||||
use trx_core::rig::state::{RigMode, RigSnapshot, RigState};
|
use trx_core::rig::state::{RigMode, RigSnapshot, RigState};
|
||||||
use trx_core::rig::{RigCat, RigControl, RigRxStatus, RigStatus, RigTxStatus};
|
use trx_core::rig::{RigCat, RigRxStatus, RigTxStatus};
|
||||||
use trx_core::{DynResult, RigError, RigResult};
|
use trx_core::{DynResult, RigError, RigResult};
|
||||||
|
|
||||||
use crate::audio;
|
use crate::audio;
|
||||||
@@ -89,50 +89,14 @@ pub async fn run_rig_task(
|
|||||||
// Initialize state machine and state
|
// Initialize state machine and state
|
||||||
let mut machine = RigStateMachine::new();
|
let mut machine = RigStateMachine::new();
|
||||||
let emitter = RigEventEmitter::new();
|
let emitter = RigEventEmitter::new();
|
||||||
let server_callsign = config.server_callsign.clone();
|
let mut state = RigState::new_with_metadata(
|
||||||
let server_version = config.server_version.clone();
|
config.server_callsign.clone(),
|
||||||
let server_latitude = config.server_latitude;
|
config.server_version.clone(),
|
||||||
let server_longitude = config.server_longitude;
|
config.server_latitude,
|
||||||
let mut state = RigState {
|
config.server_longitude,
|
||||||
rig_info: None,
|
config.initial_freq_hz,
|
||||||
status: RigStatus {
|
config.initial_mode.clone(),
|
||||||
freq: Freq { hz: 144_300_000 },
|
);
|
||||||
mode: RigMode::USB,
|
|
||||||
tx_en: false,
|
|
||||||
vfo: None,
|
|
||||||
tx: Some(RigTxStatus {
|
|
||||||
power: None,
|
|
||||||
limit: None,
|
|
||||||
swr: None,
|
|
||||||
alc: None,
|
|
||||||
}),
|
|
||||||
rx: Some(RigRxStatus { sig: None }),
|
|
||||||
lock: Some(false),
|
|
||||||
},
|
|
||||||
initialized: false,
|
|
||||||
control: RigControl {
|
|
||||||
rpt_offset_hz: None,
|
|
||||||
ctcss_hz: None,
|
|
||||||
dcs_code: None,
|
|
||||||
lock: Some(false),
|
|
||||||
clar_hz: None,
|
|
||||||
clar_on: None,
|
|
||||||
enabled: Some(false),
|
|
||||||
},
|
|
||||||
server_callsign,
|
|
||||||
server_version,
|
|
||||||
server_latitude,
|
|
||||||
server_longitude,
|
|
||||||
aprs_decode_enabled: false,
|
|
||||||
cw_decode_enabled: false,
|
|
||||||
cw_auto: true,
|
|
||||||
cw_wpm: 15,
|
|
||||||
cw_tone_hz: 700,
|
|
||||||
ft8_decode_enabled: false,
|
|
||||||
aprs_decode_reset_seq: 0,
|
|
||||||
cw_decode_reset_seq: 0,
|
|
||||||
ft8_decode_reset_seq: 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Polling configuration
|
// Polling configuration
|
||||||
let polling = &config.polling;
|
let polling = &config.polling;
|
||||||
|
|||||||
Reference in New Issue
Block a user