亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? irdahw.cpp

?? 收集到的orion_ep93xx_wince_bsp_1-3-507紅外收發驅動源碼,未作測試
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//**********************************************************************
//                                                                      
// Filename: irdahw.cpp
//                                                                      
// Description: Controls the IRDA hardware.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
// Copyright(c) Cirrus Logic Corporation 2001, All Rights Reserved                       
//                                                                      
//**********************************************************************

#include <windows.h>
extern "C"
{
    #include <ndis.h>
    #include <ntddndis.h>
}    
#include <linklist.h>
#include <ceddk.h>
#include <hwdefs.h>
#include <clocks.h>
#include <nkintr.h>
#include <oalintr.h>
#include "settings.h"
#include "debugzone.h"
#include "recvlist.h"
#include "sendlist.h"
#include "sirstate.h"
#include "irdahw.h"
#include "miniport.h"
#include "irmacutl.h"

//
// v_rgSupportedBaudRates - Maps speed masks to real value.
// NOTE: The entries in the table must align with the enum BAUDRATES.
//
const BAUDRATE_INFO v_rgSupportedBaudRates[] =
{
//   bps        Serial bit mask
//   ------     ---------------
    {2400,      BAUD_2400    , TEXT("2400   "), 0 },
    {9600,      BAUD_9600    , TEXT("9600   "), 1 },
    {19200,     BAUD_19200   , TEXT("19200  "), 2 },
    {38400,     BAUD_38400   , TEXT("38400  "), 4 },
    {57600,     BAUD_57600   , TEXT("57600  "), 12 },
    {115200,    BAUD_115200  , TEXT("115200 "), 24 },
//  {576000,    BAUD_USER       },
//  {1152000,   BAUD_USER       },
//  {4000000,   BAUD_USER       }
};

//****************************************************************************
// IrdaHW::IrdaHW
//****************************************************************************
// Constructor for IrdaHW.
// 
//
IrdaHW::IrdaHW():
        m_SirState(),
        m_bSirExiting(FALSE),
        eIrdaMode(MODE_SIR),
        m_ulBaudRate(9600),
        m_fMinTATRequired(TRUE),
        m_hSirEvent(0),
        m_hSirInterruptThread(0),
        m_pSIRTransmitNDisPacket(0),
        m_pSendBuf(0),              
        m_ulSendCurPos(0),
        m_ulSendBufSize(0),
        m_ulPacketsTxDropped(0),
        m_ulPacketsTx(0)
{        
}



//****************************************************************************
// IrdaHW::InitializeIRDA
//****************************************************************************
// Initializes the IRDA interface.
// 
//
NDIS_STATUS IrdaHW::InitializeIrdaHW()
{

    DEBUGMSG(ZONE_IRDAHW, (TEXT("+IrdaHW::InitializeIrdaHW")));

    NDIS_STATUS     ulStatus;
    BOOL            b;
    
    ulStatus = SetHWBaudRate(9600);

    //
    // Create the Sir Event.
    //    
    if(ulStatus == NDIS_STATUS_SUCCESS)
    {
        m_hSirEvent = CreateEvent( NULL, FALSE, FALSE, NULL);
        ulStatus = m_hSirEvent? NDIS_STATUS_SUCCESS: NDIS_STATUS_RESOURCES;
    }        
    
    //
    // Hook the SIR interrupt.
    //
    if(ulStatus == NDIS_STATUS_SUCCESS)
    {
        b=InterruptInitialize(SYSINTR_UART2, m_hSirEvent, NULL, 0);
        ASSERT(b);
        ulStatus = b? NDIS_STATUS_SUCCESS: NDIS_STATUS_RESOURCES;
    }        

    //
    // Create the SIR interrupt thread.
    //
    if(ulStatus == NDIS_STATUS_SUCCESS)
    {
        m_hSirInterruptThread  = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
                                              0,
                                              (LPTHREAD_START_ROUTINE)SIRInterruptHandler,
                                              (PVOID)this,
                                              0,
                                              NULL);
        ASSERT( m_hSirInterruptThread);
        ulStatus = m_hSirInterruptThread? NDIS_STATUS_SUCCESS : NDIS_STATUS_RESOURCES;
    }

    if( ulStatus == NDIS_STATUS_SUCCESS)
    {
        //
        // Set the thread priority for the SIR Interrupt handler.
        // 148 should be fine.
        //
        b = CeSetThreadPriority( m_hSirInterruptThread, 148);
        ASSERT( b);
        ulStatus = b? NDIS_STATUS_SUCCESS : NDIS_STATUS_RESOURCES;
    }        


    //
    // Allocate memory for the buffer.
    //
    if(ulStatus == NDIS_STATUS_SUCCESS)
    {
        m_pSendBuf = (PUCHAR) LocalAlloc
        (
            LMEM_FIXED | LMEM_ZEROINIT, 
            MAX_IRDA_DATA_SIZE
        );
        ASSERT(m_pSendBuf);
    }        
                                              
    
    DEBUGMSG(ZONE_IRDAHW, (TEXT("-IrdaHW::InitializeIrdaHW")));
    return(ulStatus);
}

//****************************************************************************
// IrdaHW::~IrdaHW
//****************************************************************************
// Destructor
// 
//
IrdaHW::~IrdaHW()
{
    DEBUGMSG(ZONE_IRDAHW, (TEXT("+IrdaHW::~IrdaHW")));
    //
    // Delete the Send buffer memory.
    //
    if(m_pSendBuf)
    {
        LocalFree(m_pSendBuf);
    }
    
    //
    // Delete the event
    //
    if(m_hSirEvent)
    {
        CloseHandle(m_hSirEvent);
    }

    DEBUGMSG(ZONE_IRDAHW, (TEXT("-IrdaHW::~IrdaHW")));
}

//****************************************************************************
// IrdaHW::BaudRateSupported
//****************************************************************************
// Check to see if the baud rate is supported.
// 
//
NDIS_STATUS IrdaHW::BaudRateSupported( ULONG ulBaudRate)
{
    DEBUGMSG(ZONE_IRDAHW, (TEXT("+IrdaHW::BaudRateSupported")));

    ULONG   ulStatus = NDIS_STATUS_FAILURE;
    ULONG   ulCount;
    
    //
    // Check to see if it is one of the baud rates
    //
    for(ulCount =0; ulCount <= NUM_BAUDRATES;  ulCount++)
    {
        if(v_rgSupportedBaudRates[ulCount].dwBPS == ulBaudRate)
        {
            ulStatus        = NDIS_STATUS_SUCCESS;
            break;
        }
    }
    
    DEBUGMSG(ZONE_IRDAHW, (TEXT("-IrdaHW::BaudRateSupported")));
    return (ulStatus);
}

//****************************************************************************
// IrdaHW::SetBaudRate
//****************************************************************************
// Sets the IRDA baud rate for SIR, MIR and FIR.
// 
//
NDIS_STATUS IrdaHW::SetHWBaudRate( ULONG ulBaudRate)
{

    DEBUGMSG(ZONE_IRDAHW, (TEXT("+IrdaHW::SetHWBaudRate")));
    ULONG   ulCount;
    ULONG   ulStatus = NDIS_STATUS_SUCCESS;
    ULONG   ulDivisor;
        
    //
    // Check to make sure that the 
    //
    ulStatus = BaudRateSupported(ulBaudRate);
    
    if(ulStatus ==  NDIS_STATUS_SUCCESS)
    {
    
        if(ulBaudRate <= 115200)
        {
            //
            // The Transmit and recieve bits in the IRCON register 
            // must be disabled before disable IRDA in the IRENABLE
            // register.
            //
            *IRDA_IRCON         &= ~(IRCON_TXE | IRCON_RXE);

            //
            // Disable IRDA.
            //
            *IRDA_IRENABLE     = IRENABLE_DISABLE;
          
            //
            // Disable the UART 2.
            //
            *UART2_CR           = 0;

            //
            // Calculate the divisor.
            //
            ulDivisor     = (UART_CLOCK / (16 * ulBaudRate)) - 1;

            //
            // Program the baud rate into the baud rate registers.
            //
            *UART2_LCR_M        = (ulDivisor >> 8) & 0x0FF;
            *UART2_LCR_L        = (ulDivisor & 0x0FF);
                        
            //
            // The documentation is not very clear on this register.
            // It says that this is a divisor of the UART clock rate.
            // The divided frequency should be between 1.42 and 2.12 Mhz
            //
            // If this register is not programmed, UART recieve will not
            // work.
            //
            *UART2_ILPR         = 2;
                                                          
            //
            // Enable Uart for 8bits No parity, one stop bit.
            //                 
            *UART2_LCR_H        = LCR_H_DATABITS_8 | LCR_H_FIFO_ENABLE;

            //
            // Enable SIR in the UART 2 register.  Also Enable
            // the interrupts.
            //
            *UART2_CR           =  CR_UARTE | CR_SIREN | CR_RIE ;

            //
            // Enable SIR.
            //
            *IRDA_IRENABLE      = IRENABLE_SIR;  
            

            //
            // The Transmit and recieve bits in the IRCON register 
            // must be enabled after the IRDA is enabled in the IRENABLE
            // register.
            //
            *IRDA_IRCON         |= IRCON_TXE | IRCON_RXE;
            
            //
            // Set the mode to SIR.
            //
            eIrdaMode           = MODE_SIR;
        }
        //
        // Check to see if it is MIR baud rate.
        //
        else if( ulBaudRate == 576000 || ulBaudRate == 1152000)
        {
            //
            // Disable IRDA.
            //
            *IRDA_IRENABLE     = IRENABLE_DISABLE;
          
            //
            // Disable the UART 2.
            //
            *UART2_CR           = 0;
            *IRDA_IRCON         = 0;  //~(IRCON_TXE | IRCON_RXE);
            
            //
            // Enable MIR.
            //
            *IRDA_IRENABLE      = IRENABLE_MIR;    
            
            //
            // Check to see which baud rate it is.
            //
            if( ulBaudRate == 1152000)
            {
                *IRDA_IRCON     = IRCON_MIR_FAST;
            }
            else
            {
                *IRDA_IRCON     = 0;
            }
            
            //
            // Set the mode to MIR.
            //
            eIrdaMode           = MODE_MIR;
        }
        
        //
        // Check to see if it is FIR baud rate.
        //
        else if( ulBaudRate == 4000000)
        {
            //
            // Disable IRDA.
            //
            *IRDA_IRENABLE     = IRENABLE_DISABLE;
          
            //
            // Disable the UART 2.
            //
            *UART2_CR           = 0;
            *IRDA_IRCON         = ~(IRCON_TXE | IRCON_RXE);
            
            //
            // Enable MIR.
            //
            *IRDA_IRENABLE      = IRENABLE_FIR;    

            //
            // Set the mode to FIR.
            //
            eIrdaMode           = MODE_FIR;
        } 
        else
        {
            ulStatus        = NDIS_STATUS_FAILURE;
        }
    }                    

    //
    // Change the baud rate
    //    
    if(ulStatus ==  NDIS_STATUS_SUCCESS)
    {
        m_ulBaudRate = ulBaudRate;
    }        

    DEBUGMSG(ZONE_IRDAHW, (TEXT("-IrdaHW::SetHWBaudRate")));
    return(ulStatus);
}


//****************************************************************************
//  IrdaHW::IirTransmit
//****************************************************************************
// Only have to change if we are not in SIR mode.
// 
//
void  IrdaHW::IirTransmit( )
{
    ULONG       ulIRCON;
    
    if(eIrdaMode != MODE_SIR)
    {
        ulIRCON     = *IRDA_IRCON;
        *IRDA_IRCON = (ulIRCON & IRCON_MIR_FAST) | IRCON_TXE;
    }
}


//****************************************************************************
// IrdaHW::IirRecieve
//****************************************************************************
// Only have to change if we are not in SIR mode.
// 
//
void IrdaHW::IirRecieve()
{
    ULONG    ulIRCON;
    if(eIrdaMode != MODE_SIR)
    {
        ulIRCON     = *IRDA_IRCON;
        *IRDA_IRCON = (ulIRCON & IRCON_MIR_FAST) | IRCON_RXE;
    }
}


//****************************************************************************
// IrdaHW::ClearStatistics
//****************************************************************************
// Clears the statitistics.
// 
//
void  IrdaHW::ClearStatistics()
{
    //
    // Clear the statistics.
    //
    m_SirState.ClearStats();
    m_ulPacketsTxDropped    = 0;
    m_ulPacketsTx           = 0;

}



#define MAX_TX_WAIT 400

//****************************************************************************
// SIRInterruptHandler
//****************************************************************************
// SIR Interrupt Handler.  
//
// Performs the following:
//
// 1.  Checks to see if we are exiting from the interrupt handler.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品久久久久影院薰衣草| 91.com视频| 国产精品久久久久一区二区三区共 | 日韩电影免费在线看| 欧美三级在线播放| 图片区小说区国产精品视频| 欧美一区在线视频| 国产精品18久久久久久久久 | 精品在线观看视频| 国产欧美一区二区三区鸳鸯浴 | 亚洲卡通动漫在线| 欧美军同video69gay| 狂野欧美性猛交blacked| 久久精品一区二区| 在线精品亚洲一区二区不卡| 蜜臀国产一区二区三区在线播放 | 欧美一区二区三区喷汁尤物| 狠狠狠色丁香婷婷综合激情 | 欧美三区在线视频| 久久99精品国产麻豆不卡| 中文字幕成人网| 欧美日韩高清不卡| 国产毛片精品国产一区二区三区| 欧美国产亚洲另类动漫| 欧美亚洲一区二区三区四区| 老司机精品视频导航| 亚洲免费观看高清完整版在线观看熊| 欧美日韩精品福利| 成人av片在线观看| 青青草国产精品亚洲专区无| 亚洲国产成人私人影院tom| 欧美日韩在线综合| 国产成人精品aa毛片| 午夜精品福利一区二区三区av| www成人在线观看| 欧美在线观看视频一区二区三区| 国内成+人亚洲+欧美+综合在线| 自拍偷拍亚洲激情| 2020国产成人综合网| 欧美午夜精品理论片a级按摩| 国产精品一区二区在线看| 亚欧色一区w666天堂| 18欧美乱大交hd1984| 精品毛片乱码1区2区3区| 在线观看av不卡| gogogo免费视频观看亚洲一| 久久99精品久久久久久动态图 | 欧美主播一区二区三区| 国产九九视频一区二区三区| 日本人妖一区二区| 亚洲成人先锋电影| 亚洲免费观看高清完整 | 一区二区三区精密机械公司| 26uuu国产日韩综合| 欧美一区二视频| 欧美三级视频在线播放| 99精品视频一区二区| 国产成人在线电影| 国产一区在线不卡| 九一九一国产精品| 美女视频第一区二区三区免费观看网站| 亚洲视频1区2区| 中文字幕一区三区| 亚洲国产成人午夜在线一区| 久久久久久日产精品| 欧美不卡一区二区三区| 欧美成人综合网站| 欧美一级夜夜爽| 日韩一区二区三区av| 日韩欧美在线网站| 欧美一区二区三区四区久久| 欧美精品99久久久**| 欧美肥妇free| 欧美一区二区精品| 欧美videossexotv100| 日韩欧美中文字幕公布| 日韩精品一区二区三区视频| 欧美变态tickle挠乳网站| 日韩欧美国产三级| 精品福利一二区| 国产偷国产偷精品高清尤物| 国产欧美一区二区精品久导航| 精品少妇一区二区三区日产乱码| 日韩视频在线永久播放| 日韩精品一区二| 久久久欧美精品sm网站| 中文久久乱码一区二区| 中文字幕一区二区三区av| 亚洲欧美日韩国产综合| 亚洲成av人片在www色猫咪| 天天射综合影视| 国内偷窥港台综合视频在线播放| 国产一区二区三区久久久| 国产99一区视频免费 | 国产二区国产一区在线观看| 国产成人a级片| 91在线精品一区二区| 欧洲亚洲精品在线| 欧美一级日韩免费不卡| 国产三区在线成人av| 亚洲少妇中出一区| 奇米影视一区二区三区小说| 国产精品1区2区| 91电影在线观看| 日韩一卡二卡三卡国产欧美| 中文字幕国产一区二区| 亚洲综合男人的天堂| 蜜桃av一区二区在线观看| 国产福利91精品| 欧美日韩免费观看一区二区三区| 日韩一本二本av| 亚洲视频一二三| 麻豆精品视频在线观看免费| 成人a区在线观看| 欧美日韩不卡在线| 国产日产欧产精品推荐色| 亚洲欧美成人一区二区三区| 久久精品久久综合| 91免费观看视频| 欧美成人vr18sexvr| 一区二区视频免费在线观看| 精品一区二区三区免费播放| 91女人视频在线观看| 日韩一区二区三区三四区视频在线观看| 国产日本欧洲亚洲| 视频一区二区三区中文字幕| 高清国产一区二区| 欧美一区二区视频在线观看| 国产精品久久久久aaaa| 日本视频一区二区三区| 91香蕉视频mp4| 26uuu国产一区二区三区| 午夜精品一区二区三区电影天堂 | 日韩视频一区二区三区| 亚洲黄一区二区三区| 国内精品伊人久久久久av一坑| 一本一道综合狠狠老| 久久久99精品久久| 免费成人av在线播放| 在线观看免费亚洲| 国产精品无遮挡| 国内精品久久久久影院薰衣草 | 成人国产在线观看| 欧美成人一级视频| 亚洲不卡av一区二区三区| 99精品在线观看视频| 欧美国产精品中文字幕| 精品一区二区三区蜜桃| 欧美一区二区三区影视| 亚洲成人在线网站| 欧美在线观看视频一区二区三区| 亚洲欧洲一区二区三区| 国产精品亚洲第一| 久久久不卡网国产精品二区| 开心九九激情九九欧美日韩精美视频电影| 在线中文字幕一区| 亚洲男人的天堂在线观看| 成人毛片在线观看| 国产嫩草影院久久久久| 国产在线一区观看| 久久综合色天天久久综合图片| 七七婷婷婷婷精品国产| 欧美一区二区网站| 日韩和欧美一区二区三区| 欧美卡1卡2卡| 免费看精品久久片| 日韩一级免费观看| 精品一区二区免费在线观看| 日韩一级黄色大片| 国产在线精品免费| 久久久国产精品麻豆| 成人毛片在线观看| 亚洲欧美视频一区| 欧美午夜电影在线播放| 亚洲成人av中文| 91精品婷婷国产综合久久性色| 日韩精品乱码av一区二区| 欧美一区二区三区免费| 另类小说视频一区二区| 久久久久9999亚洲精品| 99国产精品视频免费观看| 国产精品第一页第二页第三页| 99精品国产91久久久久久| 亚洲自拍偷拍网站| 在线不卡欧美精品一区二区三区| 免费在线看成人av| 久久久国际精品| 91丨九色丨蝌蚪丨老版| 亚洲一区二区在线免费看| 欧美丰满高潮xxxx喷水动漫| 九九在线精品视频| 综合久久给合久久狠狠狠97色 | 看电影不卡的网站| 国产精品久久久久久久久图文区 | 91视频国产观看| 日本伊人精品一区二区三区观看方式 | 日韩一区二区三区免费观看| 国产精品综合视频| 亚洲日本一区二区| 欧美一区二区三区免费视频|