提交 a3d04e38 authored 作者: Serhij S's avatar Serhij S

allow to specify modbus registers as K@N

上级 e790c66c
...@@ -23,17 +23,26 @@ impl Register { ...@@ -23,17 +23,26 @@ impl Register {
} }
fn parse_kind_offset(r: &str) -> Result<(Kind, u16)> { fn parse_kind_offset(r: &str) -> Result<(Kind, u16)> {
if let Some(v) = r.strip_prefix('c') { macro_rules! err {
Ok((Kind::Coil, v.parse()?)) () => {
} else if let Some(v) = r.strip_prefix('d') { Error::invalid_data(format!("invalid register: {}", r))
Ok((Kind::Discrete, v.parse()?)) };
} else if let Some(v) = r.strip_prefix('i') {
Ok((Kind::Input, v.parse()?))
} else if let Some(v) = r.strip_prefix('h') {
Ok((Kind::Holding, v.parse()?))
} else {
Err(Error::invalid_data(format!("invalid register kind: {}", r)))
} }
let mut chars = r.chars();
let kind = match chars.next().ok_or_else(|| err!())? {
'c' => Kind::Coil,
'd' => Kind::Discrete,
'i' => Kind::Input,
'h' => Kind::Holding,
_ => return Err(Error::invalid_data(format!("invalid register kind: {}", r))),
};
let o = if chars.next().ok_or_else(|| err!())? == '@' {
2
} else {
1
};
let offset = r[o..].parse().map_err(|_| err!())?;
Ok((kind, offset))
} }
impl FromStr for Register { impl FromStr for Register {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论