⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps_power.cpp

📁 CE 下 在启动自身程序时,对系统电源做控制,可以将其一直打开,或一直关闭.
💻 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 + -