?? gps_power.cpp
字號:
// Gps_Power.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <windows.h>
#include <types.h>
#include <stdio.h>
//#include "drv_glob.h" //zhangqb
#include "s2410.h"
#include "Pkfuncs.h"
static volatile IOPreg* s2410IOP = NULL;
static HWND InitInstance (HINSTANCE, LPWSTR, int);
static int TermInstance (HINSTANCE, int);
bool GetPower(){
HKEY hOpenKey;
long lResult =0 ;
DWORD dwKeyValueType = 0;
DWORD dwKeyValueLength = 0;
//定義鍵名
LPCTSTR keyName;
keyName = L"SOFTWARE\\GPS\\GpsFlag";
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyName,0,0,&hOpenKey);
if(lResult != ERROR_SUCCESS){
return 0;
}
ASSERT(lResult==ERROR_SUCCESS);
LPCTSTR strKeyName = L"PowerFlag";
TCHAR strKeyValue[500];
ZeroMemory(strKeyValue , 500*2);
dwKeyValueLength = 500*2;
lResult = RegQueryValueEx(hOpenKey , strKeyName , 0 , &dwKeyValueType ,(BYTE*)strKeyValue , &dwKeyValueLength );
if(lResult != ERROR_SUCCESS){
return 0;
}
RegCloseKey(hOpenKey);
if(wcscmp(strKeyValue , _T("1"))==0){
return 1;
}else{
return 0;
}
return 0;
}
//GPS上電標志
void Gps_Flag(LPCTSTR Flag){
HKEY hOpenKey;
DWORD dwOpenStyle;
long lResult =0 ;
//定義鍵名
LPCTSTR keyName;
keyName = L"SOFTWARE\\GPS\\GpsFlag";
lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE,keyName,0,L"",0,0,NULL,&hOpenKey,&dwOpenStyle);
if(lResult != ERROR_SUCCESS){
return;
}
ASSERT(lResult==ERROR_SUCCESS);
//寫入建制 字符串類型
LPCTSTR strKeyName,strKeyValue;
strKeyName = L"PowerFlag";
strKeyValue = Flag;
lResult = RegSetValueEx(hOpenKey,strKeyName,0,REG_SZ,(BYTE*)strKeyValue,wcslen(strKeyValue)*2);
if(lResult != ERROR_SUCCESS){
return;
}
RegCloseKey(hOpenKey);
}
void CloseBattery()
{
//關閉設備閑置時電源關閉設備
#define RK_SYSTEM_CCS_CONTROL_POWER TEXT("SYSTEM\\CurrentControlSet\\Control\\Power")
#define RV_BATTPOWEROFF TEXT("BattPowerOff")
#define RV_EXTPOWEROFF TEXT("ExtPowerOff")
#define RK_SYSTEM_CCS_CONTROL_POWER2 TEXT("SYSTEM\\CurrentControlSet\\Control\\Power\\Timeouts")
#define RV_BATTPOWEROFF2 TEXT("BattSuspendTimeout")
#define RV_EXTPOWEROFF2 TEXT("ACSuspendTimeout")
#define RV_BATTPOWEROFF3 TEXT("BattUserIdle")
#define RV_BATTPOWEROFF4 TEXT("BattSystemIdle")
DWORD dwValue=0;
HKEY hKey=NULL;
DWORD dwDisposition;
RegCreateKeyEx(HKEY_LOCAL_MACHINE, RK_SYSTEM_CCS_CONTROL_POWER2,(DWORD) 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, (LPSECURITY_ATTRIBUTES) NULL,&hKey, &dwDisposition);
dwValue = 0;
RegSetValueEx(hKey,RV_BATTPOWEROFF2, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RV_EXTPOWEROFF2, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RV_BATTPOWEROFF3, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RV_BATTPOWEROFF4, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RV_BATTPOWEROFF, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
RegCreateKeyEx(HKEY_LOCAL_MACHINE, RK_SYSTEM_CCS_CONTROL_POWER,(DWORD) 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, (LPSECURITY_ATTRIBUTES) NULL,&hKey, &dwDisposition);
dwValue = 0;
RegSetValueEx(hKey,RV_BATTPOWEROFF, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE,_T("PowerManager/ReloadActivityTimeouts"));
if(hEvent != NULL)
{
SetEvent(hEvent);
CloseHandle(hEvent);
}
//關閉背光
#define RK_SYSTEM_LED_CONTROL TEXT("ControlPanel\\Backlight")
#define RK_SYSTEM_LED_ACPowerEnable TEXT("ACPowerEnable")
#define RK_SYSTEM_LED_BatteryEnable TEXT("BatteryEnable")
#define RK_SYSTEM_LED_BatteryTimes TEXT("BatteryTimeout")
dwValue=0;
hKey=NULL;
RegCreateKeyEx(HKEY_CURRENT_USER, RK_SYSTEM_LED_CONTROL,(DWORD) 0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, (LPSECURITY_ATTRIBUTES) NULL,&hKey, &dwDisposition);
dwValue = 0;
RegSetValueEx(hKey,RK_SYSTEM_LED_ACPowerEnable, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RK_SYSTEM_LED_BatteryEnable, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
dwValue = 0;
RegSetValueEx(hKey,RK_SYSTEM_LED_BatteryTimes, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
hEvent = CreateEvent(NULL, FALSE, FALSE,L"BackLightChangeEvent" );
if(hEvent != NULL)
{
SetEvent(hEvent);
CloseHandle(hEvent);
}
}
static void AllocGPIO(void)
{
s2410IOP = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS );
VirtualCopy((BYTE *)s2410IOP, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE);
}
static void FreeGPIO(void)
{
if(s2410IOP != NULL)VirtualFree((PVOID)s2410IOP, 0, MEM_RELEASE);
}
void GPS_L_POWERON(void)//給本機的GPS通電
{
s2410IOP->rGPDUP |= (0x01 << 8) ;
s2410IOP->rGPDCON &= ~((0x3 << 16)) ;
s2410IOP->rGPDCON |= (0x01 << 16) ;
s2410IOP->rGPDDAT |= (0x01 << 8) ;
//置GPS上電標志
Gps_Flag(_T("1"));
}
void GPS_L_POWEROFF(void)//給本機的GPS斷電
{
s2410IOP->rGPDUP |= (0x01 << 8) ;
s2410IOP->rGPDCON &= ~((0x3 << 16)) ;
s2410IOP->rGPDCON |= (0x01 << 16) ;
s2410IOP->rGPDDAT &= ~(0x01 << 8) ;
//置GPS上電標志
Gps_Flag(_T("0"));
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
if(!GetPower()){
AllocGPIO();
GPS_L_POWERON(); //模塊上電
}
Sleep(2000);
HWND hWnd = FindWindow(NULL , _T("Guider"));
if(hWnd){
SetWindowPos(hWnd , HWND_TOPMOST , 0 , 0 , 240 , 320 , SWP_SHOWWINDOW);
ShowWindow(hWnd , SW_SHOW);
}else{
PROCESS_INFORMATION ProcInfo;
CreateProcess(_T("\\FlashDisk\\guider\\Guider.exe"), NULL, NULL,NULL, FALSE,0,NULL,NULL, NULL, &ProcInfo);
}
while(!GetPower()){
GPS_L_POWEROFF();
FreeGPIO();
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -