51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
use defmt::Format;
|
|
|
|
use core::fmt::Write;
|
|
use embassy_stm32::interrupt;
|
|
use embassy_stm32::peripherals;
|
|
use embassy_stm32::usb::Driver;
|
|
use embassy_usb::Builder;
|
|
use embassy_usb_serial::{CdcAcmClass, State};
|
|
use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
|
|
use embassy_util::channel::mpmc::{Receiver, Sender};
|
|
|
|
use futures::future::join;
|
|
use heapless::String;
|
|
|
|
use crate::usb::Gs232Cmd;
|
|
use crate::{AzElPair, RotorState};
|
|
|
|
#[embassy_executor::task]
|
|
pub async fn movement_task(
|
|
cmd_receiver: Receiver<'static, ThreadModeRawMutex, Gs232Cmd, 1>,
|
|
pos_sender: Sender<'static, ThreadModeRawMutex, AzElPair, 1>,
|
|
state_sender: Sender<'static, ThreadModeRawMutex, RotorState, 1>,
|
|
) {
|
|
let mut rotor_state = RotorState {
|
|
actual_pos: AzElPair { az: 0, el: 0 },
|
|
setpoint_pos: AzElPair { az: 0, el: 0 },
|
|
stopped: false,
|
|
};
|
|
|
|
loop {
|
|
let cmd = cmd_receiver.recv().await;
|
|
|
|
match cmd {
|
|
Gs232Cmd::MoveTo(pair) => {
|
|
rotor_state.setpoint_pos = pair;
|
|
rotor_state.stopped = false;
|
|
}
|
|
Gs232Cmd::Stop => {
|
|
rotor_state.stopped = true;
|
|
}
|
|
_ => {}
|
|
};
|
|
|
|
join(
|
|
pos_sender.send(rotor_state.actual_pos),
|
|
state_sender.send(rotor_state),
|
|
)
|
|
.await;
|
|
}
|
|
}
|