Robin Mueller
de4e6183b3
All checks were successful
Rust/sat-rs/pipeline/pr-main This commit looks good
- Add new shared subcrate satrs-shared to split off some shared components not expected to change very often. - Renmame `satrs-core` to `satrs`. It is expected that sat-rs will remain the primary crate, so the core information is superfluous, and core also implies stability, which will not be the case for some time.
95 lines
2.2 KiB
Rust
95 lines
2.2 KiB
Rust
use crate::tmtc::TargetId;
|
|
use core::mem::size_of;
|
|
#[cfg(feature = "serde")]
|
|
use serde::{Deserialize, Serialize};
|
|
use spacepackets::ByteConversionError;
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
pub struct ModeAndSubmode {
|
|
mode: u32,
|
|
submode: u16,
|
|
}
|
|
|
|
impl ModeAndSubmode {
|
|
pub const fn new_mode_only(mode: u32) -> Self {
|
|
Self { mode, submode: 0 }
|
|
}
|
|
|
|
pub const fn new(mode: u32, submode: u16) -> Self {
|
|
Self { mode, submode }
|
|
}
|
|
|
|
pub fn raw_len() -> usize {
|
|
size_of::<u32>() + size_of::<u16>()
|
|
}
|
|
|
|
pub fn from_be_bytes(buf: &[u8]) -> Result<Self, ByteConversionError> {
|
|
if buf.len() < 6 {
|
|
return Err(ByteConversionError::FromSliceTooSmall {
|
|
expected: 6,
|
|
found: buf.len(),
|
|
});
|
|
}
|
|
Ok(Self {
|
|
mode: u32::from_be_bytes(buf[0..4].try_into().unwrap()),
|
|
submode: u16::from_be_bytes(buf[4..6].try_into().unwrap()),
|
|
})
|
|
}
|
|
|
|
pub fn mode(&self) -> u32 {
|
|
self.mode
|
|
}
|
|
|
|
pub fn submode(&self) -> u16 {
|
|
self.submode
|
|
}
|
|
}
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
pub struct ModeCommand {
|
|
pub address: TargetId,
|
|
pub mode_submode: ModeAndSubmode,
|
|
}
|
|
|
|
impl ModeCommand {
|
|
pub const fn new(address: TargetId, mode_submode: ModeAndSubmode) -> Self {
|
|
Self {
|
|
address,
|
|
mode_submode,
|
|
}
|
|
}
|
|
|
|
pub fn address(&self) -> TargetId {
|
|
self.address
|
|
}
|
|
|
|
pub fn mode_submode(&self) -> ModeAndSubmode {
|
|
self.mode_submode
|
|
}
|
|
|
|
pub fn mode(&self) -> u32 {
|
|
self.mode_submode.mode
|
|
}
|
|
|
|
pub fn submode(&self) -> u16 {
|
|
self.mode_submode.submode
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
pub enum ModeRequest {
|
|
SetMode(ModeAndSubmode),
|
|
ReadMode,
|
|
AnnounceMode,
|
|
AnnounceModeRecursive,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
|
pub struct TargetedModeRequest {
|
|
target_id: TargetId,
|
|
mode_request: ModeRequest,
|
|
}
|