updates
This commit is contained in:
parent
45569e8fb5
commit
f145ccaf8e
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -288,6 +288,7 @@ dependencies = [
|
|||||||
name = "eurosim-obsw"
|
name = "eurosim-obsw"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
"chrono",
|
"chrono",
|
||||||
"embedded-can",
|
"embedded-can",
|
||||||
"fern",
|
"fern",
|
||||||
|
@ -26,6 +26,8 @@ strum_macros = "0.24"
|
|||||||
num = "0.4"
|
num = "0.4"
|
||||||
num-derive = "0.3"
|
num-derive = "0.3"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
|
byteorder = "1.4"
|
||||||
|
|
||||||
|
|
||||||
[dependencies.socketcan]
|
[dependencies.socketcan]
|
||||||
git = "https://github.com/socketcan-rs/socketcan-rs.git"
|
git = "https://github.com/socketcan-rs/socketcan-rs.git"
|
||||||
|
@ -35,3 +35,9 @@
|
|||||||
[2023-02-15][14:48:12][main][INFO] Starting Payload Handling task
|
[2023-02-15][14:48:12][main][INFO] Starting Payload Handling task
|
||||||
[2023-02-15][14:48:12][main][INFO] Starting TM funnel task
|
[2023-02-15][14:48:12][main][INFO] Starting TM funnel task
|
||||||
[2023-02-15][14:48:12][main][INFO] Starting AOCS task
|
[2023-02-15][14:48:12][main][INFO] Starting AOCS task
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Running DemoSat OBSW!
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Starting TMTC task
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Starting power task
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Starting Payload Handling task
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Starting TM funnel task
|
||||||
|
[2023-02-16][12:46:02][main][INFO] Starting AOCS task
|
||||||
|
@ -223,6 +223,9 @@ def read_addressable_id(data: bytes) -> tuple[int, int]:
|
|||||||
return (target_id, set_id)
|
return (target_id, set_id)
|
||||||
|
|
||||||
|
|
||||||
|
class CustomServiceList(enum.IntEnum):
|
||||||
|
ACS = "acs"
|
||||||
|
|
||||||
class RequestTargetId(enum.IntEnum):
|
class RequestTargetId(enum.IntEnum):
|
||||||
ACS = 1
|
ACS = 1
|
||||||
PLD = 2
|
PLD = 2
|
||||||
@ -291,6 +294,10 @@ class TcHandler(TcHandlerBase):
|
|||||||
):
|
):
|
||||||
q.add_log_cmd("Sending PUS ping telecommand")
|
q.add_log_cmd("Sending PUS ping telecommand")
|
||||||
return q.add_pus_tc(PusTelecommand(service=17, subservice=1))
|
return q.add_pus_tc(PusTelecommand(service=17, subservice=1))
|
||||||
|
if service == CustomServiceList.ACS:
|
||||||
|
if op_code == "set_mode":
|
||||||
|
q.add_log_cmd()
|
||||||
|
q.add_pus_tc()
|
||||||
if service == CoreServiceList.SERVICE_11:
|
if service == CoreServiceList.SERVICE_11:
|
||||||
if op_code == "0":
|
if op_code == "0":
|
||||||
q.add_log_cmd("Sending PUS scheduled TC telecommand")
|
q.add_log_cmd("Sending PUS scheduled TC telecommand")
|
||||||
|
@ -6,6 +6,8 @@ use crate::requests::{Request, RequestWithToken};
|
|||||||
use satrs_core::power::SwitchId;
|
use satrs_core::power::SwitchId;
|
||||||
use std::sync::mpsc::{Receiver, Sender};
|
use std::sync::mpsc::{Receiver, Sender};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use byteorder::{LittleEndian, ByteOrder};
|
||||||
|
use crate::can_ids::PackageId::AOCSDataRequestMGM1;
|
||||||
|
|
||||||
pub enum AocsSensorMode {
|
pub enum AocsSensorMode {
|
||||||
Idle,
|
Idle,
|
||||||
@ -81,6 +83,7 @@ pub struct MGMHandler {
|
|||||||
mode_rx: Receiver<AocsSensorMode>,
|
mode_rx: Receiver<AocsSensorMode>,
|
||||||
action_rx: Receiver<RequestWithToken>,
|
action_rx: Receiver<RequestWithToken>,
|
||||||
mgm_data: Arc<Mutex<MGMData>>,
|
mgm_data: Arc<Mutex<MGMData>>,
|
||||||
|
sensor_data_enabled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AocsSensorHandler for MGMHandler {
|
impl AocsSensorHandler for MGMHandler {
|
||||||
@ -106,12 +109,12 @@ impl MGMHandler {
|
|||||||
pub fn new(
|
pub fn new(
|
||||||
power_switcher: PowerSwitcher,
|
power_switcher: PowerSwitcher,
|
||||||
device_id: DeviceId,
|
device_id: DeviceId,
|
||||||
switch_id: SwitchId,
|
|
||||||
can_tx: Sender<PackageModel>,
|
can_tx: Sender<PackageModel>,
|
||||||
can_rx: Receiver<PackageModel>,
|
can_rx: Receiver<PackageModel>,
|
||||||
mode_rx: Receiver<AocsSensorMode>,
|
mode_rx: Receiver<AocsSensorMode>,
|
||||||
action_rx: Receiver<RequestWithToken>,
|
action_rx: Receiver<RequestWithToken>,
|
||||||
) -> MGMHandler {
|
) -> MGMHandler {
|
||||||
|
let switch_id = device_id as u16;
|
||||||
MGMHandler {
|
MGMHandler {
|
||||||
power_switcher,
|
power_switcher,
|
||||||
device_id,
|
device_id,
|
||||||
@ -123,6 +126,7 @@ impl MGMHandler {
|
|||||||
mode_rx,
|
mode_rx,
|
||||||
action_rx,
|
action_rx,
|
||||||
mgm_data: Arc::new(Mutex::new(MGMData::new())),
|
mgm_data: Arc::new(Mutex::new(MGMData::new())),
|
||||||
|
sensor_data_enabled: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +136,8 @@ impl MGMHandler {
|
|||||||
|
|
||||||
pub fn periodic_op(&mut self) {
|
pub fn periodic_op(&mut self) {
|
||||||
self.update_mode();
|
self.update_mode();
|
||||||
//self.handle_action_requests();
|
self.handle_requests();
|
||||||
|
self.read_sensor_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_mode(&mut self) {
|
pub fn update_mode(&mut self) {
|
||||||
@ -160,11 +165,42 @@ impl MGMHandler {
|
|||||||
|
|
||||||
pub fn handle_hk_request(&mut self, hk_req: HkRequest) {
|
pub fn handle_hk_request(&mut self, hk_req: HkRequest) {
|
||||||
match hk_req {
|
match hk_req {
|
||||||
HkRequest::OneShot(_) => {}
|
HkRequest::OneShot(_) => {
|
||||||
HkRequest::Enable(_) => {}
|
self.can_tx.send(PackageModel::new(PackageId::AOCSDataRequestMGM1, &[2]).unwrap()).unwrap();
|
||||||
HkRequest::Disable(_) => {}
|
}
|
||||||
|
HkRequest::Enable(_) => {
|
||||||
|
if !self.sensor_data_enabled {
|
||||||
|
self.sensor_data_enabled = true;
|
||||||
|
self.can_tx.send(PackageModel::new(PackageId::AOCSDataRequestMGM1, &[1]).unwrap()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HkRequest::Disable(_) => {
|
||||||
|
if self.sensor_data_enabled {
|
||||||
|
self.sensor_data_enabled = false;
|
||||||
|
self.can_tx.send(PackageModel::new(PackageId::AOCSDataRequestMGM1, &[0]).unwrap()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
HkRequest::ModifyCollectionInterval(_, _) => {}
|
HkRequest::ModifyCollectionInterval(_, _) => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn read_sensor_data(&mut self) {
|
||||||
|
if let Ok(package) = self.can_rx.try_recv() {
|
||||||
|
let float_data = self.decode_sensor_data(package.data());
|
||||||
|
if let Ok(mut mgm_data) = self.mgm_data.lock() {
|
||||||
|
match package.package_id() {
|
||||||
|
PackageId::AOCSDataMGM1 => { mgm_data.axis_1 = float_data }
|
||||||
|
PackageId::AOCSDataMGM2 => { mgm_data.axis_2 = float_data }
|
||||||
|
PackageId::AOCSDataMGM3 => { mgm_data.axis_3 = float_data }
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn decode_sensor_data(&mut self, buf: &[u8]) -> f64 {
|
||||||
|
LittleEndian::read_f64(&buf)
|
||||||
|
}
|
||||||
//pub fn handle_action_request(&mut self, action_request: ActionRequest) {}
|
//pub fn handle_action_request(&mut self, action_request: ActionRequest) {}
|
||||||
}
|
}
|
||||||
|
17
src/main.rs
17
src/main.rs
@ -50,7 +50,7 @@ use std::sync::mpsc::channel;
|
|||||||
use std::sync::{mpsc, Arc, Mutex, RwLock};
|
use std::sync::{mpsc, Arc, Mutex, RwLock};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
//use libc::time64_t;
|
//use libc::time64_t;
|
||||||
use crate::aocs_handler::MGMData;
|
use crate::aocs_handler::{MGMData, MGMHandler};
|
||||||
#[cfg(feature = "can")]
|
#[cfg(feature = "can")]
|
||||||
use crate::can::CanTxHandler;
|
use crate::can::CanTxHandler;
|
||||||
use crate::hk::{AocsHousekeeper, AocsSensorData};
|
use crate::hk::{AocsHousekeeper, AocsSensorData};
|
||||||
@ -250,12 +250,14 @@ fn main() {
|
|||||||
let pld_can_tx_sender =
|
let pld_can_tx_sender =
|
||||||
can_tx_sender.clone();
|
can_tx_sender.clone();
|
||||||
|
|
||||||
|
let power_switcher_pld = power_switcher.clone();
|
||||||
|
|
||||||
//let mut pcdu_tx_clone = pcdu_tx.clone();
|
//let mut pcdu_tx_clone = pcdu_tx.clone();
|
||||||
info!("Starting Payload Handling task");
|
info!("Starting Payload Handling task");
|
||||||
let builder3 = thread::Builder::new().name("PLDThread".into());
|
let builder3 = thread::Builder::new().name("PLDThread".into());
|
||||||
let jh3 = builder3.spawn(move || {
|
let jh3 = builder3.spawn(move || {
|
||||||
core_pld_task(
|
core_pld_task(
|
||||||
power_switcher.clone(),
|
power_switcher_pld.clone(),
|
||||||
pld_thread_rx,
|
pld_thread_rx,
|
||||||
pld_can_rx,
|
pld_can_rx,
|
||||||
pld_can_tx_sender,
|
pld_can_tx_sender,
|
||||||
@ -287,10 +289,17 @@ fn main() {
|
|||||||
let mgm_shared_data: Arc<Mutex<MGMData>> = Arc::default();
|
let mgm_shared_data: Arc<Mutex<MGMData>> = Arc::default();
|
||||||
|
|
||||||
let aocs_sensor_data = Arc::new(Mutex::new(AocsSensorData::new()));
|
let aocs_sensor_data = Arc::new(Mutex::new(AocsSensorData::new()));
|
||||||
|
let (aocs_mode_tx, aocs_mode_rx) = channel();
|
||||||
|
let (mgm_action_tx, mgm_action_rx) = channel();
|
||||||
|
|
||||||
|
let power_switcher_aocs = power_switcher.clone();
|
||||||
|
|
||||||
info!("Starting AOCS task");
|
info!("Starting AOCS task");
|
||||||
let builder5 = thread::Builder::new().name("AOCSThread".into());
|
let builder5 = thread::Builder::new().name("AOCSThread".into());
|
||||||
let jh5 = builder5.spawn(move || {
|
let jh5 = builder5.spawn(move || {
|
||||||
|
let mut mgm_handler = MGMHandler::new(power_switcher_aocs.clone(), DeviceId::MGM1, can_tx_sender.clone(), aocs_can_rx, aocs_mode_rx, mgm_action_rx);
|
||||||
|
|
||||||
|
let aocs_sensor_data = Arc::new(Mutex::new(AocsSensorData::new()));
|
||||||
let mut aocs_housekeeper = AocsHousekeeper::new(
|
let mut aocs_housekeeper = AocsHousekeeper::new(
|
||||||
aocs_sensor_data.clone(),
|
aocs_sensor_data.clone(),
|
||||||
aocs_thread_rx,
|
aocs_thread_rx,
|
||||||
@ -300,6 +309,10 @@ fn main() {
|
|||||||
reporter_aocs,
|
reporter_aocs,
|
||||||
);
|
);
|
||||||
loop {
|
loop {
|
||||||
|
mgm_handler.periodic_op();
|
||||||
|
let mut locked_sensor_data = aocs_sensor_data.lock().unwrap();
|
||||||
|
locked_sensor_data.update_mgm_data(&mgm_handler.get_data_ref());
|
||||||
|
drop(locked_sensor_data);
|
||||||
aocs_housekeeper.handle_hk_request();
|
aocs_housekeeper.handle_hk_request();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user