Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::io::Result;
- extern crate byteorder;
- use byteorder::{BigEndian, ByteOrder};
- pub trait HoldingRegisters {
- fn get<A: Into<u16>>(&mut self, addr: A) -> Result<u16>;
- fn gets<A: Into<u16>, D: From<u16>>(&mut self, start_addr: A, buff: &mut [D]) -> Result<()>;
- fn set<A: Into<u16>, D: Into<u16>>(&mut self, addr: A, data: D) -> Result<()>;
- fn sets<A: Into<u16>, D: Into<u16> + Copy>(&mut self, start_addr: A, buff: &[D]) -> Result<()>;
- }
- pub trait RawHoldingRegisters<'a> {
- type Data: RawData + 'a;
- fn put<A: Into<u16>>(&'a mut self, start_addr: A, registers: u16, bytes: u8) -> Self::Data;
- fn pop<A: Into<u16>>(&'a mut self, start_addr: A, registers: u16) -> Self::Data;
- }
- impl<'a, T: RawHoldingRegisters<'a>> HoldingRegisters for T {
- fn get<A: Into<u16>>(&mut self, addr: A) -> Result<u16> {
- let raw = self.pop(addr, 1);
- raw.query()?;
- Ok(BigEndian::read_u16(raw.as_slice()))
- }
- fn gets<A: Into<u16>, D: From<u16>>(&mut self, start_addr: A, buff: &mut [D]) -> Result<()> {
- Ok(())
- }
- fn set<A: Into<u16>, D: Into<u16>>(&mut self, addr: A, data: D) -> Result<()> {
- Ok(())
- }
- fn sets<A: Into<u16>, D: Into<u16> + Copy>(&mut self, start_addr: A, buff: &[D]) -> Result<()> {
- Ok(())
- }
- }
- pub trait RawData {
- fn query(&mut self) -> Result<()>;
- fn as_slice(&self) -> &[u8];
- fn as_mut_slice(&mut self) -> &mut [u8];
- }
Add Comment
Please, Sign In to add comment