forked from M-Labs/artiq-zynq
moninj: make it use async drtioaux
This commit is contained in:
parent
57d7f01b04
commit
48c9b43171
@ -58,44 +58,44 @@ enum DeviceMessage {
|
|||||||
#[cfg(has_drtio)]
|
#[cfg(has_drtio)]
|
||||||
mod remote_moninj {
|
mod remote_moninj {
|
||||||
use super::*;
|
use super::*;
|
||||||
use libboard_artiq::drtioaux;
|
use libboard_artiq::drtioaux_async;
|
||||||
use crate::rtio_mgt::drtio;
|
use crate::rtio_mgt::drtio;
|
||||||
use log::error;
|
use log::error;
|
||||||
|
|
||||||
pub fn read_probe(aux_mutex: &Rc<Mutex<bool>>, timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, probe: i8) -> i64 {
|
pub async fn read_probe(aux_mutex: &Rc<Mutex<bool>>, timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, probe: i8) -> i64 {
|
||||||
let reply = task::block_on(drtio::aux_transact(aux_mutex, linkno, &drtioaux::Packet::MonitorRequest {
|
let reply = drtio::aux_transact(aux_mutex, linkno, &drtioaux_async::Packet::MonitorRequest {
|
||||||
destination: destination,
|
destination: destination,
|
||||||
channel: channel as _,
|
channel: channel as _,
|
||||||
probe: probe as _},
|
probe: probe as _},
|
||||||
timer));
|
timer).await;
|
||||||
match reply {
|
match reply {
|
||||||
Ok(drtioaux::Packet::MonitorReply { value }) => return value as i64,
|
Ok(drtioaux_async::Packet::MonitorReply { value }) => return value as i64,
|
||||||
Ok(packet) => error!("received unexpected aux packet: {:?}", packet),
|
Ok(packet) => error!("received unexpected aux packet: {:?}", packet),
|
||||||
Err(e) => error!("aux packet error ({})", e)
|
Err(e) => error!("aux packet error ({})", e)
|
||||||
}
|
}
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn inject(aux_mutex: &Rc<Mutex<bool>>, _timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, overrd: i8, value: i8) {
|
pub async fn inject(aux_mutex: &Rc<Mutex<bool>>, _timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, overrd: i8, value: i8) {
|
||||||
let _lock = aux_mutex.lock();
|
let _lock = aux_mutex.lock();
|
||||||
drtioaux::send(linkno, &drtioaux::Packet::InjectionRequest {
|
drtioaux_async::send(linkno, &drtioaux_async::Packet::InjectionRequest {
|
||||||
destination: destination,
|
destination: destination,
|
||||||
channel: channel as _,
|
channel: channel as _,
|
||||||
overrd: overrd as _,
|
overrd: overrd as _,
|
||||||
value: value as _
|
value: value as _
|
||||||
}).unwrap();
|
}).await.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_injection_status(aux_mutex: &Rc<Mutex<bool>>, timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, overrd: i8) -> i8 {
|
pub async fn read_injection_status(aux_mutex: &Rc<Mutex<bool>>, timer: GlobalTimer, linkno: u8, destination: u8, channel: i32, overrd: i8) -> i8 {
|
||||||
let reply = task::block_on(drtio::aux_transact(aux_mutex,
|
let reply = drtio::aux_transact(aux_mutex,
|
||||||
linkno,
|
linkno,
|
||||||
&drtioaux::Packet::InjectionStatusRequest {
|
&drtioaux_async::Packet::InjectionStatusRequest {
|
||||||
destination: destination,
|
destination: destination,
|
||||||
channel: channel as _,
|
channel: channel as _,
|
||||||
overrd: overrd as _},
|
overrd: overrd as _},
|
||||||
timer));
|
timer).await;
|
||||||
match reply {
|
match reply {
|
||||||
Ok(drtioaux::Packet::InjectionStatusReply { value }) => return value as i8,
|
Ok(drtioaux_async::Packet::InjectionStatusReply { value }) => return value as i8,
|
||||||
Ok(packet) => error!("received unexpected aux packet: {:?}", packet),
|
Ok(packet) => error!("received unexpected aux packet: {:?}", packet),
|
||||||
Err(e) => error!("aux packet error ({})", e)
|
Err(e) => error!("aux packet error ({})", e)
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ macro_rules! dispatch {
|
|||||||
local_moninj::$func(channel.into(), $($param, )*)
|
local_moninj::$func(channel.into(), $($param, )*)
|
||||||
} else {
|
} else {
|
||||||
let linkno = hop - 1 as u8;
|
let linkno = hop - 1 as u8;
|
||||||
remote_moninj::$func($aux_mutex, $timer, linkno, destination, channel, $($param, )*)
|
remote_moninj::$func($aux_mutex, $timer, linkno, destination, channel, $($param, )*).await
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ async fn handle_connection(stream: &TcpStream, timer: GlobalTimer,
|
|||||||
|
|
||||||
let mut probe_watch_list: BTreeMap<(i32, i8), Option<i64>> = BTreeMap::new();
|
let mut probe_watch_list: BTreeMap<(i32, i8), Option<i64>> = BTreeMap::new();
|
||||||
let mut inject_watch_list: BTreeMap<(i32, i8), Option<i8>> = BTreeMap::new();
|
let mut inject_watch_list: BTreeMap<(i32, i8), Option<i8>> = BTreeMap::new();
|
||||||
let mut next_check = Milliseconds(0);
|
let mut next_check = timer.get_time();
|
||||||
loop {
|
loop {
|
||||||
// TODO: we don't need fuse() here.
|
// TODO: we don't need fuse() here.
|
||||||
// remove after https://github.com/rust-lang/futures-rs/issues/1989 lands
|
// remove after https://github.com/rust-lang/futures-rs/issues/1989 lands
|
||||||
|
Loading…
Reference in New Issue
Block a user