⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rxtx.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 5 页
字号:
            pBuf->wDuration_f0 = (WORD)s_uGetDataDuration(pDevice, DATADUR_A_F0, cbFrameLength, byPktType,                                        wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //0: 5GHz            pBuf->wDuration_f1 = (WORD)s_uGetDataDuration(pDevice, DATADUR_A_F1, cbFrameLength, byPktType,                                        wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //0: 5GHz            if(uDMAIdx!=TYPE_ATIMDMA) {                pBuf->wTimeStampOff = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];            }            return (pBuf->wDuration);        } else {            PSTxDataHead_ab pBuf = (PSTxDataHead_ab)pTxDataHead;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, cbFrameLength, wCurrentRate, byPktType,                (PWORD)&(pBuf->wTransmitLength), (PBYTE)&(pBuf->byServiceField), (PBYTE)&(pBuf->bySignalField)            );            //Get Duration and TimeStampOff            pBuf->wDuration = (WORD)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,                                                       wCurrentRate, bNeedAck, uFragIdx,                                                       cbLastFragmentSize, uMACfragNum,                                                       byFBOption);            if(uDMAIdx!=TYPE_ATIMDMA) {                pBuf->wTimeStampOff = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];            }            return (pBuf->wDuration);        }    }    else if (byPktType == PK_TYPE_11B) {            PSTxDataHead_ab pBuf = (PSTxDataHead_ab)pTxDataHead;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, cbFrameLength, wCurrentRate, byPktType,                (PWORD)&(pBuf->wTransmitLength), (PBYTE)&(pBuf->byServiceField), (PBYTE)&(pBuf->bySignalField)            );            //Get Duration and TimeStampOff            pBuf->wDuration = (WORD)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, byPktType,                                                       wCurrentRate, bNeedAck, uFragIdx,                                                       cbLastFragmentSize, uMACfragNum,                                                       byFBOption);            if (uDMAIdx != TYPE_ATIMDMA) {                pBuf->wTimeStampOff = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];            }            return (pBuf->wDuration);    }    return 0;}staticVOIDs_vFillRTSHead (    IN PSDevice         pDevice,    IN BYTE             byPktType,    IN PVOID            pvRTS,    IN UINT             cbFrameLength,    IN BOOL             bNeedAck,    IN BOOL             bDisCRC,    IN PSEthernetHeader psEthHeader,    IN WORD             wCurrentRate,    IN BYTE             byFBOption    ){    UINT uRTSFrameLen = 20;    WORD  wLen = 0x0000;            // dummy code, only to avoid compiler warning message    UNREFERENCED_PARAMETER(bNeedAck);    if (pvRTS == NULL)    	return;    if (bDisCRC) {        // When CRCDIS bit is on, H/W forgot to generate FCS for RTS frame,        // in this case we need to decrease its length by 4.        uRTSFrameLen -= 4;    }    // Note: So far RTSHead dosen't appear in ATIM & Beacom DMA, so we don't need to take them into account.    //       Otherwise, we need to modified codes for them.    if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {        if (byFBOption == AUTO_FB_NONE) {            PSRTS_g pBuf = (PSRTS_g)pvRTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)            );            pBuf->wTransmitLength_b = cpu_to_le16(wLen);                        BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_a), (PBYTE)&(pBuf->bySignalField_a)            );            pBuf->wTransmitLength_a = cpu_to_le16(wLen);                        //Get Duration            pBuf->wDuration_bb = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BB, cbFrameLength, PK_TYPE_11B, pDevice->byTopCCKBasicRate, bNeedAck, byFBOption));    //0:RTSDuration_bb, 1:2.4G, 1:CCKData            pBuf->wDuration_aa = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //2:RTSDuration_aa, 1:2.4G, 2,3: 2.4G OFDMData            pBuf->wDuration_ba = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //1:RTSDuration_ba, 1:2.4G, 2,3:2.4G OFDM Data                        pBuf->Data.wDurationID = pBuf->wDuration_aa;            //Get RTS Frame body            pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4            if ((pDevice->eOPMode == OP_MODE_ADHOC) ||                (pDevice->eOPMode == OP_MODE_AP)) {                                MEMvCopy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN);            }            else {                MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            if (pDevice->eOPMode == OP_MODE_AP) {                MEMvCopy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            else {                    MEMvCopy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN);            }            }        else {           PSRTS_g_FB pBuf = (PSRTS_g_FB)pvRTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)            );            pBuf->wTransmitLength_b = cpu_to_le16(wLen);                        BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_a), (PBYTE)&(pBuf->bySignalField_a)            );            pBuf->wTransmitLength_a = cpu_to_le16(wLen);                        //Get Duration            pBuf->wDuration_bb = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BB, cbFrameLength, PK_TYPE_11B, pDevice->byTopCCKBasicRate, bNeedAck, byFBOption));    //0:RTSDuration_bb, 1:2.4G, 1:CCKData            pBuf->wDuration_aa = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //2:RTSDuration_aa, 1:2.4G, 2,3:2.4G OFDMData            pBuf->wDuration_ba = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //1:RTSDuration_ba, 1:2.4G, 2,3:2.4G OFDMData            pBuf->wRTSDuration_ba_f0 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BA_F0, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption));    //4:wRTSDuration_ba_f0, 1:2.4G, 1:CCKData            pBuf->wRTSDuration_aa_f0 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA_F0, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption));    //5:wRTSDuration_aa_f0, 1:2.4G, 1:CCKData            pBuf->wRTSDuration_ba_f1 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BA_F1, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption));    //6:wRTSDuration_ba_f1, 1:2.4G, 1:CCKData            pBuf->wRTSDuration_aa_f1 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA_F1, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption));    //7:wRTSDuration_aa_f1, 1:2.4G, 1:CCKData                            pBuf->Data.wDurationID = pBuf->wDuration_aa;            //Get RTS Frame body            pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4            if ((pDevice->eOPMode == OP_MODE_ADHOC) ||                (pDevice->eOPMode == OP_MODE_AP)) {                                       MEMvCopy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN);            }            else {                MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            if (pDevice->eOPMode == OP_MODE_AP) {                MEMvCopy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            else {                    MEMvCopy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN);            }        } // if (byFBOption == AUTO_FB_NONE)    }    else if (byPktType == PK_TYPE_11A) {        if (byFBOption == AUTO_FB_NONE) {            PSRTS_ab pBuf = (PSRTS_ab)pvRTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField), (PBYTE)&(pBuf->bySignalField)            );            pBuf->wTransmitLength = cpu_to_le16(wLen);                        //Get Duration            pBuf->wDuration = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //0:RTSDuration_aa, 0:5G, 0: 5G OFDMData                	    pBuf->Data.wDurationID = pBuf->wDuration;            //Get RTS Frame body            pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4            if ((pDevice->eOPMode == OP_MODE_ADHOC) ||                (pDevice->eOPMode == OP_MODE_AP)) {                                   MEMvCopy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN);            }            else {                MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            if (pDevice->eOPMode == OP_MODE_AP) {                MEMvCopy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            else {                    MEMvCopy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN);            }        }        else {            PSRTS_a_FB pBuf = (PSRTS_a_FB)pvRTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField), (PBYTE)&(pBuf->bySignalField)            );            pBuf->wTransmitLength = cpu_to_le16(wLen);                        //Get Duration            pBuf->wDuration = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //0:RTSDuration_aa, 0:5G, 0: 5G OFDMData    	    pBuf->wRTSDuration_f0 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA_F0, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //5:RTSDuration_aa_f0, 0:5G, 0: 5G OFDMData    	    pBuf->wRTSDuration_f1 = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_AA_F1, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //7:RTSDuration_aa_f1, 0:5G, 0:    	    pBuf->Data.wDurationID = pBuf->wDuration;    	    //Get RTS Frame body            pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4            if ((pDevice->eOPMode == OP_MODE_ADHOC) ||                (pDevice->eOPMode == OP_MODE_AP)) {                                       MEMvCopy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN);            }            else {                MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            if (pDevice->eOPMode == OP_MODE_AP) {                MEMvCopy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);            }            else {                    MEMvCopy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN);            }        }    }    else if (byPktType == PK_TYPE_11B) {        PSRTS_ab pBuf = (PSRTS_ab)pvRTS;        //Get SignalField,ServiceField,Length        BBvCaculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,            (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField), (PBYTE)&(pBuf->bySignalField)        );        pBuf->wTransmitLength = cpu_to_le16(wLen);                //Get Duration        pBuf->wDuration = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, RTSDUR_BB, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //0:RTSDuration_bb, 1:2.4G, 1:CCKData                pBuf->Data.wDurationID = pBuf->wDuration;        //Get RTS Frame body        pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4        if ((pDevice->eOPMode == OP_MODE_ADHOC) ||            (pDevice->eOPMode == OP_MODE_AP)) {                           MEMvCopy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN);        }        else {            MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);        }        if (pDevice->eOPMode == OP_MODE_AP) {            MEMvCopy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN);        }        else {                MEMvCopy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN);        }    }}staticVOIDs_vFillCTSHead (    IN PSDevice pDevice,    IN UINT     uDMAIdx,    IN BYTE     byPktType,    IN PVOID    pvCTS,    IN UINT     cbFrameLength,    IN BOOL     bNeedAck,    IN BOOL     bDisCRC,    IN WORD     wCurrentRate,    IN BYTE     byFBOption    ){    UINT uCTSFrameLen = 14;    WORD  wLen = 0x0000;            if (pvCTS == NULL) {        return;    }    if (bDisCRC) {        // When CRCDIS bit is on, H/W forgot to generate FCS for CTS frame,        // in this case we need to decrease its length by 4.        uCTSFrameLen -= 4;    }    if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {        if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA) {            // Auto Fall back            PSCTS_FB pBuf = (PSCTS_FB)pvCTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)            );            pBuf->wTransmitLength_b = cpu_to_le16(wLen);            pBuf->wDuration_ba = (WORD)s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption); //3:CTSDuration_ba, 1:2.4G, 2,3:2.4G OFDM Data            pBuf->wDuration_ba += pDevice->wCTSDuration;            pBuf->wDuration_ba = cpu_to_le16(pBuf->wDuration_ba);            //Get CTSDuration_ba_f0            pBuf->wCTSDuration_ba_f0 = (WORD)s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F0, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption); //8:CTSDuration_ba_f0, 1:2.4G, 2,3:2.4G OFDM Data            pBuf->wCTSDuration_ba_f0 += pDevice->wCTSDuration;            pBuf->wCTSDuration_ba_f0 = cpu_to_le16(pBuf->wCTSDuration_ba_f0);                        //Get CTSDuration_ba_f1            pBuf->wCTSDuration_ba_f1 = (WORD)s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F1, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption); //9:CTSDuration_ba_f1, 1:2.4G, 2,3:2.4G OFDM Data                        pBuf->wCTSDuration_ba_f1 += pDevice->wCTSDuration;            pBuf->wCTSDuration_ba_f1 = cpu_to_le16(pBuf->wCTSDuration_ba_f1);                                    //Get CTS Frame body            pBuf->Data.wDurationID = pBuf->wDuration_ba;            pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4            pBuf->Data.wReserved = 0x0000;            MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN);        } else { //if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA)            PSCTS pBuf = (PSCTS)pvCTS;            //Get SignalField,ServiceField,Length            BBvCaculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                (PWORD)&(wLen), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)            );            pBuf->wTransmitLength_b = cpu_to_le16(wLen);                        //Get CTSDuration_ba            pBuf->wDuration_ba = cpu_to_le16((WORD)s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption)); //3:CTSDuration_ba, 1:2.4G, 2,3:2.4G OFDM Data                        pBuf->wDuration_ba += pDevice->wCTSDuration;            pBuf->wDuration_ba = cpu_to_le16(pBuf->wDuration_ba);                                    //Get CTS Frame body            pBuf->Data.wDurationID = pBuf->wDuration_ba;            pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4            pBuf->Data.wReserved = 0x0000;            MEMvCopy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN);        }    }}/*+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -