Skip to content

Commit ba78c6d

Browse files
committed
Added timeout interrupt bit, fixed several bugs with Socket code, added getters for the TX read/write pointers
1 parent 0a0d9cc commit ba78c6d

File tree

2 files changed

+48
-6
lines changed

2 files changed

+48
-6
lines changed

src/register.rs

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ pub mod socketn {
6060
pub enum Interrupt {
6161
All = 0b11111111u8,
6262
SendOk = 0b010000u8,
63+
Timeout = 0b01000u8,
6364
Receive = 0b00100u8,
6465
}
6566

src/socket/mod.rs

+47-6
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ pub trait Socket {
3636
code: socketn::Interrupt,
3737
) -> Result<bool, SpiBus::Error> {
3838
let mut data = [0u8];
39-
BigEndian::write_u16(&mut data, code as u16);
40-
bus.transfer_frame(self.register(), socketn::INTERRUPT_MASK, true, &mut data)?;
41-
Ok(data[0] & socketn::Interrupt::Receive as u8 != 0)
39+
bus.transfer_frame(self.register(), socketn::INTERRUPT, false, &mut data)?;
40+
Ok(data[0] & code as u8 != 0)
4241
}
4342

4443
fn set_source_port<SpiBus: ActiveBus>(
@@ -73,6 +72,20 @@ pub trait Socket {
7372
Ok(())
7473
}
7574

75+
fn get_tx_read_pointer<SpiBus: ActiveBus>(
76+
&self,
77+
bus: &mut SpiBus,
78+
) -> Result<u16, SpiBus::Error> {
79+
let mut data = [0u8; 2];
80+
bus.transfer_frame(
81+
self.register(),
82+
socketn::TX_DATA_READ_POINTER,
83+
false,
84+
&mut data
85+
)?;
86+
Ok(BigEndian::read_u16(&data))
87+
}
88+
7689
fn set_tx_read_pointer<SpiBus: ActiveBus>(
7790
&self,
7891
bus: &mut SpiBus,
@@ -89,6 +102,20 @@ pub trait Socket {
89102
Ok(())
90103
}
91104

105+
fn get_tx_write_pointer<SpiBus: ActiveBus>(
106+
&self,
107+
bus: &mut SpiBus,
108+
) -> Result<u16, SpiBus::Error> {
109+
let mut data = [0u8; 2];
110+
bus.transfer_frame(
111+
self.register(),
112+
socketn::TX_DATA_WRITE_POINTER,
113+
false,
114+
&mut data
115+
)?;
116+
Ok(BigEndian::read_u16(&data))
117+
}
118+
92119
fn set_tx_write_pointer<SpiBus: ActiveBus>(
93120
&self,
94121
bus: &mut SpiBus,
@@ -113,7 +140,7 @@ pub trait Socket {
113140
bus.transfer_frame(
114141
self.register(),
115142
socketn::RX_DATA_READ_POINTER,
116-
true,
143+
false,
117144
&mut data
118145
)?;
119146
Ok(BigEndian::read_u16(&data))
@@ -135,13 +162,27 @@ pub trait Socket {
135162
Ok(())
136163
}
137164

165+
fn set_interrupt_mask<SpiBus: ActiveBus>(
166+
&self,
167+
bus: &mut SpiBus,
168+
mask: u8,
169+
) -> Result<(), SpiBus::Error> {
170+
let mut data = [mask];
171+
bus.transfer_frame(
172+
self.register(),
173+
socketn::INTERRUPT_MASK,
174+
true,
175+
&mut data
176+
)?;
177+
Ok(())
178+
}
179+
138180
fn command<SpiBus: ActiveBus>(
139181
&self,
140182
bus: &mut SpiBus,
141183
command: socketn::Command,
142184
) -> Result<(), SpiBus::Error> {
143-
let mut data = [0u8; 2];
144-
BigEndian::write_u16(&mut data, command as u16);
185+
let mut data = [command as u8];
145186
bus.transfer_frame(self.register(), socketn::COMMAND, true, &mut data)?;
146187
Ok(())
147188
}

0 commit comments

Comments
 (0)