📄 zdwlanadapter.cpp
字号:
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_PSLevel(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PM_EPS; // 0xFC0A
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)RidStruct.u.data[0];
}
INT CZDWlanAdapter::SetWL_PSLevel(PWLADAPTERINFO pWLAdapterInfoIn, int nLevel)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PM_EPS; // 0xFC0A
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nLevel;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_PreambleMode(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PREAMBLE; // 0xFCB0
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return ((int)RidStruct.u.data[0] & 0x03);
}
INT CZDWlanAdapter::SetWL_PreambleMode(PWLADAPTERINFO pWLAdapterInfoIn, int nPreamble)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PREAMBLE;
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nPreamble;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_FragmentationThreshold(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_FRAG_THRESHOLD; // FC82
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)RidStruct.u.data[0];
}
INT CZDWlanAdapter::SetWL_FragmentationThreshold(PWLADAPTERINFO pWLAdapterInfoIn, int nFragmentationThreshold)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_FRAG_THRESHOLD;
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nFragmentationThreshold;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_RTS_CTS_Threshold(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_RTS_THRESHOLD; // FC83
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)RidStruct.u.data[0];
}
INT CZDWlanAdapter::SetWL_RTS_CTS_Threshold(PWLADAPTERINFO pWLAdapterInfoIn, int nThreshold)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_RTS_THRESHOLD;
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nThreshold;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_AuthenticationMode(PWLADAPTERINFO pWLAdapterInfoIn)
{
UINT unTempUINT;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_802_11_AUTHENTICATION_MODE, &unTempUINT, sizeof(unTempUINT)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
switch(unTempUINT) {
case Ndis802_11AuthModeOpen:
return 1;
break;
case Ndis802_11AuthModeShared:
return 2;
break;
case Ndis802_11AuthModeAutoSwitch:
return 3;
break;
default:
return ZDNDIS_FAIL;
break;
}
}
INT CZDWlanAdapter::SetWL_AuthenticationMode(PWLADAPTERINFO pWLAdapterInfoIn, int nAuthenticationMode)
{
char szBuffer[100];
UINT unTempUINT;
switch(nAuthenticationMode) {
case 1:
unTempUINT = Ndis802_11AuthModeOpen;
TRACE ("nAuthenticationMode = Ndis802_11AuthModeOpen\n");
break;
case 2:
unTempUINT = Ndis802_11AuthModeShared;
TRACE ("nAuthenticationMode = Ndis802_11AuthModeShared\n");
break;
case 3:
unTempUINT = Ndis802_11AuthModeAutoSwitch;
TRACE ("nAuthenticationMode = Ndis802_11AuthModeAutoSwitch\n");
break;
default:
return ZDNDIS_FAIL;
break;
}
sprintf(szBuffer, "The nAuthenticationMode = %d\n", unTempUINT);
TRACE (szBuffer);
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_802_11_AUTHENTICATION_MODE, &unTempUINT,(DWORD)sizeof(unTempUINT)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_CQSLCurrBSS(PWLADAPTERINFO pWLAdapterInfoIn, int *pnCQValue, int *pnSLValue, int *pnCount)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_COMMS_QUALITY; // FD43
RidStruct.length = 4;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID,&RidStruct,sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
*pnCQValue = (int)(RidStruct.u.data[0]);
*pnSLValue = (int)(RidStruct.u.data[1]);
*pnCount = (int)(RidStruct.u.data[2]);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_PortStatus(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_PORT_STATUS; // FD40
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID,&RidStruct,sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
//if(RidStruct.u.data[0] > 9)
// return ZDNDIS_FAIL;
return (int)RidStruct.u.data[0];
}
INT CZDWlanAdapter::QueryWL_FirmwareVersion(PWLADAPTERINFO pWLAdapterInfoIn, char *pFirmwareVersion)
{
RID_STRUCT RidStruct;
//char *pCh;
RidStruct.rid = 0xFD3F; // FD3F
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
memcpy(pFirmwareVersion, (char*)&RidStruct.u.data[0], 5);
//pCh = (char*)&RidStruct.u.data[0];
//sprintf(pFirmwareVersion, "%s", pCh);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::WL_SiteSurveyStart(PWLADAPTERINFO pWLAdapterInfoIn)
{
int i; // For dummy use.
//if(WriteOid(pWLAdapterInfoIn, OID_802_11_BSSID_LIST_SCAN, &i, sizeof(i)) == ZDNDIS_FAIL) { //
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_802_11_BSSID_LIST_SCAN, &i, sizeof(i)) == ZDNDIS_FAIL) { // Edit by Kuma 2002-10-17 for Zero configuration problem.
return ZDNDIS_FAIL;
} else {
return ZDNDIS_SUCCESS;
}
}
INT CZDWlanAdapter::WL_RetrieveSiteSurveyData(PWLADAPTERINFO pWLAdapterInfoIn, PNDIS_802_11_BSSID_LIST pBSSIDList, int nBufferItemNo)
{
int i;
int nZDDriverVer;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_802_11_BSSID_LIST, pBSSIDList, 4 + nBufferItemNo * sizeof(NDIS_WLAN_BSSID)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
nZDDriverVer = QueryWL_DriverVersion(pWLAdapterInfoIn); // Re-Add 105 to RSSI after driver version 1.30.xx.xx
if(nZDDriverVer >= 0x01300000) { //
for(i=0; i<(int)(pBSSIDList->NumberOfItems); i++) {
pBSSIDList->Bssid[i].Rssi += 105;
}
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::WL_ReadEEPROM(PWLADAPTERINFO pWLAdapterInfoIn, int nChipVer, int nINTFType, UCHAR *pcDataBuffer, UINT nDataLength)
{
TRACE( "WL_ReadEEPROM()\n" );
UINT uTempUINT;
UINT uTempAddr;
int nCountBytes;
int nTimes;
int i;
if(nChipVer != 0x1201)
return ZDNDIS_FAIL;
if(nINTFType == INTF_USB) {
uTempAddr = 0x1D400;
} else {
uTempAddr = 0x1E000;
}
nCountBytes = 0;
nTimes = nDataLength/2;
for(i=0; i<nTimes; i++) {
if(ReadMACRegister(pWLAdapterInfoIn, uTempAddr, &uTempUINT) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
*pcDataBuffer++ = (UCHAR)( uTempUINT & 0x000000FF);
*pcDataBuffer++ = (UCHAR)((uTempUINT>>16) & 0x000000FF);
uTempAddr += 4;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::WL_WriteEEPROM(PWLADAPTERINFO pWLAdapterInfoIn, UCHAR *pcDataBuffer, UINT nDataLength)
{
PZD_IMAGE_BLOCK_STRUCT pImageBlockStruct;
UCHAR DLTempBuf[sizeof(ZD_IMAGE_BLOCK_STRUCT) + (WL_MAX_EEPROM_SIZE * 2 - 1)];
UCHAR *pCh;
UINT i;
char szTempBuffer[200];
TRACE( "WL_WriteEEPROM() Start-->\n" );
sprintf(szTempBuffer, "WL_WriteEEPROM(): nDataLength = %d\n", nDataLength);
TRACE( szTempBuffer );
sprintf(szTempBuffer, "WL_WriteEEPROM(): pcDataBuffer = %d\n", pcDataBuffer);
TRACE( szTempBuffer );
if(nDataLength > WL_MAX_EEPROM_SIZE) {
AfxMessageBox( "nDataLength > WL_MAX_EEPROM_SIZE!!\n" );
char szBuffer1[200];
sprintf(szBuffer1, "nDataLength = %d, WL_MAX_EEPROM_SIZE = %d\n", nDataLength, WL_MAX_EEPROM_SIZE);
AfxMessageBox ( szBuffer1 );
return ZDNDIS_FAIL; // Data length is exceed the WL_MAX_EEPROM_SIZE.
}
pImageBlockStruct = (PZD_IMAGE_BLOCK_STRUCT)DLTempBuf;
pImageBlockStruct->address = 0;
pImageBlockStruct->size = 2 * nDataLength;
pCh = pImageBlockStruct->buffer;
TRACE( "WL_WriteEEPROM() : Fill write buffer\n" );
for(i=0; i<(int)nDataLength; i++) { // Transfer byte to word.
*pCh++ = *pcDataBuffer++;
*pCh++ = 0;
}
TRACE( "WL_WriteEEPROM() : Actual call driver to write EEPROM\n" );
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_DOWNLOAD_ROM ,(PVOID)pImageBlockStruct, (sizeof(ZD_IMAGE_BLOCK_STRUCT)+(nDataLength*2)-1)) == ZDNDIS_FAIL) {
TRACE( "WL_WriteEEPROM() : Excute OID_ZD_DOWNLOAD_ROM Fail!!\n" );
return ZDNDIS_FAIL;
}
TRACE( "WL_WriteEEPROM() : SUCCESS\n" );
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_ExtEEPROM_IDData(UCHAR *pcDataBuffer, int nINTFType, int nID, UCHAR *pcOutBuffer, int *nLength)
{
UCHAR* pCh1;
UCHAR ID_Code, ID_Length;
int nExtStartAddr;
ID_Code = 0;
ID_Length = 0;
switch(nINTFType) {
case INTF_PCMCIA:
nExtStartAddr = EEPROM_PCMCIA_EXT_ADDR;
break;
case INTF_PCI:
nExtStartAddr = EEPROM_PCI_EXT_ADDR;
break;
case INTF_USB:
nExtStartAddr = EEPROM_USB_EXT_ADDR;
break;
}
pCh1 = pcDataBuffer + nExtStartAddr;
while(1) {
ID_Length = *pCh1++;
ID_Code = (int)(*pCh1++);
if(ID_Code == nID) {
if( *nLength < (ID_Length-1) )
return ZDNDIS_FAIL;
memcpy(pcOutBuffer, pCh1, (ID_Length-1));
*nLength = ID_Length - 1;
return ZDNDIS_SUCCESS;
}
pCh1 = pCh1 + ID_Length - 1;
if( pCh1 >= (pcDataBuffer + nExtStartAddr + 256) )
return ZDNDIS_FAIL;
if(ID_Code == 0)
break;
}
return ZDNDIS_FAIL;
}
VOID CZDWlanAdapter::GetNICAdapterMAC(PWLADAPTERINFO pWLAdapterInfoIn, char *cMACBuffer)
{
int i;
for(i=0; i<6; i++)
cMACBuffer[i] = 0;
QueryWin32NDISOid(pWLAdapterInfoIn, OID_802_3_CURRENT_ADDRESS, cMACBuffer, 6);
}
INT CZDWlanAdapter::GetNICAdapterTally(PWLADAPTERINFO pWLAdapterInfoIn, PLOCAL_TALLY_STRUCT pTallyStruct)
{
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SET_TALLIES, pTallyStruct, (DWORD)sizeof(LOCAL_TALLY_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GET_TALLIES, pTallyStruct, (DWORD)sizeof(LOCAL_TALLY_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::GetTxRxFrameCount(PWLADAPTERINFO pWLAdapterInfoIn, PTXRX_FRAME_COUNT_STRUCT pTxRxFrameCount)
{
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_GEN_XMIT_OK, &pTxRxFrameCount->TxOKFrameCount, (DWORD)sizeof(DWORD)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_GEN_RCV_OK , &pTxRxFrameCount->RxOKFrameCount, (DWORD)sizeof(DWORD)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_GEN_XMIT_ERROR, &pTxRxFrameCount->TxErrFrameCount, (DWORD)sizeof(DWORD)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_GEN_RCV_ERROR , &pTxRxFrameCount->RxErrFrameCount, (DWORD)sizeof(DWORD)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_FirmwareTestCommand(PWLADAPTERINFO pWLAdapterInfoIn, WORD testmode, WORD param0, WORD param1)
{
WORD TestCommandCode;
TestCommandCode = 0x38 +( testmode << 8);
ZD_CMD_STRUCT CmdStruct;
CmdStruct.u.send.cmd = TestCommandCode;
CmdStruct.u.send.param0 = param0;
CmdStruct.u.send.param1 = param1;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_CMD,(PVOID)&CmdStruct, sizeof(ZD_CMD_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_DriverVersion(PWLADAPTERINFO pWLAdapterInfoIn)
{
UINT unTemp;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_GEN_VENDOR_DRIVER_VERSION, &unTemp, sizeof(unTemp)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
return (int)unTemp;
}
INT CZDWlanAdapter::QueryWL_SearchEEExtID(BYTE *pcEEBuffer, int nBufferLen, BYTE cID)
{
BYTE tempLength;
BYTE tempID;
int nPosition;
nPosition = 0;
while(1) {
tempLength = pcEEBuffer[nPosition++];
tempID = pcEE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -