📄 cmdsend.c
字号:
return NDIS_STATUS_SUCCESS;
}
case HostCmd_CMD_802_11_SET_WEP:
{
pSetWEP = (PHostCmd_DS_802_11_SET_WEP)pCmdPtr;
pNewWEP = (PNDIS_802_11_WEP)InformationBuffer;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SET_WEP));
SetupWepKeys( PendingOID,
pSetWEP,
pNewWEP,
InformationBuffer,
Adapter,
CmdOption);
break;
}
case HostCmd_CMD_802_11_SNMP_MIB:
{
switch (PendingOID)
{
case OID_802_11_INFRASTRUCTURE_MODE:
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->OID = (USHORT)DesiredBssType_i; // InfrastructureMode Index = 0
pSNMPMIB->BufSize = sizeof(UCHAR);
if( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
ucTemp = 1; // Infrastructure mode
else
ucTemp = 2; // Ad hoc mode
NdisMoveMemory(pSNMPMIB->Value, &ucTemp, sizeof(UCHAR));
break;
}
case OID_802_11_FRAGMENTATION_THRESHOLD:
{
NDIS_802_11_FRAGMENTATION_THRESHOLD ulTemp;
USHORT usTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = (USHORT)FragThresh_i;
if(PendingInfo==HostCmd_PENDING_ON_GET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_GET;
}
else if(PendingInfo==HostCmd_PENDING_ON_SET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
ulTemp=*((NDIS_802_11_FRAGMENTATION_THRESHOLD *)InformationBuffer);
*((PUSHORT)(pSNMPMIB->Value))=(USHORT)ulTemp;
DBGPRINT(DBG_OID,("OID: Setting Fragmentation threshold to %d\n", ulTemp ));
}
else if(PendingInfo==HostCmd_PENDING_ON_NONE){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp=(USHORT)Adapter->FragThsd;
NdisMoveMemory(pSNMPMIB->Value, &usTemp, sizeof(USHORT));
}
break;
}
case OID_802_11_RTS_THRESHOLD:
{
USHORT usTemp;
NDIS_802_11_RTS_THRESHOLD ulTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = (USHORT)RtsThresh_i;
if(PendingInfo==HostCmd_PENDING_ON_GET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_GET;
}
else if(PendingInfo==HostCmd_PENDING_ON_SET_OID){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
ulTemp=*((NDIS_802_11_RTS_THRESHOLD *)InformationBuffer);
*((PUSHORT)(pSNMPMIB->Value))=(USHORT)ulTemp;
DBGPRINT(DBG_OID,("OID: Setting RTS threshold to %d\n", ulTemp ));
}
else if(PendingInfo==HostCmd_PENDING_ON_NONE){
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp=(USHORT)Adapter->RTSThsd;
NdisMoveMemory(pSNMPMIB->Value, &usTemp, sizeof(USHORT));
}
break;
}
#ifdef ENABLE_802_11D
case OID_802_11D_ENABLE:
{
USHORT usTemp;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_SNMP_MIB));
pSNMPMIB = (PHostCmd_DS_802_11_SNMP_MIB)pCmdPtr;
pSNMPMIB->OID = Dot11D_i;
pSNMPMIB->QueryType = HostCmd_ACT_GEN_SET;
pSNMPMIB->BufSize = sizeof(USHORT);
usTemp = *(USHORT*) InformationBuffer;
*((USHORT *) (pSNMPMIB->Value)) = usTemp;
}
break;
#endif
default:
break;
}
}
break;
case HostCmd_CMD_802_11_AUTHENTICATE:
{
UCHAR ucAuth;
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AUTHENTICATE));
pAuthenticate = (PHostCmd_DS_802_11_AUTHENTICATE) pCmdPtr;
// if the authentication type need to be determined at initialization time
// if (PendingInfo == HostCmd_PENDING_ON_NONE)
// {
ucAuth = (UCHAR)Adapter->AuthenticationMode;
// }
// else
// {
// ucAuth = (UCHAR) (*((PNDIS_802_11_AUTHENTICATION_MODE) InformationBuffer));
// }
switch (ucAuth)
{
case Ndis802_11AuthModeWPAPSK:
case Ndis802_11AuthModeWPA:
case Ndis802_11AuthModeOpen:
case Ndis802_11AuthModeWPA2:
case Ndis802_11AuthModeWPA2PSK:
DBGPRINT(DBG_OID, ("Set Authentication type : %d\n", ucAuth));
pAuthenticate->AuthType = 0; // open authentication
break;
case Ndis802_11AuthModeShared:
DBGPRINT(DBG_OID, ("Set Authentication type : %d\n", ucAuth));
pAuthenticate->AuthType = 1; // shared authentication
break;
default:
DBGPRINT(DBG_WARNING, ("Received unsupported authentication mode: %d\n", ucAuth));
return NDIS_STATUS_FAILURE;
}
// set AP MAC address
// NdisMoveMemory(pAuthenticate->MacAddr, Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);
NdisMoveMemory(pAuthenticate->MacAddr, InformationBuffer, MRVDRV_ETH_ADDR_LEN);
///HexDump(DBG_OID, "pAuthenticate->MacAddr:", pAuthenticate->MacAddr, MRVDRV_ETH_ADDR_LEN);
break;
}
case HostCmd_CMD_802_11_ASSOCIATE_EXT:
case HostCmd_CMD_802_11_ASSOCIATE:
case HostCmd_CMD_802_11_REASSOCIATE:
{
//Size = (USHORT)(sizeof(HostCmd_DS_802_11_ASSOCIATE_EXT));
pAsso = (PHostCmd_DS_802_11_ASSOCIATE_EXT)pCmdPtr;
if ( Adapter->bIsAssociateInProgress == TRUE )
{
DBGPRINT(DBG_CMDRESP | DBG_WARNING,
("There is already an association command pending, "
"fail the current request!\n"));
ReturnCmdNode( Adapter, pTempCmd);
if (Adapter->bIsReconnectEnable == TRUE)
{
// RETAILMSG(1, (TEXT("Adapter->bIsReConnectNow = FALSE 1 \r\n")));
Adapter->bIsReConnectNow = FALSE;
}
Adapter->bIsSystemConnectNow = FALSE;
return NDIS_STATUS_NOT_ACCEPTED;
}
Status = SetupAssociationExt(
(PHostCmd_DS_802_11_ASSOCIATE_EXT)pCmdPtr,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
Size = pAsso->Size;
if (Status != NDIS_STATUS_SUCCESS)
{
DBGPRINT(DBG_CMDRESP , (" fail the current request! \n "));
ReturnCmdNode( Adapter, pTempCmd);
if (Adapter->bIsReconnectEnable == TRUE)
{
//RETAILMSG(1, (TEXT("Adapter->bIsReConnectNow = FALSE 2 \r\n")));
Adapter->bIsReConnectNow = FALSE;
}
Adapter->bIsSystemConnectNow = FALSE;
return Status;
}
#ifdef TLV_ASSOCIATE
DBGPRINT(DBG_CMDRESP,("HWAC - ASSOCIATION_EXT command to %2x-%2x-%2x-"
"%2x-%2x-%2x is ready\n",
pAsso->PeerStaAddr[0],
pAsso->PeerStaAddr[1],
pAsso->PeerStaAddr[2],
pAsso->PeerStaAddr[3],
pAsso->PeerStaAddr[4],
pAsso->PeerStaAddr[5]));
#else
DBGPRINT(DBG_CMDRESP,("HWAC - ASSOCIATION_EXT command to %2x-%2x-%2x-"
"%2x-%2x-%2x is ready\n",
pAsso->DestMacAddr[0],
pAsso->DestMacAddr[1],
pAsso->DestMacAddr[2],
pAsso->DestMacAddr[3],
pAsso->DestMacAddr[4],
pAsso->DestMacAddr[5]));
#endif
///HexDump(DBG_CMDRESP, "ASSOCIATE_EXT Command: ", (UCHAR *)pCmdPtr, Size);
break;
}
case HostCmd_CMD_802_11_AD_HOC_START:
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AD_HOC_START));
pAdHocStart = (PHostCmd_DS_802_11_AD_HOC_START)pCmdPtr;
if (Adapter->ulPSNumOfBSSIDs >= MRVDRV_MAX_BSSID_LIST)
{
ReturnCmdNode(Adapter, pTempCmd);
return NDIS_STATUS_FAILURE;
}
SetupAdHocStart( pAdHocStart,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
DBGPRINT(DBG_CMDRESP,("HWAC - AD HOC Start command is ready\n"));
break;
}
case HostCmd_CMD_802_11_AD_HOC_JOIN:
{
// The command structure is HostCmd_CMD_802_11_AD_HOC_JOIN
Size = (USHORT)(sizeof(HostCmd_DS_802_11_AD_HOC_JOIN));
pAdHocJoin = (PHostCmd_DS_802_11_AD_HOC_JOIN)pCmdPtr;
Status = SetupAdHocJoin( pAdHocJoin,
PendingInfo,
Adapter,
pTempCmd,
InformationBuffer
);
if (Status != NDIS_STATUS_SUCCESS)
{
ReturnCmdNode(Adapter, pTempCmd);
}
DBGPRINT(DBG_CMDRESP,("HWAC - AD HOC Join command is ready\n"));
}
break;
case HostCmd_CMD_802_11_DEAUTHENTICATE:
case HostCmd_CMD_802_11_DISASSOCIATE:
{
if (Cmd == HostCmd_CMD_802_11_DEAUTHENTICATE)
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_DEAUTHENTICATE));
pDeAuthenticate = (PHostCmd_DS_802_11_DEAUTHENTICATE) pCmdPtr;
// set AP MAC address
NdisMoveMemory( pDeAuthenticate->MacAddr, InformationBuffer, MRVDRV_ETH_ADDR_LEN);
// Reason code 3 = Station is leaving
pDeAuthenticate->ReasonCode = 3;
#ifdef BG_SCAN
if ( Adapter->bBgScanEnabled==TRUE&&Adapter->bBgDeepSleep==FALSE)
{
EnableBgScan( Adapter, FALSE);
}
#endif
if (Adapter->bAvoidScanAfterConnectedforMSecs == TRUE)
{
NdisMCancelTimer(&Adapter->MrvDrvAvoidScanAfterConnectedTimer, &timerStatus);
Adapter->bAvoidScanAfterConnectedforMSecs=FALSE;
}
}
else if (Cmd == HostCmd_CMD_802_11_DISASSOCIATE)
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_DISASSOCIATE));
pDisasso = (PHostCmd_DS_802_11_DISASSOCIATE)pCmdPtr;
NdisMoveMemory( pDisasso->DestMacAddr, InformationBuffer, MRVDRV_ETH_ADDR_LEN);
pDisasso->ReasonCode = 3;
//RETAILMSG(1, (TEXT("HostCmd_CMD_802_11_DISASSOCIATE \r\n ")));
//
// { ULONG i;
//
// RETAILMSG(1, (TEXT("Adapter->CurrentBSSID \r\n")));
//
// for (i=0; i<6; i++)
// {
// RETAILMSG(1, (TEXT("%02x "), Adapter->CurrentBSSID[i] ));
// if (((i %16) == 0) && i)
// RETAILMSG(1, (TEXT("\r\n")));
//
// }
// RETAILMSG(1, (TEXT("\r\n")));
// }
}
// need to clean up Rx and Tx first
/// CleanUpSingleTxBuffer(Adapter);
/// ResetRxPDQ(Adapter);
}
break;
case HostCmd_CMD_802_11_RF_ANTENNA:
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_RF_ANTENNA));
pAntenna = (PHostCmd_DS_802_11_RF_ANTENNA)pCmdPtr;
pAntenna->Action = CmdOption;
if ((CmdOption ==HostCmd_ACT_SET_RX) || (CmdOption==HostCmd_ACT_SET_TX))
pAntenna->AntennaMode=(USHORT)(*(NDIS_802_11_ANTENNA *)InformationBuffer);
break;
}
case HostCmd_CMD_802_11_RF_TX_POWER:
{
Size = (USHORT)(sizeof(HostCmd_DS_802_11_RF_TX_POWER));
pRTP = (PHostCmd_DS_802_11_RF_TX_POWER)pCmdPtr;
if ( InformationBuffer != NULL )
{
// OID command
switch (CmdOption)
{
case HostCmd_ACT_TX_POWER_OPT_SET :
{
ULONG usDesiredPowerInDbm = *((ULONG *)InformationBuffer);
#ifdef MRV_CHIP_8385PN
if ( (usDesiredPowerInDbm < 5) || (usDesiredPowerInDbm > 17) )
#elif defined(MRV_CHIP_8381PN)
if ( (usDesiredPowerInDbm < 0) || (usDesiredPowerInDbm > 15) )
#elif defined(MRV_CHIP_8381P)
if ( (usDesiredPowerInDbm < 0) || (usDesiredPowerInDbm > 15) )
#elif defined(MRV_CHIP_8305)
if ( (usDesiredPowerInDbm < 3) || (usDesiredPowerInDbm > 19) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -