libboard_artiq: tried moving drtio to io::proto
This commit is contained in:
parent
e0516eeda9
commit
581f6c6b4e
@ -13,6 +13,7 @@ build_zynq = { path = "../libbuild_zynq" }
|
|||||||
log = "0.4"
|
log = "0.4"
|
||||||
log_buffer = { version = "1.2" }
|
log_buffer = { version = "1.2" }
|
||||||
crc = { version = "1.7", default-features = false }
|
crc = { version = "1.7", default-features = false }
|
||||||
|
core_io = { version = "0.1", features = ["collections"] }
|
||||||
|
|
||||||
io = { path = "../libio", features = ["byteorder"] }
|
io = { path = "../libio", features = ["byteorder"] }
|
||||||
libboard_zynq = { git = "https://git.m-labs.hk/M-Labs/zynq-rs.git"}
|
libboard_zynq = { git = "https://git.m-labs.hk/M-Labs/zynq-rs.git"}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
use core::slice;
|
use core::slice;
|
||||||
use crc;
|
use crc;
|
||||||
|
|
||||||
|
use core_io::Error as IoError;
|
||||||
|
|
||||||
use io::{proto::ProtoRead, proto::ProtoWrite, Cursor, Error as IoError};
|
use io::{proto::ProtoRead, proto::ProtoWrite, Cursor};
|
||||||
use mem::mem::DRTIOAUX_MEM;
|
use mem::mem::DRTIOAUX_MEM;
|
||||||
use pl::csr::DRTIOAUX;
|
use pl::csr::DRTIOAUX;
|
||||||
use drtioaux_proto::Error as ProtocolError;
|
use drtioaux_proto::Error as ProtocolError;
|
||||||
@ -12,7 +13,7 @@ pub use drtioaux_proto::Packet;
|
|||||||
|
|
||||||
// this is parametric over T because there's no impl Fail for !.
|
// this is parametric over T because there's no impl Fail for !.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error<T> {
|
pub enum Error {
|
||||||
GatewareError,
|
GatewareError,
|
||||||
CorruptedPacket,
|
CorruptedPacket,
|
||||||
|
|
||||||
@ -22,17 +23,17 @@ pub enum Error<T> {
|
|||||||
|
|
||||||
RoutingError,
|
RoutingError,
|
||||||
|
|
||||||
Protocol(ProtocolError<T>)
|
Protocol(ProtocolError)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> From<ProtocolError<T>> for Error<T> {
|
impl From<ProtocolError> for Error {
|
||||||
fn from(value: ProtocolError<T>) -> Error<T> {
|
fn from(value: ProtocolError) -> Error {
|
||||||
Error::Protocol(value)
|
Error::Protocol(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> From<IoError<T>> for Error<T> {
|
impl From<IoError> for Error {
|
||||||
fn from(value: IoError<T>) -> Error<T> {
|
fn from(value: IoError) -> Error {
|
||||||
Error::Protocol(ProtocolError::Io(value))
|
Error::Protocol(ProtocolError::Io(value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,8 +60,8 @@ fn has_rx_error(linkno: u8) -> bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn receive<F, T>(linkno: u8, f: F) -> Result<Option<T>, Error<!>>
|
fn receive<F, T>(linkno: u8, f: F) -> Result<Option<T>, Error>
|
||||||
where F: FnOnce(&[u8]) -> Result<T, Error<!>>
|
where F: FnOnce(&[u8]) -> Result<T, Error>
|
||||||
{
|
{
|
||||||
let linkidx = linkno as usize;
|
let linkidx = linkno as usize;
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -76,7 +77,7 @@ fn receive<F, T>(linkno: u8, f: F) -> Result<Option<T>, Error<!>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn recv(linkno: u8) -> Result<Option<Packet>, Error<!>> {
|
pub fn recv(linkno: u8) -> Result<Option<Packet>, Error> {
|
||||||
if has_rx_error(linkno) {
|
if has_rx_error(linkno) {
|
||||||
return Err(Error::GatewareError)
|
return Err(Error::GatewareError)
|
||||||
}
|
}
|
||||||
@ -101,7 +102,7 @@ pub fn recv(linkno: u8) -> Result<Option<Packet>, Error<!>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn recv_timeout(linkno: u8, timeout_ms: Option<u64>,
|
pub fn recv_timeout(linkno: u8, timeout_ms: Option<u64>,
|
||||||
timer: GlobalTimer) -> Result<Packet, Error<!>>
|
timer: GlobalTimer) -> Result<Packet, Error>
|
||||||
{
|
{
|
||||||
let timeout_ms = Milliseconds(timeout_ms.unwrap_or(10));
|
let timeout_ms = Milliseconds(timeout_ms.unwrap_or(10));
|
||||||
let limit = timer.get_time() + timeout_ms;
|
let limit = timer.get_time() + timeout_ms;
|
||||||
@ -114,8 +115,8 @@ pub fn recv_timeout(linkno: u8, timeout_ms: Option<u64>,
|
|||||||
Err(Error::TimedOut)
|
Err(Error::TimedOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn transmit<F>(linkno: u8, f: F) -> Result<(), Error<!>>
|
fn transmit<F>(linkno: u8, f: F) -> Result<(), Error>
|
||||||
where F: FnOnce(&mut [u8]) -> Result<usize, Error<!>>
|
where F: FnOnce(&mut [u8]) -> Result<usize, Error>
|
||||||
{
|
{
|
||||||
let linkno = linkno as usize;
|
let linkno = linkno as usize;
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -129,7 +130,7 @@ fn transmit<F>(linkno: u8, f: F) -> Result<(), Error<!>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn send(linkno: u8, packet: &Packet) -> Result<(), Error<!>> {
|
pub fn send(linkno: u8, packet: &Packet) -> Result<(), Error> {
|
||||||
transmit(linkno, |buffer| {
|
transmit(linkno, |buffer| {
|
||||||
let mut writer = Cursor::new(buffer);
|
let mut writer = Cursor::new(buffer);
|
||||||
|
|
||||||
|
@ -1,17 +1,27 @@
|
|||||||
use io::{Read, proto::ProtoRead, Write, proto::ProtoWrite, Error as IoError};
|
use core_io::Error as IoError;
|
||||||
|
|
||||||
|
use io::proto::{ProtoWrite as Write, ProtoRead as Read};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error<T> {
|
pub enum Error {
|
||||||
UnknownPacket(u8),
|
UnknownPacket(u8),
|
||||||
Io(IoError<T>)
|
Io(IoError)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> From<IoError<T>> for Error<T> {
|
impl From<IoError> for Error {
|
||||||
fn from(value: IoError<T>) -> Error<T> {
|
fn from(value: IoError) -> Error {
|
||||||
Error::Io(value)
|
Error::Io(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Why does this not work?!
|
||||||
|
impl From<Write::WriteError> for Error {
|
||||||
|
fn from(value: Write::WriteError) -> Error {
|
||||||
|
Error::Io(value)
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
pub enum Packet {
|
pub enum Packet {
|
||||||
EchoRequest,
|
EchoRequest,
|
||||||
@ -57,8 +67,8 @@ pub enum Packet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Packet {
|
impl Packet {
|
||||||
pub fn read_from<R>(reader: &mut R) -> Result<Self, Error<R::ReadError>>
|
pub fn read_from<R>(reader: &mut R) -> Result<Self, Error>
|
||||||
where R: io::Read + ?Sized
|
where R: Read + ?Sized
|
||||||
{
|
{
|
||||||
Ok(match reader.read_u8()? {
|
Ok(match reader.read_u8()? {
|
||||||
0x00 => Packet::EchoRequest,
|
0x00 => Packet::EchoRequest,
|
||||||
@ -194,9 +204,10 @@ impl Packet {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_to<W>(&self, writer: &mut W) -> Result<(), IoError<W::WriteError>>
|
pub fn write_to<W>(&self, writer: &mut W) -> Result<(), IoError>
|
||||||
where W: Write + ?Sized
|
where W: Write + ?Sized
|
||||||
{
|
{
|
||||||
|
|
||||||
match *self {
|
match *self {
|
||||||
Packet::EchoRequest =>
|
Packet::EchoRequest =>
|
||||||
writer.write_u8(0x00)?,
|
writer.write_u8(0x00)?,
|
||||||
@ -357,4 +368,5 @@ impl Packet {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ extern crate libconfig;
|
|||||||
extern crate libcortex_a9;
|
extern crate libcortex_a9;
|
||||||
extern crate log_buffer;
|
extern crate log_buffer;
|
||||||
extern crate io;
|
extern crate io;
|
||||||
|
extern crate core_io;
|
||||||
|
|
||||||
// has csr; taken from runtime main
|
// has csr; taken from runtime main
|
||||||
#[path = "../../../build/pl.rs"]
|
#[path = "../../../build/pl.rs"]
|
||||||
|
Loading…
Reference in New Issue
Block a user