[feat](trx-client): capability-gated UI controls and filter panel (UC-05..07)
Add /set_bandwidth and /set_fir_taps HTTP endpoints to api.rs. Add applyCapabilities(caps) function to app.js that shows/hides: - PTT button and TX meters: capabilities.tx - TX limit row: capabilities.tx_limit - VFO row: capabilities.vfo_switch - Signal meter row: capabilities.signal_meter - Filters panel: capabilities.filter_controls Called from render() whenever capabilities are present; runs on both initial /status response and every SSE event. Add a Filters panel to index.html with bandwidth slider (1..500 kHz) and FIR taps select (16/32/64/128/256); hidden by default, revealed by applyCapabilities when filter_controls is set. Each control dispatches to the corresponding HTTP endpoint on change. Sync filter state from update.filter in render() to keep slider/select in sync with server-side DSP state. Fix missing struct fields in test helpers across remote_client.rs, trx-frontend-http-json/server.rs, trx-frontend-rigctl/server.rs, and trx-core controller tests (handlers.rs, machine.rs). Update aidocs/UI-CAPS.md: all tasks UC-01..UC-09 marked [x]. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -103,7 +103,9 @@ async fn handle_client(
|
||||
error!("Invalid JSON from {}: {} / {:?}", addr, trimmed, e);
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some(format!("Invalid JSON: {}", e)),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -114,7 +116,9 @@ async fn handle_client(
|
||||
if let Err(err) = authorize(&envelope.token, &context) {
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some(err),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -135,7 +139,9 @@ async fn handle_client(
|
||||
error!("Failed to send request to rig_task: {:?}", e);
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some("Internal error: rig task not available".into()),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -144,7 +150,9 @@ async fn handle_client(
|
||||
Err(_) => {
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some("Internal error: request queue timeout".into()),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -156,7 +164,9 @@ async fn handle_client(
|
||||
Ok(Ok(Ok(snapshot))) => {
|
||||
let resp = ClientResponse {
|
||||
success: true,
|
||||
rig_id: None,
|
||||
state: Some(snapshot),
|
||||
rigs: None,
|
||||
error: None,
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -164,7 +174,9 @@ async fn handle_client(
|
||||
Ok(Ok(Err(err))) => {
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some(err.message),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -173,7 +185,9 @@ async fn handle_client(
|
||||
error!("Rig response oneshot recv error: {:?}", e);
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some("Internal error waiting for rig response".into()),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -181,7 +195,9 @@ async fn handle_client(
|
||||
Err(_) => {
|
||||
let resp = ClientResponse {
|
||||
success: false,
|
||||
rig_id: None,
|
||||
state: None,
|
||||
rigs: None,
|
||||
error: Some("Request timed out waiting for rig response".into()),
|
||||
};
|
||||
send_response(&mut writer, &resp).await?;
|
||||
@@ -309,6 +325,11 @@ mod tests {
|
||||
rit: false,
|
||||
rpt: false,
|
||||
split: false,
|
||||
tx: true,
|
||||
tx_limit: true,
|
||||
vfo_switch: true,
|
||||
filter_controls: false,
|
||||
signal_meter: true,
|
||||
},
|
||||
access: RigAccessMethod::Tcp {
|
||||
addr: "127.0.0.1:1234".to_string(),
|
||||
@@ -344,6 +365,7 @@ mod tests {
|
||||
cw_auto: true,
|
||||
cw_wpm: 15,
|
||||
cw_tone_hz: 700,
|
||||
filter: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user