Added timeout interrupt bit, fixed several bugs with Socket code, added getters for the TX read/write pointers
This commit is contained in:
parent
41cd42eabf
commit
8aa5656873
2 changed files with 48 additions and 6 deletions
|
|
@ -60,6 +60,7 @@ pub mod socketn {
|
||||||
pub enum Interrupt {
|
pub enum Interrupt {
|
||||||
All = 0b11111111u8,
|
All = 0b11111111u8,
|
||||||
SendOk = 0b010000u8,
|
SendOk = 0b010000u8,
|
||||||
|
Timeout = 0b01000u8,
|
||||||
Receive = 0b00100u8,
|
Receive = 0b00100u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,8 @@ pub trait Socket {
|
||||||
code: socketn::Interrupt,
|
code: socketn::Interrupt,
|
||||||
) -> Result<bool, SpiBus::Error> {
|
) -> Result<bool, SpiBus::Error> {
|
||||||
let mut data = [0u8];
|
let mut data = [0u8];
|
||||||
BigEndian::write_u16(&mut data, code as u16);
|
bus.transfer_frame(self.register(), socketn::INTERRUPT, false, &mut data)?;
|
||||||
bus.transfer_frame(self.register(), socketn::INTERRUPT_MASK, true, &mut data)?;
|
Ok(data[0] & code as u8 != 0)
|
||||||
Ok(data[0] & socketn::Interrupt::Receive as u8 != 0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_source_port<SpiBus: ActiveBus>(
|
fn set_source_port<SpiBus: ActiveBus>(
|
||||||
|
|
@ -73,6 +72,20 @@ pub trait Socket {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_tx_read_pointer<SpiBus: ActiveBus>(
|
||||||
|
&self,
|
||||||
|
bus: &mut SpiBus,
|
||||||
|
) -> Result<u16, SpiBus::Error> {
|
||||||
|
let mut data = [0u8; 2];
|
||||||
|
bus.transfer_frame(
|
||||||
|
self.register(),
|
||||||
|
socketn::TX_DATA_READ_POINTER,
|
||||||
|
false,
|
||||||
|
&mut data
|
||||||
|
)?;
|
||||||
|
Ok(BigEndian::read_u16(&data))
|
||||||
|
}
|
||||||
|
|
||||||
fn set_tx_read_pointer<SpiBus: ActiveBus>(
|
fn set_tx_read_pointer<SpiBus: ActiveBus>(
|
||||||
&self,
|
&self,
|
||||||
bus: &mut SpiBus,
|
bus: &mut SpiBus,
|
||||||
|
|
@ -89,6 +102,20 @@ pub trait Socket {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_tx_write_pointer<SpiBus: ActiveBus>(
|
||||||
|
&self,
|
||||||
|
bus: &mut SpiBus,
|
||||||
|
) -> Result<u16, SpiBus::Error> {
|
||||||
|
let mut data = [0u8; 2];
|
||||||
|
bus.transfer_frame(
|
||||||
|
self.register(),
|
||||||
|
socketn::TX_DATA_WRITE_POINTER,
|
||||||
|
false,
|
||||||
|
&mut data
|
||||||
|
)?;
|
||||||
|
Ok(BigEndian::read_u16(&data))
|
||||||
|
}
|
||||||
|
|
||||||
fn set_tx_write_pointer<SpiBus: ActiveBus>(
|
fn set_tx_write_pointer<SpiBus: ActiveBus>(
|
||||||
&self,
|
&self,
|
||||||
bus: &mut SpiBus,
|
bus: &mut SpiBus,
|
||||||
|
|
@ -113,7 +140,7 @@ pub trait Socket {
|
||||||
bus.transfer_frame(
|
bus.transfer_frame(
|
||||||
self.register(),
|
self.register(),
|
||||||
socketn::RX_DATA_READ_POINTER,
|
socketn::RX_DATA_READ_POINTER,
|
||||||
true,
|
false,
|
||||||
&mut data
|
&mut data
|
||||||
)?;
|
)?;
|
||||||
Ok(BigEndian::read_u16(&data))
|
Ok(BigEndian::read_u16(&data))
|
||||||
|
|
@ -135,13 +162,27 @@ pub trait Socket {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_interrupt_mask<SpiBus: ActiveBus>(
|
||||||
|
&self,
|
||||||
|
bus: &mut SpiBus,
|
||||||
|
mask: u8,
|
||||||
|
) -> Result<(), SpiBus::Error> {
|
||||||
|
let mut data = [mask];
|
||||||
|
bus.transfer_frame(
|
||||||
|
self.register(),
|
||||||
|
socketn::INTERRUPT_MASK,
|
||||||
|
true,
|
||||||
|
&mut data
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn command<SpiBus: ActiveBus>(
|
fn command<SpiBus: ActiveBus>(
|
||||||
&self,
|
&self,
|
||||||
bus: &mut SpiBus,
|
bus: &mut SpiBus,
|
||||||
command: socketn::Command,
|
command: socketn::Command,
|
||||||
) -> Result<(), SpiBus::Error> {
|
) -> Result<(), SpiBus::Error> {
|
||||||
let mut data = [0u8; 2];
|
let mut data = [command as u8];
|
||||||
BigEndian::write_u16(&mut data, command as u16);
|
|
||||||
bus.transfer_frame(self.register(), socketn::COMMAND, true, &mut data)?;
|
bus.transfer_frame(self.register(), socketn::COMMAND, true, &mut data)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue