@@ -300,6 +300,37 @@ int check_phylink(EthWorker* worker, EthWorkerState state, EthWorkerProcess proc
300
300
#define DHCP_SOCKET 0
301
301
uint8_t ping_auto (uint8_t s , uint8_t * addr );
302
302
303
+ static void load_net_parameters (const EthernetSaveConfig * cfg ) {
304
+ gWIZNETINFO .gw [0 ] = cfg -> gateway [0 ];
305
+ gWIZNETINFO .gw [1 ] = cfg -> gateway [1 ];
306
+ gWIZNETINFO .gw [2 ] = cfg -> gateway [2 ];
307
+ gWIZNETINFO .gw [3 ] = cfg -> gateway [3 ];
308
+
309
+ gWIZNETINFO .sn [0 ] = cfg -> mask [0 ];
310
+ gWIZNETINFO .sn [1 ] = cfg -> mask [1 ];
311
+ gWIZNETINFO .sn [2 ] = cfg -> mask [2 ];
312
+ gWIZNETINFO .sn [3 ] = cfg -> mask [3 ];
313
+
314
+ gWIZNETINFO .mac [0 ] = cfg -> mac [0 ];
315
+ gWIZNETINFO .mac [1 ] = cfg -> mac [1 ];
316
+ gWIZNETINFO .mac [2 ] = cfg -> mac [2 ];
317
+ gWIZNETINFO .mac [3 ] = cfg -> mac [3 ];
318
+ gWIZNETINFO .mac [4 ] = cfg -> mac [4 ];
319
+ gWIZNETINFO .mac [5 ] = cfg -> mac [5 ];
320
+
321
+ gWIZNETINFO .ip [0 ] = cfg -> ip [0 ];
322
+ gWIZNETINFO .ip [1 ] = cfg -> ip [1 ];
323
+ gWIZNETINFO .ip [2 ] = cfg -> ip [2 ];
324
+ gWIZNETINFO .ip [3 ] = cfg -> ip [3 ];
325
+
326
+ gWIZNETINFO .dns [0 ] = cfg -> dns [0 ];
327
+ gWIZNETINFO .dns [1 ] = cfg -> dns [1 ];
328
+ gWIZNETINFO .dns [2 ] = cfg -> dns [2 ];
329
+ gWIZNETINFO .dns [3 ] = cfg -> dns [3 ];
330
+
331
+ gWIZNETINFO .dhcp = NETINFO_STATIC ;
332
+ }
333
+
303
334
int32_t eth_worker_task (void * context ) {
304
335
furi_assert (context );
305
336
EthWorker * worker = (EthWorker * )context ;
@@ -451,6 +482,43 @@ int32_t eth_worker_task(void* context) {
451
482
gWIZNETINFO .dns [2 ],
452
483
gWIZNETINFO .dns [3 ]);
453
484
eth_set_force_state (EthWorkerStateOnline );
485
+ } else if (worker -> state == EthWorkerStateStaticIp ) {
486
+ if (!check_phylink (worker , EthWorkerStateStaticIp , EthWorkerProcessStatic , 5000 )) {
487
+ worker -> state = EthWorkerStateInited ;
488
+ continue ;
489
+ }
490
+ eth_log (EthWorkerProcessStatic , "set static ip" );
491
+ load_net_parameters (worker -> config );
492
+ eth_log (
493
+ EthWorkerProcessStatic ,
494
+ "IP address:\n %d.%d.%d.%d" ,
495
+ gWIZNETINFO .ip [0 ],
496
+ gWIZNETINFO .ip [1 ],
497
+ gWIZNETINFO .ip [2 ],
498
+ gWIZNETINFO .ip [3 ]);
499
+ eth_log (
500
+ EthWorkerProcessStatic ,
501
+ "SM Mask:\n %d.%d.%d.%d" ,
502
+ gWIZNETINFO .sn [0 ],
503
+ gWIZNETINFO .sn [1 ],
504
+ gWIZNETINFO .sn [2 ],
505
+ gWIZNETINFO .sn [3 ]);
506
+ eth_log (
507
+ EthWorkerProcessStatic ,
508
+ "Gate way:\n %d.%d.%d.%d" ,
509
+ gWIZNETINFO .gw [0 ],
510
+ gWIZNETINFO .gw [1 ],
511
+ gWIZNETINFO .gw [2 ],
512
+ gWIZNETINFO .gw [3 ]);
513
+ eth_log (
514
+ EthWorkerProcessStatic ,
515
+ "DNS Server:\n %d.%d.%d.%d" ,
516
+ gWIZNETINFO .dns [0 ],
517
+ gWIZNETINFO .dns [1 ],
518
+ gWIZNETINFO .dns [2 ],
519
+ gWIZNETINFO .dns [3 ]);
520
+ ctlnetwork (CN_SET_NETINFO , (void * )& gWIZNETINFO );
521
+ eth_set_force_state (EthWorkerStateOnline );
454
522
} else if (worker -> state == EthWorkerStatePing ) {
455
523
uint8_t * adress = worker -> config -> ping_ip ;
456
524
eth_log (
0 commit comments