www.pudn.com > bu1566.rar > W_MenuMode.c
#define _W_MENUMODE_C_
#include "BUxx_setuptable.h"
#include "BUxx_demoset.h"
#include "BUxx_Sample.h"
#include "BUxx_DRV.h"
#include "BUxx_aDRT.h"
#include "BUxx_aDSC.h"
#include "BUxx_mem.h"
#include "W_MenuMode.h"
static void Menu(void)
{
static u8 u8SelectedFuncID = 1;
if (gl_menu_first_show == 1)
{
ShowMenu(u8SelectedFuncID);
gl_menu_first_show = 0;
}
switch (gl_keydisp)
{
case KEY3: // top button ON
MenuMoveUp(&u8SelectedFuncID);
break;
case KEY5: // bottom button ON
MenuMoveDown(&u8SelectedFuncID);
break;
case KEY8: // enter button ON
gl_function_id = u8SelectedFuncID;
break;
default:
break;
} //switch(gl_keydisp)
gl_keydisp = 0;
}
static void Preview(void)
{
static int filter_select = sDISABLE;
static UINT8 u8OverlayOpen = 0;
static UINT16 u16OvlTime = 0;
static int i8Step = 0;
static UINT8 u8ExOvlPos = 16;
reg_write(INDEX, OVL_CNT);
if ((reg_read(REG) & 0x0003) != 0)
{
if (u16OvlTime >= 1000)
{
u16OvlTime = 0;
data_write(OVL_FRMST1, (u8ExOvlPos << 8) | 140); //95,60
data_write(OVL_FRMST2, (114 << 8) | (u8ExOvlPos + 16)); //95,60
if (u8ExOvlPos == 98)
i8Step = -1;
else if (u8ExOvlPos == 16)
i8Step = 1;
u8ExOvlPos += i8Step;
}
else
{
u16OvlTime++;
}
}
if (gl_first_action == 1)
{
sStartPreview();
gl_first_action = 0;
}
switch (gl_keystate)
{
case KEY1:
gl_keydisp = 0;
gl_keystate = 0x0000;
sZoomPreview(ZOOM_IN);
break;
case KEY7:
gl_keydisp = 0;
gl_keystate = 0x0000;
sZoomPreview(ZOOM_OUT);
break;
default:
break;
}
switch (gl_keydisp)
{
case KEY0:
if (filter_select < sNEGA)
{
filter_select++;
}
else
{
filter_select = sDISABLE;
}
sFilterSet(filter_select);
break;
case KEY1:
u8OverlayOpen = 1 - u8OverlayOpen;
if (u8OverlayOpen == 1)
{
sOverlayPreview();
}
else
{
sStartPreview();
}
break;
case KEY2:
u8OverlayOpen = 1 - u8OverlayOpen;
if (u8OverlayOpen == 1)
{
// aDSC_ExOvlmemory_write(OvlFrame_dat);
data_write(OVL_FRMST1, (u8ExOvlPos << 8) | 140); //95,60
data_write(OVL_FRMST2, (114 << 8) | (u8ExOvlPos + 16)); //95,60
data_write(OVL_CNT, 0x0013);
}
else
{
data_write(OVL_CNT, 0x0000);
}
break;
case KEY8: // enter button ON
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 1;
aDSC_Quit_Preview();
break;
default:
break;
} //switch(gl_keydisp)
gl_keydisp = 0;
}
static void StillJpeg(void)
{
UINT32 jpeg_size = JPEG_BUFFER;
static UINT8 u8OverlayOpen = 0;
static UINT16 u16OvlTime = 0;
static int i8Step = 0;
static UINT8 u8ExOvlPos = 16;
reg_write(INDEX, OVL_CNT);
if ((reg_read(REG) & 0x0003) != 0)
{
if (u16OvlTime >= 1000)
{
u16OvlTime = 0;
data_write(OVL_FRMST1, (u8ExOvlPos << 8) | 140); //95,60
data_write(OVL_FRMST2, (114 << 8) | (u8ExOvlPos + 16)); //95,60
if (u8ExOvlPos == 98)
i8Step = -1;
else if (u8ExOvlPos == 16)
i8Step = 1;
u8ExOvlPos += i8Step;
}
else
{
u16OvlTime++;
}
}
if (gl_first_action == 1)
{
gl_first_action = 0;
sStartPreview();
}
switch (gl_keydisp)
{
case KEY0:
aDSC_whiteled_on_off(sPWMWHT_ENABLE, 0x3f, 0x3f);
sJPEGFEncode((UINT16 *) BASE_ADDRESS, &jpeg_size);
aDSC_whiteled_on_off(sPWMWHT_DISABLE, 0x3f, 0x3f);
wait(500);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE,0x0000);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
wait(500);
break;
case KEY1:
data_write(OVL_CNT, 0x0000);
sJPEGDecode((unsigned short *) BASE_ADDRESS, &jpeg_size);
break;
case KEY2:
u8OverlayOpen = 1 - u8OverlayOpen;
if (u8OverlayOpen == 1)
{
sOverlayPreview();
// aDSC_ExOvlmemory_write(OvlFrame_dat);
data_write(OVL_FRMST1, (u8ExOvlPos << 8) | 140); //95,60
data_write(OVL_FRMST2, (114 << 8) | (u8ExOvlPos + 16)); //95,60
data_write(OVL_CNT, 0x0013);
}
else
{
data_write(OVL_CNT, 0x0000);
sStartPreview();
}
break;
case KEY3:
/*
aDSC_whiteled_on_off(sPWMWHT_ENABLE, 0x3f, 0x3f);
sJPEGCEncode((UINT16 *) BASE_ADDRESS, &jpeg_size);
aDSC_whiteled_on_off(sPWMWHT_DISABLE, 0x3f, 0x3f);
wait(1000);
RecParamSet(&l_Lcd, 0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
LcdRectWrite(&l_Lcd, 0, 0, 0);
*/
break;
case KEY8: // enter button ON
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 1;
aDSC_Quit_Preview();
break;
default:
break;
} //switch(gl_keydisp)
gl_keydisp = 0;
}
static void Jpeg4Frame(void)
{
UINT16 *multidata[4];
UINT32 multisize[4];
UINT8 i;
multidata[0] = (UINT16 *) BASE_ADDRESS;
multidata[1] = multidata[0] + MULTI_JPEG_BUFFER / 2;
multidata[2] = multidata[1] + MULTI_JPEG_BUFFER / 2;
multidata[3] = multidata[2] + MULTI_JPEG_BUFFER / 2;
for (i = 0; i < 4; i++)
{
multisize[i] = MULTI_JPEG_BUFFER;
}
if (gl_first_action == 1)
{
gl_first_action = 0;
sStartPreview();
}
switch (gl_keydisp)
{
case KEY0:
sMultiShot(multidata[0], multisize);
break;
case KEY8: // enter button ON
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 1;
aDSC_Quit_Preview();
break;
default:
break;
} //switch(gl_keydisp)
gl_keydisp = 0;
}
static void MotionJpeg(void)
{
UINT16 *mjdata;
static UINT32 mjsize = MJPEG_BUFFER;
mjdata = (UINT16 *) BASE_ADDRESS;
if (gl_first_action == 1)
{
gl_first_action = 0;
sMotionJPEG_Preview();
}
switch (gl_keydisp)
{
case KEY0:
sMjEncode(mjdata, &mjsize);
break;
case KEY1:
sMjDecode(mjdata, &mjsize);
break;
case KEY8: // enter button ON
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 1;
aDSC_Quit_Preview();
break;
default:
break;
} //switch(gl_keydisp)
gl_keydisp = 0;
}
static void RingBufferJpeg(void)
{
static UINT16 u16CstX = 0, u16CstY = 0;
static UINT8 u8Step = 16;
if (gl_first_action == 0)
{
gl_first_action = 1;
sStartPreview();
}
switch (gl_keystate)
{
case KEY1:
gl_keydisp = 0;
gl_keystate = 0x0000;
if (u16CstX >= u8Step)
u16CstX -= u8Step;
else
u16CstX = 0;
sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
break;
case KEY3:
gl_keydisp = 0;
gl_keystate = 0x0000;
if (u16CstY >= u8Step)
u16CstY -= u8Step;
else
u16CstY = 0;
sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
break;
case KEY5:
gl_keydisp = 0;
gl_keystate = 0x0000;
if ((u16CstY + u8Step + M_LCD_HSIZE) < CAM_VSIZE)
u16CstY += u8Step;
else
u16CstY = CAM_VSIZE - M_LCD_HSIZE - 1;
sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
break;
case KEY7:
gl_keydisp = 0;
gl_keystate = 0x0000;
if ((u16CstX + u8Step + M_LCD_WSIZE) < CAM_HSIZE)
u16CstX += u8Step;
else
u16CstX = CAM_HSIZE - M_LCD_WSIZE - 2;
sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
break;
default:
break;
}
switch (gl_keydisp)
{
case KEY0:
sJPEGCEncode((UINT16 *) BASE_ADDRESS, 12);
/*
aDSC_Quit_Preview();
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x000f);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x92, 0x10, 0x0f, sSERI_WRITE);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x81, 0x94, 0x0f, sSERI_WRITE);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x99, 0x01, 0x0f, sSERI_WRITE);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x9A, 0x10, 0x0f, sSERI_WRITE);
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x0000);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
// sStartPreview();
// wait(1000);
sJPEGCEncode((UINT16 *) BASE_ADDRESS,12);
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x000f);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x92, 0x40, 0x0f, sSERI_WRITE);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x99, 0x03, 0x0f, sSERI_WRITE);
// aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x9A, 0xF0, 0x0f, sSERI_WRITE);
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x0000);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
*/
break;
case KEY4:
u8Step += 4;
u8Step %= 44;
break;
case KEY6:
sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
break;
case KEY8:
aDSC_Quit_Preview();
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 0;
break;
default:
break;
}
gl_keydisp = 0;
}
static void RotJpeg(void)
{
UINT32 u32RgbBufferSize = 153600 + 4; //320*240*2+4
if (gl_first_action == 0)
{
gl_first_action = 1;
sStartPreview();
}
switch (gl_keydisp)
{
case KEY0:
sJPEGCEncode2((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, 2);
sJPEGCameraDecode2((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, 128, 96);
break;
case KEY1:
memset((UINT8 *) BASE_ADDRESS, 0, u32RgbBufferSize);
aDSC_fmemory_clear(0, 0, 144, 176, 0x0); //test 20050519
sJPEGHostDec((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, (UINT16 *) BASE_ADDRESS);
// sRgbRot((UINT16 *) BASE_ADDRESS, u32RgbBufferSize);
// sJPEGHostEnc((UINT16 *) BASE_ADDRESS+u32RgbBufferSize,12);
// sJPEGCameraDecode2((UINT16 *) BASE_ADDRESS+u32RgbBufferSize, 96, 128);
break;
case KEY8:
aDSC_Quit_Preview();
gl_function_id = 0;
gl_menu_first_show = 1;
gl_first_action = 0;
break;
default:
break;
}
gl_keydisp = 0;
}
#ifdef _BU1563API_INTERFACE_
static void CamFunc(void)
{
static c_SetBase **pp_CurSetData = (c_SetBase **) cBase;
if (gl_first_action == 0)
{
fPreview();
gl_first_action = 1;
}
switch (gl_keystate)
{
case KEY0:
gl_keydisp = 0;
gl_keystate = 0x0000;
fZoom(ZOOM_IN);
break;
case KEY6:
gl_keydisp = 0;
gl_keystate = 0x0000;
fZoom(ZOOM_OUT);
break;
default:
break;
}
switch (gl_keydisp)
{
case KEY1:
if (pp_CurSetData == (c_SetBase **) cBase)
pp_CurSetData = (c_SetBase **) (cBase + gv_SetMaxNum - 1);
else
pp_CurSetData--;
(*pp_CurSetData)->fSet(*pp_CurSetData);
gl_first_action = 0;
break;
case KEY7:
if (pp_CurSetData == (c_SetBase **) (cBase + gv_SetMaxNum - 1))
pp_CurSetData = (c_SetBase **) cBase;
else
pp_CurSetData++;
(*pp_CurSetData)->fSet(*pp_CurSetData);
gl_first_action = 0;
break;
case KEY3:
if ((*pp_CurSetData)->u16CurIndex == 0)
{
(*pp_CurSetData)->u16CurIndex = (*pp_CurSetData)->u16MaxNum - 1;
}
else
{
(*pp_CurSetData)->u16CurIndex--;
}
(*pp_CurSetData)->fSet(*pp_CurSetData);
gl_first_action = 0;
break;
case KEY5:
if ((*pp_CurSetData)->u16CurIndex == (*pp_CurSetData)->u16MaxNum - 1)
{
(*pp_CurSetData)->u16CurIndex = 0;
}
else
{
(*pp_CurSetData)->u16CurIndex++;
}
(*pp_CurSetData)->fSet(*pp_CurSetData);
gl_first_action = 0;
break;
case KEY4:
fJpegEnc();
fJpegDec();
break;
case KEY2:
gl_first_action = 0;
break;
case KEY8:
gl_menu_first_show = 1;
gl_first_action = 0;
aDSC_Quit_Preview();
break;
default:
break;
}
gl_keydisp = 0;
}
#endif //#ifdef _BU1563API_INTERFACE_
static void MenuMoveUp(u8 * p_u8SelectedFuncID)
{
u8 u8FuncMaxItem = sizeof(tMenu) / 36;
if (*p_u8SelectedFuncID == 1)
{
*p_u8SelectedFuncID = u8FuncMaxItem - 1;
}
else
{
(*p_u8SelectedFuncID)--;
}
ShowMenu(*p_u8SelectedFuncID);
}
static void MenuMoveDown(u8 * p_u8SelectedFuncID)
{
u8 u8FuncMaxItem = sizeof(tMenu) / 36;
if (*p_u8SelectedFuncID == (u8FuncMaxItem - 1))
{
*p_u8SelectedFuncID = 1;
}
else
{
(*p_u8SelectedFuncID)++;
}
ShowMenu(*p_u8SelectedFuncID);
}
static void ShowMenu(u8 u8SelectedFuncID)
{
u8 u8CurrentFuncStartY = 0;
u8 u8DisplayMaxItem = (M_LCD_HSIZE - 2 * PICT_SIZE) / PICT_SIZE;
u8 u8DisplayBlank = (M_LCD_HSIZE - 2 * PICT_SIZE) % PICT_SIZE / 2;
if (gl_menu_first_show == 1)
{
aDSC_lcdaccess_set(sMAIN_ACS);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, PICT_SIZE,
((MLCD_BCOL_RU & 0xf8) << 8) | ((MLCD_BCOL_GU & 0xfc) << 3) | ((MLCD_BCOL_BU & 0xf8) >> 3));
aDSC_fmemory_clear(0, M_LCD_HSIZE - PICT_SIZE, M_LCD_WSIZE,PICT_SIZE,
((MLCD_BCOL_RU & 0xf8) << 8) | ((MLCD_BCOL_GU & 0xfc) << 3) | ((MLCD_BCOL_BU & 0xf8) >> 3));
aDSC_fmemory_clear(0, PICT_SIZE, M_LCD_WSIZE, M_LCD_HSIZE - 2 * PICT_SIZE,
((MLCD_BCOL_RC & 0xf8) << 8) | ((MLCD_BCOL_GC & 0xfc) << 3) | ((MLCD_BCOL_BC & 0xf8) >> 3));
u8CurrentFuncStartY = PICT_SIZE * u8DisplayMaxItem / 2 + u8DisplayBlank;
aDSC_fmemory_clear(0, u8CurrentFuncStartY, M_LCD_WSIZE, PICT_SIZE,
((0x00 & 0xf8) << 8) | ((0xfc & 0xfc) << 3) | ((0xf8 & 0xf8) >> 3));
StringWrite(tMenu[u8SelectedFuncID].szFuncName, 6,
u8CurrentFuncStartY);
}
else
{
u8CurrentFuncStartY = PICT_SIZE * u8DisplayMaxItem / 2 + u8DisplayBlank;
aDSC_fmemory_clear(0, u8CurrentFuncStartY, M_LCD_WSIZE, PICT_SIZE,
((0x00 & 0xf8) << 8) | ((0xfc & 0xfc) << 3) | ((0xf8 & 0xf8) >> 3));
StringWrite(tMenu[u8SelectedFuncID].szFuncName, 6, u8CurrentFuncStartY);
}
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}
static void StringWrite(const char *string, u16 u16StartPosX, u16 u16StartPosY)
{
UINT8 space = 2;
UINT16 st_x = u16StartPosX;
UINT16 st_y = u16StartPosY;
int font_cnt;
const UINT16 *font_data;
for (font_cnt = 0; (font_cnt < 10) || (*string != '\0'); font_cnt++)
{
if (*string != '\0')
{
font_data = fonttable[*string];
aDSC_transparent_write_rgb565(font_data, st_x + (space + 6) *
font_cnt, st_y, 0xffff, 0x0000);
// aDSC_fmemory_write_rgb565(font_data, st_x + (space + 4) * font_cnt, st_y);
string++;
}
}
}
/*
static void NumberWrite(int s32Number, u16 u16StartPosX, u16 u16StartPosY)
{
u8 u8String[16], u8StrTemp[16];
u8 i = 0, j;
while ((s32Number / 10 != 0) && (i <= 15))
{
u8StrTemp[i++] = s32Number % 10 + '0';
s32Number /= 10;
}
u8StrTemp[i++] = s32Number + '0';
u8StrTemp[i] = 0;
for (j = 0; j < i; j++)
{
u8String[j] = u8StrTemp[i - j - 1];
}
u8String[j] = 0;
StringWrite((char *) u8String, u16StartPosX, u16StartPosY);
}
*/
#undef _W_MENUMODE_C_