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

📄 w_menumode.c

📁 bu1566dsp芯片用来处理ov7660或其他30万摄像模组的图像预览.图像拍照(jpeg压缩)
💻 C
📖 第 1 页 / 共 2 页
字号:
#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;

⌨️ 快捷键说明

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