Implemented setting and getting pll settings
/ audit (push) Successful in 19s Details
/ build-firmware (push) Successful in 44s Details
/ build-linux (push) Successful in 2m59s Details
/ build-windows (push) Successful in 1m48s Details
/ build-appimage (push) Successful in 3m30s Details

This commit is contained in:
Sebastian 2024-01-21 22:09:55 +01:00
parent e059e712a8
commit 6a29ab91da
2 changed files with 59 additions and 7 deletions

View File

@ -89,6 +89,9 @@ impl eframe::App for CheapsdoControl {
status_msg.pwm as f64 status_msg.pwm as f64
]); ]);
}, },
Ok(serial::Data::PLLSettings(settings)) => {
self.pll_settings = settings;
}
Err(_) => break, Err(_) => break,
}; };
}, },
@ -143,7 +146,10 @@ impl eframe::App for CheapsdoControl {
if let Some(cmd_tx) = &self.cmd_tx { if let Some(cmd_tx) = &self.cmd_tx {
cmd_tx.send(serial::Cmd::Disconnect).unwrap(); cmd_tx.send(serial::Cmd::Disconnect).unwrap();
} }
self.serial_connected = false; self.serial_connected = false;
self.cmd_tx = None;
self.data_rx = None;
} }
}); });
@ -217,6 +223,36 @@ impl eframe::App for CheapsdoControl {
ui.end_row(); ui.end_row();
}); });
} }
ui.separator();
ui.horizontal(|ui| {
if ui
.add_enabled(
self.cmd_tx.is_some(),
egui::Button::new("Apply").fill(egui::Color32::DARK_GREEN),
)
.clicked()
{
if let Some(cmd_tx) = &self.cmd_tx {
cmd_tx
.send(serial::Cmd::SetPLLSetting(self.pll_settings.clone()))
.unwrap();
}
}
ui.add_space(40.0);
if ui
.add_enabled(
self.cmd_tx.is_some(),
egui::Button::new("Reset").fill(egui::Color32::DARK_RED),
)
.clicked()
{
if let Some(cmd_tx) = &self.cmd_tx {
cmd_tx.send(serial::Cmd::GetPLLSettings).unwrap();
}
}
});
}); });
}); });
}); });

View File

@ -10,11 +10,14 @@ use cheapsdo_protocol::*;
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
pub enum Cmd { pub enum Cmd {
Disconnect, Disconnect,
GetPLLSettings,
SetPLLSetting(PLLSettings),
} }
#[derive(PartialEq, Debug)] #[derive(PartialEq, Debug)]
pub enum Data { pub enum Data {
DeviceState(StatusMessage), DeviceState(StatusMessage),
PLLSettings(PLLSettings),
} }
pub fn poll_device(port: String, cmd_rx: Receiver<Cmd>, data_tx: Sender<Data>, ctx: egui::Context) { pub fn poll_device(port: String, cmd_rx: Receiver<Cmd>, data_tx: Sender<Data>, ctx: egui::Context) {
@ -23,9 +26,13 @@ pub fn poll_device(port: String, cmd_rx: Receiver<Cmd>, data_tx: Sender<Data>, c
.open() .open()
.expect("Failed to open port"); .expect("Failed to open port");
let host_msg = HostMessage::RequestStatus; let get_pll_settings = HostMessage::GetPllSettings;
let msg_bytes = to_stdvec_cobs(&host_msg).unwrap(); let get_pll_settings_bytes = to_stdvec_cobs(&get_pll_settings).unwrap();
port.write_all(&msg_bytes).unwrap(); port.write_all(&get_pll_settings_bytes).unwrap();
let request_status = HostMessage::RequestStatus;
let request_status_bytes = to_stdvec_cobs(&request_status).unwrap();
port.write_all(&request_status_bytes).unwrap();
loop { loop {
let mut serial_buf: Vec<u8> = vec![0; 128]; let mut serial_buf: Vec<u8> = vec![0; 128];
@ -41,7 +48,10 @@ pub fn poll_device(port: String, cmd_rx: Receiver<Cmd>, data_tx: Sender<Data>, c
data_tx.send(Data::DeviceState(status_msg)).unwrap(); data_tx.send(Data::DeviceState(status_msg)).unwrap();
ctx.request_repaint(); ctx.request_repaint();
} }
DeviceMessage::PLLSettings(_) => {} DeviceMessage::PLLSettings(settings) => {
data_tx.send(Data::PLLSettings(settings)).unwrap();
ctx.request_repaint();
}
} }
} }
Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (), Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (),
@ -51,12 +61,18 @@ pub fn poll_device(port: String, cmd_rx: Receiver<Cmd>, data_tx: Sender<Data>, c
select! { select! {
recv(cmd_rx) -> cmd => match cmd { recv(cmd_rx) -> cmd => match cmd {
Ok(Cmd::Disconnect) => return, Ok(Cmd::Disconnect) => return,
Ok(Cmd::GetPLLSettings) => {
port.write_all(&get_pll_settings_bytes).unwrap();
}
Ok(Cmd::SetPLLSetting(settings)) => {
let set_settings = HostMessage::SetPLLSettings(settings);
let set_settings_bytes = to_stdvec_cobs(&set_settings).unwrap();
port.write_all(&set_settings_bytes).unwrap();
}
Err(_) => {}, Err(_) => {},
}, },
default(Duration::from_secs(1)) => { default(Duration::from_secs(1)) => {
let host_msg = HostMessage::RequestStatus; port.write_all(&request_status_bytes).unwrap();
let msg_bytes = to_stdvec_cobs(&host_msg).unwrap();
port.write_all(&msg_bytes).unwrap();
}, },
} }
} }