@@ -10,7 +10,9 @@ use bittide_hal::hals::soft_ugn_demo_mu::devices::{ReceiveRingbuffer, TransmitRi
1010use bittide_hal:: hals:: soft_ugn_demo_mu:: DeviceInstances ;
1111use bittide_hal:: manual_additions:: timer:: Instant ;
1212use bittide_sys:: link_startup:: LinkStartup ;
13- use bittide_sys:: net_state:: { Manager , SmoltcpLink , Subordinate , UgnEdge , UgnReport } ;
13+ use bittide_sys:: net_state:: {
14+ Manager , ManagerState , SmoltcpLink , Subordinate , SubordinateState , UgnEdge , UgnReport ,
15+ } ;
1416use bittide_sys:: smoltcp:: soft_ugn_ringbuffer:: { AlignedReceiveBuffer , RingbufferDevice } ;
1517use bittide_sys:: stability_detector:: Stability ;
1618use core:: fmt:: Write ;
@@ -24,6 +26,7 @@ const INSTANCES: DeviceInstances = unsafe { DeviceInstances::new() };
2426const LINK_COUNT : usize = 7 ;
2527const TCP_BUF_SIZE : usize = 256 ;
2628const MANAGER_DNA : [ u8 ; 12 ] = [ 133 , 129 , 48 , 4 , 64 , 192 , 105 , 1 , 1 , 0 , 2 , 64 ] ;
29+ const LOG_TICK_EVERY : u32 = 500 ;
2730
2831static mut TCP_RX_BUFS : [ [ u8 ; TCP_BUF_SIZE ] ; LINK_COUNT ] = [ [ 0 ; TCP_BUF_SIZE ] ; LINK_COUNT ] ;
2932static mut TCP_TX_BUFS : [ [ u8 ; TCP_BUF_SIZE ] ; LINK_COUNT ] = [ [ 0 ; TCP_BUF_SIZE ] ; LINK_COUNT ] ;
@@ -204,12 +207,30 @@ fn main() -> ! {
204207 info ! ( "Starting manager state machines..." ) ;
205208 let mut managers: [ Manager ; LINK_COUNT ] = core:: array:: from_fn ( |_| Manager :: new ( ) ) ;
206209 let mut done = [ false ; LINK_COUNT ] ;
210+ let mut last_states: [ ManagerState ; LINK_COUNT ] =
211+ core:: array:: from_fn ( |_| ManagerState :: WaitForPhy ) ;
212+ let mut tick: u32 = 0 ;
207213
214+ trace ! ( "Starting main event loop..." ) ;
208215 loop {
216+ tick = tick. wrapping_add ( 1 ) ;
217+ if tick % LOG_TICK_EVERY == 0 {
218+ info ! ( "manager loop tick {}" , tick) ;
219+ }
209220 let now = to_smoltcp_instant ( INSTANCES . timer . now ( ) ) ;
210221 for link in 0 ..LINK_COUNT {
211222 let mut sockets = socket_set ( & mut sockets_storage[ link] [ ..] ) ;
212- let _ = ifaces[ link] . poll ( now, & mut devices[ link] , & mut sockets) ;
223+ let poll_result = ifaces[ link] . poll ( now, & mut devices[ link] , & mut sockets) ;
224+ trace ! ( "manager link {} poll result {:?}" , link, poll_result) ;
225+ let socket = sockets. get :: < tcp:: Socket > ( socket_handles[ link] ) ;
226+ trace ! (
227+ "manager link {} socket open {} active {} can_send {} can_recv {}" ,
228+ link,
229+ socket. is_open( ) ,
230+ socket. is_active( ) ,
231+ socket. can_send( ) ,
232+ socket. can_recv( )
233+ ) ;
213234 let mut smoltcp_link = SmoltcpLink :: new (
214235 & mut ifaces[ link] ,
215236 & mut sockets,
@@ -218,13 +239,28 @@ fn main() -> ! {
218239 true ,
219240 false ,
220241 ) ;
242+ trace ! (
243+ "manager link {} step from state {:?}" ,
244+ link,
245+ managers[ link] . state( )
246+ ) ;
221247 managers[ link] . step ( & mut smoltcp_link) ;
248+ let state = managers[ link] . state ( ) ;
249+ if state != last_states[ link] {
250+ info ! (
251+ "manager link {} state {:?} -> {:?}" ,
252+ link, last_states[ link] , state
253+ ) ;
254+ last_states[ link] = state;
255+ }
222256 if managers[ link] . is_done ( ) {
257+ trace ! ( "manager link {} is done" , link) ;
223258 done[ link] = true ;
224259 }
225260 }
226261
227262 if done. iter ( ) . all ( |v| * v) {
263+ info ! ( "All manager links done" ) ;
228264 break ;
229265 }
230266 }
@@ -259,15 +295,32 @@ fn main() -> ! {
259295 info ! ( "Starting subordinate state machines..." ) ;
260296 let mut subordinates: [ Subordinate ; LINK_COUNT ] =
261297 core:: array:: from_fn ( |_| Subordinate :: new ( ) ) ;
298+ let mut last_states: [ SubordinateState ; LINK_COUNT ] =
299+ core:: array:: from_fn ( |_| SubordinateState :: WaitForPhy ) ;
300+ let mut tick: u32 = 0 ;
262301 for link in 0 ..LINK_COUNT {
263302 subordinates[ link] . set_report ( build_report_for_link ( link, & capture_ugns[ link] , & dna) ) ;
264303 }
265304
266305 loop {
306+ tick = tick. wrapping_add ( 1 ) ;
307+ if tick % LOG_TICK_EVERY == 0 {
308+ info ! ( "subordinate loop tick {}" , tick) ;
309+ }
267310 let now = to_smoltcp_instant ( INSTANCES . timer . now ( ) ) ;
268311 for link in 0 ..LINK_COUNT {
269312 let mut sockets = socket_set ( & mut sockets_storage[ link] [ ..] ) ;
270- let _ = ifaces[ link] . poll ( now, & mut devices[ link] , & mut sockets) ;
313+ let poll_result = ifaces[ link] . poll ( now, & mut devices[ link] , & mut sockets) ;
314+ trace ! ( "subordinate link {} poll result {:?}" , link, poll_result) ;
315+ let socket = sockets. get :: < tcp:: Socket > ( socket_handles[ link] ) ;
316+ trace ! (
317+ "subordinate link {} socket open {} active {} can_send {} can_recv {}" ,
318+ link,
319+ socket. is_open( ) ,
320+ socket. is_active( ) ,
321+ socket. can_send( ) ,
322+ socket. can_recv( )
323+ ) ;
271324 let mut smoltcp_link = SmoltcpLink :: new (
272325 & mut ifaces[ link] ,
273326 & mut sockets,
@@ -276,7 +329,20 @@ fn main() -> ! {
276329 true ,
277330 false ,
278331 ) ;
332+ trace ! (
333+ "subordinate link {} step from state {:?}" ,
334+ link,
335+ subordinates[ link] . state( )
336+ ) ;
279337 subordinates[ link] . step ( & mut smoltcp_link) ;
338+ let state = subordinates[ link] . state ( ) ;
339+ if state != last_states[ link] {
340+ info ! (
341+ "subordinate link {} state {:?} -> {:?}" ,
342+ link, last_states[ link] , state
343+ ) ;
344+ last_states[ link] = state;
345+ }
280346 }
281347 }
282348 }
0 commit comments