pwr.c
上传用户: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. /*++
  12. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  13. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  14. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  15. PARTICULAR PURPOSE.
  16. Module Name:
  17.     Drv.c   Power Controller Driver
  18. Abstract:
  19.    Streams interface driver (MDD)
  20. Functions:
  21. Notes:
  22. --*/
  23. #include <windows.h>
  24. #include <winreg.h>
  25. #include <winioctl.h>
  26. #include <ceddk.h>
  27. #include <devload.h>
  28. #include <types.h>
  29. #include <excpt.h>
  30. #include <tchar.h>
  31. #include <cardserv.h>
  32. #include <cardapi.h>
  33. #include <tuple.h>
  34. #include <diskio.h>
  35. #include <nkintr.h>
  36. #include <oalintr.h>
  37. #include <windev.h>
  38. #include <winbase.h>
  39. #include "pwr.h"
  40. #include "s2440.h"
  41. #include "drv_glob.h"
  42. #ifndef SHIP_BUILD
  43. DBGPARAM dpCurSettings = {
  44.     TEXT("POWER"), {
  45.     TEXT("Error"),     TEXT("Warn"),    TEXT("Init"),  TEXT("Open"),
  46.     TEXT("Read"),      TEXT("Write"),   TEXT("IOCTL"), TEXT("IST"),
  47.     TEXT("Registers"), TEXT("RegDump"), TEXT("ADC"),   TEXT("Battery"),
  48.     TEXT("Events"),    TEXT("Power"),      TEXT("14"),    TEXT("Trace"),
  49.     },
  50.     0x0003 // ZONE_WRN|1
  51. };
  52. #endif  // DEBUG
  53. BOOL
  54. PWR_PowerUp(
  55.    PVOID Context
  56.    );
  57. BOOL
  58. PWR_PowerDown(
  59.    PVOID Context
  60.    );
  61. BOOL
  62. DllEntry(
  63.     HINSTANCE   hinstDll,             /*@parm Instance pointer. */
  64.     DWORD   dwReason,                 /*@parm Reason routine is called. */
  65.     LPVOID  lpReserved                /*@parm system parameter. */
  66.     )
  67. {
  68.     if ( dwReason == DLL_PROCESS_ATTACH ) {
  69.         DEBUGREGISTER(hinstDll);
  70.         RETAILMSG (1, (TEXT("PWR: Process Attachrn")));
  71.     }
  72.     if ( dwReason == DLL_PROCESS_DETACH ) {
  73.         RETAILMSG (1, (TEXT("PWR: Process Detachrn")));
  74.     }
  75.     return(TRUE);
  76. }
  77. BOOL
  78. PWR_Deinit(
  79.    PPWR_CONTEXT pPWR
  80.    )
  81. {
  82.     RETAILMSG(1, (TEXT(">PWR_Deinitrn")));
  83.     if (!pPWR)
  84.         return FALSE;
  85.         
  86.     HW_Deinit(pPWR);
  87.     LocalFree(pPWR);
  88.     RETAILMSG(1, (TEXT("<PWR_Deinitrn")));
  89.     return TRUE;
  90. }
  91. /*++
  92. Called by Device Manager to initialize the streams interface in response to ActivateDevice.
  93. We passed ActivateDevice a pointer to our device context, but must read it out of the registry as "ClientInfo".
  94. Returns context used in XXX_Open, XXX_PowerDown, XXX_PowerUp, and XXX_Deinit
  95. --*/
  96. PPWR_CONTEXT
  97. PWR_Init(
  98.    PVOID Context
  99.    )
  100. {
  101. LPTSTR ActivePath = (LPTSTR)Context; // HKLMDriversActivexx
  102. PPWR_CONTEXT pPWR;
  103. BOOL bRc = FALSE;
  104. RETAILMSG(1, (TEXT(">PWR_Init(%p)rn"), ActivePath));
  105. // Allocate for our main data structure and one of it's fields.
  106. pPWR = (PPWR_CONTEXT)LocalAlloc( LPTR, sizeof(PWR_CONTEXT) );
  107. if ( !pPWR )
  108. return( NULL );
  109. pPWR->Sig = PCF_SIG;
  110. // init h/w
  111. if ( ERROR_SUCCESS != HW_Init(pPWR) )
  112. goto ALLOCFAILED;
  113. pPWR->Dx = D0;
  114. RETAILMSG(1, (TEXT("<PWR_Init:0x%xrn"), pPWR ));
  115. return (pPWR);
  116. ALLOCFAILED:
  117. PWR_Deinit(pPWR);
  118. return NULL;
  119. }
  120. PPWR_CONTEXT
  121. PWR_Open(
  122.    PPWR_CONTEXT pPWR,       // context returned by PWR_Init.
  123.    DWORD        AccessCode, // @parm access code
  124.    DWORD        ShareMode   // @parm share mode
  125.    )
  126. {
  127.     UNREFERENCED_PARAMETER(ShareMode);
  128.     UNREFERENCED_PARAMETER(AccessCode);
  129.     RETAILMSG(1,(TEXT(">PWR_Open(0x%x, 0x%x, 0x%x)rn"),pPWR, AccessCode, ShareMode));
  130.     pPWR->OpenCount++;
  131.     HW_Open(pPWR);
  132.     RETAILMSG(1,(TEXT("<PWR_Open:%urn"), pPWR->OpenCount ));
  133.     return pPWR;
  134. }
  135. BOOL
  136. PWR_Close(
  137.    PPWR_CONTEXT pPWR
  138.    )
  139. {
  140.    RETAILMSG(1,(TEXT("PWR_Close(0x%x)rn"),pPWR));
  141.     if ( pPWR->OpenCount ) {
  142.         
  143.         pPWR->OpenCount--;
  144.         HW_Close(pPWR);
  145.     }
  146.     return TRUE;
  147. }
  148. ULONG
  149. PWR_Write(
  150.    PPWR_CONTEXT pPWR,
  151.    PUCHAR pBuffer,
  152.    ULONG  BufferLength
  153.    )
  154. {
  155.     return 0;
  156. }
  157. ULONG
  158. PWR_Read(
  159.    PPWR_CONTEXT pPWR,
  160.    PUCHAR pBuffer,
  161.    ULONG  BufferLength
  162.    )
  163. {
  164.    return 0;
  165. }
  166. BOOL
  167. PWR_IOControl(
  168.     PPWR_CONTEXT pPWR,
  169.     DWORD dwCode,
  170.     PBYTE pBufIn,
  171.     DWORD dwLenIn,
  172.     PBYTE pBufOut,
  173.     DWORD dwLenOut,
  174.     PDWORD pdwActualOut
  175.    )
  176. {
  177.     DWORD dwErr = ERROR_SUCCESS;
  178.     BOOL bRc = TRUE;
  179.     RETAILMSG(1,(TEXT(">PWR_IOControl(0x%x, 0x%x, %d, 0x%x)rn"),
  180.         dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut ));
  181.     if ( !pPWR->OpenCount ) {
  182.         RETAILMSG (1,(TEXT(" COM_IOControl - device was closedrn")));
  183.         SetLastError (ERROR_INVALID_HANDLE);
  184.         return(FALSE);
  185.     }
  186.     switch (dwCode) {
  187.         //
  188.         // Power Management
  189.         //
  190.         case IOCTL_POWER_CAPABILITIES:
  191.             if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(POWER_CAPABILITIES)) ) {
  192.                 bRc = FALSE;
  193.                 dwErr = ERROR_INVALID_PARAMETER;
  194.                 break;
  195.             }
  196.             
  197.             bRc = HW_PowerCapabilities(pPWR, (PPOWER_CAPABILITIES)pBufOut);
  198.             if ( bRc ) {
  199.                 *pdwActualOut = sizeof(POWER_CAPABILITIES);
  200.             }
  201.             break;
  202.         case IOCTL_POWER_SET: 
  203.             if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) {
  204.                 bRc = FALSE;
  205.                 dwErr = ERROR_INVALID_PARAMETER;
  206.                 break;
  207.             }
  208.             bRc = HW_PowerSet(pPWR, (PCEDEVICE_POWER_STATE)pBufOut);
  209.             if ( bRc ) {
  210.                 *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
  211.             }
  212.             break;
  213.         case IOCTL_POWER_GET: 
  214.             if ( !pdwActualOut || !pBufOut || (dwLenOut < sizeof(CEDEVICE_POWER_STATE)) ) {
  215.                 bRc = FALSE;
  216.                 dwErr = ERROR_INVALID_PARAMETER;
  217.                 break;
  218.             }
  219.             bRc = HW_PowerGet(pPWR, (PCEDEVICE_POWER_STATE)pBufOut);
  220.             if ( bRc ) {
  221.                 *pdwActualOut = sizeof(CEDEVICE_POWER_STATE);
  222.             }
  223.             break;
  224.         default:
  225.             // passthruogh
  226.             bRc  = HW_IOControl(pPWR, dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut);
  227.             break;            
  228.     }
  229.     if ( !bRc ) {
  230.         RETAILMSG (1, (TEXT("PWR_IOControl ERROR: %urn"), dwErr));
  231.         SetLastError(dwErr);
  232.     }
  233.     RETAILMSG(1,(TEXT("<PWR_IOControl:%drn"), bRc));
  234.     return bRc;
  235. }
  236. ULONG
  237. PWR_Seek(
  238.    PVOID Context,
  239.    LONG  Position,
  240.    DWORD Type
  241.    )
  242. {
  243.     UNREFERENCED_PARAMETER(Context);
  244.     UNREFERENCED_PARAMETER(Position);
  245.     UNREFERENCED_PARAMETER(Type);
  246.     RETAILMSG( 1, (TEXT("PWR_Seekrn")));
  247.     return (ULONG)-1;
  248. }
  249. BOOL
  250. PWR_PowerUp(
  251.    PVOID Context
  252.    )
  253. {
  254.     return HW_PowerUp(Context);
  255. }
  256. BOOL
  257. PWR_PowerDown(
  258.    PVOID Context
  259.    )
  260. {
  261.     return HW_PowerDown(Context);
  262. }
  263. // EOF