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 }
void besl_p2p_test( p2p_workspace_t* workspace ) { wiced_buffer_t buffer; wiced_result_t result; uint32_t* data; wiced_mac_t my_mac; REFERENCE_DEBUG_ONLY_VARIABLE(result); wiced_wifi_get_mac_address( &my_mac ); my_mac.octet[0] |= 0x2; wl_p2p_if_t* p2p_if = wwd_sdpcm_get_iovar_buffer( &buffer, sizeof(wl_p2p_if_t), IOVAR_STR_P2P_IFADD ); p2p_if->interface_type = P2P_GROUP_OWNER_MODE; memcpy( &p2p_if->mac_address, &my_mac, sizeof(besl_mac_t) ); result = wwd_sdpcm_send_iovar( SDPCM_SET, buffer, NULL, WICED_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS); /* Enable discovery */ data = wwd_sdpcm_get_iovar_buffer( &buffer, 4, IOVAR_STR_P2P_DISC ); *data = 1; result = wwd_sdpcm_send_iovar( SDPCM_SET, buffer, NULL, WICED_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS); wiced_buffer_t response; wwd_sdpcm_get_iovar_buffer( &buffer, 4, IOVAR_STR_P2P_DEV ); result = wwd_sdpcm_send_iovar( SDPCM_GET, buffer, &response, WICED_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS); workspace->p2p_interface = BESL_READ_32(host_buffer_get_current_piece_data_pointer(response)); host_buffer_release( response, WICED_NETWORK_RX ); BESL_DEBUG( ("interface = %lu\n", workspace->p2p_interface) ); data = wiced_get_ioctl_buffer( &buffer, 4 ); *data = 1; result = wiced_send_ioctl( SDPCM_SET, WLC_SET_CHANNEL, buffer, NULL, workspace->p2p_interface ); wiced_assert("", result == WICED_SUCCESS); /* Set WSEC */ data = (uint32_t*) wwd_sdpcm_get_iovar_buffer( &buffer, (uint16_t) 8, IOVAR_STR_BSSCFG_WSEC ); data[0] = (uint32_t) workspace->p2p_interface; data[1] = WICED_SECURITY_WPA2_AES_PSK; result = wwd_sdpcm_send_iovar( SDPCM_SET, buffer, 0, SDPCM_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS); wsec_pmk_t* psk; /* Set the wpa auth */ data = (uint32_t*) wwd_sdpcm_get_iovar_buffer( &buffer, (uint16_t) 8, IOVAR_STR_BSSCFG_WPA_AUTH ); data[0] = (uint32_t) workspace->p2p_interface; data[1] = (uint32_t) WPA2_AUTH_PSK; result = wwd_sdpcm_send_iovar( SDPCM_SET, buffer, 0, SDPCM_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS ); /* Set the passphrase */ psk = (wsec_pmk_t*) wiced_get_ioctl_buffer( &buffer, sizeof(wsec_pmk_t) ); memcpy( psk->key, "YOUR_AP_PASSPHRASE", 18 ); psk->key_len = 18; psk->flags = (uint16_t) WSEC_PASSPHRASE; host_rtos_delay_milliseconds( 1 ); /* Delay required to allow radio firmware to be ready to receive PMK and avoid intermittent failure */ result = wiced_send_ioctl( SDPCM_SET, WLC_SET_WSEC_PMK, buffer, 0, workspace->p2p_interface ); wiced_assert("", result == WICED_SUCCESS ); wlc_ssid_t* p2p_ssid = wwd_sdpcm_get_iovar_buffer( &buffer, sizeof(wl_p2p_if_t), IOVAR_STR_P2P_SSID ); p2p_ssid->SSID_len = 9; memcpy( p2p_ssid->SSID, "DIRECT-ww", 9 ); result = wwd_sdpcm_send_iovar( SDPCM_SET, buffer, NULL, WICED_STA_INTERFACE ); wiced_assert("", result == WICED_SUCCESS); /* Bring up P2P interface */ wiced_get_ioctl_buffer( &buffer, 0 ); result = wiced_send_ioctl( SDPCM_SET, WLC_UP, buffer, NULL, workspace->p2p_interface ); wiced_assert("", result == WICED_SUCCESS); p2p_set_discovery_state( P2P_DISCOVERY_STATE_LISTEN ); }
void application_start( ) { int i; wiced_result_t status; wiced_mac_t my_mac_address; uint32_t my_ip_address; wiced_ip_address_t ipv4_address; wiced_keep_alive_packet_t keep_alive_packet_info; /* Initialize the device */ wiced_init( ); /* Bring up the network on the STA interface */ wiced_network_up( WICED_STA_INTERFACE, WICED_USE_EXTERNAL_DHCP_SERVER, NULL ); /* Setup the ARP keep alive packet to copy in my MAC & IP address */ wiced_wifi_get_mac_address( &my_mac_address ); wiced_ip_get_ipv4_address( WICED_STA_INTERFACE, &ipv4_address ); my_ip_address = htonl( GET_IPV4_ADDRESS(ipv4_address) ); memcpy( &arp_packet[ 6 ], &my_mac_address, 6 ); memcpy( &arp_packet[ 22 ], &my_mac_address, 6 ); memcpy( &arp_packet[ 28 ], &my_ip_address, 4 ); memcpy( &arp_packet[ 38 ], &my_ip_address, 4 ); /* Turn off print buffers, so print output occurs immediately */ setvbuf( stdout, NULL, _IONBF, 0 ); /* Setup a Null function data frame keep alive */ keep_alive_packet_info.keep_alive_id = KEEP_ALIVE_ID_NFD, keep_alive_packet_info.period_msec = KEEP_ALIVE_PERIOD_NFD_MSEC, keep_alive_packet_info.packet_length = 0; status = wiced_wifi_add_keep_alive( &keep_alive_packet_info ); switch ( status ) { case WICED_SUCCESS: { WPRINT_APP_INFO( ( "\r\nAdded:\n") ); WPRINT_APP_INFO( ( " - Null Function Data frame with repeat period of %d milliseconds \n", KEEP_ALIVE_PERIOD_NFD_MSEC ) ); break; } case WICED_TIMEOUT: { WPRINT_APP_INFO( ( "Timeout: Adding Null Function Data frame keep alive packet\n" ) ); break; } default: WPRINT_APP_INFO( ( "Error[%d]: Adding Null Function Data frame keep alive packet\n", status ) ); break; } /* Setup an ARP packet keep alive */ keep_alive_packet_info.keep_alive_id = KEEP_ALIVE_ID_ARP, keep_alive_packet_info.period_msec = KEEP_ALIVE_PERIOD_ARP_MSEC, keep_alive_packet_info.packet_length = sizeof(arp_packet)-1; keep_alive_packet_info.packet = (uint8_t*)arp_packet; status = wiced_wifi_add_keep_alive( &keep_alive_packet_info ); switch ( status ) { case WICED_SUCCESS: { WPRINT_APP_INFO( ( " - ARP packet with repeat period of %d milliseconds\n\n", KEEP_ALIVE_PERIOD_ARP_MSEC ) ); break; } case WICED_TIMEOUT: { WPRINT_APP_INFO( ( "Timeout: Adding ARP packet\n\n" ) ); break; } default: WPRINT_APP_INFO( ( "Error[%d]: Adding ARP packet\n\n", status ) ); break; } /* Get Null Function Data Frame keep alive packet info */ keep_alive_packet_info.keep_alive_id = KEEP_ALIVE_ID_NFD; keep_alive_packet_info.packet_length = MAX_KEEP_ALIVE_PACKET_SIZE; keep_alive_packet_info.packet = &keep_alive_packet_buffer[0]; status = wiced_wifi_get_keep_alive( &keep_alive_packet_info ); if ( status == WICED_SUCCESS ) { print_keep_alive_info( &keep_alive_packet_info ); } else { WPRINT_APP_INFO( ( "ERROR[%d]: Get keep alive packet failed for ID:%d\n", status, KEEP_ALIVE_ID_NFD) ); } /* Get ARP keep alive packet info */ keep_alive_packet_info.keep_alive_id = KEEP_ALIVE_ID_ARP; keep_alive_packet_info.packet_length = MAX_KEEP_ALIVE_PACKET_SIZE; keep_alive_packet_info.packet = &keep_alive_packet_buffer[0]; status = wiced_wifi_get_keep_alive( &keep_alive_packet_info ); if ( status == WICED_SUCCESS ) { print_keep_alive_info( &keep_alive_packet_info ); } else { WPRINT_APP_INFO( ( "ERROR[%d]: Get keep alive packet failed for ID:%d\n", status, KEEP_ALIVE_ID_ARP) ); } /* Wait 30 seconds, then disable all keep alive packets */ WPRINT_APP_INFO( ( "Sending keep alive packets " ) ); for ( i = 0; i < 30; i++ ) { WPRINT_APP_INFO( ( "." ) ); wiced_rtos_delay_milliseconds( 1000 ); } WPRINT_APP_INFO( ( " done\n\n" ) ); /* Disable Null Function Data Frame keep alive packet*/ status = wiced_wifi_disable_keep_alive( KEEP_ALIVE_ID_NFD ); if ( status == WICED_SUCCESS ) { WPRINT_APP_INFO( ( "Null Function data frame keep alive packet disabled\n" ) ); } else { WPRINT_APP_INFO( ( "ERROR[%d]: Failed to disable NFD keep alive packet\n", status) ); } /* Disable ARP keep alive packet*/ status = wiced_wifi_disable_keep_alive( KEEP_ALIVE_ID_ARP ); if ( status == WICED_SUCCESS ) { WPRINT_APP_INFO( ( "ARP keep alive packet disabled\n" ) ); } else { WPRINT_APP_INFO( ( "ERROR[%d]: Failed to disable ARP keep alive packet\n", status) ); } WPRINT_APP_INFO( ( "\r\nStop.\n") ); while ( 1 ) { } }