forked from M-Labs/artiq-zynq
moninj: hold aux mutex for inject for extra time
this should prevent gateware errors on satellites
This commit is contained in:
parent
3da71dedd7
commit
7d8268adf2
|
@ -61,6 +61,7 @@ mod remote_moninj {
|
||||||
use libboard_artiq::drtioaux_async;
|
use libboard_artiq::drtioaux_async;
|
||||||
use crate::rtio_mgt::drtio;
|
use crate::rtio_mgt::drtio;
|
||||||
use log::error;
|
use log::error;
|
||||||
|
use libasync::delay;
|
||||||
|
|
||||||
pub async 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 = drtio::aux_transact(aux_mutex, linkno, &drtioaux_async::Packet::MonitorRequest {
|
let reply = drtio::aux_transact(aux_mutex, linkno, &drtioaux_async::Packet::MonitorRequest {
|
||||||
|
@ -77,7 +78,7 @@ mod remote_moninj {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async 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_async::send(linkno, &drtioaux_async::Packet::InjectionRequest {
|
drtioaux_async::send(linkno, &drtioaux_async::Packet::InjectionRequest {
|
||||||
destination: destination,
|
destination: destination,
|
||||||
|
@ -85,6 +86,9 @@ mod remote_moninj {
|
||||||
overrd: overrd as _,
|
overrd: overrd as _,
|
||||||
value: value as _
|
value: value as _
|
||||||
}).await.unwrap();
|
}).await.unwrap();
|
||||||
|
// give time for the satellite to process the request before releasing mutex
|
||||||
|
let mut countdown = timer.countdown();
|
||||||
|
delay(&mut countdown, Milliseconds(10)).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async 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 {
|
||||||
|
|
Loading…
Reference in New Issue