Adding WIP telemetry
This commit is contained in:
parent
9e355ca573
commit
e746e2a12c
|
@ -57,7 +57,7 @@ const APP: () = {
|
||||||
adcs: (Adc0Input, Adc1Input),
|
adcs: (Adc0Input, Adc1Input),
|
||||||
dacs: (Dac0Output, Dac1Output),
|
dacs: (Dac0Output, Dac1Output),
|
||||||
mqtt: MqttInterface<Settings>,
|
mqtt: MqttInterface<Settings>,
|
||||||
telemetry: net::Telemetry,
|
telemetry: net::TelemetryBuffer,
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
|
|
||||||
#[init([[[0.; 5]; IIR_CASCADE_LENGTH]; 2])]
|
#[init([[[0.; 5]; IIR_CASCADE_LENGTH]; 2])]
|
||||||
|
@ -99,7 +99,7 @@ const APP: () = {
|
||||||
dacs: stabilizer.dacs,
|
dacs: stabilizer.dacs,
|
||||||
mqtt,
|
mqtt,
|
||||||
digital_inputs: stabilizer.digital_inputs,
|
digital_inputs: stabilizer.digital_inputs,
|
||||||
telemetry: net::Telemetry::default(),
|
telemetry: net::TelemetryBuffer::default(),
|
||||||
settings: Settings::default(),
|
settings: Settings::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,8 @@ const APP: () = {
|
||||||
let telemetry =
|
let telemetry =
|
||||||
c.resources.telemetry.lock(|telemetry| telemetry.clone());
|
c.resources.telemetry.lock(|telemetry| telemetry.clone());
|
||||||
|
|
||||||
c.resources.mqtt.publish_telemetry(&telemetry);
|
let gains = c.resources.settings.lock(|settings| settings.afe.clone());
|
||||||
|
c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
|
||||||
|
|
||||||
let telemetry_period = c
|
let telemetry_period = c
|
||||||
.resources
|
.resources
|
||||||
|
|
|
@ -66,7 +66,7 @@ const APP: () = {
|
||||||
dacs: (Dac0Output, Dac1Output),
|
dacs: (Dac0Output, Dac1Output),
|
||||||
mqtt: MqttInterface<Settings>,
|
mqtt: MqttInterface<Settings>,
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
telemetry: net::Telemetry,
|
telemetry: net::TelemetryBuffer,
|
||||||
digital_inputs: (DigitalInput0, DigitalInput1),
|
digital_inputs: (DigitalInput0, DigitalInput1),
|
||||||
|
|
||||||
timestamper: InputStamper,
|
timestamper: InputStamper,
|
||||||
|
@ -123,7 +123,7 @@ const APP: () = {
|
||||||
mqtt,
|
mqtt,
|
||||||
digital_inputs: stabilizer.digital_inputs,
|
digital_inputs: stabilizer.digital_inputs,
|
||||||
timestamper: stabilizer.timestamper,
|
timestamper: stabilizer.timestamper,
|
||||||
telemetry: net::Telemetry::default(),
|
telemetry: net::TelemetryBuffer::default(),
|
||||||
|
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
|
@ -245,7 +245,8 @@ const APP: () = {
|
||||||
c.resources.digital_inputs.1.is_high().unwrap(),
|
c.resources.digital_inputs.1.is_high().unwrap(),
|
||||||
];
|
];
|
||||||
|
|
||||||
c.resources.mqtt.publish_telemetry(&telemetry);
|
let gains = c.resources.settings.lock(|settings| settings.afe.clone());
|
||||||
|
c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
|
||||||
|
|
||||||
let telemetry_period = c
|
let telemetry_period = c
|
||||||
.resources
|
.resources
|
||||||
|
|
|
@ -15,7 +15,7 @@ use messages::{MqttMessage, SettingsResponse, SettingsResponseCode};
|
||||||
pub use mqtt_interface::MqttInterface;
|
pub use mqtt_interface::MqttInterface;
|
||||||
|
|
||||||
mod telemetry;
|
mod telemetry;
|
||||||
pub use telemetry::Telemetry;
|
pub use telemetry::{Telemetry, TelemetryBuffer};
|
||||||
|
|
||||||
/// Potential actions for firmware to take.
|
/// Potential actions for firmware to take.
|
||||||
pub enum Action {
|
pub enum Action {
|
||||||
|
|
|
@ -1,13 +1,22 @@
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
#[derive(Serialize, Clone)]
|
use crate::hardware::AfeGain;
|
||||||
pub struct Telemetry {
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
pub struct TelemetryBuffer {
|
||||||
pub latest_samples: [i16; 2],
|
pub latest_samples: [i16; 2],
|
||||||
pub latest_outputs: [i16; 2],
|
pub latest_outputs: [i16; 2],
|
||||||
pub digital_inputs: [bool; 2],
|
pub digital_inputs: [bool; 2],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Telemetry {
|
#[derive(Serialize)]
|
||||||
|
pub struct Telemetry {
|
||||||
|
input_levels: [f32; 2],
|
||||||
|
output_levels: [f32; 2],
|
||||||
|
digital_inputs: [bool; 2]
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for TelemetryBuffer {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
latest_samples: [0, 0],
|
latest_samples: [0, 0],
|
||||||
|
@ -16,3 +25,19 @@ impl Default for Telemetry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TelemetryBuffer {
|
||||||
|
pub fn to_telemetry(self, afe0: AfeGain, afe1: AfeGain) -> Telemetry {
|
||||||
|
let in0_volts = self.latest_samples[0] as f32 / (i16::MAX as f32 * 5.0 * afe0.to_multiplier() as f32) * 4.096;
|
||||||
|
let in1_volts = self.latest_samples[1] as f32 / (i16::MAX as f32 * 5.0 * afe1.to_multiplier() as f32) * 4.096;
|
||||||
|
|
||||||
|
let out0_volts = self.latest_outputs[0] as f32 / (i16::MAX as f32) * 10.24;
|
||||||
|
let out1_volts = self.latest_outputs[1] as f32 / (i16::MAX as f32) * 10.24;
|
||||||
|
|
||||||
|
Telemetry {
|
||||||
|
input_levels: [in0_volts, in1_volts],
|
||||||
|
output_levels: [out0_volts, out1_volts],
|
||||||
|
digital_inputs: self.digital_inputs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue