forked from M-Labs/artiq-zynq
proto fw: add helper function for 4x writer
This commit is contained in:
parent
24a16a3a5b
commit
cc066933fb
|
@ -266,16 +266,48 @@ pub fn receive(channel: usize) -> Result<Option<DownConnPacket>, Error> {
|
||||||
}
|
}
|
||||||
|
|
||||||
trait CxpWrite {
|
trait CxpWrite {
|
||||||
|
fn write_all_4x(&mut self, buf: &[u8]) -> Result<(), Error>;
|
||||||
|
|
||||||
fn write_4x_u8(&mut self, value: u8) -> Result<(), Error>;
|
fn write_4x_u8(&mut self, value: u8) -> Result<(), Error>;
|
||||||
|
|
||||||
|
fn write_4x_u16(&mut self, value: u16) -> Result<(), Error>;
|
||||||
|
|
||||||
|
fn write_4x_u32(&mut self, value: u32) -> Result<(), Error>;
|
||||||
|
|
||||||
|
fn write_4x_u64(&mut self, value: u64) -> Result<(), Error>;
|
||||||
|
|
||||||
fn write_u32(&mut self, value: u32) -> Result<(), Error>;
|
fn write_u32(&mut self, value: u32) -> Result<(), Error>;
|
||||||
}
|
}
|
||||||
impl<Cursor: Write> CxpWrite for Cursor {
|
impl<Cursor: Write> CxpWrite for Cursor {
|
||||||
fn write_4x_u8(&mut self, value: u8) -> Result<(), Error> {
|
fn write_all_4x(&mut self, buf: &[u8]) -> Result<(), Error> {
|
||||||
self.write_all(&[value; 4])?;
|
for byte in buf {
|
||||||
|
self.write_all(&[*byte; 4])?;
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn write_4x_u8(&mut self, value: u8) -> Result<(), Error> {
|
||||||
|
self.write_all_4x(&[value])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_4x_u16(&mut self, value: u16) -> Result<(), Error> {
|
||||||
|
let mut bytes = [0; 2];
|
||||||
|
NetworkEndian::write_u16(&mut bytes, value);
|
||||||
|
self.write_all_4x(&bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_4x_u32(&mut self, value: u32) -> Result<(), Error> {
|
||||||
|
let mut bytes = [0; 4];
|
||||||
|
NetworkEndian::write_u32(&mut bytes, value);
|
||||||
|
self.write_all_4x(&bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_4x_u64(&mut self, value: u64) -> Result<(), Error> {
|
||||||
|
let mut bytes = [0; 6];
|
||||||
|
NetworkEndian::write_u64(&mut bytes, value);
|
||||||
|
self.write_all_4x(&bytes)
|
||||||
|
}
|
||||||
|
|
||||||
fn write_u32(&mut self, value: u32) -> Result<(), Error> {
|
fn write_u32(&mut self, value: u32) -> Result<(), Error> {
|
||||||
let mut bytes = [0; 4];
|
let mut bytes = [0; 4];
|
||||||
NetworkEndian::write_u32(&mut bytes, value);
|
NetworkEndian::write_u32(&mut bytes, value);
|
||||||
|
@ -392,21 +424,11 @@ impl UpConnPacket {
|
||||||
timestamp,
|
timestamp,
|
||||||
data,
|
data,
|
||||||
} => {
|
} => {
|
||||||
let id_bytes = conn_id.to_be_bytes();
|
|
||||||
let length_bytes = length.to_be_bytes();
|
|
||||||
|
|
||||||
// event packet header
|
// event packet header
|
||||||
writer.write_4x_u8(0x07)?;
|
writer.write_4x_u8(0x07)?;
|
||||||
|
writer.write_4x_u32(conn_id)?;
|
||||||
writer.write_4x_u8(id_bytes[0])?;
|
|
||||||
writer.write_4x_u8(id_bytes[1])?;
|
|
||||||
writer.write_4x_u8(id_bytes[2])?;
|
|
||||||
writer.write_4x_u8(id_bytes[3])?;
|
|
||||||
|
|
||||||
writer.write_4x_u8(packet_tag)?;
|
writer.write_4x_u8(packet_tag)?;
|
||||||
|
writer.write_4x_u16(length)?;
|
||||||
writer.write_4x_u8(length_bytes[0])?;
|
|
||||||
writer.write_4x_u8(length_bytes[1])?;
|
|
||||||
|
|
||||||
// event message
|
// event message
|
||||||
let ev_size = event_size.to_be_bytes();
|
let ev_size = event_size.to_be_bytes();
|
||||||
|
|
Loading…
Reference in New Issue