📄 mainlib.c
字号:
#include "hal.h"
#include "datatype.h"
#include "chiplib.h"
#include "io.h"
#include "topc.h"
#include "car.h"
#include "key.h"
#include "JpegComm.h"
#define L1F10251
//#define L1F10253
#ifdef L1F10251
#define LCDWIDTH 128
#define LCDHEIGHT 128
#else
#define LCDWIDTH 128
#define LCDHEIGHT 160
#endif
#define CAMERAWIDTH 640
#define CAMERAHEIGHT 480
#define USINGSCALERATE 2
//#define JUSTPREVIEW
//#define JUSTDECODE
//#define JUSTMDECODE
extern void vInitKey( void );
extern void vEnableKey0Int();
extern void vDisableKey0Int();
extern unsigned char gucKeyCode;
void SetBright(Int32 value);
void SetContrastValue(UInt16 Value);
void BackLightOn(Boolean on);
static void prvSaveRegT( UInt8* pSaveReg );
static void prvRestoreRegT( UInt8* pSaveReg );
static UInt16 gCamEncodeRegIndex[] =
{
REG0102_CMSIGNAL ,
REG0108_CMCONTROL ,
REG003C_LCDXFER ,
REG0224_YUVWRSTART0,
};
#define CAMENC_REG_SIZE (sizeof(gCamEncodeRegIndex) / sizeof( UInt16))
UInt8 saveReg[4];
unsigned long tmpjpg[12*1024*100/4];
PREVIEWINFO prvinfo;
extern unsigned char wow[];
extern unsigned char abcd[];
//extern unsigned char image[];
void main(void)
{
UInt32 addr1,addr2;
UInt32 ret;
Boolean retjpg;
UInt8 contrast;
UInt32 EncodedSize;
Boolean prvStarting;
prvWorld JpegWorld;
Int32 bright;
JPEGINFO Jinfo;
#ifdef L1F10251
contrast=0x3D;
#endif
#ifdef L1F10253
contrast=0x3F;
#endif
if (FALSE == halAcquireController())
return;
if (FALSE == halInitController(fINIT_NORMAL))//| fDONT_CLEAR_MEM
return;
BackLightOn(TRUE);
halDelayUS(1000);
addr1=GetStartAddress(cl_MAIN_WINDOW);
addr2=GetStartAddress(cl_OVERLAY_WINDOW);
halWriteDisplay8(addr2, 0xE0, LCDWIDTH*LCDHEIGHT);
halWriteDisplay8(addr2+16*LCDWIDTH, 0x01, LCDWIDTH*(LCDHEIGHT-32));
clStartOneFrameTransfer();
halWriteData(sizeof(UInt16),addr1, car,LCDWIDTH*LCDHEIGHT*2);
clStartOneFrameTransfer();
#ifdef JUSTDECODE
jpegInit(&Jinfo);
Jinfo.m_pBuf=(UInt8 *)wow;
Jinfo.m_EncSize=3709;
Jinfo.m_BufSize=80*1024;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=LCDWIDTH;
Jinfo.m_Height=LCDHEIGHT;
Jinfo.m_DesiredHeight=LCDHEIGHT/2;
Jinfo.m_DesiredWidth=LCDWIDTH/2;
Jinfo.m_XStart=0;
Jinfo.m_RWidth=LCDWIDTH;
Jinfo.m_YStart=0;
Jinfo.m_RHeight=LCDHEIGHT;
Jinfo.m_fAFAP=FALSE;
Jinfo.m_fWrAlways=TRUE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fFastCpu=TRUE;
Jinfo.m_fScale=TRUE;
previewStop();
retjpg=jpegDecode(&Jinfo);
ret=jpegGetLastError();
clStartOneFrameTransfer();
while(1);
#endif
#ifdef JUSTMDECODE
jpegInit(&Jinfo);
Jinfo.m_pBuf=abcd;//(UInt8 *)image;
Jinfo.m_EncSize=142588;//158932;
Jinfo.m_BufSize=80*1024;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=LCDWIDTH;
Jinfo.m_Height=LCDHEIGHT;
Jinfo.m_DesiredHeight=LCDHEIGHT;
Jinfo.m_DesiredWidth=LCDWIDTH;
Jinfo.m_XStart=0;
Jinfo.m_RWidth=LCDWIDTH;
Jinfo.m_YStart=0;
Jinfo.m_RHeight=LCDHEIGHT;
Jinfo.m_fAFAP=FALSE;
Jinfo.m_fWrAlways=TRUE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fFastCpu=TRUE;
Jinfo.m_fScale=TRUE;
Jinfo.m_Delay=20000;
previewStop();
retjpg=jpegMDecode(&Jinfo);
ret=jpegGetLastError();
clStartOneFrameTransfer();
while(1);
#endif
SetSwivelViewMode(cl_MAIN_WINDOW, 180);
previewStart();
prvinfo.XStart=0;
prvinfo.YStart=0;
prvinfo.Width=LCDWIDTH*2;
prvinfo.Height=LCDHEIGHT*2;
prvinfo.ScaleRate=2;
/*
prvinfo.XStart=(CAMERAWIDTH-LCDWIDTH*USINGSCALERATE)/2;
prvinfo.YStart=(CAMERAHEIGHT-LCDHEIGHT*USINGSCALERATE)/2;
prvinfo.Width=LCDWIDTH*USINGSCALERATE;
prvinfo.Height=LCDHEIGHT*USINGSCALERATE;
prvinfo.ScaleRate=USINGSCALERATE;
*/
previewZoomT(&prvinfo);
prvStarting=TRUE;
//SetSwivelViewMode(cl_MAIN_WINDOW, 90);
//SetWinMirror(cl_MAIN_WINDOW, TRUE);
halDelayUS(1000000);
#ifdef JUSTPREVIEW
while(1);
#endif
vInitKey( );
vEnableKey0Int();
bright=0;
gucKeyCode=NULLKEY;
while(1)
{
switch(gucKeyCode)
{
case LEFTKEY:
gucKeyCode=NULLKEY;
// if(bright>0)
// bright--;
// SetBright(bright);
if(contrast>0x1)
contrast--;
SetContrastValue(contrast);
break;
case RIGHTKEY:
gucKeyCode=NULLKEY;
// if(bright<0x3F)
// bright++;
// SetBright(bright);
#ifdef L1F10251
if(contrast<0x7F)
#endif
#ifdef L1F10253
if(contrast<0xFF)
#endif
contrast++;
SetContrastValue(contrast);
break;
case UPKEY:
gucKeyCode=NULLKEY;
prvSaveWorld(&JpegWorld);
memset ((UInt8 *)tmpjpg,0,176*240*4);
// previewStop();
jpegInit(&Jinfo);
/* Jinfo.m_pBuf=(UInt8 *)tmpjpg;
Jinfo.m_BufSize=sizeof(tmpjpg);
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=TRUE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=128;
Jinfo.m_Height=128;
Jinfo.m_XStart=0;
Jinfo.m_YStart=0;
Jinfo.m_RWidth=128;
Jinfo.m_RHeight=128;
Jinfo.m_XEnd=127;
Jinfo.m_YEnd=127;
Jinfo.m_fAFAP=TRUE;
Jinfo.m_fWrAlways=FALSE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fFastCpu=TRUE;
Jinfo.m_Delay=8000;
*/
Jinfo.m_pBuf=(UInt8 *)tmpjpg;
Jinfo.m_BufSize=12*1024*100;
Jinfo.m_fMotionJPEG=TRUE;
Jinfo.m_FrameCount=100;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=128*2;
Jinfo.m_Height=128*2;
Jinfo.m_XStart=0;
Jinfo.m_YStart=0;
Jinfo.m_RWidth=0;
Jinfo.m_RHeight=0;
Jinfo.m_XEnd=128*2-1;
Jinfo.m_YEnd=128*2-1;
Jinfo.m_fAFAP=TRUE;
Jinfo.m_fWrAlways=TRUE;
Jinfo.m_HScaleRate=2;
Jinfo.m_fIndScale=TRUE;
Jinfo.m_VScaleRate=2;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fInfLoop=FALSE;
Jinfo.m_Delay=10000;
/*
Jinfo.m_pBuf=(UInt8 *)tmpjpg;
Jinfo.m_BufSize=5*1024*100;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=LCDWIDTH*USINGSCALERATE;
Jinfo.m_Height=LCDHEIGHT*USINGSCALERATE;
Jinfo.m_XStart=(CAMERAWIDTH-LCDWIDTH*USINGSCALERATE)/2;
Jinfo.m_RWidth=LCDWIDTH*USINGSCALERATE;
Jinfo.m_YEnd=(CAMERAHEIGHT-LCDHEIGHT*USINGSCALERATE)/2;
Jinfo.m_RHeight=LCDHEIGHT*USINGSCALERATE;
Jinfo.m_fAFAP=TRUE;
Jinfo.m_fWrAlways=FALSE;
Jinfo.m_HScaleRate=USINGSCALERATE;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=USINGSCALERATE;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_Delay=0;
*/
/*
Jinfo.m_pBuf=(UInt8 *)tmpjpg;
Jinfo.m_BufSize=176*240*4;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=640;
Jinfo.m_Height=480;
Jinfo.m_XStart=0;
Jinfo.m_RWidth=640;
Jinfo.m_YStart=0;
Jinfo.m_RHeight=480;
Jinfo.m_fAFAP=TRUE;
Jinfo.m_fWrAlways=FALSE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
*/
retjpg=jpegEncode(&Jinfo);
prvRestoreWorld(&Jinfo,&JpegWorld);
//halWriteReg8(REG022A_YOFFSET0, 0);
ret=jpegGetLastError();
EncodedSize=Jinfo.m_EncSize;
break;
case DOWNKEY:
gucKeyCode=NULLKEY;
//prvSaveRegT(saveReg);
//prvSaveWorld(&JpegWorld);
jpegInit(&Jinfo);
Jinfo.m_pBuf=(UInt8 *)tmpjpg;
Jinfo.m_EncSize=EncodedSize;
Jinfo.m_BufSize=80*1024;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=LCDWIDTH;
Jinfo.m_Height=LCDHEIGHT;
Jinfo.m_XStart=0;
Jinfo.m_RWidth=LCDWIDTH;
Jinfo.m_YStart=0;
Jinfo.m_RHeight=LCDHEIGHT;
Jinfo.m_fAFAP=FALSE;
Jinfo.m_XEnd=LCDWIDTH-1;
Jinfo.m_YEnd=LCDHEIGHT-1;
Jinfo.m_fWrAlways=TRUE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fFastCpu=TRUE;
Jinfo.m_DesiredHeight=LCDHEIGHT;
Jinfo.m_DesiredWidth=LCDWIDTH;
/*
Jinfo.m_pBuf=(UInt8 *)error;
Jinfo.m_EncSize=9027;
Jinfo.m_BufSize=80*1024;
Jinfo.m_fMotionJPEG=FALSE;
Jinfo.m_FrameCount=1;
Jinfo.m_MemEnc=FALSE;
Jinfo.m_fSOE=FALSE;
Jinfo.m_Width=LCDWIDTH;
Jinfo.m_Height=LCDHEIGHT;
Jinfo.m_XStart=0;
Jinfo.m_RWidth=LCDWIDTH;
Jinfo.m_YStart=0;
Jinfo.m_RHeight=LCDHEIGHT;
Jinfo.m_fAFAP=FALSE;
Jinfo.m_fWrAlways=TRUE;
Jinfo.m_HScaleRate=1;
Jinfo.m_fIndScale=FALSE;
Jinfo.m_VScaleRate=1;
Jinfo.m_ScaleMode=0x01;
Jinfo.m_YUVFmt=YUVFmt422;
Jinfo.m_fFastCpu=TRUE;
*/
retjpg=jpegDecode(&Jinfo);
ret=jpegGetLastError();
break;
case OKKEY:
if(prvStarting)
{
previewStop();
//halDelayUS(500000);
prvStarting=FALSE;
halWriteDisplay16(addr1, 0x07E0, LCDWIDTH*LCDWIDTH);
clStartOneFrameTransfer();
}
else
{
previewStart();
previewZoom(&prvinfo);
prvStarting=TRUE;
}
gucKeyCode=NULLKEY;
break;
}
}
}
void SetBright(Int32 value)
{
halWriteReg8(REG007F_PWMWHITECYCLE, value);
}
void SetContrastValue(UInt16 Value)
{
halWriteReg8(REG003C_LCDXFER, 0x00);
#ifdef L1F10251
while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
continue;
halWriteReg8(REG0030_LCDCMD0, 0x25);
halWriteReg8(REG0031_LCDCMD1, 0x00);
while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
continue;
halWriteReg8(REG0032_LCDWRITE0, Value);
halWriteReg8(REG0033_LCDWRITE1, Value>>8);
while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
continue;
halWriteReg8(REG0030_LCDCMD0, 0x2c);
halWriteReg8(REG0031_LCDCMD1, 0x00);
#endif
#ifdef L1F10253
while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
continue;
halWriteReg8(REG0030_LCDCMD0, 0x2A);
halWriteReg8(REG0031_LCDCMD1, 0x00);
while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
continue;
halWriteReg8(REG0030_LCDCMD0, Value);
halWriteReg8(REG0031_LCDCMD1, Value>>8);
#endif
halWriteReg8(REG003C_LCDXFER, 0x01);
}
void BackLightOn(Boolean on)
{
halWriteReg8(REG0070_PWMCTRL0,0x05);
halWriteReg8(REG007F_PWMWHITECYCLE,0x00);//0x3F);
halWriteReg8(REG0072_PWMCTRL1,0x01);
}
void prvSaveRegT( UInt8* pSaveReg )
{
UInt8 i;
for ( i = 0; i < CAMENC_REG_SIZE; ++i, ++pSaveReg )
{
*pSaveReg = halReadReg8( gCamEncodeRegIndex[ i ] );
}
}
void prvRestoreRegT( UInt8* pSaveReg )
{
UInt8 i;
for ( i = 0; i < CAMENC_REG_SIZE; ++i, ++pSaveReg )
{
halWriteReg8( gCamEncodeRegIndex[ i ], *pSaveReg );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -