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

📄 rxtx.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 5 页
字号:
            } else {                return (pDevice->uSIFS + uNextPktTime);            }        }        break;    case DATADUR_A:    //DATADUR_A        if (((uMACfragNum==1)) || (bLastFrag==1)) {//Non Frag or Last Frag            if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime);            } else {                return 0;            }        }        else {//First Frag or Mid Frag            if(uFragIdx == (uMACfragNum-2)){            	uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbLastFragmentSize, wRate, bNeedAck);            } else {                uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck);            }            if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime + uNextPktTime);            } else {                return (pDevice->uSIFS + uNextPktTime);            }        }        break;    case DATADUR_A_F0:    //DATADUR_A_F0	    if (((uMACfragNum==1)) || (bLastFrag==1)) {//Non Frag or Last Frag            if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime);            } else {                return 0;            }        }	    else { //First Frag or Mid Frag	        if (byFBOption == AUTO_FB_0) {                if (wRate < RATE_18M)                    wRate = RATE_18M;                else if (wRate > RATE_54M)                    wRate = RATE_54M;	            if(uFragIdx == (uMACfragNum-2)){            	    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbLastFragmentSize, wFB_Opt0[FB_RATE0][wRate-RATE_18M], bNeedAck);                } else {                    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE0][wRate-RATE_18M], bNeedAck);                }	        } else { // (byFBOption == AUTO_FB_1)                if (wRate < RATE_18M)                    wRate = RATE_18M;                else if (wRate > RATE_54M)                    wRate = RATE_54M;	            if(uFragIdx == (uMACfragNum-2)){            	    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbLastFragmentSize, wFB_Opt1[FB_RATE0][wRate-RATE_18M], bNeedAck);                } else {                    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE0][wRate-RATE_18M], bNeedAck);                }	        }	        	        	        if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime + uNextPktTime);            } else {                return (pDevice->uSIFS + uNextPktTime);            }	    }        break;    case DATADUR_A_F1:    //DATADUR_A_F1        if (((uMACfragNum==1)) || (bLastFrag==1)) {//Non Frag or Last Frag            if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime);            } else {                return 0;            }        }	    else { //First Frag or Mid Frag	        if (byFBOption == AUTO_FB_0) {                if (wRate < RATE_18M)                    wRate = RATE_18M;                else if (wRate > RATE_54M)                    wRate = RATE_54M;	            if(uFragIdx == (uMACfragNum-2)){            	    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbLastFragmentSize, wFB_Opt0[FB_RATE1][wRate-RATE_18M], bNeedAck);                } else {                    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE1][wRate-RATE_18M], bNeedAck);                }	        } else { // (byFBOption == AUTO_FB_1)                if (wRate < RATE_18M)                    wRate = RATE_18M;                else if (wRate > RATE_54M)                    wRate = RATE_54M;	            if(uFragIdx == (uMACfragNum-2)){            	    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbLastFragmentSize, wFB_Opt1[FB_RATE1][wRate-RATE_18M], bNeedAck);                } else {                    uNextPktTime = s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE1][wRate-RATE_18M], bNeedAck);                }	        }	        	        if(bNeedAck){            	uAckTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);                return (pDevice->uSIFS + uAckTime + uNextPktTime);            } else {                return (pDevice->uSIFS + uNextPktTime);            }	    }        break;    default:        break;    }    	ASSERT(FALSE);	return 0;}//byFreqType: 0=>5GHZ 1=>2.4GHZstaticUINTs_uGetRTSCTSDuration (    IN PSDevice pDevice,    IN BYTE byDurType,    IN UINT cbFrameLength,    IN BYTE byPktType,    IN WORD wRate,    IN BOOL bNeedAck,    IN BYTE byFBOption    ){    UINT uCTSTime = 0, uDurTime = 0;            switch (byDurType) {    case RTSDUR_BB:    //RTSDuration_bb        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopCCKBasicRate);        uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck);        break;    case RTSDUR_BA:    //RTSDuration_ba        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopCCKBasicRate);        uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck);        break;    case RTSDUR_AA:    //RTSDuration_aa        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);        uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck);        break;    case CTSDUR_BA:    //CTSDuration_ba        uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wRate, bNeedAck);        break;    case RTSDUR_BA_F0: //RTSDuration_ba_f0        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopCCKBasicRate);        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE0][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE0][wRate-RATE_18M], bNeedAck);        }        break;    case RTSDUR_AA_F0: //RTSDuration_aa_f0        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE0][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE0][wRate-RATE_18M], bNeedAck);        }        break;    case RTSDUR_BA_F1: //RTSDuration_ba_f1        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopCCKBasicRate);        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE1][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE1][wRate-RATE_18M], bNeedAck);        }        break;    case RTSDUR_AA_F1: //RTSDuration_aa_f1        uCTSTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, 14, pDevice->byTopOFDMBasicRate);        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE1][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = uCTSTime + 2*pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE1][wRate-RATE_18M], bNeedAck);        }        break;    case CTSDUR_BA_F0: //CTSDuration_ba_f0        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE0][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE0][wRate-RATE_18M], bNeedAck);        }        break;    case CTSDUR_BA_F1: //CTSDuration_ba_f1        if ((byFBOption == AUTO_FB_0) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt0[FB_RATE1][wRate-RATE_18M], bNeedAck);        } else if ((byFBOption == AUTO_FB_1) && (wRate >= RATE_18M) && (wRate <=RATE_54M)) {            uDurTime = pDevice->uSIFS + s_uGetTxRsvTime(pDevice, byPktType, cbFrameLength, wFB_Opt1[FB_RATE1][wRate-RATE_18M], bNeedAck);        }        break;    default:        break;    }            return uDurTime;}staticUINTs_uFillDataHead (    IN PSDevice pDevice,    IN BYTE     byPktType,    IN WORD     wCurrentRate,    IN PVOID    pTxDataHead,    IN UINT     cbFrameLength,    IN UINT     uDMAIdx,    IN BOOL     bNeedAck,    IN UINT     uFragIdx,    IN UINT     cbLastFragmentSize,    IN UINT     uMACfragNum,    IN BYTE     byFBOption    ){        if (pTxDataHead == NULL) {        return 0;    }    if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {        if((uDMAIdx==TYPE_ATIMDMA)||(uDMAIdx==TYPE_BEACONDMA)) {            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); //1: 2.4GHz            if(uDMAIdx!=TYPE_ATIMDMA) {                pBuf->wTimeStampOff = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];            }            return (pBuf->wDuration);        }        else { // DATA & MANAGE Frame            if (byFBOption == AUTO_FB_NONE) {                PSTxDataHead_g pBuf = (PSTxDataHead_g)pTxDataHead;                //Get SignalField,ServiceField,Length                BBvCaculateParameter(pDevice, cbFrameLength, wCurrentRate, byPktType,                    (PWORD)&(pBuf->wTransmitLength_a), (PBYTE)&(pBuf->byServiceField_a), (PBYTE)&(pBuf->bySignalField_a)                );                BBvCaculateParameter(pDevice, cbFrameLength, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                    (PWORD)&(pBuf->wTransmitLength_b), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)                );                //Get Duration and TimeStamp                pBuf->wDuration_a = (WORD)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength,                                                             byPktType, wCurrentRate, bNeedAck, uFragIdx,                                                             cbLastFragmentSize, uMACfragNum,                                                             byFBOption); //1: 2.4GHz                pBuf->wDuration_b = (WORD)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength,                                                             PK_TYPE_11B, pDevice->byTopCCKBasicRate,                                                             bNeedAck, uFragIdx, cbLastFragmentSize,                                                             uMACfragNum, byFBOption); //1: 2.4GHz                pBuf->wTimeStampOff_a = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];                pBuf->wTimeStampOff_b = wTimeStampOff[pDevice->byPreambleType%2][pDevice->byTopCCKBasicRate%MAX_RATE];                return (pBuf->wDuration_a);             } else {                // Auto Fallback                PSTxDataHead_g_FB pBuf = (PSTxDataHead_g_FB)pTxDataHead;                //Get SignalField,ServiceField,Length                BBvCaculateParameter(pDevice, cbFrameLength, wCurrentRate, byPktType,                    (PWORD)&(pBuf->wTransmitLength_a), (PBYTE)&(pBuf->byServiceField_a), (PBYTE)&(pBuf->bySignalField_a)                );                BBvCaculateParameter(pDevice, cbFrameLength, pDevice->byTopCCKBasicRate, PK_TYPE_11B,                    (PWORD)&(pBuf->wTransmitLength_b), (PBYTE)&(pBuf->byServiceField_b), (PBYTE)&(pBuf->bySignalField_b)                );                //Get Duration and TimeStamp                pBuf->wDuration_a = (WORD)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,                                             wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //1: 2.4GHz                pBuf->wDuration_b = (WORD)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, PK_TYPE_11B,                                             pDevice->byTopCCKBasicRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //1: 2.4GHz                pBuf->wDuration_a_f0 = (WORD)s_uGetDataDuration(pDevice, DATADUR_A_F0, cbFrameLength, byPktType,                                             wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //1: 2.4GHz                pBuf->wDuration_a_f1 = (WORD)s_uGetDataDuration(pDevice, DATADUR_A_F1, cbFrameLength, byPktType,                                             wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption); //1: 2.4GHz                pBuf->wTimeStampOff_a = wTimeStampOff[pDevice->byPreambleType%2][wCurrentRate%MAX_RATE];                pBuf->wTimeStampOff_b = wTimeStampOff[pDevice->byPreambleType%2][pDevice->byTopCCKBasicRate%MAX_RATE];                return (pBuf->wDuration_a);            } //if (byFBOption == AUTO_FB_NONE)        }    }    else if (byPktType == PK_TYPE_11A) {        if ((byFBOption != AUTO_FB_NONE) && (uDMAIdx != TYPE_ATIMDMA) && (uDMAIdx != TYPE_BEACONDMA)) {            // Auto Fallback            PSTxDataHead_a_FB pBuf = (PSTxDataHead_a_FB)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); //0: 5GHz

⌨️ 快捷键说明

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