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

📄 sbattif.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 3 页
字号:
          		
         	}
         	
         	if(gInterrupt == 0) return 0;

					InterruptDone(SYSINTR_EDBG);	// Acknowledge the GPIO8 interrupt
        }


    }

    return 0;
}


int WINAPI PowerOffThreadProc(LPVOID pvParam)
{
		HANDLE hEvents[4];
		int flag = 0;
		DWORD ret;
		DWORD count;
		
		RETAILMSG(1, (_T("Enter PowerOffThreadProc\r\n")));

 		hEvents[0] = CreateEvent(NULL, FALSE, FALSE, L"PowerOffEvent");
 		hEvents[1] = CreateEvent(NULL, FALSE, FALSE, L"PowerOffOKEvent");
		hEvents[2] = CreateEvent(NULL, FALSE, FALSE, L"PowerOffCancelEvent");
		hEvents[3] = CreateEvent(NULL, FALSE, FALSE, L"PowerOffUsbEvent");

    while (1) 
    {
    	Sleep(1);
			//接受START/POWER OFF菜单发出的消息
			ret = WaitForSingleObject(hEvents[0],INFINITE);
			if(ret == WAIT_OBJECT_0)//收到poweroff按下的消息
			{
					RETAILMSG(1, (_T("PowerOffEvent\r\n")));
					if(!PM_ChargerDetected())
					{
         		if(MessageBox(NULL,POWER_WARN,POWER_OFF_TITLE,MB_YESNO|MB_ICONWARNING) == IDYES)
         		{
         			count = 10;
         			while(count--)//避免图片被覆盖
         			{
								ShowPicture();
								Sleep(100);
							}
							SetEvent(hEvents[1]);//允许poweroff

         			count = 0x100000;
         			while(count--)//避免图片被覆盖
         			{
								ShowPicture();
								Sleep(100);
							}
         		}
         		else
         		{
							SetEvent(hEvents[2]);//取消
         		}
					}
					else
					{
						MessageBox( NULL, POWER_OFF_USB,POWER_OFF_TITLE, MB_OK|MB_ICONWARNING); 
						SetEvent(hEvents[3]);//USB
					}
			}
    }

    return 0;
}


void ShowPicture(void)
{
	unsigned short* pFB = NULL;
	FILE* fp = NULL;

	//隐藏鼠标
	SetCursorPos(479,271);
	//framebuffer
	pFB = (unsigned short *)(hw_map_io(PHYS_CLCD_BUFF_BASE, SCREEN_BYTES, 0));
	if(pFB)
	{
		fp = fopen("\\Windows\\powerdown.bmp","rb");
		if(fp)
		{
			fseek(fp,54,0);
			fread(pFB,SCREEN_BYTES,1,fp);
			fclose(fp);
		}
		else
		{
			RETAILMSG(1, (_T("can't find powerdown.bmp\r\n")));
		}
	}
}

int WINAPI ClockThreadProc(LPVOID pvParam)
{
	SYSTEMTIME sysTime;
	DWORD clock = *((DWORD*)pvParam);
	DWORD clock1;

  while(gClockFlag)
  {
   	if(clock > 0)
   	{
   		GetSystemTime(&sysTime);
   		clock1 = sysTime.wSecond * 1000 + sysTime.wMilliseconds;
   		if(clock1 - clock > 2000)//ms
   		{
   		//关闭了3个中断源
   			InterruptMask(SYSINTR_EDBG,TRUE);			
   			InterruptMask(SYSINTR_TOUCH,TRUE);
				InterruptMask(SYSINTR_KBD,TRUE);

	   			gInterrupt = 0;
		  		RETAILMSG(SHOW_DEBUG, (_T("PowerKeyThreadProc:power off\r\n")));
	
//					InterruptDisable(SYSINTR_EDBG);				
	
					ShowPicture();
					Sleep(2000);
	
					if(SetSystemPowerState(NULL,POWER_STATE_SUSPEND,POWER_FORCE )	!= ERROR_SUCCESS )
					{
						RETAILMSG(SHOW_DEBUG, (_T("SetSystemPowerState Error!\r\n")));
					} 		

      }
    }
  	
  }	

	return 0;
}

void SetToRegistry(DWORD *dwState1, DWORD *dwState2, LPCTSTR lpszRegKey, 
				   LPCTSTR lpszRegValue1, LPCTSTR lpszRegValue2)    
{
    HKEY    hKey;
	
	if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, lpszRegKey, 0, 0, &hKey))
	{		
		RegSetValueEx(hKey, lpszRegValue1, 0, REG_DWORD, (LPBYTE)dwState1, sizeof(DWORD));
		RegSetValueEx(hKey, lpszRegValue2, 0, REG_DWORD, (LPBYTE)dwState2, sizeof(DWORD));									
		RegCloseKey(hKey);
	}	
}

#define LOW_BACKLIGHT 4
#define HIGH_BACKLIGHT 14
int WINAPI MonBkLightThreadProc(LPVOID pvParam)
{
    DWORD dwStatus;
    HANDLE hEvents[3];
    LPTSTR pszFname = _T("PMMON!MonThreadProc");
 		HKEY    hKey1,hKey2;
  	LONG ret;
	  DWORD dwType;
	  DWORD dwValue;
	  DWORD dwSize;
	  DWORD lastValue;
	  UCHAR flag,BKL_flag;
		HANDLE event1,event2;

		RETAILMSG(SHOW_DEBUG, (TEXT("Enter MonBkLightThreadProc\r\n")));
//    SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE);

		lastValue = LOW_BACKLIGHT;

		//背光最大
		{
	    HKEY    hKey;
	    DWORD dwState1,dwState2;
			
			dwState1 = 9;
			dwState2 = 4;
			if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, L"ControlPanel\\BackLight", 0, 0, &hKey))
			{		
				RegSetValueEx(hKey, L"BattBacklightLevel", 0, REG_DWORD, (LPBYTE)(&dwState1), sizeof(DWORD));
				RegSetValueEx(hKey, L"ACBacklightLevel", 0, REG_DWORD, (LPBYTE)(&dwState2), sizeof(DWORD));									
				RegCloseKey(hKey);
			}	
			PM_BackLight(dwState1);
			lastValue = dwState1;
		}
		
		flag = 0;
		BKL_flag = 0;

    hEvents[0] = CreateEvent(NULL, FALSE, FALSE, L"BklLevelChangeEvent");
    hEvents[1] = CreateEvent(NULL, FALSE, FALSE, L"BackLightOff");
    hEvents[2] = CreateEvent(NULL, FALSE, FALSE, L"PowerLow");

    while (1) 
    {
 	  	Sleep(1);

  		RETAILMSG(SHOW_DEBUG, (TEXT("MonThreadProc:BklLevelChangeEvent\r\n")));
		  dwStatus = WaitForMultipleObjects(3, &hEvents[0], FALSE, INFINITE);
      if(dwStatus == WAIT_OBJECT_0)
      {
        //读注册表确定背光等级
       ret = RegOpenKeyEx((HKEY)HKEY_CURRENT_USER ,L"ControlPanel",0,0,&hKey1);
       if(ret == ERROR_SUCCESS)
       {
  		   ret = RegOpenKeyEx(hKey1 ,L"Backlight",0,0,&hKey2);
         if(ret == ERROR_SUCCESS)
         {
  			   dwSize = sizeof(dwValue);
           ret = RegQueryValueEx(hKey2, L"BacklightLevel", NULL, &dwType, (LPBYTE) &dwValue, &dwSize);
           if(ret == ERROR_SUCCESS && dwType == REG_DWORD) 
           {
					   RETAILMSG(SHOW_DEBUG, (TEXT("MonBkLightThreadProc:BacklightLevel:%d\r\n"),dwValue));
         	   switch(dwValue)
         	   {
         	   case 0://关背光
						   event1 = CreateEvent(NULL, FALSE, FALSE, L"BklCloseEvent");
						   SetEvent(event1);
						   event2 = CreateEvent(NULL, FALSE, FALSE, L"NoBklCloseEvent");
						   if(event1 && event2)
						   {
							   if(WaitForSingleObject(event2, 1000) != WAIT_OBJECT_0)
							   {
			        	   PM_BackLight(0);
			        	   flag = 1;
			           }
			         }
         		   break;
         	   case 4:// 开背光
         		   if(flag)
         		   {
        				 PM_BackLight(lastValue);
        				 flag = 0;
        				 continue;
        			 }
         		   break;
         	   default:
         		   break;
         	   }
         	
           	 //背光等级
         	   if(dwValue >= LOW_BACKLIGHT && dwValue <= HIGH_BACKLIGHT)
         	   {
         		   PM_BackLight(dwValue);
         		   lastValue = dwValue;
         	   }
           }
         }
         RegCloseKey(hKey1);
         RegCloseKey(hKey2);
       }
     }
     if(dwStatus == WAIT_OBJECT_0+1)
     {
      if(BKL_flag == 0)
		  {
		    PM_BackLight(0);
		    BKL_flag = 1;
		  }
		  else
		  {
		    PM_BackLight(lastValue);
		    BKL_flag = 0;
		  }
	  }
	  if(dwStatus == WAIT_OBJECT_0+2)
	  {
	  	MessageBox(NULL,LOW_POWER_WARN,LOW_POWER_TITLE,MB_OK | MB_ICONWARNING);
	  }          
  }

  return 0;
}

int WINAPI LowQAccThreadProc(LPVOID pvParam)
{
	unsigned short* pFB = NULL;
	FILE* fp = NULL;

	Sleep(60000);
	
  while(!PM_ChargerDetected())
  {
  	Sleep(1);
 		RETAILMSG(SHOW_DEBUG, (_T("LowQAccThreadProc:power off\r\n")));

		ShowPicture();
		Sleep(2000);
		if(SetSystemPowerState(NULL,POWER_STATE_SUSPEND,POWER_FORCE )	!= ERROR_SUCCESS )
		{
			RETAILMSG(SHOW_DEBUG, (_T("SetSystemPowerState Error!\r\n")));
		} 		
  }	
  
  CloseHandle(ghLowQAccThread);

	return 0;
}


void LoadQAcc(void)
{
	UCHAR buff[10] = {0};
	UCHAR flag = true;
	UCHAR i;
	UCHAR sum;
	DWORD temp;
	
	//ReadQaccFromNorFlash(buff);
	FLA_Read(0,buff,8);
	
	//	head1							head2								data length
	if(buff[0] != 0x55 || buff[1] != 0xaa || buff[2] != 4)
	{
	RETAILMSG(SHOW_DEBUG, (L"buff[0] = %x buff[1] = %x buff[2] = %x\r\n",buff[0],buff[1],buff[2]));
		flag = false;
	}
	else
	{
		sum = 0;
		for(i = 0;i < buff[2]+3; i++)
		{
			sum += buff[i];
		}
		if(sum != buff[buff[2]+3])
		{
	RETAILMSG(SHOW_DEBUG, (L"sum = %x buff[buff[2]+3] = %x\r\n",sum,buff[buff[2]+3]));
			flag = false;
		}
	}				
	
//	temp = (DWORD)buff[3]+(((DWORD)buff[4])<<8)+(((DWORD)buff[5])<<16)+(((DWORD)buff[6])<<24);
	temp = *((DWORD*)(buff+3));
	if(!flag)
	{
		g_currentQ = TOO_LOWQ;
	}
	else
	{
		g_currentQ = temp;
	}
	
	RETAILMSG(SHOW_DEBUG,(L"flag:%d LoadQAcc g_currentQ:%d\r\n",flag,g_currentQ));
}

void SaveQAcc(void)
{
	UCHAR buff[10] = {0};
	UCHAR i;

	RETAILMSG(SHOW_DEBUG,(L"SaveQAcc g_currentQ:%d\r\n",g_currentQ));
	
	buff[0] = 0x55;
	buff[1] = 0xaa;
	buff[2] = 0x04;

#if 0
	buff[3] = (UCHAR)g_currentQ;
	buff[4] = (UCHAR)(g_currentQ>>8);
	buff[5] = (UCHAR)(g_currentQ>>16);
	buff[6] = (UCHAR)(g_currentQ>>24);
#endif

	*((DWORD*)(buff+3)) = g_currentQ;
	for(i = 0;i < buff[2] + 3;i++)
	{
		buff[buff[2] + 3] += buff[i];
	}

	RETAILMSG(SHOW_DEBUG,(L"SaveQAcc buff:%x,%x,%x,%x,%x,%x,%x,%x\r\n",buff[0],buff[1],buff[2],buff[3],buff[4],buff[5],buff[6],buff[7]));
	
	//WriteQaccFromNorFlash(buff);
	FLA_Write(0,buff,8);

	
}


#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -