ccs: pl: properly parse errors
This commit is contained in:
parent
12bc89ede6
commit
8b2ef6513f
3 changed files with 70 additions and 19 deletions
19
Cargo.lock
generated
19
Cargo.lock
generated
|
@ -255,6 +255,7 @@ dependencies = [
|
|||
"rocket",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.11",
|
||||
"tokio",
|
||||
"tokio-modbus",
|
||||
"tokio-serial",
|
||||
|
@ -1592,7 +1593,7 @@ dependencies = [
|
|||
"rustc-hash",
|
||||
"rustls",
|
||||
"socket2",
|
||||
"thiserror 2.0.9",
|
||||
"thiserror 2.0.11",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
@ -1611,7 +1612,7 @@ dependencies = [
|
|||
"rustls",
|
||||
"rustls-pki-types",
|
||||
"slab",
|
||||
"thiserror 2.0.9",
|
||||
"thiserror 2.0.11",
|
||||
"tinyvec",
|
||||
"tracing",
|
||||
"web-time",
|
||||
|
@ -2223,7 +2224,7 @@ dependencies = [
|
|||
"serde",
|
||||
"serde_json",
|
||||
"serialport",
|
||||
"thiserror 2.0.9",
|
||||
"thiserror 2.0.11",
|
||||
"tokio",
|
||||
"tokio-modbus",
|
||||
"tokio-serial",
|
||||
|
@ -2240,11 +2241,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "2.0.9"
|
||||
version = "2.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
|
||||
checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc"
|
||||
dependencies = [
|
||||
"thiserror-impl 2.0.9",
|
||||
"thiserror-impl 2.0.11",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2260,9 +2261,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "2.0.9"
|
||||
version = "2.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
|
||||
checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -2377,7 +2378,7 @@ dependencies = [
|
|||
"futures-util",
|
||||
"log",
|
||||
"smallvec",
|
||||
"thiserror 2.0.9",
|
||||
"thiserror 2.0.11",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
]
|
||||
|
|
|
@ -26,6 +26,7 @@ prometheus = "0.13.4"
|
|||
rocket = { version = "0.5.1", features = ["json"] }
|
||||
serde = { version = "1.0.216", features = ["derive"] }
|
||||
serde_json = "1.0.134"
|
||||
thiserror = "2.0.11"
|
||||
tokio = { version = "1.42.0", features = ["full"] }
|
||||
tokio-modbus = "0.16.1"
|
||||
tokio-serial = "5.4.4"
|
||||
|
|
|
@ -298,11 +298,10 @@ impl Pli {
|
|||
T: Into<u8>,
|
||||
{
|
||||
self.send_command(command(20, address.into(), 0)).await?;
|
||||
let buf = self.receive::<1>().await?;
|
||||
if buf[0] == 200 {
|
||||
Ok(self.receive::<1>().await?[0])
|
||||
} else {
|
||||
Err(eyre::eyre!("read error: result is {}", buf[0]))
|
||||
let response = self.get_response().await?;
|
||||
match response {
|
||||
Ok(()) => Ok(self.receive::<1>().await?[0]),
|
||||
Err(e) => Err(e.into()),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -320,11 +319,61 @@ impl Pli {
|
|||
T: Into<u8>,
|
||||
{
|
||||
self.send_command(command(72, address.into(), 0)).await?;
|
||||
let buf = self.receive::<1>().await?;
|
||||
if buf[0] == 200 {
|
||||
Ok(self.receive::<1>().await?[0])
|
||||
} else {
|
||||
Err(eyre::eyre!("read error: result is {}", buf[0]))
|
||||
|
||||
let response = self.get_response().await?;
|
||||
match response {
|
||||
Ok(()) => Ok(self.receive::<1>().await?[0]),
|
||||
Err(e) => Err(e.into()),
|
||||
}
|
||||
}
|
||||
|
||||
async fn get_response(&mut self) -> eyre::Result<Result<(), PlError>> {
|
||||
let res = self.receive::<1>().await?[0];
|
||||
Ok(PlError::parse(res))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
enum PlError {
|
||||
#[error("No comms or corrupt comms")]
|
||||
NoComms,
|
||||
#[error("Loopback response code")]
|
||||
Loopback,
|
||||
#[error("Timeout error")]
|
||||
Timeout,
|
||||
#[error("Checksum error in PLI receive data.")]
|
||||
Checksum,
|
||||
#[error("Command received by PLI is not recognised.")]
|
||||
CommandNotRecognised,
|
||||
#[error("Unused - or could be returning PL40 version!")]
|
||||
Unused1,
|
||||
#[error("Processor did not receive a reply to request.")]
|
||||
NoReply,
|
||||
#[error("Error in reply from PL.")]
|
||||
ErrorFromPl,
|
||||
#[error("<not used> #2")]
|
||||
Unused2,
|
||||
#[error("<not used> #3")]
|
||||
Unused3,
|
||||
#[error("Unknown: {0:#X?}")]
|
||||
Unknown(u8),
|
||||
}
|
||||
|
||||
impl PlError {
|
||||
const fn parse(value: u8) -> Result<(), Self> {
|
||||
match value {
|
||||
200 => Ok(()),
|
||||
5 => Err(Self::NoComms),
|
||||
128 => Err(Self::Loopback),
|
||||
129 => Err(Self::Timeout),
|
||||
130 => Err(Self::Checksum),
|
||||
131 => Err(Self::CommandNotRecognised),
|
||||
132 => Err(Self::Unused1),
|
||||
133 => Err(Self::NoReply),
|
||||
134 => Err(Self::ErrorFromPl),
|
||||
135 => Err(Self::Unused2),
|
||||
136 => Err(Self::Unused3),
|
||||
v => Err(Self::Unknown(v)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue