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

📄 s1xser.c

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 C
📖 第 1 页 / 共 2 页
字号:
    DEBUGMSG (0,(TEXT("-HW_SA1100OtherIntr 0x%X\r\n"), pHead));
}
DWORD GetModemCapabilities ()
{
    return (PCF_DTRDSR |/* PCF_RLSD |*/ PCF_RTSCTS);

}
#else

// Viersion with MODEM Signal enable
ReadSA1100MSR(
    PSER_HW_INFO  pHWHead
    )
{
	pHWHead->MSR |= (SERIAL_MSR_CTS | SERIAL_MSR_DSR);
}
VOID HW_SA1100ClearDTR(PVOID   pHead) {
    RETAILMSG(1,(TEXT("\t**** HW_SA1100ClearDTR Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100SetDTR(PVOID   pHead) {
    RETAILMSG(1,(TEXT("\t**** HW_SA1100SetDTR Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100ClearRTS(PVOID   pHead) {
    RETAILMSG(1,(TEXT("\t**** HW_SA1100ClearRTS Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100SetRTS(PVOID   pHead) {
    RETAILMSG(1,(TEXT("\t**** HW_SA1100SetRTS Modem Controls Not Implemented ******\r\n")));
}
VOID
HW_SA1100GetModemStatus(
    PVOID   pHead,      // @parm PVOID returned by HWInit.
    PULONG  pModemStatus    // @parm PULONG passed in by user.
    )
{
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("+HW_SA1100GetModemStatus 0x%X\r\n"), pHead));
    *pModemStatus |= MS_CTS_ON;
    *pModemStatus |= MS_RLSD_ON;
    DEBUGMSG (ZONE_FUNCTION,
              (TEXT("-HW_SA1100GetModemStatus 0x%X\r\n"), pHead));
};
BOOL IsModemDsrOn( PVOID   pHead)
{
	return TRUE;
}
BOOL IsModemCtsOn(PVOID   pHead)
{
	return TRUE;
}
VOID HW_SA1100OtherIntr(PVOID pHead) {
    RETAILMSG(1,(TEXT("\t**** HW_SA1100OtherIntr Modem Controls Not Implemented ******\r\n")));
}
DWORD GetModemCapabilities ()
{
	return 0;
}

#endif

// Common part


// Miscellaneous internal routines.
// ****************************************************************
//
//  @doc INTERNAL
//
//  @func VOID      | HW_InternalMapRegisterAddresses |
//      This routine maps the ASIC registers. It's an artifact of this
//      implementation.
//
//  @rdesc None.
//
void SerPDDInternalMapRegisterAddresses(
                                PSER_PDD_INFO   pHWHead
                                )
{
    PUCHAR  pVMem;
    BOOL    bMapReturn;
    ULONG   err = 0;

//RETAILMSG(1,(TEXT("+SerPDDInternalMapRegisterAddresses\r\n")));
    // Map CSR registers.
    pVMem = (PUCHAR)VirtualAlloc(
        0, 
#ifdef SCOPE_TRIGGER_CODE
        PAGE_SIZE*5, 
#else
        PAGE_SIZE*4, 
#endif
        MEM_RESERVE, 
        PAGE_NOACCESS);

    if ( pVMem ) {
        DEBUGMSG(ZONE_INIT, (TEXT("VirtualAlloc Succeeded\r\n")));
        bMapReturn = VirtualCopy((LPVOID)pVMem,
                                 (LPVOID)pHWHead->dwIOBase,
                                 PAGE_SIZE,
                                 PAGE_READWRITE | PAGE_NOCACHE);
        if ( !bMapReturn ) {
            err = GetLastError();
            DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: Serial SPACE FAILED\r\n")));
        }
        pHWHead->pBaseAddress=pVMem;
        pVMem+=PAGE_SIZE;
        bMapReturn = VirtualCopy((LPVOID)pVMem,
                                 (LPVOID)IC_BASE_VIRTUAL,
                                 PAGE_SIZE,
                                 PAGE_READWRITE | PAGE_NOCACHE);
        if ( !bMapReturn ) {
            err = GetLastError();
            DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: IRQ SPACE FAILED\r\n")));
        }
        pHWHead->pIrqCtrlAddr=(volatile struct icreg *)pVMem;
        pVMem+=PAGE_SIZE;
        bMapReturn = VirtualCopy((LPVOID)pVMem,
                                 (LPVOID)PPC_BASE_VIRTUAL,
                                 PAGE_SIZE,
                                 PAGE_READWRITE | PAGE_NOCACHE);
        if ( !bMapReturn ) {
            err = GetLastError();
            DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: HEX LEDS SPACE FAILED\r\n")));
        }
        pHWHead->pSA1100PPCReg=pVMem;
        pVMem+=PAGE_SIZE;
        bMapReturn = VirtualCopy((LPVOID)pVMem,
                                 (LPVOID)HEX_LEDS_BASE,
                                 PAGE_SIZE,
                                 PAGE_READWRITE | PAGE_NOCACHE);
        if ( !bMapReturn ) {
            err = GetLastError();
            DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: HEX LEDS SPACE FAILED\r\n")));
        }
        pHWHead->pHexLedAddr=pVMem;
        pVMem+=PAGE_SIZE;
#ifdef SCOPE_TRIGGER_CODE 
        bMapReturn = VirtualCopy((LPVOID)pVMem,
                                 (LPVOID)SA1100MM_REGS_BASE,
                                 PAGE_SIZE,
                                 PAGE_READWRITE | PAGE_NOCACHE);
        if ( !bMapReturn ) {
            err = GetLastError();
            DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: HEX LEDS SPACE FAILED\r\n")));
        }
        TestKbdReg=pVMem+4;
#endif
    } else {
        DEBUGMSG(ZONE_INIT, (TEXT("Virtual Alloc: FAILED\r\n")));
    }

    DEBUGMSG(ZONE_INIT, (TEXT("VirtualCopy Succeeded, pVMem:%x\r\n"), pVMem));
}

/* Baudraet & Devider table  */
#define BAUD_TABLE_SIZE 24
static const PAIRS	LS_BaudPairs[BAUD_TABLE_SIZE] =	{
    {50,	    4608},
    {75,	    3072},
    {110,	    2095},
    {135,	    1707},
    {150,	    1536},
    {300,	    768},
    {600,	    384},
    {1200,	    192},
    {1800,	    128},
    {2000,	    115},
    {2400,	    96},
    {3600,	    64},
    {4800,	    48},
    {7200,	    32},
    {9600,	    24},
    {12800,	    18},
    {14400,	    16},
    {19200,     12},
    {23040,     10},
    {28800,     8},
    {38400,     6},
    {57600,     4},
    {115200,    2},
    {230400,    1}
};

const LOOKUP_TBL  LS_BaudTable = {BAUD_TABLE_SIZE, (PAIRS *) LS_BaudPairs};


const extern HW_VTBL IRVTbl;
extern const HW_VTBL SerCardIoVTbl;
extern const HW_VTBL IRVTbl;

//
// Declare HWOBJS for all serial devices supported by the MDD
//
extern DEVICE_LIST SerDL;

HWOBJ   SerObj      = {
    &SerDL,
    THREAD_AT_OPEN,
    SYSINTR_SERIAL,
    NULL,
    (PHW_VTBL) &SerVTbl
};

HWOBJ   SerObj2     = {
    &SerDL, 
    THREAD_AT_OPEN,
    SYSINTR_SERIAL1,
    NULL,
    (PHW_VTBL) &SerVTbl
};

HWOBJ   SerObj3     = {
    &SerDL, 
    THREAD_AT_OPEN,
    SYSINTR_IR,   
    NULL,
    (PHW_VTBL) &SerVTbl
};

HWOBJ   SerCardObj  = {
    &SerDL,
    THREAD_IN_PDD,
    0,
    NULL,
    (PHW_VTBL) &SerCardIoVTbl
};

HWOBJ   SerIRObj    = {
    &SerDL,
    THREAD_AT_OPEN,
    SYSINTR_IR,
    NULL,
    (PHW_VTBL) &IRVTbl
};

PHWOBJ      rgpHWObjects[] = {
     &SerObj
    ,&SerObj2
    ,&SerObj3
    ,&SerCardObj
    ,&SerIRObj
};

DEVICE_LIST SerDL = {
    "sa1x_serial.dll",
    sizeof(rgpHWObjects)/sizeof(PHWOBJ),
    rgpHWObjects
};

PDEVICE_LIST
GetSerialObject(
               VOID
               )
{    
    return (&SerDL);
}

⌨️ 快捷键说明

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