cheapsdo2.0/protocol/src/lib.rs

78 lines
1.6 KiB
Rust

#![no_std]
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub enum DeviceMessage {
Status(StatusMessage),
PLLSettings(PLLSettings),
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub enum HostMessage {
RequestStatus,
SetPLLSettings(PLLSettings),
GetPllSettings,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct StatusMessage {
pub measured_frequency: u64,
pub average_frequency: u64,
pub pwm: u16,
}
impl Default for StatusMessage {
fn default() -> Self {
Self {
measured_frequency: 0u64,
average_frequency: 0u64,
pwm: 0u16,
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct PLLSettings {
pub ms1_frequency: u32,
pub ms2_frequency: u32,
pub outputs: [OutputSettings; 3],
}
impl Default for PLLSettings {
fn default() -> Self {
Self {
ms1_frequency: 800_000_000,
ms2_frequency: 800_000_000,
outputs: [
OutputSettings::default(),
OutputSettings::default(),
OutputSettings::default(),
],
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub struct OutputSettings {
pub frequency: u32,
pub enable: bool,
pub source: Multisynth,
}
impl Default for OutputSettings {
fn default() -> Self {
Self {
frequency: 10_000_000,
enable: false,
source: Multisynth::MS1,
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
pub enum Multisynth {
MS1,
MS2,
}