#include #include #include #include #include #include #include #include #include "kwrap/spinlock.h" #include #include "kwrap/semaphore.h" #include #include "init.h" #include "tcpip.h" #include "lwip/opt.h" #include "lwip/def.h" #include "lwip/mem.h" #include "lwip/pbuf.h" #include "lwip/sys.h" #include "lwip/tcpip.h" #include "lwip/icmp.h" #include "timers.h" #include "netif/etharp.h" #include "err.h" #include "netif/ethernet.h" #include #include #include #if 0 #define IP_ADDR0 192 #define IP_ADDR1 168 #define IP_ADDR2 0 #define IP_ADDR3 1 #define NETMASK_ADDR0 255 #define NETMASK_ADDR1 255 #define NETMASK_ADDR2 255 #define NETMASK_ADDR3 0 #define GW_ADDR0 192 #define GW_ADDR1 168 #define GW_ADDR2 0 #define GW_ADDR3 1 struct netif wifi_netif; static void low_level_init(struct netif *netif) { netif->hwaddr_len = ETHARP_HWADDR_LEN; netif->mtu = 1500; netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; } static err_t low_level_output(struct netif *netif, struct pbuf *p) { err_t ret = ERR_OK; //the the actual xmit interface, implement in wifi lib ret = ssv_wifi_tx_pkt((void*) netif, (void *)p, p->tot_len); return ret; } err_t wifi_ethernetif_init(struct netif *netif) { #if LWIP_NETIF_HOSTNAME if(netif->name[1] == '0') netif->hostname = "lwip0"; #endif netif->output = etharp_output; netif->linkoutput = low_level_output; low_level_init(netif); etharp_init(); return ERR_OK; } void LwIP_Init(void) { ip4_addr_t ipaddr; ip4_addr_t netmask; ip4_addr_t gw; IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); wifi_netif.name[0] = 'r'; wifi_netif.name[1] = '0'; netif_add(&wifi_netif, &ipaddr, &netmask, &gw, NULL, &wifi_ethernetif_init, &tcpip_input); netif_set_default(&wifi_netif); netif_set_up(&wifi_netif); } #endif int ssv6x5x_sdio_init(void) { static int sdio_init = 0; extern int wifi_sdio_init(void); if (sdio_init == 0) { if(wifi_sdio_init()){ printf("\n\rERROR: wifi sdio init failed!\n"); return -1; } sdio_init = 1; extern void vos_task_delay_ms(int); vos_task_delay_ms(1000); } return 0; } EXAMFUNC_ENTRY(wifi, argc, argv) { static int sdio_init = 0; extern int wifi_sdio_init(void); if (sdio_init == 0) { if(wifi_sdio_init()){ printf("\n\rERROR: wifi sdio init failed!\n"); return -1; } sdio_init = 1; extern void vos_task_delay_ms(int); vos_task_delay_ms(1000); } //extern void LwIP_Init(void); //LwIP_Init(); //printf("LwIP_Init() ok\n"); //netif_set_up(&wifi_netif); //netif_set_link_up(&wifi_netif); if (argc > 1) { if (!strcmp(argv[1], "on")) { extern int wifi_on(unsigned int on); wifi_on(1); } if (!strcmp(argv[1], "off")) { extern int wifi_on(unsigned int on); wifi_on(0); } if (!strcmp(argv[1], "sta")) { extern int wifi_connect(char *ssid, unsigned int security_type, char *password, int ssid_len, int password_len, int key_id, void *semaphore); if (argc == 4) { if (!strcmp(argv[2], "join")) //sta join ssid { wifi_connect(argv[3], 0, "", 0, 0, 0, 0); } } if (argc == 5) { if (!strcmp(argv[2], "join")) //sta join ssid key { wifi_connect(argv[3], 0, argv[4], 0, 0, 0, 0); } } } else if (!strcmp(argv[1], "ap")) { extern int wifi_start_ap( char *ssid, unsigned int security_type, char *password, int ssid_len, int password_len, int channel); if (argc == 4) { wifi_start_ap(argv[2], 0, "", strlen(argv[2]), 0, atoi(argv[3])); } if (argc == 5) { wifi_start_ap(argv[2], 0, argv[4], strlen(argv[2]), strlen(argv[4]), atoi(argv[3])); } } } return 0; } EXAMFUNC_ENTRY(ssv, argc, argv) { extern int Cli_RunCmd(char *CmdBuffer); extern int At_Parser(char *buff, int len); int i = 0; static char cmd_wifi_str[128]; memset(cmd_wifi_str, 0, 128); for (i = 1; i < argc; i++) { strcat(cmd_wifi_str, argv[i]); strcat(cmd_wifi_str, " "); } if (strlen(cmd_wifi_str)) { if (Cli_RunCmd(cmd_wifi_str) < 0) { if(At_Parser (cmd_wifi_str, strlen(cmd_wifi_str))!= 0) { printf("\nCommand not found!!\r\n"); } } } return 0; } int WiFi_Adaptor_Init (int priority) { extern int wifi_sdio_init(void); if(wifi_sdio_init()){ printf("\n\rERROR: wifi sdio init failed!\n"); return -1; } //extern void vos_task_delay_ms(int); //vos_task_delay_ms(1000); extern void LwIP_Init(void); LwIP_Init(); printf("LwIP_Init() ok\n"); return 0; } int WiFi_Adaptor_Interface_Up (nvt_wifi_settings *pwifi) { extern int wifi_on(unsigned int); if(wifi_on(1) < 0){ printf("\n\rERROR: Wifi on failed!\n"); return -1; } extern int wifi_disable_powersave(void); wifi_disable_powersave(); extern void vos_task_delay_ms(int ms); vos_task_delay_ms(1000); extern int wifi_connect(char *ssid, unsigned int security_type, char *password, int ssid_len, int password_len, int key_id, void *semaphore); return wifi_connect(pwifi->ssid, !strcmp(pwifi->security, "none") ? 0 : (!strcmp(pwifi->security, "wpa-psk-tkip") ? (0x00200000|0x0002) : (0x00400000|0x0004)), pwifi->passphrase, strlen(pwifi->ssid), strlen(pwifi->passphrase), -1, NULL); } int WiFi_Adaptor_Interface_Down (const char *pIntfName) { extern int wifi_off(void); return wifi_off(); } int WiFi_Adaptor_Get_Mac (char *mac) { extern int wifi_get_mac_address(char * mac); return wifi_get_mac_address(mac); } int WiFi_Adaptor_Set_Mac (const char *pIntfName, char *mac) { extern int wifi_set_mac_address(char * mac); return wifi_set_mac_address(mac); } int WiFi_Adaptor_Register_Sta_Cb (const char *pIntfName, wifi_sta_status_cb_func_t *pFunc) { extern void (*Wifi_StationStatus_CB)(char *pIntfName, char *pMacAddr, int status); Wifi_StationStatus_CB = pFunc; return 0; } int WiFi_Adaptor_Register_Ap_Cb (const char *pIntfName, wifi_link_status_cb_func_t *pFunc) { extern void (*Wifi_Link2APStatus_CB)(char *pIntfName, int status); Wifi_Link2APStatus_CB = pFunc; return 0; } int WiFi_Adaptor_Config (nvt_wifi_settings *pwifi) { int channel; char ssid[64]; char mac[6]; extern int wifi_on(unsigned int); if(wifi_on(2) < 0){ printf("\n\rERROR: Wifi on failed!\n"); return -1; } extern int wifi_disable_powersave(void); wifi_disable_powersave(); extern void vos_task_delay_ms(int ms); vos_task_delay_ms(1000); channel = pwifi->channel; if(channel == 0){ extern int wifi_get_best_channel(void); channel = wifi_get_best_channel(); } strncpy(ssid, pwifi->ssid, sizeof(ssid)-1); if(pwifi->auto_ssid_plus_mac){ if(WiFiIpc_get_wlan0_efuse_mac(mac)) printf("fail to get mac\n"); else snprintf(ssid, sizeof(ssid), "%s%02x%02x%02x%02x%02x%02x", pwifi->ssid, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } extern int wifi_start_ap( char *ssid, unsigned int security_type, char *password, int ssid_len, int password_len, int channel); return wifi_start_ap(ssid, !strcmp(pwifi->security, "none") ? 0 : (!strcmp(pwifi->security, "wpa-psk-tkip") ? (0x00200000|0x0002) : (0x00400000|0x0004)), pwifi->passphrase, strlen(ssid), strlen(pwifi->passphrase), channel); } int WiFi_Adaptor_Start_SiteSurvey(const char *pIntfName, int *pStatus) { if(pStatus) *pStatus = -1; printf("WiFi_Adaptor_Start_SiteSurvey() is not implemented\n"); return -1; } int WiFi_Adaptor_Query_SiteSurvey(const char *pIntfName) { printf("WiFi_Adaptor_Query_SiteSurvey() is not implemented\n"); return -1; } int WiFi_Adaptor_Get_SiteSurvey(const char *pIntfName, NVT_SS_STATUS_Tp pStatus, UINT32 size) { printf("WiFi_Adaptor_Get_SiteSurvey() is not implemented\n"); return -1; }