📄 pdd.h
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//
//------------------------------------------------------------------------------
//
// File: pdd.h
//
#ifndef __PDD_H
#define __PDD_H
#define XR20M1170_I2C_ADDR 0x35
#define XR20M1170_ADDR_SIZE 0x7
#define TRUNC(a) ((unsigned int)(a))
#define ROUND(a) ((unsigned int)(a+0.5))
#define BIT0 0x1
#define BIT1 0x2
#define BIT2 0x4
#define BIT3 0x8
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
#define XR20M1170REG_RHR 0
#define XR20M1170REG_THR 1
#define XR20M1170REG_DLL 2
#define XR20M1170REG_DLM 3
#define XR20M1170REG_DLD 4
#define XR20M1170REG_IER 5
#define XR20M1170REG_ISR 6
#define XR20M1170REG_FCR 7
#define XR20M1170REG_LCR 8
#define XR20M1170REG_MCR 9
#define XR20M1170REG_LSR 10
#define XR20M1170REG_MSR 11
#define XR20M1170REG_SPR 12
#define XR20M1170REG_TCR 13
#define XR20M1170REG_TLR 14
#define XR20M1170REG_TXLVL 15
#define XR20M1170REG_RXLVL 16
#define XR20M1170REG_IODIR 17
#define XR20M1170REG_IOSTATE 18
#define XR20M1170REG_IOINTENA 19
#define XR20M1170REG_IOCONTROL 20
#define XR20M1170REG_EFCR 21
#define XR20M1170REG_EFR 22
#define XR20M1170REG_XON1 23
#define XR20M1170REG_XON2 24
#define XR20M1170REG_XOFF1 25
#define XR20M1170REG_XOFF2 26
static VOID* HWInit(ULONG, VOID*, HWOBJ*);
static BOOL HWPostInit(VOID*);
static BOOL HWDeinit(VOID*);
static BOOL HWOpen(VOID*);
static ULONG HWClose(VOID*);
static INTERRUPT_TYPE HWGetInterruptType(VOID*);
static ULONG HWRxIntrHandler(VOID*, UCHAR*, ULONG*);
static VOID HWTxIntrHandler(VOID*, UCHAR*, ULONG*);
static VOID HWModemIntrHandler(VOID*);
static VOID HWLineIntrHandler(VOID*);
static ULONG HWGetRxBufferSize(VOID*);
static BOOL HWPowerOff(VOID*);
static BOOL HWPowerOn(VOID*);
static VOID HWClearDTR(VOID*);
static VOID HWSetDTR(VOID*);
static VOID HWClearRTS(VOID*);
static VOID HWSetRTS(VOID*);
static BOOL HWEnableIR(VOID*, ULONG);
static BOOL HWDisableIR(VOID*);
static VOID HWClearBreak(VOID*);
static VOID HWSetBreak(VOID*);
static VOID HWReset(VOID*);
static VOID HWGetModemStatus(VOID*, ULONG*);
static BOOL HWXmitComChar(VOID*, UCHAR);
static ULONG HWGetStatus(VOID*, COMSTAT*);
static VOID HWGetCommProperties(VOID*, COMMPROP*);
static VOID HWPurgeComm(VOID*, DWORD);
static BOOL HWSetDCB(VOID*, DCB*);
static ULONG HWSetCommTimeouts(VOID*, COMMTIMEOUTS*);
static BOOL HWIOCtl(VOID *, DWORD, UCHAR *, DWORD, UCHAR *, DWORD , DWORD *);
//------------------------------------------------------------------------------
typedef struct {
//DWORD memBase[2]; // Physical address of UART port
//DWORD memLen[2]; // Size of registry array
DWORD gpio_power;
DWORD gpio_irq;
DWORD gpio_download;
DWORD gpio_reset;
DWORD index; // Device index
BOOL hwMode; // Hardware handshake mode
DWORD rxBufferSize; // MDD RX buffer size
//DWORD wakeUpChar; // WakeUp character
//DWORD hwTimeout; // Hardware timeout
OMAP730_CONFIG_REGS *pConfigRegs; // Mapped VA of config module
ULONG sysIntr; // Assigned SYSINTR
HANDLE hI2c; // Parent bus handler
HANDLE hGPIO; // GPIO bus handler
CEDEVICE_POWER_STATE currentDX; // Actual hardware power state
CEDEVICE_POWER_STATE externalDX; // External power state
CRITICAL_SECTION powerCS; // Guard access to power change
ULONG frequency; // UART module input frequency
PVOID pMdd; // MDD context
BOOL open; // Is device open?
DCB dcb; // Serial port DCB
ULONG commErrors; // How many errors occured
ULONG overrunCount; // How many chars was missed
BOOL autoRTS; // Is auto RTS enabled?
//BOOL wakeUpMode; // Are we in special wakeup mode?
//BOOL wakeUpSignaled; // Was wakeup mode signaled already?
UCHAR intrMask; // Actual interrupt mask
BOOL addTxIntr; // Should we add software TX interrupt?
BOOL flowOffCTS; // Is CTS down?
BOOL flowOffDSR; // Is DSR down?
CRITICAL_SECTION hwCS; // Guard access to HW registers
CRITICAL_SECTION txCS; // Guard HWXmitComChar
HANDLE txEvent; // Signal TX interrupt for HWXmitComChar
COMMTIMEOUTS commTimeouts; // Communication Timeouts
} UARTPDD;
typedef enum
{
I2C_ERROR,
I2C_OK
} I2CERROR;
//------------------------------------------------------------------------------
static HW_VTBL g_pddVTbl = {
HWInit,
HWPostInit,
HWDeinit,
HWOpen,
HWClose,
HWGetInterruptType,
HWRxIntrHandler,
HWTxIntrHandler,
HWModemIntrHandler,
HWLineIntrHandler,
HWGetRxBufferSize,
HWPowerOff,
HWPowerOn,
HWClearDTR,
HWSetDTR,
HWClearRTS,
HWSetRTS,
HWEnableIR,
HWDisableIR,
HWClearBreak,
HWSetBreak,
HWXmitComChar,
HWGetStatus,
HWReset,
HWGetModemStatus,
HWGetCommProperties,
HWPurgeComm,
HWSetDCB,
HWSetCommTimeouts,
HWIOCtl
};
static void RegSetBit(UARTPDD *pPdd, UCHAR regaddr, UCHAR bit);
static void RegClrBit(UARTPDD *pPdd, UCHAR regaddr, UCHAR bit);
static UCHAR RegRead(UARTPDD *pPdd, UCHAR regaddr);
VOID RegWrite(UARTPDD *pPdd, UCHAR regaddr, UCHAR data);
static void EnterConstraint(UARTPDD *pPdd, UCHAR regaddr, UCHAR *plcr_reg, UCHAR *pefr_reg, UCHAR *pmcr_reg);
static void ExitConstraint(UARTPDD *pPdd, UCHAR regaddr, UCHAR lcr_reg, UCHAR efr_reg, UCHAR mcr_reg);
static UCHAR I2c_ReadReg(UARTPDD *pPdd, UCHAR reg);
static BOOL I2c_WriteReg(UARTPDD *pPdd, UCHAR regaddr, UCHAR data);
//static BOOL RegPrintAll(UARTPDD *pPdd);
static void gps_poweron(UARTPDD *pPdd, UCHAR on);
static void gps_1170_reset(UARTPDD *pPdd);
static void gps_download(UARTPDD *pPdd, UCHAR on);
static void HWStartup(UARTPDD *pPdd);
#define IOCTL_XR20M1170_GPS_DOWNLOADBOOT CTL_CODE(FILE_DEVICE_SERIAL_PORT, 144,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR20M1170_GPS_NORMALBOOT CTL_CODE(FILE_DEVICE_SERIAL_PORT, 145,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR20M1170_ENABLE_LOOPBACK CTL_CODE(FILE_DEVICE_SERIAL_PORT, 146,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_XR20M1170_DISABLE_LOOPBACK CTL_CODE(FILE_DEVICE_SERIAL_PORT, 147,METHOD_BUFFERED,FILE_ANY_ACCESS)
#endif // __PDD_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -