📄 zdwlanadapter.cpp
字号:
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_Sleep(PWLADAPTERINFO pWLAdapterInfoIn)
{
if(SetWL_DisableNIC(pWLAdapterInfoIn) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
Sleep(100);
if(SetWL_StopProcessor(pWLAdapterInfoIn) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_WakeUp(PWLADAPTERINFO pWLAdapterInfoIn)
{
int nTempInt;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_ADAPTER_SOFT_BOOT, (PVOID)&nTempInt, sizeof(nTempInt)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_StopProcessor(PWLADAPTERINFO pWLAdapterInfoIn)
{
ZD_CMD_STRUCT CmdStruct;
CmdStruct.u.send.cmd = 0x422;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_CMD, (PVOID)&CmdStruct, sizeof(ZD_CMD_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_TxContinuous(PWLADAPTERINFO pWLAdapterInfoIn, int nMode)
{
if(nMode<0 || nMode>1)
return ZDNDIS_FAIL;
if(nMode == 0) { // Stop Testing.
//SetWL_WriteMACRegister(pWLAdapterInfoIn, 0x400104, 1); // 2002-11-14 Robin Kao Request
if(SetWL_FirmwareTestCommand(pWLAdapterInfoIn, 0x0F, 0x00, 0) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
} else { // Continuous Tx
//SetWL_WriteMACRegister(pWLAdapterInfoIn, 0x400104, 0); // 2002-11-14 Robin Kao Request
if(SetWL_FirmwareTestCommand(pWLAdapterInfoIn, 0x0E, 0xFF, 0) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_FilterBand(PWLADAPTERINFO pWLAdapterInfoIn, int nZone)
{
int i, j;
UINT unTempInt;
if(nZone<1 || nZone>2)
return ZDNDIS_FAIL;
for(i=82; i<=106; i=i+2) {
j = (i - 82) / 2;
unTempInt = ((UINT)g_PHY_CountryData[nZone-1][j] >> 8) & 0x00FF;
if(WritePHYRegister(pWLAdapterInfoIn, i, unTempInt) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
unTempInt = (UINT)g_PHY_CountryData[nZone-1][j] & 0x00FF;
if(WritePHYRegister(pWLAdapterInfoIn, i+1, unTempInt) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_FirmwareAntennaDiversity(PWLADAPTERINFO pWLAdapterInfoIn, int nTxRxMode)
{
USHORT uTempFC86;
UINT uTemp_CR9;
UINT uTemp_CR10;
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC86;
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
TRACE( "SetWL_SetFirmwareDiversity() read RID:FC86 Fail!!" );
AfxMessageBox( "SetWL_SetFirmwareDiversity() read RID:FC86 Fail!!" );
return ZDNDIS_FAIL;
}
uTempFC86 = (USHORT)RidStruct.u.data[0];
switch(nTxRxMode) {
case 0: // Tx Antenna
// CR9: Tx Antenna Select:
// bit 2: Antenna 1 ==> 1
// 2 ==> 0
// bit 1: Antenna auto select ==> 1
// Nanual select ==> 0
if(ReadPHYRegister(pWLAdapterInfoIn, 9, &uTemp_CR9) == ZDNDIS_FAIL) {
TRACE( "Read CR9 fail!!" );
AfxMessageBox( "Read CR9 fail!!" );
return ZDNDIS_FAIL;
}
if(uTemp_CR9 & SET_BIT_2) {
return 1;
} else {
return 2;
}
break;
case 1: // Rx Antenna
// CR10: Rx Antenna Select:
// bit 1: Antenna 1 ==> 1
// 2 ==> 0
// bit 0: Antenna auto select ==> 0
// Nanual select ==> 1
if(ReadPHYRegister(pWLAdapterInfoIn, 10, &uTemp_CR10) == ZDNDIS_FAIL) {
TRACE( "Read CR10 fail!!" );
AfxMessageBox( "Read CR10 fail!!" );
return ZDNDIS_FAIL;
}
if((uTempFC86 & 0x00FF) == 0) { // Manual Select Antenna
if(uTemp_CR10 & SET_BIT_1) {
return 1;
} else {
return 2;
}
} else {
return 3; // Auto Select Antenna
}
break;
default:
TRACE( "nTxRxMode parameter fail!!" );
AfxMessageBox( "nTxRxMode parameter fail!!" );
return ZDNDIS_FAIL;
break;
}
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_FirmwareAntennaDiversity(PWLADAPTERINFO pWLAdapterInfoIn, int nTxRxMode, int nAntennaState)
{
USHORT uTempFC86;
UINT uTemp_CR9;
UINT uTemp_CR10;
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC86;
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct,sizeof(RidStruct)) == ZDNDIS_FAIL) {
TRACE( "SetWL_SetFirmwareDiversity() read RID:FC86 Fail!!" );
return ZDNDIS_FAIL;
}
uTempFC86 = (USHORT)RidStruct.u.data[0];
switch(nTxRxMode) {
case 0: // Tx Antenna
// CR9: Tx Antenna Select:
// bit 2: Antenna 1 ==> 1
// 2 ==> 0
// bit 1: Antenna auto select ==> 1
// Nanual select ==> 0
if(ReadPHYRegister(pWLAdapterInfoIn, 9, &uTemp_CR9) == ZDNDIS_FAIL) {
TRACE( "Read CR9 fail!!" );
return ZDNDIS_FAIL;
}
switch(nAntennaState) {
case 1: // Antenna 1
uTemp_CR9 = (uTemp_CR9 & CLR_BIT_1) | SET_BIT_2; // Set bit 2, Clear bit 1
uTempFC86 = (uTempFC86 & 0xFE00) | 0x0100;
break;
case 2: // Antenna 2
uTemp_CR9 = (uTemp_CR9 & CLR_BIT_1) & CLR_BIT_2; // Clear bit 2, Clear bit 1
uTempFC86 = (uTempFC86 & 0xFE00);
break;
case 3: // Auto
//uTemp_CR9 = (uTemp_CR9 & SET_BIT_1); // Set bit 1 (Tx Auto Select Antenna)
uTempFC86 = (uTempFC86 & 0xFF00) | 0x0002;
break;
default:
TRACE( "nAtennaState parameter fail!!" );
return ZDNDIS_FAIL;
break;
}
if(WritePHYRegister(pWLAdapterInfoIn, 9, uTemp_CR9) == ZDNDIS_FAIL) {
TRACE( "Write CR9 fail!!" );
return ZDNDIS_FAIL;
}
break;
case 1: // Rx Antenna
// CR10: Rx Antenna Select:
// bit 1: Antenna 1 ==> 1
// 2 ==> 0
// bit 0: Antenna auto select ==> 0
// Nanual select ==> 1
if(ReadPHYRegister(pWLAdapterInfoIn, 10, &uTemp_CR10) == ZDNDIS_FAIL) {
TRACE( "Read CR10 fail!!" );
return ZDNDIS_FAIL;
}
switch(nAntennaState) {
case 1: // Antenna 1
uTemp_CR10 = (uTemp_CR10 | SET_BIT_0) | SET_BIT_1; // Set bit 1, Set bit 0
uTempFC86 = (uTempFC86 & 0xFD00) | 0x0200;
break;
case 2: // Antenna 2
uTemp_CR10 = (uTemp_CR10 | SET_BIT_0) & CLR_BIT_1; // Clear bit 1, Set bit 0
uTempFC86 = (uTempFC86 & 0xFD00);
break;
case 3: // Auto
//uTemp_CR10 = uTemp_CR10 & CLR_BIT_0; // Clear bit 0 (Rx Auto Select Antenna)
uTempFC86 = (uTempFC86 & 0xFF00) | 0x0002;
break;
default:
TRACE( "nAtennaState parameter fail!!" );
return ZDNDIS_FAIL;
break;
}
if(WritePHYRegister(pWLAdapterInfoIn, 10, uTemp_CR10) == ZDNDIS_FAIL) {
TRACE( "Write CR10 fail!!" );
return ZDNDIS_FAIL;
}
break;
default:
TRACE( "nTxRxMode parameter fail!!" );
return ZDNDIS_FAIL;
break;
}
RidStruct.u.data[0]=(USHORT)uTempFC86;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL) {
TRACE( "SetWL_SetFirmwareAntennaDiversity() write RID:FC86 Fail!!" );
return ZDNDIS_FAIL;
}
return(int)(uTempFC86 & 0x03FF);
}
INT CZDWlanAdapter::SetWL_TxAntenna(PWLADAPTERINFO pWLAdapterInfoIn, int nAtenna)
{
return(SetWL_FirmwareAntennaDiversity(pWLAdapterInfoIn, 0, nAtenna));
}
INT CZDWlanAdapter::SetWL_RxAntenna(PWLADAPTERINFO pWLAdapterInfoIn, int nAtenna)
{
return(SetWL_FirmwareAntennaDiversity(pWLAdapterInfoIn, 1, nAtenna));
}
INT CZDWlanAdapter::SetWL_CRScrambler(PWLADAPTERINFO pWLAdapterInfoIn, int nMode)
{
UINT unTempUINT;
if(nMode<0 || nMode>1)
return ZDNDIS_FAIL;
if(ReadPHYRegister(pWLAdapterInfoIn, 32, &unTempUINT) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(nMode == 1) {
unTempUINT = unTempUINT & CLR_BIT_2; // Clear bit 2
} else {
unTempUINT = unTempUINT | SET_BIT_2; // Set bit 2
}
if(WritePHYRegister(pWLAdapterInfoIn, 32, unTempUINT) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_CRSpread(PWLADAPTERINFO pWLAdapterInfoIn, int nMode)
{
UINT unTempUINT;
if(nMode<0 || nMode>1)
return ZDNDIS_FAIL;
if(ReadPHYRegister(pWLAdapterInfoIn, 32, &unTempUINT) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
if(nMode == 1) {
unTempUINT = unTempUINT & CLR_BIT_3; // Clear bit 2
} else {
unTempUINT = unTempUINT | SET_BIT_3; // Set bit 2
}
if(WritePHYRegister(pWLAdapterInfoIn, 32, unTempUINT) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_CRTxPowerControl(PWLADAPTERINFO pWLAdapterInfoIn, int nLevel)
{
if(nLevel<0 || nLevel>127)
return ZDNDIS_FAIL;
if(WritePHYRegister(pWLAdapterInfoIn, 31, (UINT)nLevel) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_CRTxPowerMeasure(PWLADAPTERINFO pWLAdapterInfoIn, int *pnPower)
{
if(ReadPHYRegister(pWLAdapterInfoIn, 58, (UINT*)pnPower) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_TxPoweCalibrationFactor(PWLADAPTERINFO pWLAdapterInfoIn, int nTPCFactor)
{
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC36; // RID_FC36_cnfTPCFactor
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nTPCFactor;
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_TxPowerSetPoint(PWLADAPTERINFO pWLAdapterInfoIn, char *pcTPCSetPointBuf)
{
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC37; // RID_FC37_cnfTPCSetPoint
RidStruct.length = 8;
memcpy(RidStruct.u.data, pcTPCSetPointBuf, 14);
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_TxPowerSetPoint(PWLADAPTERINFO pWLAdapterInfoIn, char *pcTPCSetPointBuf)
{
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC37; // RID_FC37_cnfTPCSetPoint
RidStruct.length = 8;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
memcpy(pcTPCSetPointBuf, RidStruct.u.data, 14);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_TxPowerIntegrationValue(PWLADAPTERINFO pWLAdapterInfoIn, char *pcTPCIntegrationValueBuf)
{
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC38; // RID_FC38_cnfTPCInitValue
RidStruct.length = 8;
memcpy(RidStruct.u.data, pcTPCIntegrationValueBuf, 14);
if(SetWin32NDISOid(pWLAdapterInfoIn, OID_ZD_SETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_TxPowerIntegrationValue(PWLADAPTERINFO pWLAdapterInfoIn, char *pcTPCIntegrationValueBuf)
{
RID_STRUCT RidStruct;
RidStruct.rid = 0xFC38; // RID_FC38_cnfTPCInitValue
RidStruct.length = 8;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, (DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
memcpy(pcTPCIntegrationValueBuf, RidStruct.u.data, 14);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_ResetCard(PWLADAPTERINFO pWLAdapterInfoIn)
{
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::SetWL_RestartNIC(PWLADAPTERINFO pWLAdapterInfoIn)
{
TRACE( "SetWL_RestartNIC()\n" );
SetWL_DisableNIC(pWLAdapterInfoIn);
Sleep(100);
SetWL_EnableNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
}
INT CZDWlanAdapter::QueryWL_NetworkType(PWLADAPTERINFO pWLAdapterInfoIn)
{
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PORT_TYPE; // Port Type ==> FC00
RidStruct.length = 2;
if(QueryWin32NDISOid(pWLAdapterInfoIn, OID_ZD_GETRID, &RidStruct, sizeof(RidStruct)) == ZDNDIS_FAIL) {
return ZDNDIS_FAIL;
}
//if(RidStruct.u.data[0] > 3)
// return ZDNDIS_FAIL;
return (int)(RidStruct.u.data[0]);
}
INT CZDWlanAdapter::SetWL_NetworkType(PWLADAPTERINFO pWLAdapterInfoIn, int nNetworkType)
{
//----------------------------------------------------------------------
#if _ACCESS_VIA_802_11_OID == 1
NDIS_802_11_NETWORK_INFRASTRUCTURE ZDNetworkType;
ZDNetworkType = (NDIS_802_11_NETWORK_INFRASTRUCTURE)nNetworkType;
//if(WriteOid(pWLAdapterInfoIn, (DWORD)OID_802_11_INFRASTRUCTURE_MODE, (PVOID)&ZDNetworkType, (DWORD)sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE)) == ZDNDIS_FAIL)
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD)OID_ZD_802_11_INFRASTRUCTURE_MODE, (PVOID)&ZDNetworkType, (DWORD)sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
return ZDNDIS_SUCCESS;
//----------------------------------------------------------------------
#else
RID_STRUCT RidStruct;
RidStruct.rid = RID_CFG_PORT_TYPE; // Port Type (FC00)
RidStruct.length = 2;
RidStruct.u.data[0] = (USHORT)nNetworkType;
if(SetWin32NDISOid(pWLAdapterInfoIn, (DWORD) OID_ZD_SETRID,(PVOID) &RidStruct,(DWORD)sizeof(RID_STRUCT)) == ZDNDIS_FAIL)
return ZDNDIS_FAIL;
//SetWL_RestartNIC(pWLAdapterInfoIn);
return ZDNDIS_SUCCESS;
//----------------------------------------------------------------------
#endif
}
INT CZDWlanAdapter::QueryWL_BSSID(PWLADAPTERINFO pWLAdapterInfoIn, char *csBSSID_Buffer)
{
//----------------------------------------------------------------------
#if _ACCESS_VIA_802_11_OID == 1
NDIS_802_11_MAC_ADDRESS cBssid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -