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

📄 card.cpp

📁 WinCE5.0部分核心源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

#if NDISVER == 5
    if (card->mp_enabled != MP_POWERED)
    {
      if (((Oid != OID_GEN_MEDIA_CONNECT_STATUS) && (Oid != OID_TCP_TASK_OFFLOAD))  ||  
          (card->mp_enabled == MP_ENABLED))
      {  
        InitFW(card, TRUE);
        card->mp_enabled= MP_POWERED;
        InitInterrupts( card );     //spb010
      } 
    }
#endif

    //spb001 Finish Initialization if we haven't yet
    if (!card->initComplete) {
        InitFW1(card);
        InitInterrupts( card );     //spb010
    }

    NDIS_STATUS         StatusToReturn  = NDIS_STATUS_SUCCESS;

    //spb008
    if (TRUE == CheckCardFlashing(card,&StatusToReturn,Oid )) {  
        return StatusToReturn;
    }

    cmdAwaken(card, TRUE);
    
    NDIS_802_11_SSID                    ndis_ssid;
    NDIS_802_11_CONFIGURATION           ndis_config;
    NDIS_802_11_RSSI                    ndis_rssi;
    NDIS_802_11_MAC_ADDRESS             ndis_bssid;
    NDIS_802_11_NETWORK_INFRASTRUCTURE  ndis_infrastructure;
    NDIS_802_11_AUTHENTICATION_MODE     ndis_authmode;
    NDIS_802_11_NETWORK_TYPE            ndis_nettype;
    NDIS_802_11_RATES                   ndis_rates;
    NDIS_802_11_WEP_STATUS              ndis_wepstatus;
#if NDISVER == 5
        NDIS_PNP_CAPABILITIES   ndis_pnp_capablities;
#endif


    ULONG               GenericULong;
    USHORT              GenericUShort;
    UCHAR               GenericArray[6];

    UINT                MoveBytes       = sizeof(ULONG);
    PVOID               MoveSource      = (PVOID)(&GenericULong);
    *BytesWritten   = 0;
    *BytesNeeded    = 0;

    //NDIS_HARDWARE_STATUS  HardwareStatus  = NdisHardwareStatusReady;
    NDIS_MEDIUM             Medium          = NdisMedium802_3;

    ASSERT(sizeof(ULONG) == 4);
  

    switch (Oid) {
    case OID_GEN_MAC_OPTIONS:

#if NDISVER == 3
//#ifndef   PM_SUPPORT
        GenericULong    = (ULONG)(  NDIS_MAC_OPTION_TRANSFERS_NOT_PEND  |
                                    NDIS_MAC_OPTION_RECEIVE_SERIALIZED  |
                                    NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
                                    NDIS_MAC_OPTION_NO_LOOPBACK );
#else
        GenericULong    = (ULONG)(  NDIS_MAC_OPTION_TRANSFERS_NOT_PEND  |
                                    NDIS_MAC_OPTION_RECEIVE_SERIALIZED  |
                                    NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
                                    NDIS_MAC_OPTION_TRANSFERS_NOT_PEND  |
                                    NDIS_MAC_OPTION_NO_LOOPBACK );
#endif
        break;

    case OID_GEN_SUPPORTED_LIST:
        MoveSource      = (PVOID)(AironetSupportedOids);
        MoveBytes       = GetSupOidSize();
        break;

    case OID_GEN_HARDWARE_STATUS:
        GenericULong = IsCardInserted(card) ? NdisHardwareStatusReady : NdisHardwareStatusNotReady;
        break;
        //veSource      = (PVOID)(  &HardwareStatus );
        //veBytes       = sizeof( NDIS_HARDWARE_STATUS );
        //break;

    case OID_GEN_MEDIA_SUPPORTED:
    case OID_GEN_MEDIA_IN_USE:

        MoveSource      = (PVOID) (&Medium);
        MoveBytes       = sizeof(NDIS_MEDIUM);
        break;

    case OID_GEN_MAXIMUM_LOOKAHEAD:
        GenericULong    = AIRONET_MAX_LOOKAHEAD;
        break;


    case OID_GEN_MAXIMUM_FRAME_SIZE:
        GenericULong    = (ULONG)(1514 - AIRONET_HEADER_SIZE);
        break;


    case OID_GEN_MAXIMUM_TOTAL_SIZE:
        GenericULong    = (ULONG)1514;
        break;


    case OID_GEN_LINK_SPEED:
#ifdef SOFTEX
        if( ! ADAPTER_READY( card ) ){
            GenericULong = 1;
            break;
        }
#endif  
        UpdateLinkSpeed( card );
        GenericULong = card->m_LinkSpeed;
        
        if(0==GenericULong) {
            // This fixes the 98 hang problem. (v6.54 10/18/00)
            GenericULong = 11 * 10000; // This value is in units of 100 bps
        }
        break;


    case OID_GEN_TRANSMIT_BUFFER_SPACE:
        GenericULong    = (ULONG)TX_BUF_SIZE;
        break;

    case OID_GEN_RECEIVE_BUFFER_SPACE:
        GenericULong    = (ULONG)2314;
        break;

    case OID_GEN_TRANSMIT_BLOCK_SIZE:
        GenericULong    = (ULONG)TX_BUF_SIZE;
        break;

    case OID_GEN_RECEIVE_BLOCK_SIZE:
        GenericULong    = (ULONG)1514;
        break;

    case OID_GEN_VENDOR_ID:
        NdisMoveMemory( (PVOID)&GenericULong, card->m_PermanentAddress, 3 );
        GenericULong    &= 0xFFFFFF00;
        MoveSource      = (PVOID)&GenericULong;
        MoveBytes       = sizeof(GenericULong);
        break;

    case OID_GEN_VENDOR_DESCRIPTION:
        //MoveSource        = (PVOID)"Aironet Wireless LAN Adapter.";
        //MoveBytes         = 31;
        strcpy( tmpBuf, "Cisco " );
        strncpy( tmpBuf+strlen(tmpBuf), card->m_CardName, ARRAYSIZE(tmpBuf) - strlen(tmpBuf) - 1 );
		tmpBuf[ARRAYSIZE(tmpBuf) - 1] = '\0';
        strncpy( tmpBuf+strlen(tmpBuf), " Wireless LAN Adapter.", ARRAYSIZE(tmpBuf) - strlen(tmpBuf) - 1 );
		tmpBuf[ARRAYSIZE(tmpBuf) - 1] = '\0';
        MoveSource      = tmpBuf;
        MoveBytes       = strlen(tmpBuf)+1;
        break;

    case OID_GEN_DRIVER_VERSION:
        GenericUShort   = ((USHORT)NDIS_MAJOR_VERSION << 8) | NDIS_MINOR_VERSION;
        MoveSource      = (PVOID)&GenericUShort;
        MoveBytes       = sizeof(GenericUShort);
        break;

    case OID_GEN_CURRENT_LOOKAHEAD:
        GenericULong    = (ULONG)card->m_MaxLookAhead;
        break;

    case OID_802_3_PERMANENT_ADDRESS:
        NdisMoveMemory((PCHAR)GenericArray, card->m_PermanentAddress, AIRONET_LENGTH_OF_ADDRESS);
        MoveSource      = (PVOID)GenericArray;
        MoveBytes       = sizeof(card->m_PermanentAddress);
        break;

    case OID_802_3_CURRENT_ADDRESS:
        NdisMoveMemory((PCHAR)GenericArray, card->m_StationAddress, AIRONET_LENGTH_OF_ADDRESS);
        MoveSource      = (PVOID)GenericArray;
        MoveBytes       = sizeof(card->m_StationAddress);
        break;

    case OID_802_3_MAXIMUM_LIST_SIZE:
        GenericULong    = (ULONG) card->m_MaxMulticastList;
        break;

    case OID_GEN_XMIT_OK:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesXmitGood;
        break;

    case OID_GEN_RCV_OK:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesRcvGood;
        break;

    case OID_GEN_XMIT_ERROR:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesXmitBad;
        break;

    case OID_GEN_RCV_ERROR: 
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesRcvBad;
        break;

    case OID_GEN_RCV_NO_BUFFER:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesRcvOverRun;
        break;
    
    case OID_802_3_RCV_ERROR_ALIGNMENT:
        GenericULong    = 0;
        break;

    case OID_802_3_XMIT_ONE_COLLISION:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesXmitOneCollision;
        break;

    case OID_802_3_XMIT_MORE_COLLISIONS:
        UpdateCounters(card);
        GenericULong    = (UINT)card->m_FramesXmitManyCollisions;
        break;
    
    case OID_GEN_VENDOR_DRIVER_VERSION:
        GenericULong    = (DriverMajorVersion<<16) | DriverMinorVersion;        
        break;

    case OID_GEN_MAXIMUM_SEND_PACKETS:
        GenericULong    = 1;
        break;

    case OID_GEN_MEDIA_CONNECT_STATUS:
        if (NDIS_STATUS_MEDIA_CONNECT == card->m_MSenceStatus) {
            GenericULong = NdisMediaStateConnected;
        }
        else {
            GenericULong = NdisMediaStateDisconnected;   
        }
        #if DBG
//spb026        DbgPrint("Media Connect Status is %s\n",
//spb026          GenericULong==NdisMediaStateDisconnected?"NdisMediaStateDisconnected"
//spb026                                                  :"NdisMediaStateConnected");
        #endif


        DEBUGMSG (ZONE_QUERY,
			(TEXT("PCX500:: OID_GEN_MEDIA_CONNECT_STATUS return [%s]\r\n"),
			GenericULong==NdisMediaStateDisconnected ? 
				TEXT("Disconnected"):
				TEXT("Connected")));

        break;

//***************************************************************************
// BEGIN 802.11 OIDs -- (query)
//***************************************************************************

    //-----------------------------------------------------------------------
    // This object defines the Service Set Identifier. The SSID is a string, 
    // up to 32 characters. It identifies a set of interconnected Basic Service 
    // Sets. Passing in an empty string means associate with any SSID. Setting 
    // an SSID would result in disassociating if already associated with a 
    // particular SSID, turning on the radio if the radio is currently in the 
    // off state, setting the SSID with the value specified or setting it to 
    // any SSID if SSID is not specified, and attempting to associate with the 
    // set SSID. 
    // 
    // Data type:   NDIS_802_11_SSID.
    // Query:       Returns the SSID.
    // Set:         Sets the SSID.
    // Indication:  Not supported.
    //-----------------------------------------------------------------------
    case OID_802_11_SSID: {
        MoveBytes       = sizeof(NDIS_802_11_SSID);
        MoveSource      = &ndis_ssid;
        NdisZeroMemory(&ndis_ssid,MoveBytes);

        if (NDIS_STATUS_MEDIA_CONNECT == card->m_MSenceStatus) {
            ndis_ssid.SsidLength = (card->m_SSID.SsidLength < 32)?card->m_SSID.SsidLength:32;
            NdisMoveMemory(ndis_ssid.Ssid,card->m_SSID.Ssid,ndis_ssid.SsidLength);
        }
    break;
    }


    //-----------------------------------------------------------------------
    // Query or Set how an 802.11 NIC connects to the network. Will also reset 
    // the network association algorithm.
    // 
    // Data type:  NDIS_802_11_NETWORK_INFRASTRUCTURE.
    // Query:      Returns either Infrastructure or Independent Basic Service Set 
    //             (IBSS), unknown.
    // Set:        Sets Infrastructure or IBSS, or automatic switch between the 
    //             two.
    // Indication: Not supported.
    //-----------------------------------------------------------------------
    case OID_802_11_INFRASTRUCTURE_MODE: {
        USHORT mode = card->m_activeProfile->zFlags.cfg.OpMode;
        if ((mode                   & 0x00FF) == 0) {
            ndis_infrastructure = Ndis802_11IBSS;
            }
        else if ((mode & 0x00FF) == 1) {
            ndis_infrastructure = Ndis802_11Infrastructure;
            }
        else {
            StatusToReturn = NDIS_STATUS_INVALID_DATA;
            }

        MoveSource  = &ndis_infrastructure;
        MoveBytes   = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE);
        break;
        }


    //-----------------------------------------------------------------------
    // Sets the IEEE 802.11 authentication mode.

⌨️ 快捷键说明

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