@@ -360,55 +360,8 @@ char *mbed_lwip_get_gateway(char *buf, int buflen)
360
360
#endif
361
361
}
362
362
363
- int mbed_lwip_start_dhcp ( unsigned int timeout )
363
+ int mbed_lwip_init ( emac_interface_t * emac )
364
364
{
365
- err_t err = 0 ;
366
- #if LWIP_IPV4
367
- err = dhcp_start (& lwip_netif );
368
- if (err ) {
369
- return NSAPI_ERROR_DHCP_FAILURE ;
370
- }
371
- #endif
372
-
373
- #if DEVICE_EMAC
374
- // If doesn't have address
375
- if (!mbed_lwip_get_ip_addr (true, & lwip_netif )) {
376
- err = sys_arch_sem_wait (& lwip_netif_has_addr , timeout );
377
- if (err == SYS_ARCH_TIMEOUT ) {
378
- return NSAPI_ERROR_DHCP_FAILURE ;
379
- }
380
- lwip_connected = true;
381
- }
382
- #endif /* DEVICE_EMAC */
383
-
384
- return err ;
385
- }
386
-
387
- int mbed_lwip_start_static_ip (const char * ip , const char * netmask , const char * gw )
388
- {
389
-
390
- #if LWIP_IPV4
391
- ip4_addr_t ip_addr ;
392
- ip4_addr_t netmask_addr ;
393
- ip4_addr_t gw_addr ;
394
-
395
- if (!inet_aton (ip , & ip_addr ) ||
396
- !inet_aton (netmask , & netmask_addr ) ||
397
- !inet_aton (gw , & gw_addr )) {
398
- return NSAPI_ERROR_PARAMETER ;
399
- }
400
-
401
- netif_set_addr (& lwip_netif , & ip_addr , & netmask_addr , & gw_addr );
402
- #endif
403
- }
404
-
405
- int mbed_lwip_bringup (emac_interface_t * emac , bool dhcp , const char * ip , const char * netmask , const char * gw )
406
- {
407
- // Check if we've already connected
408
- if (lwip_connected ) {
409
- return NSAPI_ERROR_PARAMETER ;
410
- }
411
-
412
365
// Check if we've already brought up lwip
413
366
if (!mbed_lwip_get_mac_address ()) {
414
367
// Set up network
@@ -427,19 +380,33 @@ int mbed_lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const c
427
380
0 , 0 , 0 ,
428
381
#endif
429
382
emac , MBED_NETIF_INIT_FN , tcpip_input )) {
430
- return -1 ;
383
+ return NSAPI_ERROR_DEVICE_ERROR ;
431
384
}
432
385
433
386
netif_set_default (& lwip_netif );
434
387
435
- netif_set_link_callback (& lwip_netif , mbed_lwip_netif_link_irq );
388
+ netif_set_link_callback (& lwip_netif , mbed_lwip_netif_link_irq );
436
389
netif_set_status_callback (& lwip_netif , mbed_lwip_netif_status_irq );
437
390
438
391
#if !DEVICE_EMAC
439
392
eth_arch_enable_interrupts ();
440
393
#endif
441
394
}
442
395
396
+ return NSAPI_ERROR_OK ;
397
+ }
398
+
399
+ int mbed_lwip_bringup (bool dhcp , const char * ip , const char * netmask , const char * gw )
400
+ {
401
+ // Check if we've already connected
402
+ if (lwip_connected ) {
403
+ return NSAPI_ERROR_PARAMETER ;
404
+ }
405
+
406
+ if (mbed_lwip_init (NULL ) != NSAPI_ERROR_OK ) {
407
+ return NSAPI_ERROR_DEVICE_ERROR ;
408
+ }
409
+
443
410
// Zero out socket set
444
411
mbed_lwip_arena_init ();
445
412
@@ -475,21 +442,39 @@ int mbed_lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const c
475
442
}
476
443
}
477
444
478
- #if ! DEVICE_EMAC
445
+ #if LWIP_IPV4
479
446
if (!dhcp ) {
480
- mbed_lwip_start_static_ip (ip , netmask , gw );
447
+ ip4_addr_t ip_addr ;
448
+ ip4_addr_t netmask_addr ;
449
+ ip4_addr_t gw_addr ;
450
+
451
+ if (!inet_aton (ip , & ip_addr ) ||
452
+ !inet_aton (netmask , & netmask_addr ) ||
453
+ !inet_aton (gw , & gw_addr )) {
454
+ return NSAPI_ERROR_PARAMETER ;
455
+ }
456
+
457
+ netif_set_addr (& lwip_netif , & ip_addr , & netmask_addr , & gw_addr );
481
458
}
459
+ #endif
482
460
483
461
netif_set_up (& lwip_netif );
484
462
463
+ #if LWIP_IPV4
464
+ // Connect to the network
485
465
lwip_dhcp = dhcp ;
486
- if (dhcp ) {
487
- mbed_lwip_start_dhcp (DHCP_TIMEOUT );
466
+
467
+ if (lwip_dhcp ) {
468
+ err_t err = dhcp_start (& lwip_netif );
469
+ if (err ) {
470
+ return NSAPI_ERROR_DHCP_FAILURE ;
471
+ }
488
472
}
473
+ #endif
489
474
490
475
// If doesn't have address
491
476
if (!mbed_lwip_get_ip_addr (true, & lwip_netif )) {
492
- ret = sys_arch_sem_wait (& lwip_netif_has_addr , DHCP_TIMEOUT );
477
+ ret = sys_arch_sem_wait (& lwip_netif_has_addr , 15000 );
493
478
if (ret == SYS_ARCH_TIMEOUT ) {
494
479
return NSAPI_ERROR_DHCP_FAILURE ;
495
480
}
@@ -504,16 +489,13 @@ int mbed_lwip_bringup(emac_interface_t *emac, bool dhcp, const char *ip, const c
504
489
}
505
490
#endif
506
491
507
- #endif /* DEVICE_EMAC */
508
-
509
492
#if LWIP_IPV6
510
493
add_dns_addr (& lwip_netif );
511
494
#endif
512
495
513
496
return 0 ;
514
497
}
515
498
516
-
517
499
int mbed_lwip_bringdown (void )
518
500
{
519
501
// Check if we've connected
0 commit comments