首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

wince6.0系统S5PV210兑现软件重启或复位或关机

2012-08-30 
wince6.0系统S5PV210实现软件重启或复位或关机应用层实现方法:利用OEM制造商提供的OEMIoControl可以随意地

wince6.0系统S5PV210实现软件重启或复位或关机

应用层实现方法:

利用OEM制造商提供的OEMIoControl可以随意地处理IOCTL_HAL_REBOOT。然而应用程序不能直接调用OEMIoControl,只能通过先调用KernelIoControl然后由KernelIoControl调用OEMIoControl。   
  #include   "winioctl.h"   
  BOOL   KernelIoControl(DWORD   dwIoControlCode,   LPVOID   lpInBuf,   DWORD   nInBufSize,   LPVOID   lpOutBuf,   DWORD   nOutBufSize,   LPDWORD   lpBytesReturned);   
  #define   IOCTL_HAL_GET_DEVICE_INFO   CTL_CODE(FILE_DEVICE_HAL,   1,   METHOD_BUFFERED,   FILE_ANY_ACCESS)   
  #define   IOCTL_HAL_REBOOT   CTL_CODE(FILE_DEVICE_HAL,   15,   METHOD_BUFFERED,   FILE_ANY_ACCESS)   
  KernelIoControl(IOCTL_HAL_REBOOT,   &inVal,   4,   outBuf,   1024,   &bytesReturned);   
  执行上面的代码可以实现软重起。如果你想要实现硬重起,还需首先调用SetCleanRebootFlag函数。   
也可以这样用KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL);这个函数调用底层的OEMIoControl()函数。

或者:关机:SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE);改为RESET就行。这个函数调用底层的哪个函数呢?
    待机:GwesPowerOffSystem();

底层实现方法:

The kernel calls the OEMIoControl function when a device driver or application calls the kernel function KernelIoControl and passes an I/O control code.

(当应用程序或者驱动调用KernelIoControl 的时候,KernelIoControl 就会调用OEMIoControl 去实现。)

This function is also called when the SystemParametersInfo function is called with SPI_GETOEMINFO or SPI_GETPLATFORMINFO.

The system is fully preemptible when this function is called. The kernel does no processing, but it passes all parameters directly to the function supplied by you. (当这个函数被调用的时候系统完全可能被抢占,内核没有处理,直接传递参数到你提供的函数。这个我觉得说的很别扭,估计是直接传递参数到OEMIoControl )

This function is provided solely to allow your device driver or application to communicate with an OAL and its specific functionality.

(该函数用来提供驱动/应用程序和OAL的通信)

2012-08-20今天在:oal\power\reset.c文件的OEMSWReset函数里实现硬件关闭PMIC_PWRHOLD_OUTPUT,然后调用KernelIoControl(IOCTL_HAL_REBOOT, &inVal, 4, outBuf, 2, &bytesReturned)这个函数,测试还是没有实现系统重启。继续研究看是怎么回事,跟注册表有关?注册表common.reg里和重启有个的如下:

; Entering this system power state reboots the system with a clean object
; store.  If an OEM includes this state in their platform, they must
; support KernelIoControl() with IOCTL_HAL_REBOOT.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\ColdReboot]
    "Default"=dword:4           ; D4
    "Flags"=dword:800000        ; POWER_STATE_RESET

; Entering this system power state reboots the system.  If an OEM includes this state in
; their platform, they must support KernelIoControl() with IOCTL_HAL_REBOOT.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Reboot]
    "Default"=dword:4           ; D4
    "Flags"=dword:800000        ; POWER_STATE_RESET
这里面Flags是什么含义?

2012-08-21:在自己的电源控制的驱动里实现软件重启或关机了。

热点排行