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

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. #ifndef _PWR_DRV_H_
  12. #define _PWR_DRV_H_
  13. #include <pm.h>
  14. #include "s2440.h"
  15. #include "drv_glob.h"
  16. #include "utldrv.h"
  17. #define THRDPRI_BATT_FLT        100
  18. #define THRDPRI_POWER           101
  19. #define POWER_THREAD_PRIORITY    THRDPRI_POWER
  20. typedef enum _PWR_STATE {
  21.     UNINITIALIZED,
  22.     INITIALIZE,
  23.     RUN,
  24.     SUSPEND,
  25.     RESUME,
  26.     ADC_ERROR,
  27.     
  28. } PWR_STATE, *PPWR_STATE;
  29. #define PCF_SIG ' FCP'
  30. #define VALID_CONTEXT( p ) 
  31.    ( p && p->Sig && PCF_SIG == p->Sig )
  32. //
  33. // PWR_CONTEXT
  34. //
  35. #pragma pack(1)
  36. typedef struct _PWR_CONTEXT {
  37.     DWORD   Sig;    // Signature
  38.     
  39.     // Saved our OOCS & INTx registers during init/reset/resume 
  40.     // because they are cleared on read, so we loose them.
  41.     UCHAR ResetReg[4];
  42.     BOOL  ResetRegReady;
  43.     volatile PDRIVER_GLOBALS pDriverGlobals;
  44.     volatile IOPreg * pIORegs;
  45.     PWR_STATE   State;
  46.     CRITICAL_SECTION RegCS;
  47.     HANDLE          hI2C;   // I2C Bus Driver
  48.     HANDLE          hUtil;   // UTIL Driver to map in VA
  49.     UTL_FASTCALL    utlFc;
  50.     HANDLE IST;
  51.     HANDLE ISTEvent;
  52.     HANDLE hBATT_FLT_IST;
  53.     HANDLE hBATT_FLT_Event;
  54.     DWORD OpenCount;
  55.     //
  56.     // System Global Events
  57.     //
  58.     HANDLE hADC;        // A-to-D Conversion Done
  59.     HANDLE hTSCPRES;    // Touch Pressed
  60.     CEDEVICE_POWER_STATE    Dx;
  61. } PWR_CONTEXT, *PPWR_CONTEXT;
  62. #pragma pack()
  63. // Registry names 
  64. #define REG_MODE_VAL_NAME TEXT("Mode") 
  65. #define REG_MODE_VAL_LEN  sizeof( DWORD )
  66. #define REG_SLAVEADDR_VAL_NAME TEXT("SlaveAddress") 
  67. #define REG_SLAVEADDR_VAL_LEN  sizeof( DWORD )
  68. #define REG_IRQ_VAL_NAME TEXT("IRQ") 
  69. #define REG_IRQ_VAL_LEN  sizeof( DWORD )
  70. #define REG_IOBASE_VAL_NAME TEXT("IoBase") 
  71. #define REG_IOBASE_VAL_LEN  sizeof( DWORD )
  72. #define REG_IOLEN_VAL_NAME TEXT("IoLen") 
  73. #define REG_IOLEN_VAL_LEN  sizeof( DWORD )
  74. #define REG_CONFIGBASE_VAL_NAME TEXT("ConfigBase") 
  75. #define REG_CONFIGBASE_VAL_LEN  sizeof( DWORD )
  76. #define REG_CONFIGLEN_VAL_NAME TEXT("ConfigLen") 
  77. #define REG_CONFIGLEN_VAL_LEN  sizeof( DWORD )
  78. //
  79. // (logical) PDD functions
  80. //
  81. DWORD 
  82. HW_Init(
  83.     PPWR_CONTEXT pPWR
  84.     );
  85. DWORD 
  86. HW_Deinit( 
  87.     PPWR_CONTEXT pPWR
  88.     );
  89. DWORD 
  90. HW_Open(
  91.     PPWR_CONTEXT pPWR
  92.     );
  93. DWORD 
  94. HW_Close(
  95.     PPWR_CONTEXT pPWR
  96.     );
  97. DWORD 
  98. HW_Read(
  99.     PPWR_CONTEXT pPWR,  
  100.     DWORD slvAddr,      // target slave address
  101.     UCHAR addr,         // starting slave word address
  102.     PUCHAR pData,       // buffer
  103.     DWORD count         // nBytes to read
  104.     );
  105. DWORD 
  106. HW_Write(
  107.     PPWR_CONTEXT pPWR,  
  108.     DWORD slvAddr,      // target slave address
  109.     UCHAR addr,         // starting slave word address
  110.     PUCHAR pData,       // buffer
  111.     DWORD count         // nBytes to write
  112.     );
  113. BOOL
  114. HW_IOControl(
  115.     PPWR_CONTEXT pPWR,
  116.     DWORD dwCode,
  117.     PBYTE pBufIn,
  118.     DWORD dwLenIn,
  119.     PBYTE pBufOut,
  120.     DWORD dwLenOut,
  121.     PDWORD pdwActualOut
  122.     );
  123. BOOL
  124. HW_PowerUp(
  125.     PPWR_CONTEXT pPWR
  126.     );
  127. BOOL
  128. HW_PowerDown(
  129.     PPWR_CONTEXT pPWR
  130.    );
  131. BOOL
  132. HW_PowerCapabilities(
  133.     PPWR_CONTEXT pPWR,
  134.     PPOWER_CAPABILITIES ppc
  135.    );
  136. BOOL
  137. HW_PowerSet(
  138.     PPWR_CONTEXT pPWR,
  139.     PCEDEVICE_POWER_STATE pDx
  140.    );
  141. BOOL
  142. HW_PowerGet(
  143.     PPWR_CONTEXT pPWR,
  144.     PCEDEVICE_POWER_STATE pDx
  145.    );
  146. #ifdef IMGEBOOT
  147. #define DEBUGBREAK      DebugBreak
  148. #else
  149. #define DEBUGBREAK()
  150. #endif
  151. #ifndef SHIP_BUILD
  152. DBGPARAM dpCurSettings;
  153. #define ZONE_ERR            DEBUGZONE(0)
  154. #define ZONE_WRN            DEBUGZONE(1)
  155. #undef  ZONE_INIT
  156. #define ZONE_INIT           DEBUGZONE(2)
  157. #define ZONE_OPEN           DEBUGZONE(3)
  158. #define ZONE_READ           DEBUGZONE(4)
  159. #define ZONE_WRITE          DEBUGZONE(5)
  160. #define ZONE_IOCTL          DEBUGZONE(6)
  161. #define ZONE_IST            DEBUGZONE(7)
  162. #define ZONE_REG            DEBUGZONE(8)
  163. #define ZONE_REG_DUMP       DEBUGZONE(9)
  164. #define ZONE_ADC            DEBUGZONE(10)
  165. #define ZONE_BATT           DEBUGZONE(11)
  166. #define ZONE_EVENTS         DEBUGZONE(12)
  167. #define ZONE_POWER          DEBUGZONE(13)
  168. //...
  169. #define ZONE_TRACE          DEBUGZONE(15)
  170. #define DUMP_INTx()                                           
  171. {                                                             
  172.     DEBUGMSG(ZONE_REG,(TEXT("INT1: 0x%.2xrn"), pPWR->Reg[INT1]));    
  173.     DEBUGMSG(ZONE_REG,(TEXT("INT2: 0x%.2xrn"), pPWR->Reg[INT2]));    
  174.     DEBUGMSG(ZONE_REG,(TEXT("INT3: 0x%.2xrn"), pPWR->Reg[INT3]));    
  175. }
  176. #define DUMP_INTxM()                                            
  177. {                                                               
  178.     DEBUGMSG(ZONE_REG,(TEXT("INT1M: 0x%.2xrn"), pPWR->Reg[INT1M]));    
  179.     DEBUGMSG(ZONE_REG,(TEXT("INT2M: 0x%.2xrn"), pPWR->Reg[INT2M]));    
  180.     DEBUGMSG(ZONE_REG,(TEXT("INT3M: 0x%.2xrn"), pPWR->Reg[INT3M]));    
  181. }
  182. #define DUMP_RTC()                                              
  183. {                                                               
  184.     DEBUGMSG(ZONE_REG,(TEXT("RTC.0[yr:mo:day:wkd] (hr:min:sec) : [%.2u:%.2u:%.2u:%.2u] (%.2u:%.2u:%.2u) rn"),   
  185.     FROM_BCD(pPWR->Reg[RTCYR])+2000, FROM_BCD(pPWR->Reg[RTCMT]), FROM_BCD(pPWR->Reg[RTCDT]), pPWR->Reg[RTCWD], 
  186.     FROM_BCD(pPWR->Reg[RTCHR]), FROM_BCD(pPWR->Reg[RTCMN]), FROM_BCD(pPWR->Reg[RTCSC]) )); 
  187. }
  188. #define DUMP_REGS(StartReg, nRegs)                                                              
  189. {                                                                                               
  190.     DWORD i;                                                                                    
  191.     RETAILMSG(1,(TEXT("PCF50606 Reg [0x%X - 0x%X] { rn"), StartReg, StartReg+nRegs-1)); 
  192.     for (i = StartReg; i < StartReg+nRegs; i++) {                                               
  193.         RETAILMSG(1,(TEXT("t [0x%.2X] : 0x%.2x rn"), i, pPWR->Reg[i]));                        
  194.     }                                                                                           
  195.     RETAILMSG(1,(TEXT("} rn")));                                                              
  196. }
  197. //
  198. // these should be removed in the code if you can 'g' past these successfully
  199. //
  200. #define TEST_TRAP { 
  201.     NKDbgPrintfW( TEXT("%s: Code Coverage Trap in: PWR, Line: %dn"), TEXT(__FILE__), __LINE__); 
  202.     DEBUGBREAK();  
  203. }
  204. #else
  205. #define TEST_TRAP
  206. #define ZONE_REG_DUMP   0
  207. #define DUMP_INTx()
  208. #define DUMP_INTxM()
  209. #define DUMP_RTC()
  210. #define DUMP_REGS(StartReg, nRegs)
  211. #endif
  212. #endif _PWR_DRV_H_