sc2440_usb_ser.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:9k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 2001. Samsung Electronics, co. ltd  All rights reserved.
  7. Module Name:  
  8. Abstract:
  9.     S3C2440 USB function(ACTIVE SYNC) device driver (wrapper Layer) header file
  10. Holds definitions for sample SA-11X0 USB serial interface
  11. rev:
  12. 2002.5.8 : Add to s3c2410_code (Seung-han, Lim)
  13. 2002.1.22 : First release/no error recovery (kwangyoon LEE, kwangyoon@samsung.com)
  14. Notes: 
  15. --*/
  16. #ifndef __SER_PDD_H__   
  17. #define __SER_PDD_H__
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. //Here are the names of the values stored in the registry
  22. #define SC2440USB_REG_IOBASE_VAL_NAME TEXT("IoBase") 
  23. #define SC2440USB_REG_IOBASE_VAL_LEN  sizeof( DWORD )
  24. #define SC2440USB_REG_IOLEN_VAL_NAME TEXT("IoLen") 
  25. #define SC2440USB_REG_IOLEN_VAL_LEN  sizeof( DWORD )
  26. #define SC2440USB_REG_IRQ_VAL_NAME TEXT("Irq") 
  27. #define SC2440USB_REG_IRQ_VAL_LEN  sizeof( DWORD )
  28. #define SC2440USB_REG_DEVINDEX_VAL_NAME TEXT("DeviceArrayIndex") 
  29. #define SC2440USB_REG_DEVINDEX_VAL_LEN  sizeof( DWORD )
  30. // We can be built with a simple setting 0, or optionally add
  31. // a second setting which includes an interrupt endpoint
  32. // #define INT_SETTING 1
  33. // Since SC2440_USB doesn't interrupt on disconnect, we have option to poll for this
  34. // #define POLL_FOR_DISCONNECT 1
  35. // Strict timing requirements at enumeration.  Use a relatively high priority
  36. #define DEFAULT_THREAD_PRIO 100
  37.     
  38. // We poll for device detach at the following rate.
  39. // #define SC2440_USB_POLL_RATE 1000
  40. #define SC2440_USB_POLL_RATE 500
  41. // And simulate disconnect if SOF unchanged this many interations
  42. #define SOF_STABLE_MAX 3
  43. // Use this macro to determine if we are in Data0 or Data1 phase
  44. // #define DATA1( dat_cnt ) ( ((dat_cnt) ^= 0x01) )
  45. #define DATA1( dat_cnt ) ( ((++dat_cnt) & 0x01) )
  46.     
  47. // We use a callback for serial events
  48. typedef VOID (*EVENT_FUNC)(PVOID Arg1, ULONG Arg2);
  49. // Here is the callback for serial events
  50. typedef VOID (*PFN_SER_EVENT) (
  51.               PVOID pHandle,      // PHW_INDEP_INFO, but pdd doesn't know it
  52.       UINT32 events       // What events where encountered?
  53.       );
  54. typedef enum _USBD_STATE {
  55.     OFF,
  56.     SUSPEND,
  57.     RESUME,
  58.     IDLE,
  59.     CONTROL,
  60.     RX,
  61.     PURGE_RX,
  62.     ERR_RX,    
  63.     TX,
  64.     PURGE_TX,
  65.     ERR_TX,
  66. } USBD_STATE, *PUSBD_STATE;
  67. /*
  68.  * @doc HWINTERNAL
  69.  * @struct SER_INFO | Private structure.
  70.  */
  71. typedef struct __SER_INFO {
  72. // Keep a copy of DCB since we rely on may of its parms
  73. DCB dcb; // @field Device Control Block (copy of DCB in MDD)
  74. // And the same thing applies for CommTimeouts
  75. COMMTIMEOUTS CommTimeouts; // @field Copy of CommTimeouts structure
  76. ULONG CommErrors; // @field Bitfield representing Win32 comm error status. 
  77. ULONG ModemStatus; // @field Bitfield representing Win32 modem status. 
  78. CRITICAL_SECTION HwRegCritSec;// @field Protects SC2440_USB registers from non-atomic
  79.    // access (addr/data pairs)
  80. CRITICAL_SECTION TransmitCritSec; // @field Protects UART TX FIFO from simultaneous access
  81. ULONG OpenCount; // @field Count of simultaneous opens. 
  82. ULONG DroppedBytes; // @field Number of dropped bytes 
  83. COMSTAT Status;  // @field Bitfield representing Win32 comm status. 
  84. HANDLE FlushDone; // @field Handle to flush done event.
  85. // We have our own dispatch thread.
  86. HANDLE pDispatchThread;// @field ReceiveThread 
  87. DWORD KillRxThread:1; // @field Flag to terminate SC2440_USB_DispatchThread.
  88. HANDLE        hSerialEvent;   // @field Interrupt event
  89. // now hardware specific goodies
  90. DWORD dwIOBase;       // @field IO Base Address - unmapped
  91. DWORD dwIOLen;        // @field IO Length
  92. DWORD dwIRQ;          // @field Interrupt number for this peripheral
  93. DWORD dwDevIndex;     // @field Index of device
  94. WORD wSOFStableCnt;  // @field How many iterations without SOF
  95. volatile IOPreg  *pIrqCtrlAddr; // @field Interrupt base address
  96. volatile struct udcreg  *pUSBCtrlAddr; // @field USB base address
  97. volatile CLKPWRreg     *pCLKPWR;      // @field CLK/PWR base address
  98. SetupPKG dReq; // @field USB endpoint 0 command
  99. BYTE cIntStat_eir;       // @field Last known interrupt status
  100. BYTE cIntStat_uir;
  101. BYTE  dConfIdx;  // @field USB Configuration Index
  102. BYTE  dInterface;  // @field USB Interface Index
  103. BYTE  dSetting;  // @field USB Setting Index
  104. BYTE dAddress; // @field USB device Address
  105. UINT8 cOpenCount;     // @field Count of concurrent opens
  106. COMMPROP CommProp;       // @field Pointer to CommProp structure.
  107. PVOID pMddHead;       // @field First arg to mdd callbacks.
  108. PHWOBJ pHWObj;         // @field Pointer to PDDs HWObj structure
  109. BOOL fIRMode;        // @field Boolean, are we running in IR mode?
  110. WORD      wSOF;               // SOF count read in ISR
  111. WORD      wPrevSOF;
  112. USBD_STATE   State;
  113.     
  114. } SER_INFO, *PSER_INFO;
  115. // And now, all the function prototypes
  116.     PVOID
  117. SerInit(
  118.         ULONG   Identifier,
  119.         PVOID   pMddHead,
  120.         PHWOBJ  pHWObj
  121.         );
  122.     BOOL SerPostInit(
  123.         PVOID   pHead 
  124.         );
  125.     BOOL SerDeinit(
  126.         PVOID   pHead 
  127.         );
  128.     BOOL SerOpen(
  129.         PVOID   pHead 
  130.         );
  131.     ULONG SerClose(
  132.         PVOID   pHead
  133.         );
  134.     VOID SerClearDTR(
  135.         PVOID   pHead 
  136.         );
  137.     VOID SerSetDTR(
  138.         PVOID   pHead 
  139.         );
  140.     VOID SerClearRTS(
  141.         PVOID   pHead 
  142.         );
  143.     VOID SerSetRTS(
  144.         PVOID   pHead 
  145.         );
  146.     VOID SerClearBreak(
  147.         PVOID   pHead 
  148.         );
  149.     VOID SerSetBreak(
  150.         PVOID   pHead 
  151.         );
  152.     VOID SerClearBreak(
  153.         PVOID   pHead 
  154.         );
  155.     VOID SerSetBreak(
  156.         PVOID   pHead
  157.         );
  158.     ULONG SerGetByteNumber(
  159.         PVOID   pHead      
  160.         );
  161.     VOID SerDisableXmit(
  162.         PVOID   pHead
  163.         );
  164.     VOID SerEnableXmit(
  165.         PVOID   pHead
  166.         );
  167.     BOOL SerSetBaudRate(
  168.         PVOID   pHead,
  169.         ULONG   BaudRate //      ULONG representing decimal baud rate.
  170.         );
  171.     BOOL SerSetDCB(
  172.         PVOID   pHead,
  173.         LPDCB   lpDCB //     Pointer to DCB structure
  174.         );
  175.     ULONG SerSetCommTimeouts(
  176.         PVOID   pHead,
  177.         LPCOMMTIMEOUTS   lpCommTimeouts //  Pointer to CommTimeout structure
  178.         );
  179.     ULONG SerGetRxBufferSize(
  180.         PVOID pHead
  181.         );
  182.     INTERRUPT_TYPE SerGetInterruptType(
  183.         PVOID pHead
  184.         );
  185.     ULONG SerRxIntr(
  186.         PVOID pHead,
  187.         PUCHAR pRxBuffer,       // Pointer to receive buffer
  188.         ULONG *pBufflen         //  In = max bytes to read, out = bytes read
  189.         );
  190.     VOID SerTxIntr(
  191.         PVOID pHead,
  192.         PUCHAR pTxBuffer,
  193.         ULONG *pBufflen
  194.         );
  195.     VOID SerLineIntr(
  196.         PVOID pHead
  197.         );
  198.     VOID SerModemIntr(
  199.         PVOID pHead 
  200.         );
  201.     ULONG SerGetStatus(
  202.         PVOID pHead,
  203.         LPCOMSTAT lpStat // Pointer to LPCOMMSTAT to hold status.
  204.         );
  205.     VOID SerReset(
  206.         PVOID   pHead
  207.         );
  208.     VOID SerGetModemStatus(
  209.         PVOID   pHead,
  210.         PULONG  pModemStatus    //  PULONG passed in by user.
  211.         );
  212.     VOID SerPurgeComm(
  213.         PVOID   pHead,
  214.         DWORD   fdwAction //  Action to take. 
  215.         );
  216.     BOOL SerXmitComChar(
  217.         PVOID   pHead,
  218.         UCHAR   ComChar //  Character to transmit. 
  219.         );
  220.     BOOL SerPowerOn(
  221.         PVOID   pHead
  222.         );
  223.     BOOL SerPowerOff(
  224.         PVOID   pHead
  225.         );
  226.     BOOL SerIoctl(
  227.         PVOID pHead,
  228.         DWORD dwCode,
  229.         PBYTE pBufIn,
  230.         DWORD dwLenIn,
  231.         PBYTE pBufOut,
  232.         DWORD dwLenOut,
  233.         PDWORD pdwActualOut
  234. );
  235.     BOOL
  236.     HW_PowerOff( 
  237.         PSER_INFO pHWHead 
  238.         );
  239.     
  240.     BOOL 
  241.     HW_PowerOn(
  242.         PSER_INFO pHWHead
  243.         );
  244. //*********************************************************
  245. // Functions from the SC2440_USB HW support file
  246. //*********************************************************
  247.     void SC2440_USB_DoEndpoint0(
  248. PSER_INFO pHWHead,
  249. PDWORD pModemStatus
  250. );
  251.     INTERRUPT_TYPE SC2440_USB_GetInterruptType(
  252. PSER_INFO pHWHead
  253. );
  254.     void SC2440_USB_Init(
  255. PSER_INFO pHWHead
  256. );
  257.     void SC2440_USB_LineIntHandler(
  258. PSER_INFO pHWHead
  259. );
  260.     BOOL SC2440_USB_RxIntHandler(
  261. PSER_INFO pHWHead,
  262. PUCHAR pRxBuffer,
  263. ULONG *pBuffLen
  264. );
  265.     void SC2440_USB_TxIntHandler(
  266. PSER_INFO pHWHead,
  267. PUCHAR pTxBuffer,
  268. ULONG *pBuffLen
  269. );
  270. #ifdef __cplusplus
  271. }
  272. #endif
  273. #endif __SER_PDD_H__