📄 wps_wlandrv_ar5kdrv.c
字号:
/*
* WPS_WLANDRV_AR5KDRV.C : WPS WLAN Driver Interface Implemented upon AR5K
*
* ver date author comment
* 0.0.1 08/02/18 Gao Hua First
*/
#include "../wps/wps_eap_pkt.h"
#include "../common/metatype.h"
#include "../common/order.h"
#include "../common/strlib.h"
#include "../common/malloc.h"
#include "../common/memlib.h"
#include "../main/main.h"
#include "../main/mem_pool.h"
#include "wlandrv.h"
#include "vport.h"
#include "wlanDev.h"
#include "wlanPhy.h"
#include "pci.h"
#include "wlanext.h"
#include "wlansmeext.h"
#include "wlanbeacon.h"
#include "wlanchannel.h"
#include "wlanSend.h"
#include "stacserv.h"
#include "../ar5kdrv/sx_ar5kdrv.h"
#include "../ar5kdrv/sx_ar5kd.h"
#include "../datalink/datalink.h"
#include "../main/eapol.h"
#include "../main/w802_11.h"
#include "wps_wlandrv.h"
int Wlan_GetWpsApList(WPS_AP_DESC *apDescArray, int nCount)
{
int dev_uid = 0;
int i, j, numBss, cnt = 0;
WLAN_DEV_INFO *pDevInfo;
CSERV_INFO *pCsInfo;
BSSDESCR *pBssDesc;
WPS_AP_DESC *pTmp;
sx_ar5kd_wcfg_scan(0);
crm_sleep(500); /* Wait for scan finish */
sx_ar5kd_wcfg_clear_list(dev_uid, 0);
pDevInfo = (WLAN_DEV_INFO*)sx_ar5kd_search_drvinfo(dev_uid);
if (pDevInfo != NULL) {
/* The list several acquisition */
pCsInfo = pDevInfo->pCsInfo;
numBss = pCsInfo->scanInfo.bssSet.count;
/* The acquisition of a detection result */
for (i = 0; i < numBss; i++) {
pBssDesc = &pCsInfo->scanInfo.bssSet.bssDescrArray[i];
if (!pBssDesc->wifiWpsSupported) {
continue;
}
if (cnt + 1 > nCount) {
break;
}
pTmp = &apDescArray[cnt];
cnt++;
/* Clear of an old value */
A_MEM_ZERO(pTmp, sizeof(WPS_AP_DESC));
A_STRNCPY(pTmp->ssid, pBssDesc->ssid.ssid, pBssDesc->ssid.length);
for (j=0; j<SX_BSSID_SIZE; j++) {
pTmp->bssid[j] = pBssDesc->bssId.octets[j];
}
A_DRIVER_BCOPY(&pBssDesc->wifiWpsIe, &pTmp->wpsIE, sizeof(WPS_IE));
}
}
return cnt;
}
int Wlan_Associate(WPS_AP_DESC *apDesc)
{
if (!sx_EAPOLjob)
return -1;
sx_eapol_job *eapol_jobp = sx_EAPOLjob;
w80211_cfg *cfg = eapol_jobp->netcfg.cfg;
crm_wait_semaphore(&cfg->cfg_sem, 1);
cfg->linkmode = SX_W80211_LINK_INFRA;
cfg->authmode = SX_W80211_AUTH_OPEN;
cfg->wpa_enable = 0;
cfg->dot1x_enable = 0;
cfg->usewep_eep = 0;
mem_cpy((byte*)cfg->ssid->octets, apDesc->ssid, 33);
cfg->ssid->length = str_len((byte*)cfg->ssid->octets);
if (cfg->vfunc->vf_w80211_set_cfg != NULL) {
cfg->vfunc->vf_w80211_set_cfg(cfg);
}
crm_post_semaphore(&cfg->cfg_sem, 1);
sx_ar5kd_disassoc(0);
crm_sleep(200);
return 0;
}
int Wlan_Disassociate(void)
{
sx_ar5kd_disassoc(0);
return 0;
}
WPS_u8 Wlan_IsAssociated(void)
{
int connect;
sx_ar5kd_wcfg_isConnected(0, &connect);
return connect;
}
int Wlan_GetApSsid(WPS_u8 *SsidBuff, WPS_s32 BuffLen)
{
extern int sx_ar5k_get_dev_uid(void);
extern char *sx_ar5k_get_cur_ssid(int dev_uid, char *p);
char *ret;
if (!Wlan_IsAssociated()) {
return -1;
}
ret = sx_ar5k_get_cur_ssid(0, /*sx_ar5k_get_dev_uid()*/
SsidBuff);
return ((dword)ret - (dword)SsidBuff);
}
int Wlan_GetWlanDrvInfo(WLANDRV_INFO *infoBuff)
{
extern byte My_Ethernet_Address[];
mem_cpy(infoBuff->mac, My_Ethernet_Address, 6);
str_cpy(infoBuff->manufacturer, "silex technology, Inc.");
str_cpy(infoBuff->modelName, "SX-10WG");
str_cpy(infoBuff->modelNumber, "0000");
str_cpy(infoBuff->serialNumber, "1234");
str_cpy(infoBuff->deviceName, "Wireless 11g MiniPCI Adapter");
return 0;
}
int Wlan_SendEapPacket(WPS_u8 *dataBuf, int dataLen)
{
extern sx_eapol_job *sx_EAPOLjob;
extern int sx_eapol_send_packet(sx_eapol_job *eapol_jobp, byte *data, int send_len);
byte *p;
if (sx_EAPOLjob == NULL) {
return -1;
}
p = (byte *)sx_mempool_get(14 + EAPOL_HEAD_LENGTH + dataLen);
mem_cpy(p+14+EAPOL_HEAD_LENGTH, dataBuf, dataLen);
sx_eapol_send_packet(sx_EAPOLjob, p, dataLen);
sx_mempool_free(p);
return 0;
}
/*---------------------------------------------------------------------------*/
byte isListenerAdded = 0;
EAPOL_LISTENER eapol_listener = NULL;
int Wlan_AddEapolListener(EAPOL_LISTENER listener)
{
eapol_listener = listener;
isListenerAdded = 1;
return 0;
}
int Wlan_RemoveEapolListener(void)
{
eapol_listener = NULL;
isListenerAdded = 0;
return 0;
}
/*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -