📄 s1xser.c
字号:
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 + -