added data reply to camera handler, now only missing tmtcpy counterpart

This commit is contained in:
lkoester
2024-04-24 16:26:54 +02:00
parent 88d4384beb
commit 09bef401c0
3 changed files with 44 additions and 13 deletions

View File

@ -35,11 +35,14 @@ use satrs::hk::HkRequest;
use satrs::request::{GenericMessage, MessageMetadata, UniqueApidTargetId};
use satrs::tmtc::PacketAsVec;
use serde::{Deserialize, Serialize};
use std::process::Command;
use std::process::{Command, Output};
use std::sync::mpsc;
use satrs::pus::action::{ActionReplyPus, ActionReplyVariant};
use satrs::pus::EcssTmtcError;
use crate::pus::action::send_data_reply;
const IMS_TESTAPP: &str = "scripts/ims100_testapp";
// const IMS_TESTAPP: &str = "scripts/ims100_testapp";
const IMS_TESTAPP: &str = "ims100_testapp";
const DEFAULT_SINGLE_CAM_PARAMS: CameraPictureParameters = CameraPictureParameters {
R: 8,
@ -141,6 +144,7 @@ pub enum CameraError {
DeserializeError,
ListFileError,
IoError(std::io::Error),
EcssTmtcError(EcssTmtcError),
}
impl From<std::io::Error> for CameraError {
@ -149,6 +153,12 @@ impl From<std::io::Error> for CameraError {
}
}
impl From<EcssTmtcError> for CameraError {
fn from(value: EcssTmtcError) -> Self {
Self::EcssTmtcError(value)
}
}
impl fmt::Display for CameraError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
@ -170,6 +180,9 @@ impl fmt::Display for CameraError {
CameraError::IoError(io_error) => {
write!(f, "{}", io_error)
}
CameraError::EcssTmtcError(ecss_tmtc_error) => {
write!(f ,"{}", ecss_tmtc_error)
}
}
}
}
@ -276,12 +289,14 @@ impl IMS100BatchHandler {
_ => return Err(CameraError::VariantNotImplemented),
},
};
self.take_picture(param)?;
let output = self.take_picture(param)?;
debug!("Sending action reply!");
send_data_reply(self.id, output.stdout, &self.stamp_helper, &self.tm_tx)?;
self.action_reply_tx.send(GenericMessage::new(*requestor_info, ActionReplyPus::new(action_request.action_id, ActionReplyVariant::Completed))).unwrap();
Ok(())
}
pub fn take_picture(&mut self, param: CameraPictureParameters) -> Result<(), CameraError> {
pub fn take_picture(&mut self, param: CameraPictureParameters) -> Result<Output, CameraError> {
info!("Taking image!");
let mut cmd = Command::new(IMS_TESTAPP);
cmd.arg("-R")
@ -305,12 +320,11 @@ impl IMS100BatchHandler {
.arg(&param.E.to_string())
.arg("-w")
.arg(&param.W.to_string());
let output = cmd.output()?;
debug!("{}", String::from_utf8_lossy(&output.stdout));
debug!("Imager Output: {}", String::from_utf8_lossy(&output.stdout));
Ok(())
Ok(output)
}
pub fn list_current_images(&self) -> Result<Vec<String>, CameraError> {