Compare commits
No commits in common. "d40a038c2f622df91201208d97100d8f3bd5f0cc" and "201701ee8bdfcfaebf65f79b476adb7cb4ca8983" have entirely different histories.
d40a038c2f
...
201701ee8b
|
@ -173,28 +173,6 @@ dependencies = [
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hash32"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc"
|
|
||||||
dependencies = [
|
|
||||||
"byteorder",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "heapless"
|
|
||||||
version = "0.5.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1"
|
|
||||||
dependencies = [
|
|
||||||
"as-slice",
|
|
||||||
"generic-array 0.13.2",
|
|
||||||
"hash32",
|
|
||||||
"serde",
|
|
||||||
"stable_deref_trait",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libm"
|
name = "libm"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
@ -273,23 +251,6 @@ dependencies = [
|
||||||
"cortex-m-semihosting",
|
"cortex-m-semihosting",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "postcard"
|
|
||||||
version = "0.5.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b3e3f5c2e9a91383c6594ec68aa2dfdfe19a3c86f34b088ba7203f2483d2682f"
|
|
||||||
dependencies = [
|
|
||||||
"heapless",
|
|
||||||
"postcard-cobs",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "postcard-cobs"
|
|
||||||
version = "0.1.5-pre"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7c68cb38ed13fd7bc9dd5db8f165b7c8d9c1a315104083a2b10f11354c2af97f"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
|
@ -344,26 +305,6 @@ version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde"
|
|
||||||
version = "1.0.116"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5"
|
|
||||||
dependencies = [
|
|
||||||
"serde_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_derive"
|
|
||||||
version = "1.0.116"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smoltcp"
|
name = "smoltcp"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
|
@ -463,8 +404,6 @@ dependencies = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"panic-abort",
|
"panic-abort",
|
||||||
"panic-semihosting",
|
"panic-semihosting",
|
||||||
"postcard",
|
|
||||||
"serde",
|
|
||||||
"smoltcp",
|
"smoltcp",
|
||||||
"stm32-eth",
|
"stm32-eth",
|
||||||
"stm32f4xx-hal",
|
"stm32f4xx-hal",
|
||||||
|
@ -492,7 +431,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8bb593f5252356bfb829112f8fca2d0982d48588d2d6bb5a92553b0dfc4c9aba"
|
checksum = "8bb593f5252356bfb829112f8fca2d0982d48588d2d6bb5a92553b0dfc4c9aba"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"serde",
|
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -31,10 +31,8 @@ num-traits = { version = "0.2", default-features = false, features = ["libm"] }
|
||||||
usb-device = "0.2"
|
usb-device = "0.2"
|
||||||
usbd-serial = "0.1"
|
usbd-serial = "0.1"
|
||||||
nb = "0.1"
|
nb = "0.1"
|
||||||
uom = { version = "0.29", default-features = false, features = ["autoconvert", "si", "f64", "use_serde"] }
|
uom = { version = "0.29", default-features = false, features = ["autoconvert", "si", "f64"] }
|
||||||
eeprom24x = "0.3"
|
eeprom24x = "0.3"
|
||||||
serde = { version = "1.0", default-features = false, features = ["derive"] }
|
|
||||||
postcard = "0.5.1"
|
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
stm32f4xx-hal = { git = "https://github.com/stm32-rs/stm32f4xx-hal.git" }
|
stm32f4xx-hal = { git = "https://github.com/stm32-rs/stm32f4xx-hal.git" }
|
||||||
|
|
|
@ -71,5 +71,3 @@ The scope of this setting is per TCP session.
|
||||||
| `s-h` | Show Steinhart-Hart equation parameters |
|
| `s-h` | Show Steinhart-Hart equation parameters |
|
||||||
| `s-h <0/1> <t/b/r0> <value>` | Set Steinhart-Hart parameter for a channel |
|
| `s-h <0/1> <t/b/r0> <value>` | Set Steinhart-Hart parameter for a channel |
|
||||||
| `postfilter <0/1> rate <rate>` | Set postfilter output data rate |
|
| `postfilter <0/1> rate <rate>` | Set postfilter output data rate |
|
||||||
| `load` | Restore configuration from EEPROM |
|
|
||||||
| `save` | Save configuration to EEPROM |
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ use nom::{
|
||||||
error::ErrorKind,
|
error::ErrorKind,
|
||||||
};
|
};
|
||||||
use num_traits::{Num, ParseFloatError};
|
use num_traits::{Num, ParseFloatError};
|
||||||
use serde::{Serialize, Deserialize};
|
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
@ -123,7 +122,7 @@ pub enum PwmPin {
|
||||||
MaxV,
|
MaxV,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
pub enum CenterPoint {
|
pub enum CenterPoint {
|
||||||
Vref,
|
Vref,
|
||||||
Override(f64),
|
Override(f64),
|
||||||
|
@ -132,8 +131,6 @@ pub enum CenterPoint {
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub enum Command {
|
pub enum Command {
|
||||||
Quit,
|
Quit,
|
||||||
Load,
|
|
||||||
Save,
|
|
||||||
Show(ShowCommand),
|
Show(ShowCommand),
|
||||||
Reporting(bool),
|
Reporting(bool),
|
||||||
/// PWM parameter setting
|
/// PWM parameter setting
|
||||||
|
@ -408,8 +405,6 @@ fn postfilter(input: &[u8]) -> IResult<&[u8], Result<Command, Error>> {
|
||||||
|
|
||||||
fn command(input: &[u8]) -> IResult<&[u8], Result<Command, Error>> {
|
fn command(input: &[u8]) -> IResult<&[u8], Result<Command, Error>> {
|
||||||
alt((value(Ok(Command::Quit), tag("quit")),
|
alt((value(Ok(Command::Quit), tag("quit")),
|
||||||
value(Ok(Command::Load), tag("load")),
|
|
||||||
value(Ok(Command::Save), tag("save")),
|
|
||||||
map(report, Ok),
|
map(report, Ok),
|
||||||
pwm,
|
pwm,
|
||||||
center_point,
|
center_point,
|
||||||
|
@ -442,18 +437,6 @@ mod test {
|
||||||
assert_eq!(command, Ok(Command::Quit));
|
assert_eq!(command, Ok(Command::Quit));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn parse_load() {
|
|
||||||
let command = Command::parse(b"load");
|
|
||||||
assert_eq!(command, Ok(Command::Load));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn parse_save() {
|
|
||||||
let command = Command::parse(b"save");
|
|
||||||
assert_eq!(command, Ok(Command::Save));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_report() {
|
fn parse_report() {
|
||||||
let command = Command::parse(b"report");
|
let command = Command::parse(b"report");
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
use serde::{Serialize, Deserialize};
|
|
||||||
use postcard::to_slice;
|
|
||||||
use crate::{
|
|
||||||
channel_state::ChannelState,
|
|
||||||
channels::{CHANNELS, Channels},
|
|
||||||
command_parser::CenterPoint,
|
|
||||||
pid,
|
|
||||||
steinhart_hart,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Just for encoding/decoding, actual state resides in ChannelState
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
pub struct Config {
|
|
||||||
channels: [ChannelConfig; CHANNELS],
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Config {
|
|
||||||
pub fn new(channels: &mut Channels) -> Self {
|
|
||||||
Config {
|
|
||||||
channels: [
|
|
||||||
ChannelConfig::new(channels.channel_state(0usize)),
|
|
||||||
ChannelConfig::new(channels.channel_state(1usize)),
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn encode<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a mut [u8], postcard::Error> {
|
|
||||||
to_slice(self, buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn decode(buffer: &[u8]) -> Result<Self, postcard::Error> {
|
|
||||||
from_bytes(buffer)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
pub struct ChannelConfig {
|
|
||||||
center: CenterPoint,
|
|
||||||
pid: pid::Parameters,
|
|
||||||
pid_target: f64,
|
|
||||||
sh: steinhart_hart::Parameters,
|
|
||||||
// TODO: pwm limits
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ChannelConfig {
|
|
||||||
pub fn new(state: &ChannelState) -> Self {
|
|
||||||
ChannelConfig {
|
|
||||||
center: state.center.clone(),
|
|
||||||
pid: state.pid.parameters.clone(),
|
|
||||||
pid_target: state.pid.target,
|
|
||||||
sh: state.sh.clone(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
15
src/main.rs
15
src/main.rs
|
@ -63,8 +63,6 @@ mod channels;
|
||||||
use channels::{CHANNELS, Channels};
|
use channels::{CHANNELS, Channels};
|
||||||
mod channel;
|
mod channel;
|
||||||
mod channel_state;
|
mod channel_state;
|
||||||
mod config;
|
|
||||||
use config::Config;
|
|
||||||
|
|
||||||
|
|
||||||
const HSE: MegaHertz = MegaHertz(8);
|
const HSE: MegaHertz = MegaHertz(8);
|
||||||
|
@ -429,19 +427,6 @@ fn main() -> ! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Command::Load => {}
|
|
||||||
Command::Save => {
|
|
||||||
let config = Config::new(&mut channels);
|
|
||||||
let mut buf = [0; 128];
|
|
||||||
match config.encode(&mut buf) {
|
|
||||||
Ok(buf) => {
|
|
||||||
let _ = writeln!(socket, "Encoded {}: {:?}", buf.len(), buf);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
let _ = writeln!(socket, "Error encoding configuration: {}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok(SessionOutput::Error(e)) => {
|
Ok(SessionOutput::Error(e)) => {
|
||||||
let _ = writeln!(socket, "Command error: {:?}", e);
|
let _ = writeln!(socket, "Command error: {:?}", e);
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
use serde::{Serialize, Deserialize};
|
#[derive(Clone, Copy)]
|
||||||
|
|
||||||
#[derive(Clone, Serialize, Deserialize)]
|
|
||||||
pub struct Parameters {
|
pub struct Parameters {
|
||||||
pub kp: f64,
|
pub kp: f64,
|
||||||
pub ki: f64,
|
pub ki: f64,
|
||||||
|
|
|
@ -8,10 +8,9 @@ use uom::si::{
|
||||||
ratio::ratio,
|
ratio::ratio,
|
||||||
thermodynamic_temperature::{degree_celsius, kelvin},
|
thermodynamic_temperature::{degree_celsius, kelvin},
|
||||||
};
|
};
|
||||||
use serde::{Serialize, Deserialize};
|
|
||||||
|
|
||||||
/// Steinhart-Hart equation parameters
|
/// Steinhart-Hart equation parameters
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Parameters {
|
pub struct Parameters {
|
||||||
/// Base temperature
|
/// Base temperature
|
||||||
pub t0: ThermodynamicTemperature,
|
pub t0: ThermodynamicTemperature,
|
||||||
|
|
Loading…
Reference in New Issue