first connection success
Some checks failed
Rust/sat-rs/pipeline/head There was a failure building this commit
Some checks failed
Rust/sat-rs/pipeline/head There was a failure building this commit
This commit is contained in:
parent
c20163b10a
commit
fe4126f7e2
@ -61,18 +61,14 @@ pub struct SpiSimInterface {
|
|||||||
impl SpiInterface for SpiSimInterface {
|
impl SpiInterface for SpiSimInterface {
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
fn transfer(&mut self, tx: &[u8], rx: &mut [u8]) -> Result<(), Self::Error> {
|
// Right now, we only support requesting sensor data and not configuration of the sensor.
|
||||||
|
fn transfer(&mut self, _tx: &[u8], _rx: &mut [u8]) -> Result<(), Self::Error> {
|
||||||
let mgm_sensor_request = MgmRequestLis3Mdl::RequestSensorData;
|
let mgm_sensor_request = MgmRequestLis3Mdl::RequestSensorData;
|
||||||
self.sim_request_tx
|
self.sim_request_tx
|
||||||
.send(SimRequest::new_with_epoch_time(mgm_sensor_request))
|
.send(SimRequest::new_with_epoch_time(mgm_sensor_request))
|
||||||
.expect("failed to send request");
|
.expect("failed to send request");
|
||||||
self.sim_reply_rx.recv().expect("reply timeout");
|
self.sim_reply_rx.recv().expect("reply timeout");
|
||||||
/*
|
// TODO: Write the sensor data to the raw buffer.
|
||||||
let mgm_req_json = serde_json::to_string(&mgm_sensor_request)?;
|
|
||||||
self.udp_socket
|
|
||||||
.send_to(mgm_req_json.as_bytes(), self.sim_addr)
|
|
||||||
.unwrap();
|
|
||||||
*/
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,10 @@ use std::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use satrs_minisim::{udp::SIM_CTRL_PORT, SimComponent, SimMessageProvider, SimReply, SimRequest};
|
use satrs_minisim::{
|
||||||
|
udp::SIM_CTRL_PORT, SerializableSimMsgPayload, SimComponent, SimMessageProvider, SimReply,
|
||||||
|
SimRequest,
|
||||||
|
};
|
||||||
use satrs_minisim::{SimCtrlReply, SimCtrlRequest};
|
use satrs_minisim::{SimCtrlReply, SimCtrlRequest};
|
||||||
|
|
||||||
struct SimReplyMap(pub HashMap<SimComponent, mpsc::Sender<SimReply>>);
|
struct SimReplyMap(pub HashMap<SimComponent, mpsc::Sender<SimReply>>);
|
||||||
@ -19,20 +22,9 @@ pub fn create_sim_client(sim_request_rx: mpsc::Receiver<SimRequest>) -> Option<S
|
|||||||
log::info!("simulator client connection success");
|
log::info!("simulator client connection success");
|
||||||
return Some(sim_client);
|
return Some(sim_client);
|
||||||
}
|
}
|
||||||
Err(e) => match e {
|
Err(e) => {
|
||||||
SimClientCreationResult::Io(e) => {
|
log::warn!("sim client creation error: {}", e);
|
||||||
log::warn!("creating SIM client failed with io error {}", e);
|
}
|
||||||
}
|
|
||||||
SimClientCreationResult::Timeout => {
|
|
||||||
log::warn!("timeout when attempting connection to SIM client");
|
|
||||||
}
|
|
||||||
SimClientCreationResult::InvalidPingReply(reply) => {
|
|
||||||
log::warn!(
|
|
||||||
"invalid ping reply when attempting connection to SIM client: {}",
|
|
||||||
reply
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@ -44,7 +36,9 @@ pub enum SimClientCreationResult {
|
|||||||
#[error("timeout when trying to connect to sim UDP server")]
|
#[error("timeout when trying to connect to sim UDP server")]
|
||||||
Timeout,
|
Timeout,
|
||||||
#[error("invalid ping reply when trying connection to UDP sim server")]
|
#[error("invalid ping reply when trying connection to UDP sim server")]
|
||||||
InvalidPingReply(#[from] serde_json::Error),
|
InvalidReplyJsonError(#[from] serde_json::Error),
|
||||||
|
#[error("invalid sim reply, not pong reply as expected: {0:?}")]
|
||||||
|
ReplyIsNotPong(SimReply),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SimClientUdp {
|
pub struct SimClientUdp {
|
||||||
@ -68,9 +62,14 @@ impl SimClientUdp {
|
|||||||
udp_client.send_to(sim_req_json.as_bytes(), simulator_addr)?;
|
udp_client.send_to(sim_req_json.as_bytes(), simulator_addr)?;
|
||||||
match udp_client.recv(&mut reply_buf) {
|
match udp_client.recv(&mut reply_buf) {
|
||||||
Ok(reply_len) => {
|
Ok(reply_len) => {
|
||||||
let sim_reply: SimCtrlReply = serde_json::from_slice(&reply_buf[0..reply_len])?;
|
let sim_reply: SimReply = serde_json::from_slice(&reply_buf[0..reply_len])?;
|
||||||
|
if sim_reply.component() != SimComponent::SimCtrl {
|
||||||
|
return Err(SimClientCreationResult::ReplyIsNotPong(sim_reply));
|
||||||
|
}
|
||||||
udp_client.set_read_timeout(None)?;
|
udp_client.set_read_timeout(None)?;
|
||||||
match sim_reply {
|
let sim_ctrl_reply =
|
||||||
|
SimCtrlReply::from_sim_message(&sim_reply).expect("invalid SIM reply");
|
||||||
|
match sim_ctrl_reply {
|
||||||
SimCtrlReply::Pong => Ok(Self {
|
SimCtrlReply::Pong => Ok(Self {
|
||||||
udp_client,
|
udp_client,
|
||||||
simulator_addr,
|
simulator_addr,
|
||||||
|
@ -16,6 +16,11 @@ use crate::{
|
|||||||
eps::PcduModel,
|
eps::PcduModel,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const SIM_CTRL_REQ_WIRETAPPING: bool = true;
|
||||||
|
const MGM_REQ_WIRETAPPING: bool = true;
|
||||||
|
const PCDU_REQ_WIRETAPPING: bool = true;
|
||||||
|
const MGT_REQ_WIRETAPPING: bool = true;
|
||||||
|
|
||||||
// The simulation controller processes requests and drives the simulation.
|
// The simulation controller processes requests and drives the simulation.
|
||||||
pub struct SimController {
|
pub struct SimController {
|
||||||
pub sys_clock: SystemClock,
|
pub sys_clock: SystemClock,
|
||||||
@ -91,6 +96,9 @@ impl SimController {
|
|||||||
|
|
||||||
fn handle_ctrl_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
fn handle_ctrl_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
||||||
let sim_ctrl_request = SimCtrlRequest::from_sim_message(request)?;
|
let sim_ctrl_request = SimCtrlRequest::from_sim_message(request)?;
|
||||||
|
if SIM_CTRL_REQ_WIRETAPPING {
|
||||||
|
log::info!("received sim ctrl request: {:?}", sim_ctrl_request);
|
||||||
|
}
|
||||||
match sim_ctrl_request {
|
match sim_ctrl_request {
|
||||||
SimCtrlRequest::Ping => {
|
SimCtrlRequest::Ping => {
|
||||||
self.reply_sender
|
self.reply_sender
|
||||||
@ -103,6 +111,9 @@ impl SimController {
|
|||||||
|
|
||||||
fn handle_mgm_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
fn handle_mgm_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
||||||
let mgm_request = MgmRequestLis3Mdl::from_sim_message(request)?;
|
let mgm_request = MgmRequestLis3Mdl::from_sim_message(request)?;
|
||||||
|
if MGM_REQ_WIRETAPPING {
|
||||||
|
log::info!("received MGM request: {:?}", mgm_request);
|
||||||
|
}
|
||||||
match mgm_request {
|
match mgm_request {
|
||||||
MgmRequestLis3Mdl::RequestSensorData => {
|
MgmRequestLis3Mdl::RequestSensorData => {
|
||||||
self.simulation.send_event(
|
self.simulation.send_event(
|
||||||
@ -117,6 +128,9 @@ impl SimController {
|
|||||||
|
|
||||||
fn handle_pcdu_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
fn handle_pcdu_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
||||||
let pcdu_request = PcduRequest::from_sim_message(request)?;
|
let pcdu_request = PcduRequest::from_sim_message(request)?;
|
||||||
|
if PCDU_REQ_WIRETAPPING {
|
||||||
|
log::info!("received PCDU request: {:?}", pcdu_request);
|
||||||
|
}
|
||||||
match pcdu_request {
|
match pcdu_request {
|
||||||
PcduRequest::RequestSwitchInfo => {
|
PcduRequest::RequestSwitchInfo => {
|
||||||
self.simulation
|
self.simulation
|
||||||
@ -135,6 +149,9 @@ impl SimController {
|
|||||||
|
|
||||||
fn handle_mgt_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
fn handle_mgt_request(&mut self, request: &SimRequest) -> Result<(), SimRequestError> {
|
||||||
let mgt_request = MgtRequest::from_sim_message(request)?;
|
let mgt_request = MgtRequest::from_sim_message(request)?;
|
||||||
|
if MGT_REQ_WIRETAPPING {
|
||||||
|
log::info!("received MGT request: {:?}", mgt_request);
|
||||||
|
}
|
||||||
match mgt_request {
|
match mgt_request {
|
||||||
MgtRequest::ApplyTorque { duration, dipole } => self.simulation.send_event(
|
MgtRequest::ApplyTorque { duration, dipole } => self.simulation.send_event(
|
||||||
MagnetorquerModel::apply_torque,
|
MagnetorquerModel::apply_torque,
|
||||||
|
@ -89,7 +89,7 @@ impl SimMessageProvider for SimRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// A generic simulation reply type. Right now, the payload data is expected to be
|
/// A generic simulation reply type. Right now, the payload data is expected to be
|
||||||
/// JSON, which might be changed inthe future.
|
/// JSON, which might be changed in the future.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct SimReply {
|
pub struct SimReply {
|
||||||
inner: SimMessage,
|
inner: SimMessage,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user