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

📄 baseband.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 5 页
字号:
{    UINT cbBitCount;    UINT cbUsCount = 0;    UINT cbTmp;    BOOL bExtBit;    BYTE byPreambleType = pDevice->byPreambleType;    BOOL bCCK = pDevice->bCCK;    cbBitCount = cbFrameLength * 8;    bExtBit = FALSE;    switch (wRate) {    case RATE_1M :        cbUsCount = cbBitCount;        *pbyPhySgn = 0x00;        break;    case RATE_2M :        cbUsCount = cbBitCount / 2;        if (byPreambleType == 1)            *pbyPhySgn = 0x09;        else // long preamble            *pbyPhySgn = 0x01;        break;    case RATE_5M :        if (bCCK == FALSE)            cbBitCount ++;        cbUsCount = (cbBitCount * 10) / 55;        cbTmp = (cbUsCount * 55) / 10;        if (cbTmp != cbBitCount)            cbUsCount ++;        if (byPreambleType == 1)            *pbyPhySgn = 0x0a;        else // long preamble            *pbyPhySgn = 0x02;        break;    case RATE_11M :        if (bCCK == FALSE)            cbBitCount ++;        cbUsCount = cbBitCount / 11;        cbTmp = cbUsCount * 11;        if (cbTmp != cbBitCount) {            cbUsCount ++;            if ((cbBitCount - cbTmp) <= 3)                bExtBit = TRUE;        }        if (byPreambleType == 1)            *pbyPhySgn = 0x0b;        else // long preamble            *pbyPhySgn = 0x03;        break;    case RATE_6M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9B; //1001 1011        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8B; //1000 1011        }        break;    case RATE_9M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9F; //1001 1111        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8F; //1000 1111        }        break;    case RATE_12M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9A; //1001 1010        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8A; //1000 1010        }        break;    case RATE_18M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9E; //1001 1110        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8E; //1000 1110        }        break;    case RATE_24M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x99; //1001 1001        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x89; //1000 1001        }        break;    case RATE_36M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9D; //1001 1101        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8D; //1000 1101        }        break;    case RATE_48M :        if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x98; //1001 1000        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x88; //1000 1000        }        break;    case RATE_54M :        if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9C; //1001 1100        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8C; //1000 1100        }        break;    default :        if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ            *pbyPhySgn = 0x9C; //1001 1100        }        else {//11g, 2.4GHZ            *pbyPhySgn = 0x8C; //1000 1100        }        break;    }    if (byPacketType == PK_TYPE_11B) {        *pbyPhySrv = 0x00;        if (bExtBit)            *pbyPhySrv = *pbyPhySrv | 0x80;        *pwPhyLen = (WORD) cbUsCount;    }    else {        *pbyPhySrv = 0x00;        *pwPhyLen = (WORD)cbFrameLength;    }}/* * Description: Set Antenna mode * * Parameters: *  In: *      pDevice          - Device Structure *      byAntennaMode    - Antenna Mode *  Out: *      none * * Return Value: none * */VOIDBBvSetAntennaMode (PSDevice pDevice, BYTE byAntennaMode){    //{{ RobertYu: 20041124, ABG Mode, VC1/VC2 define, make the ANT_A, ANT_B inverted    /*if ( (pDevice->byRFType == RF_MAXIM2829) ||          (pDevice->byRFType == RF_UW2452) ||          (pDevice->byRFType == RF_AIROHA7230) ) { // RobertYu: 20041210, 20050104                 switch (byAntennaMode) {            case ANT_TXA:                byAntennaMode = ANT_TXB;                break;            case ANT_TXB:                byAntennaMode = ANT_TXA;                break;            case ANT_RXA:                byAntennaMode = ANT_RXB;                break;            case ANT_RXB:                byAntennaMode = ANT_RXA;                break;        }    }*/        switch (byAntennaMode) {        case ANT_TXA:            break;        case ANT_TXB:            break;        case ANT_RXA:            pDevice->byBBRxConf &= 0xFC;            break;        case ANT_RXB:            pDevice->byBBRxConf &= 0xFE;            pDevice->byBBRxConf |= 0x02;;            break;    }                CONTROLnsRequestOut(pDevice,                    MESSAGE_TYPE_SET_ANTMD,                    (WORD) byAntennaMode,                    0,                    0,                    NULL);}/* * Description: Set Antenna mode * * Parameters: *  In: *      pDevice          - Device Structure *      byAntennaMode    - Antenna Mode *  Out: *      none * * Return Value: none * */BOOLBBbVT3184Init (PSDevice pDevice){    NTSTATUS                ntStatus;    WORD                    wLength;    PBYTE                   pbyAddr;    PBYTE                   pbyAgc;    WORD                    wLengthAgc;    BYTE                    abyArray[256];    ntStatus = CONTROLnsRequestIn(pDevice,                                  MESSAGE_TYPE_READ,                                  0,                                  MESSAGE_REQUEST_EEPROM,                                  EEP_MAX_CONTEXT_SIZE,                                  pDevice->abyEEPROM);    if (ntStatus != STATUS_SUCCESS) {        return FALSE;    }    //20080215-01,<Add> by Mike Liu//    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04) //        return FALSE;    if ( !pDevice->bZoneRegExist ) {        pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];    }    pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);        if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {        pDevice->byBBRxConf = abyVT3184_AL2230[10];        wLength = sizeof(abyVT3184_AL2230);        pbyAddr = abyVT3184_AL2230;        pbyAgc = abyVT3184_AGC;        wLengthAgc = sizeof(abyVT3184_AGC);                pDevice->abyBBVGA[0] = 0x1C;        pDevice->abyBBVGA[1] = 0x10;        pDevice->abyBBVGA[2] = 0x0;        pDevice->abyBBVGA[3] = 0x0;        pDevice->ldBmThreshold[0] = -70;        pDevice->ldBmThreshold[1] = -48;        pDevice->ldBmThreshold[2] = 0;        pDevice->ldBmThreshold[3] = 0;    }    else if (pDevice->byRFType == RF_AIROHA7230) {        pDevice->byBBRxConf = abyVT3184_AL2230[10];        wLength = sizeof(abyVT3184_AL2230);        pbyAddr = abyVT3184_AL2230;        pbyAgc = abyVT3184_AGC;        wLengthAgc = sizeof(abyVT3184_AGC);                // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)        //pbyAddr[0x09] = 0x41;        // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)        //pbyAddr[0x0a] = 0x28;        // Select VC1/VC2, CR215 = 0x02->0x06        pbyAddr[0xd7] = 0x06;                pDevice->abyBBVGA[0] = 0x1C;        pDevice->abyBBVGA[1] = 0x10;        pDevice->abyBBVGA[2] = 0x0;        pDevice->abyBBVGA[3] = 0x0;        pDevice->ldBmThreshold[0] = -70;        pDevice->ldBmThreshold[1] = -48;        pDevice->ldBmThreshold[2] = 0;        pDevice->ldBmThreshold[3] = 0;            }     else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {        pDevice->byBBRxConf = abyVT3184_VT3226D0[10];   //RobertYu:20060515        wLength = sizeof(abyVT3184_VT3226D0);           //RobertYu:20060515        pbyAddr = abyVT3184_VT3226D0;                   //RobertYu:20060515        pbyAgc = abyVT3184_AGC;        wLengthAgc = sizeof(abyVT3184_AGC);        pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack        pDevice->abyBBVGA[1] = 0x10;        pDevice->abyBBVGA[2] = 0x0;        pDevice->abyBBVGA[3] = 0x0;        pDevice->ldBmThreshold[0] = -70;        pDevice->ldBmThreshold[1] = -48;        pDevice->ldBmThreshold[2] = 0;        pDevice->ldBmThreshold[3] = 0;        // Fix VT3226 DFC system timing issue        MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);    //}}    //{{RobertYu:20060609    } else if ( (pDevice->byRFType == RF_VT3342A0) ) {        pDevice->byBBRxConf = abyVT3184_VT3226D0[10];        wLength = sizeof(abyVT3184_VT3226D0);        pbyAddr = abyVT3184_VT3226D0;        pbyAgc = abyVT3184_AGC;        wLengthAgc = sizeof(abyVT3184_AGC);        pDevice->abyBBVGA[0] = 0x20;        pDevice->abyBBVGA[1] = 0x10;        pDevice->abyBBVGA[2] = 0x0;        pDevice->abyBBVGA[3] = 0x0;        pDevice->ldBmThreshold[0] = -70;        pDevice->ldBmThreshold[1] = -48;        pDevice->ldBmThreshold[2] = 0;        pDevice->ldBmThreshold[3] = 0;        // Fix VT3226 DFC system timing issue        MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);    //}}            } else {        return TRUE;    }   memcpy(abyArray, pbyAddr, wLength);       CONTROLnsRequestOut(pDevice,                    MESSAGE_TYPE_WRITE,                    0,                    MESSAGE_REQUEST_BBREG,                    wLength,                    abyArray                    );                       memcpy(abyArray, pbyAgc, wLengthAgc);       CONTROLnsRequestOut(pDevice,                    MESSAGE_TYPE_WRITE,                    0,                    MESSAGE_REQUEST_BBAGC,                    wLengthAgc,                    abyArray                    );                                            if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0         (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609         ) {        ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);        MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);    }     else if (pDevice->byRFType == RF_VT3226D0)     {        ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);        MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);    }                ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);    ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);    RFbRFTableDownload(pDevice);    return TRUE;//ntStatus; }/* * Description: Turn on BaseBand Loopback mode * * Parameters: *  In: *      pDevice         - Device Structure * *  Out: *      none * * Return Value: none * */void BBvLoopbackOn (PSDevice pDevice){    BYTE      byData;    //CR C9 = 0x00    ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xC9, &pDevice->byBBCRc9);//CR201    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0);

⌨️ 快捷键说明

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