📄 bak_hw.cpp
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
*/
#include <windows.h>
#include <nkintr.h>
#include <nkintr.h>
#include "oalintr.h"
#include "drv_glob.h"
#include "bak_hw.h"
volatile IOPreg *g_s2440IOP;
volatile PWMreg *g_s2440PWM;
DWORD g_TouchInterrupt;
HANDLE g_hTouchInterrupt;
HANDLE g_hTouchInterruptThread;
UINT g_Timer=0xFFFFFFFF;
UINT g_MilliSecond=0xFFFFFFFF;
//Reset LCD
VOID
ResetLcd()
{
g_s2440IOP = (IOPreg *)IOP_BASE;
g_s2440PWM = (PWMreg *)PWM_BASE;
//Config GPD9,lcd reset
g_s2440IOP->rGPDCON &= ~(3<<18);
g_s2440IOP->rGPDCON |= (1<<18);
g_s2440IOP->rGPDDAT &= (0<<9);
Sleep(100);
g_s2440IOP->rGPDDAT |= (1<<9);
//Config GPC6,light lcd backlight
g_s2440IOP->rGPCCON &= ~(3<<12);
g_s2440IOP->rGPCCON |= 1<<12;
g_s2440IOP->rGPCDAT |= 1<<6;
//Config GPC7
g_s2440IOP->rGPCCON &= ~(3<<14);
g_s2440IOP->rGPCCON |= 1<<14;
g_s2440IOP->rGPCDAT |= 1<<7;
//Config GPB1
g_s2440IOP->rGPBCON &= ~(3<<2);
g_s2440IOP->rGPBCON |= 1<<2;
g_s2440IOP->rGPBDAT |= 1<<1;
//Config GPB0
g_s2440IOP->rGPBCON &= ~(3<<0);
g_s2440IOP->rGPBCON |= (1<<0);
g_s2440IOP->rGPBDAT &= ~(1<<0);
//Set logo
memcpy((void *)FRAMEBUF_BASE, gImage_GPS_LOGO, ARRAY_SIZE_TFT_16BIT);
}
//
// Perform all one-time initialization of the backlight
//
VOID
BacklightInitialize()
{
unsigned char HiRatio;
RETAILMSG(DEBUGMODE, (TEXT("BacklightInitialize+++\r\n") ));
HiRatio = DEFAULT_BACKLITE;
if ( (HiRatio<0) || (HiRatio>100) )
RETAILMSG(DEBUGMODE, (TEXT("Invalide HiRatio value!\r\n") ));
g_s2440IOP->rGPBCON = g_s2440IOP->rGPBCON & (~(3<<0)) | (2<<0) ;// set GPB0 as TOUT0
g_s2440PWM->rTCON = g_s2440PWM->rTCON & (~(0xf<<0)) ; // clear manual update bit, stop Timer1
g_s2440PWM->rTCFG0 &= 0xffffff00; // set Timer 0&1 prescaler 0
g_s2440PWM->rTCFG0 |= (PRESCALER);
g_s2440PWM->rTCFG1 &= 0xfffffff0; // set Timer0 MUX 1/2
g_s2440PWM->rTCFG1 |= 0x00000000; // set Timer0 MUX 1/2
g_s2440PWM->rTCNTB0 = ( 96000000 )/( FREQ_PWM1 *16 ); //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low
g_s2440PWM->rTCMPB0 = ( g_s2440PWM->rTCNTB0*(HiRatio))/100 ; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
g_s2440PWM->rTCON = g_s2440PWM->rTCON & (~(0xf<<0)) | (0x0e<<0) ; //自动重装,输出取反关闭,更新TCNTBn、TCMPBn,死区控制器关闭
g_s2440PWM->rTCON = g_s2440PWM->rTCON & (~(0xf<<0)) | (0x0d<<0) ; //开启背光控制
RETAILMSG(DEBUGMODE, (TEXT("BacklightInitialize---\r\n") ));
return;
}
VOID SetBacklitePWM( unsigned char HiRatio)
{
if ( (HiRatio<0) || (HiRatio>99) )
{
RETAILMSG(DEBUGMODE, (TEXT("Invalide HiRatio value!\r\n") ));
return;
}
g_s2440PWM->rTCMPB0 = ( g_s2440PWM->rTCNTB0*(HiRatio))/100 ; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
}
VOID SetBacklitePWMOff()
{
RETAILMSG(DEBUGMODE, (TEXT("SetBacklitePWMOff+++\r\n") ));
g_s2440IOP->rGPBCON &= ~(3<<2);
g_s2440IOP->rGPBCON |= 1<<2;
g_s2440IOP->rGPBDAT &= ~(1<<1);
RETAILMSG(DEBUGMODE, (TEXT("SetBacklitePWMOff---\r\n") ));
}
VOID SetBacklitePWMOn()
{
RETAILMSG(DEBUGMODE, (TEXT("SetBacklitePWMOn+++\r\n") ));
g_s2440IOP->rGPBCON &= ~(3<<2);
g_s2440IOP->rGPBCON |= 1<<2;
g_s2440IOP->rGPBDAT |= 1<<1;
RETAILMSG(DEBUGMODE, (TEXT("SetBacklitePWMOn---\r\n") ));
}
BOOL CreatTimerThread()
{
RETAILMSG(DEBUGMODE, (TEXT("CreatTimerThread+++\r\n") ));
g_TouchInterrupt = SYSINTR_TOUCH_CHANGED;
g_hTouchInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!g_hTouchInterrupt)
{
RETAILMSG(DEBUGMODE,(TEXT("Unable to create backlite interrupt event\r\n")));
return(FALSE);
}
if (! InterruptInitialize(g_TouchInterrupt, g_hTouchInterrupt, NULL, 0))
{
RETAILMSG(DEBUGMODE,(TEXT("Unable to initialize backlite SYSINTR_TOUCH interrupt\r\n")));
return FALSE;
}
g_hTouchInterruptThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)TimerThread,
NULL,
0,
NULL);
if (!g_hTouchInterruptThread)
{
RETAILMSG(DEBUGMODE,(TEXT("Unable to create interrupt thread\r\n")));
return FALSE;
}
CeSetThreadPriority(g_hTouchInterruptThread, 96);
RETAILMSG(DEBUGMODE, (TEXT("CreatTimerThread---\r\n") ));
return TRUE;
}
VOID TimerThread()
{
RETAILMSG(DEBUGMODE, (TEXT("TimerThread+++\r\n") ));
while (TRUE)
{
WaitForSingleObject(g_hTouchInterrupt, INFINITE);
RETAILMSG(DEBUGMODE, (TEXT("g_Timer = 0x%x,g_MilliSecond = 0x%x.\r\n"),g_Timer, g_MilliSecond ));
//Kill timer here
if ( (FIRST_INIT_TIMER == g_MilliSecond) && (INVALIDE_TIMER == g_Timer)) //no timer and first time,do nothing
{
//do nothing
}
else if (NULL == g_Timer) //awake timer
{
SetBacklitePWMOn();
if (FIRST_INIT_TIMER != g_MilliSecond)
{
BackliteSetTimer(g_MilliSecond);
}
}
else //already set timer,but no trigger
{
BackliteKillTimer();
BackliteSetTimer(g_MilliSecond);
}
InterruptDone(g_TouchInterrupt);
}
RETAILMSG(DEBUGMODE, (TEXT("TimerThread---\r\n") ));
}
VOID CALLBACK TimerProc(
HWND hwnd, // handle to window for timer messages
UINT message, // WM_TIMER message
UINT idTimer, // timer identifier
DWORD dwTime) // current system time
{
RETAILMSG(DEBUGMODE, (TEXT("TimerProc+++\r\n") ));
SetBacklitePWMOff();
//BackliteKillTimer();
RETAILMSG(DEBUGMODE, (TEXT("TimerProc---\r\n") ));
}
BOOL BackliteKillTimer()
{
RETAILMSG(DEBUGMODE, (TEXT("TimerProc+++\r\n") ));
KillTimer(NULL, g_Timer);
g_Timer = NULL;
RETAILMSG(DEBUGMODE, (TEXT("TimerProc---\r\n") ));
return TRUE;
}
BOOL BackliteSetTimer(UINT unMilliSecond)
{
RETAILMSG(DEBUGMODE, (TEXT("CreateTimer+++\r\n") ));
g_Timer = SetTimer(NULL, 1, unMilliSecond, (TIMERPROC) TimerProc);
if (NULL == g_Timer)
{
RETAILMSG(DEBUGMODE, (TEXT("Fail to create timer!") ));
return FALSE;
}
RETAILMSG(DEBUGMODE, (TEXT("CreateTimer---\r\n") ));
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -