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

📄 cmdx500.cpp

📁 WinCE5.0部分核心源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        
        if( IsFidBusy(offValue) || IsFidErr(offValue) )
            return FALSE;

        if( IsFidRdy(offValue) )
            return TRUE;
    }

    //return !(IsFidBusy(offValue) || IsFidErr(offValue));
    return TRUE;
}

void            
BapMoveFidOffset(USHORT BAPOff, USHORT FidOffNew)
{
    NdisRawWritePortUshort( BAPOff+BAPOFF_OFFSET_BAPX, FidOffNew );
}


BOOLEAN     
XmitOpen(PCARD card, UINT param)
{
    if( 0 == (card->m_fid = (FID)CQGetNextND(card->fidQ)) )
        return FALSE;
    
    if( ! BapSet(card, REG_BAPtx_SEL, card->m_fid, sizeof(TXFID_HDR) ) )
        return FALSE; 
    
    NdisRawWritePortUshort(card->m_IOBase+REG_BAPtx_DATA, (USHORT)param-sizeof(HDR_802_3));
    return TRUE;
}

BOOLEAN     
XmitClose(PCARD card, UINT param)
{
    card->m_cmd = CMD_X500_Transmit;
    if( FALSE==exec( card, 600, card->m_fid ) ){     
        return FALSE;
    }
    fidCounter--;
    CQUpdate(card->fidQ);
    return TRUE;    
}


FID 
AllocNextFid(PCARD card)
{
#define PACKET_MAX_SIZE     TX_BUF_SIZE
#define FRAME_X500_SIZE (PACKET_MAX_SIZE+sizeof(TXFID_HDR))

    if ( FALSE == WaitLastCmd( card, 500000 ) ){
        return NULL;
    }
    
    //WaitComplete();
    USHORT      us = (USHORT)FRAME_X500_SIZE;   
    card->m_cmd = CMD_X500_Allocate;
        
    WriteCommand( card, us );       

    if( ! WaitComplete(card) ) {
        CmdRestoreInterrupts(card);
        return NULL;
        }

#if 1
    CMD_STATUS_X500 status =  GetCmdStatus(card, (CMD_X500)card->m_cmd);
    if( CMD_STATUS_SUCCESS != status ){
        CmdRestoreInterrupts(card);
        return NULL;
    }
#endif
    if( ! WaitAllocComplete(card) ) {
        CmdRestoreInterrupts(card);
        return NULL;
        }

    FID         tmpFid;             
    NdisRawReadPortUshort( card->m_IOBase+REG_FID_TX_ALLOC, &tmpFid );
    
    static      TXFID_HDR   txFidHdr = {{0,0,0,0,0x26,0,0,0}};
    if( ! BapSet(card, REG_BAPtx_SEL, tmpFid, 0 ) ) {
        CmdRestoreInterrupts(card);
        return FALSE; 
        }
    
    NdisRawWritePortBufferUshort(card->m_IOBase+REG_BAPtx_DATA, &txFidHdr, sizeof( TXFID_HDR )/2 );
    CmdRestoreInterrupts(card);
    AckAlloc(card);
    return tmpFid;
}

//===========================================================================
    BOOLEAN RidGet (PCARD card, USHORT m_RID, void *st, int dataLen)
//===========================================================================
// 
// Description: 
//    
//      Inputs: 
//    
//     Returns: 
//---------------------------------------------------------------------------
{
    if (!WaitLastCmd(card, 100)) {
        return FALSE;
        }

    card->m_cmd = CMD_X500_AccessRIDRead;
    WriteCommand( card, m_RID );            // access RID read

    if (!WaitComplete(card)) { 
        CmdRestoreInterrupts(card);
        if (card->m_WasMacEnabled) {
            cmdEnable(card);
            }
        return FALSE;
        }
    
    if(BapSet(card, REG_BAP1_SEL, m_RID)) {
        ULONG size = dataLen/2;
        if (dataLen&1) {        //Account for Odd number of bytes   spb010
            size+=1;
            UCHAR *buf=new UCHAR[size*2];
            NdisRawReadPortBufferUshort(card->m_IOBase+REG_BAP1_DATA, buf, size);
            memcpy(st,buf,dataLen);
            delete buf;
        }
        else {
            NdisRawReadPortBufferUshort(card->m_IOBase+REG_BAP1_DATA, st, size);
        }
    }

    GetCmdStatus(card);
    CmdRestoreInterrupts(card);
    return TRUE;
}

//===========================================================================
    BOOLEAN RidSet (PCARD   card, 
                    USHORT  m_RID, 
                    void    *st, 
                    int     dataLen, 
                    BOOLEAN macEnable)
//===========================================================================
// 
// Description: 
//    
//      Inputs: 
//    
//     Returns: 
//---------------------------------------------------------------------------
{
    if (!WaitLastCmd(card, 100)) {
        return FALSE;
        }

    if (card->m_WasMacEnabled) {
        cmdDisable(card);
        }

    card->m_cmd = CMD_X500_AccessRIDRead;
    WriteCommand(card, m_RID);      // access RID read

    if (!WaitComplete(card)) {
        CmdRestoreInterrupts(card);
        if (macEnable && card->m_WasMacEnabled) {
            cmdEnable(card);
            }
        return FALSE;
        }

    if (BapSet(card, REG_BAP1_SEL, m_RID)) {
        ULONG size = dataLen/2;
        if (dataLen&1) {        //Account for Odd number of bytes   spb010
            size+=1;         
            UCHAR *buf=new UCHAR [size*2];
            memset(buf,0,size*2);
            memcpy(buf,st,dataLen);
            //spb017 Fixed this so it was a write port instead of read.
            NdisRawWritePortBufferUshort(card->m_IOBase+REG_BAP1_DATA, buf, size);
            delete buf;
        }
        else {
            NdisRawWritePortBufferUshort(card->m_IOBase+REG_BAP1_DATA, st, size);
        }

        NdisRawWritePortUshort(card->m_IOBase+REG_CMD, CMD_X500_AccessRIDWrite);
        
        card->m_PrevCmdDone = FALSE;
        card->m_PrevCommand = CMD_X500_AccessRIDWrite;
    
        if (!WaitComplete(card)) {
            CmdRestoreInterrupts(card);
            if (macEnable && card->m_WasMacEnabled) {
                cmdEnable(card);
                }
            card->m_PrevCmdDone = TRUE;
            return FALSE;
            }
        }
    GetCmdStatus(card);
    CmdRestoreInterrupts(card);
    
    if (macEnable && card->m_WasMacEnabled) {
        cmdEnable(card);
        }
    
    return TRUE;
}

BOOLEAN 
RidSetIgnoreMAC(PCARD card, USHORT m_RID, void *st, int dataLen )
{
    if( ! WaitLastCmd(card, 100) ) {
        return FALSE;
        }

    card->m_cmd = CMD_X500_AccessRIDRead;
    WriteCommand( card, m_RID );      // access RID read

    if( ! WaitComplete(card) ){
        return FALSE;
    }   
    if( BapSet(card, REG_BAP1_SEL, m_RID ) ){

        ULONG   size = dataLen/2 + (1&dataLen);
        
        NdisRawWritePortBufferUshort( card->m_IOBase+REG_BAP1_DATA, st, size );
        NdisRawWritePortUshort( card->m_IOBase+REG_CMD, CMD_X500_AccessRIDWrite );
        
        card->m_PrevCmdDone = FALSE;
        card->m_PrevCommand = CMD_X500_AccessRIDWrite;
    
        if( ! WaitComplete(card, 30 * 1000000) ){
            card->m_PrevCmdDone = TRUE;
            CmdRestoreInterrupts(card);
            return FALSE;
        }
    }
    GetCmdStatus(card);
    CmdRestoreInterrupts(card);
    
    return TRUE;
}

//===========================================================================
    BOOLEAN cmdEnable (PCARD card)
//===========================================================================
// 
// Description: Enable the radio.   Also set flag in card indicating that 
//              we're enabled.
//    
//      Inputs: card - pointer to card structure.
//    
//     Returns: TRUE if successful, false otherwise.
//---------------------------------------------------------------------------
{
    card->m_cmd = CMD_X500_EnableAll;
    exec(card, 1000); 
    return (card->m_WasMacEnabled = card->m_IsMacEnabled = WaitComplete(card));
};

//===========================================================================
    BOOLEAN cmdDisable (PCARD card)
//===========================================================================
// 
// Description: Disable the radio.  Also set flag in card indicating that 
//              we're disabled.
//    
//      Inputs: card - pointer to card structure.
//    
//     Returns: TRUE if successful, false otherwise.
//---------------------------------------------------------------------------
{
    card->m_cmd = CMD_X500_Disable;
    exec(card, 1000); 
    
    if( WaitComplete(card) ) {
        card->m_IsMacEnabled = FALSE;

        //spb009
        if (NDIS_STATUS_MEDIA_CONNECT == card->m_MSenceStatus) {
            #if DBG
            DbgPrint("Sending NDIS_STATUS_MEDIA_DISCONNECT--\n");
            #endif
            card->IsAssociated   = FALSE;             //We are No Longer Associated
            card->m_MSenceStatus = NDIS_STATUS_MEDIA_DISCONNECT;
#ifndef UNDER_CE
            NdisMIndicateStatus(card->m_MAHandle, card->m_MSenceStatus, 0, 0 );
            NdisMIndicateStatusComplete(card->m_MAHandle);
#else

            //
            //  Shouldn't indicate if we get here from HaltHandler()..
            //  Ndis ASSERT.
            //

            if (!card->bHalting)
            {
                NdisMIndicateStatus(card->m_MAHandle, card->m_MSenceStatus, 0, 0 );
                NdisMIndicateStatusComplete(card->m_MAHandle);
            }
#endif
        }
        return TRUE;
    }
    return FALSE;
}

//===========================================================================
    BOOLEAN cmdBssidListScan (PCARD card)
//===========================================================================
// 
// Description: Have the radio perform a BSSID list scan.
//    
//      Inputs: card - pointer to card structure.
//    
//     Returns: 
//    
//      (01/29/01)
//---------------------------------------------------------------------------
{
    card->m_cmd = CMD_X500_BssidListScan;
    return exec(card, 1000);
}

BOOLEAN
cmdSetOpMode( PCARD card, USHORT param )
{
    card->m_cmd = CMD_X500_SetOperationMode;
    exec(card, 1000, param ); 
    return WaitComplete(card, 100000 ); // wait up to 100 ms
};

//========================================================================
BOOLEAN
cmdConfigGet(PCARD card, CFG_X500 * cfg)
{
    return RidGet(card, RID_CONFIG, cfg, sizeof(CFG_X500));
}

BOOLEAN
cmdConfigSet(PCARD card, CFG_X500 * cfg, BOOLEAN macEnable)
{
    if( NULL == cfg ) {
        cfg = &card->m_activeProfile->zFlags.cfg;
        }
    else {
        card->m_activeProfile->zFlags.cfg = *cfg;
        }

    //spb v7.37 Per Ned.
    if (0 == (cfg->OpMode & 0x00FF)) {
        //Adhoc
        CFG_X500 tmp;
        NdisMoveMemory(&tmp,cfg,sizeof(CFG_X500));
        //Make sure the ATIM is always 0
        tmp.AtimDuration = 0;
        return RidSet(card, RID_CONFIG, &tmp, sizeof(CFG_X500), macEnable );
    }
    else { 
        return RidSet(card, RID_CONFIG, cfg, sizeof(CFG_X500), macEnable );
    }
}
//========================================================================

BOOLEAN cmdSSIDGet(PCARD card, STSSID * ssid)
{
    return RidGet(card, RID_SSID, ssid, sizeof(STSSID) );
}

BOOLEAN cmdSSIDSet(PCARD card, STSSID * ssid, BOOLEAN macEnable)
{
    if( NULL == ssid ) {
        ssid = &card->m_activeProfile->zFlags.SSIDList;
        }
    else {
        card->m_activeProfile->zFlags.SSIDList = *ssid; 
        }
    return RidSet(card, RID_SSID, ssid, sizeof(STSSID), macEnable ) ;
}
//========================================================================

BOOLEAN cmdAPsGet(PCARD card, STAPLIST  *aps)
{
    return RidGet(card, RID_APP, aps, sizeof(STAPLIST));
}

BOOLEAN cmdAPsSet(PCARD card, STAPLIST  *aps, BOOLEAN macEnable)
{
    if( NULL == aps ) {
        aps = &card->m_activeProfile->zFlags.APList;
        }
    else {
        card->m_activeProfile->zFlags.APList = *aps; 
        }
    return RidSet(card, RID_APP, aps, sizeof(STAPLIST), macEnable );
}

//========================================================================
BOOLEAN
cmdCapsGet(PCARD card,STCAPS *cap )
{
    return RidGet(card, RID_CAP, cap, sizeof(STCAPS) );
}

BOOLEAN
cmdCapsSet(PCARD card,STCAPS *cap )
{

⌨️ 快捷键说明

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