From 623a605d3b9c6b5de9f653e8ab8abce2a8bad5de Mon Sep 17 00:00:00 2001 From: whitequark Date: Thu, 23 Feb 2017 08:59:27 +0000 Subject: [PATCH] satman: refactor type conversions. --- artiq/firmware/satman/lib.rs | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/artiq/firmware/satman/lib.rs b/artiq/firmware/satman/lib.rs index d5a7b6a63..2ce6a9704 100644 --- a/artiq/firmware/satman/lib.rs +++ b/artiq/firmware/satman/lib.rs @@ -11,35 +11,16 @@ extern crate logger_artiq; extern crate board; extern crate drtioaux; -// FIXME: is there a better way of doing this? -trait FromU16 { - fn from_u16(v: u16) -> Self; -} - -impl FromU16 for u16 { - fn from_u16(v: u16) -> u16 { - v - } -} - -impl FromU16 for u8 { - fn from_u16(v: u16) -> u8 { - v as u8 - } -} - -fn u8_or_u16(v: u16) -> T { - FromU16::from_u16(v) -} - fn process_aux_packet(p: &drtioaux::Packet) { + // In the code below, *_chan_sel_write takes an u8 if there are fewer than 256 channels, + // and u16 otherwise; hence the `as _` conversion. match *p { drtioaux::Packet::EchoRequest => drtioaux::hw::send(&drtioaux::Packet::EchoReply).unwrap(), drtioaux::Packet::MonitorRequest { channel, probe } => { let value; #[cfg(has_rtio_moninj)] unsafe { - board::csr::rtio_moninj::mon_chan_sel_write(u8_or_u16(channel)); + board::csr::rtio_moninj::mon_chan_sel_write(channel as _); board::csr::rtio_moninj::mon_probe_sel_write(probe); board::csr::rtio_moninj::mon_value_update_write(1); value = board::csr::rtio_moninj::mon_value_read(); @@ -54,7 +35,7 @@ fn process_aux_packet(p: &drtioaux::Packet) { drtioaux::Packet::InjectionRequest { channel, overrd, value } => { #[cfg(has_rtio_moninj)] unsafe { - board::csr::rtio_moninj::inj_chan_sel_write(u8_or_u16(channel)); + board::csr::rtio_moninj::inj_chan_sel_write(channel as _); board::csr::rtio_moninj::inj_override_sel_write(overrd); board::csr::rtio_moninj::inj_value_write(value); } @@ -63,7 +44,7 @@ fn process_aux_packet(p: &drtioaux::Packet) { let value; #[cfg(has_rtio_moninj)] unsafe { - board::csr::rtio_moninj::inj_chan_sel_write(u8_or_u16(channel)); + board::csr::rtio_moninj::inj_chan_sel_write(channel as _); board::csr::rtio_moninj::inj_override_sel_write(overrd); value = board::csr::rtio_moninj::inj_value_read(); }