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_