77#![ no_main]
88
99use embassy_executor:: Spawner ;
10- use embassy_time:: Duration ;
1110use esp_alloc as _;
1211use esp_backtrace as _;
1312use esp_hal:: {
@@ -18,14 +17,15 @@ use esp_hal::{
1817} ;
1918use esp_println:: println;
2019use esp_radio:: wifi:: { ModeConfig , sta:: StationConfig } ;
20+ use smoltcp:: phy:: Device ;
2121
2222esp_bootloader_esp_idf:: esp_app_desc!( ) ;
2323
2424const SSID : & str = env ! ( "SSID" ) ;
2525const PASSWORD : & str = env ! ( "PASSWORD" ) ;
2626
2727#[ esp_rtos:: main]
28- async fn main ( _spawner : Spawner ) -> ! {
28+ async fn main ( _spawner : Spawner ) {
2929 esp_println:: logger:: init_logger_from_env ( ) ;
3030 let config = esp_hal:: Config :: default ( ) . with_cpu_clock ( CpuClock :: max ( ) ) ;
3131 let peripherals = esp_hal:: init ( config) ;
@@ -39,39 +39,83 @@ async fn main(_spawner: Spawner) -> ! {
3939 esp_rtos:: start ( timg0. timer0 , sw_int. software_interrupt0 ) ;
4040
4141 let mut wifi = peripherals. WIFI ;
42- let ( mut controller, interfaces) =
43- esp_radio:: wifi:: new ( wifi. reborrow ( ) , Default :: default ( ) ) . unwrap ( ) ;
44-
45- let station_config = ModeConfig :: Station (
46- StationConfig :: default ( )
47- . with_ssid ( SSID . into ( ) )
48- . with_password ( PASSWORD . into ( ) ) ,
49- ) ;
50- controller. set_config ( & station_config) . unwrap ( ) ;
51- controller. start_async ( ) . await . unwrap ( ) ;
52- controller. connect_async ( ) . await . unwrap ( ) ;
53-
54- let mut wifi_interface = interfaces. station ;
55-
56- use smoltcp:: phy:: Device ;
57- let token = wifi_interface. transmit ( smoltcp:: time:: Instant :: from_millis (
58- esp_hal:: time:: Instant :: now ( )
59- . duration_since_epoch ( )
60- . as_millis ( ) as i64 ,
61- ) ) ;
62-
63- println ! ( "got token {}" , token. is_some( ) ) ;
64-
65- core:: mem:: drop ( controller) ;
66-
67- if let Some ( token) = token {
68- token. consume_token ( 10 , |tx| tx. fill ( 0 ) ) ;
69- println ! ( "tx done" ) ;
70- } else {
71- println ! ( "no token" ) ;
42+ {
43+ let ( mut controller, interfaces) =
44+ esp_radio:: wifi:: new ( wifi. reborrow ( ) , Default :: default ( ) ) . unwrap ( ) ;
45+
46+ let mut wifi_interface = interfaces. station ;
47+
48+ let token = wifi_interface. transmit ( smoltcp:: time:: Instant :: from_millis (
49+ esp_hal:: time:: Instant :: now ( )
50+ . duration_since_epoch ( )
51+ . as_millis ( ) as i64 ,
52+ ) ) ;
53+ assert ! ( matches!( token, None ) ) ;
54+
55+ let station_config = ModeConfig :: Station (
56+ StationConfig :: default ( )
57+ . with_ssid ( SSID . into ( ) )
58+ . with_password ( PASSWORD . into ( ) ) ,
59+ ) ;
60+ controller. set_config ( & station_config) . unwrap ( ) ;
61+ controller. start_async ( ) . await . unwrap ( ) ;
62+ controller. connect_async ( ) . await . unwrap ( ) ;
63+
64+ let token = wifi_interface. transmit ( smoltcp:: time:: Instant :: from_millis (
65+ esp_hal:: time:: Instant :: now ( )
66+ . duration_since_epoch ( )
67+ . as_millis ( ) as i64 ,
68+ ) ) ;
69+
70+ println ! ( "got token {}" , token. is_some( ) ) ;
71+
72+ core:: mem:: drop ( controller) ;
73+
74+ if let Some ( token) = token {
75+ token. consume_token ( 10 , |tx| tx. fill ( 0 ) ) ;
76+ println ! ( "survived consumer_token" ) ;
77+ } else {
78+ println ! ( "no token" ) ;
79+ }
80+
81+ let token = wifi_interface. transmit ( smoltcp:: time:: Instant :: from_millis (
82+ esp_hal:: time:: Instant :: now ( )
83+ . duration_since_epoch ( )
84+ . as_millis ( ) as i64 ,
85+ ) ) ;
86+ assert ! ( matches!( token, None ) ) ;
7287 }
7388
74- loop {
75- embassy_time:: Timer :: after ( Duration :: from_millis ( 10 ) ) . await ;
89+ {
90+ let ( mut controller, interfaces) =
91+ esp_radio:: wifi:: new ( wifi. reborrow ( ) , Default :: default ( ) ) . unwrap ( ) ;
92+
93+ let station_config = ModeConfig :: Station (
94+ StationConfig :: default ( )
95+ . with_ssid ( SSID . into ( ) )
96+ . with_password ( PASSWORD . into ( ) ) ,
97+ ) ;
98+ controller. set_config ( & station_config) . unwrap ( ) ;
99+ controller. start_async ( ) . await . unwrap ( ) ;
100+ controller. connect_async ( ) . await . unwrap ( ) ;
101+
102+ let mut wifi_interface = interfaces. station ;
103+
104+ let token = wifi_interface. transmit ( smoltcp:: time:: Instant :: from_millis (
105+ esp_hal:: time:: Instant :: now ( )
106+ . duration_since_epoch ( )
107+ . as_millis ( ) as i64 ,
108+ ) ) ;
109+
110+ println ! ( "got token {}" , token. is_some( ) ) ;
111+
112+ if let Some ( token) = token {
113+ token. consume_token ( 10 , |tx| tx. fill ( 0 ) ) ;
114+ println ! ( "tx done" ) ;
115+ } else {
116+ println ! ( "no token" ) ;
117+ }
76118 }
119+
120+ println ! ( "Done" ) ;
77121}
0 commit comments