void wlan_fetch_ipconfig(WLanConfig* config) { wiced_ip_address_t addr; wiced_interface_t ifup = WICED_STA_INTERFACE; memset(config, 0, sizeof(*config)); if (wiced_network_is_up(ifup)) { if (wiced_ip_get_ipv4_address(ifup, &addr)==WICED_SUCCESS) setAddress(&addr, config->nw.aucIP); if (wiced_ip_get_netmask(ifup, &addr)==WICED_SUCCESS) setAddress(&addr, config->nw.aucSubnetMask); if (wiced_ip_get_gateway_address(ifup, &addr)==WICED_SUCCESS) setAddress(&addr, config->nw.aucDefaultGateway); } wiced_mac_t my_mac_address; if (wiced_wifi_get_mac_address( &my_mac_address)==WICED_SUCCESS) memcpy(config->nw.uaMacAddr, &my_mac_address, 6); wl_bss_info_t ap_info; wiced_security_t sec; if ( wwd_wifi_get_ap_info( &ap_info, &sec ) == WWD_SUCCESS ) { uint8_t len = std::min(ap_info.SSID_len, uint8_t(32)); memcpy(config->uaSSID, ap_info.SSID, len); config->uaSSID[len] = 0; } // todo DNS and DHCP servers }
wiced_result_t wiced_network_up( wiced_interface_t interface, wiced_network_config_t config, const wiced_ip_setting_t* ip_settings ) { wiced_result_t result = WICED_SUCCESS; if ( wiced_network_is_up( WICED_TO_WWD_INTERFACE( interface ) ) == WICED_FALSE ) { if ( interface == WICED_CONFIG_INTERFACE ) { wiced_config_soft_ap_t* config_ap; wiced_result_t retval = wiced_dct_read_lock( (void**) &config_ap, WICED_FALSE, DCT_WIFI_CONFIG_SECTION, OFFSETOF(platform_dct_wifi_config_t, config_ap_settings), sizeof(wiced_config_soft_ap_t) ); if ( retval != WICED_SUCCESS ) { return retval; } /* Check config DCT is valid */ if ( config_ap->details_valid == CONFIG_VALIDITY_VALUE ) { result = wiced_start_ap( &config_ap->SSID, config_ap->security, config_ap->security_key, config_ap->channel ); } else { wiced_ssid_t ssid = { .length = sizeof("Wiced Config")-1, .value = "Wiced Config", }; result = wiced_start_ap( &ssid, WICED_SECURITY_OPEN, "", 1 ); } wiced_dct_read_unlock( config_ap, WICED_FALSE ); } else if ( interface == WICED_AP_INTERFACE ) { wiced_config_soft_ap_t* soft_ap; result = wiced_dct_read_lock( (void**) &soft_ap, WICED_FALSE, DCT_WIFI_CONFIG_SECTION, OFFSETOF(platform_dct_wifi_config_t, soft_ap_settings), sizeof(wiced_config_soft_ap_t) ); if ( result != WICED_SUCCESS ) { return result; } result = (wiced_result_t) wwd_wifi_start_ap( &soft_ap->SSID, soft_ap->security, (uint8_t*) soft_ap->security_key, soft_ap->security_key_length, soft_ap->channel ); wiced_dct_read_unlock( soft_ap, WICED_FALSE ); } else { result = wiced_join_ap( ); } }