@@ -6,28 +6,19 @@ include!(concat!(env!("OUT_DIR"), "/robot_secret.rs"));
66
77use anyhow:: bail;
88use esp_idf_hal:: prelude:: Peripherals ;
9- use esp_idf_hal:: task:: notify;
109use esp_idf_svc:: eventloop:: EspSystemEventLoop ;
11- use esp_idf_svc:: mdns:: EspMdns ;
1210use esp_idf_svc:: netif:: { EspNetif , EspNetifWait } ;
1311use esp_idf_svc:: wifi:: EspWifi ;
12+ use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
1413use esp_idf_sys:: esp_wifi_set_ps;
15- use esp_idf_sys:: vTaskDelay;
16- use esp_idf_sys:: { self as _, TaskHandle_t } ; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
17- use futures_lite:: future:: block_on;
18- use hyper:: server:: conn:: Http ;
1914use log:: * ;
20- use mini_rdk:: esp32:: exec:: Esp32Executor ;
21- use mini_rdk:: esp32:: grpc:: GrpcServer ;
2215use mini_rdk:: esp32:: robot:: Esp32Robot ;
2316use mini_rdk:: esp32:: robot:: ResourceType ;
24- use mini_rdk:: esp32:: robot_client:: RobotClientConfig ;
25- use mini_rdk:: esp32:: tcp:: Esp32Listener ;
26- use mini_rdk:: esp32:: tls:: { Esp32Tls , Esp32TlsServerConfig } ;
17+ use mini_rdk:: esp32:: server:: { CloudConfig , Esp32Server } ;
18+ use mini_rdk:: esp32:: tls:: Esp32TlsServerConfig ;
2719use mini_rdk:: proto:: common:: v1:: ResourceName ;
2820use std:: cell:: RefCell ;
2921use std:: collections:: HashMap ;
30- use std:: net:: SocketAddr ;
3122use std:: rc:: Rc ;
3223use std:: sync:: Arc ;
3324use std:: sync:: Mutex ;
@@ -99,35 +90,6 @@ fn main() -> anyhow::Result<()> {
9990 let wifi = start_wifi ( periph. modem , sys_loop_stack) ?;
10091 ( wifi. sta_netif ( ) . get_ip_info ( ) ?. ip , wifi)
10192 } ;
102-
103- let client_cfg = { RobotClientConfig :: new ( ROBOT_SECRET . to_string ( ) , ROBOT_ID . to_string ( ) , ip) } ;
104-
105- let hnd = match mini_rdk:: esp32:: robot_client:: start ( client_cfg) {
106- Err ( e) => {
107- log:: error!( "couldn't start robot client {:?} will start the server" , e) ;
108- None
109- }
110- Ok ( hnd) => Some ( hnd) ,
111- } ;
112-
113- // start mdns service
114- let _mdms = {
115- let mut mdns = EspMdns :: take ( ) ?;
116- mdns. set_hostname ( ROBOT_NAME ) ?;
117- mdns. set_instance_name ( ROBOT_NAME ) ?;
118- mdns. add_service ( None , "_rpc" , "_tcp" , 80 , & [ ] ) ?;
119- mdns
120- } ;
121-
122- if let Err ( e) = runserver ( robot, hnd) {
123- log:: error!( "robot server failed with error {:?}" , e) ;
124- return Err ( e) ;
125- }
126-
127- Ok ( ( ) )
128- }
129-
130- fn runserver ( robot : Esp32Robot , client_handle : Option < TaskHandle_t > ) -> anyhow:: Result < ( ) > {
13193 let cfg = {
13294 let cert = include_bytes ! ( concat!( env!( "OUT_DIR" ) , "/ca.crt" ) ) ;
13395 let key = include_bytes ! ( concat!( env!( "OUT_DIR" ) , "/key.key" ) ) ;
@@ -138,36 +100,13 @@ fn runserver(robot: Esp32Robot, client_handle: Option<TaskHandle_t>) -> anyhow::
138100 key. len ( ) as u32 ,
139101 )
140102 } ;
141- let tls = Box :: new ( Esp32Tls :: new_server ( & cfg) ) ;
142- let address: SocketAddr = "0.0.0.0:80" . parse ( ) . unwrap ( ) ;
143- let mut listener = Esp32Listener :: new ( address. into ( ) , Some ( tls) ) ?;
144- let exec = Esp32Executor :: new ( ) ;
145- let srv = GrpcServer :: new ( Arc :: new ( Mutex :: new ( robot) ) ) ;
146- if let Some ( hnd) = client_handle {
147- if unsafe { notify ( hnd, 1 ) } {
148- log:: info!( "successfully notified client task" ) ;
149- unsafe {
150- vTaskDelay ( 1000 ) ;
151- } ;
152- } else {
153- log:: error!( "failed to notity client task had handle {:?}" , hnd) ;
154- }
155- } else {
156- log:: error!( "no handle" )
157- }
158- loop {
159- let stream = listener. accept ( ) ?;
160- block_on ( exec. run ( async {
161- let err = Http :: new ( )
162- . with_executor ( exec. clone ( ) )
163- . http2_max_concurrent_streams ( 1 )
164- . serve_connection ( stream, srv. clone ( ) )
165- . await ;
166- if err. is_err ( ) {
167- log:: error!( "server error {}" , err. err( ) . unwrap( ) ) ;
168- }
169- } ) ) ;
170- }
103+
104+ let mut cloud_cfg = CloudConfig :: new ( ROBOT_NAME , FQDN , ROBOT_ID , ROBOT_SECRET ) ;
105+ cloud_cfg. set_tls_config ( cfg) ;
106+ let esp32_srv = Esp32Server :: new ( robot, cloud_cfg) ;
107+ esp32_srv. start ( ip) ?;
108+
109+ Ok ( ( ) )
171110}
172111
173112fn start_wifi (
0 commit comments