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

📄 main.c

📁 action mp3 devo,eki e,eikf, kdife l
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*******************************************************************************
*                ACTOS AP
*        main ap of sdk 3.0
*
*        (c) Copyright, Actions Co,Ld.
*             All Right Reserved
*
*******************************************************************************
*/
#include "actos.h"
#include "ap_common.h"

#ifdef  SDK35FD
#include "pdmodule.h"
#endif

//#define    CAMERA    SYSTEM
//#define    CAMERAA    SYSTEMA
#define        MAIN_ITEMCOUNT    6

#define CHGVDD

//用户测试时定义这两个常量
//#define MAIN_DEBUG
//#define YOUR_AP_NAME "ap_voice.AP"

//#define MY_TEST  //for m-record.ap test by ccm

#ifdef MY_TEST
    #define MY_DUMP(string, value) \
    do{ \
        char dump_buf[6]; \
        dump_buf[0] = ','; \
        SetTextPos(0, 16); \
        PutS((string), -1); \
        itoa4((value), &dump_buf[1]); \
        dump_buf[5] = '>'; \
        PutS(dump_buf, 6); \
        UpdateScreen(NULL); \
        while( ap_get_message() != (AP_KEY_EQ| AP_KEY_UP)) {;} \
    }while(0)
#else
   #define MY_DUMP(string, value)
#endif

//进入录音, 但不自动开始
#define RESULT_REC_NOSTART    RESULT_USER1

//进入设定, 关标停留在ADFU
#define RESULT_SYSTEM_ADFU    (RESULT_USER1+1)

void draw_logo(BOOL wait_key_up);
void draw_staff(void);

//global
comval_t g_comval;
extern unsigned char SuppCardFlag;
int counter;

//secrect key sequence
const BYTE sec_tester[] =
{
    AP_KEY_PLAY | AP_KEY_UP,
    AP_KEY_PLAY | AP_KEY_UP,
    AP_KEY_PLAY | AP_KEY_UP,
    AP_KEY_PLAY | AP_KEY_UP,
    AP_KEY_PLAY | AP_KEY_UP,
};
const BYTE sec_staff[] =
{
    AP_KEY_VOLADD | AP_KEY_UP,
    AP_KEY_VOLADD | AP_KEY_UP,
    AP_KEY_VOLADD | AP_KEY_UP,
    AP_KEY_VOLADD | AP_KEY_UP,
    AP_KEY_PLAY | AP_KEY_UP
};

//pic ids
const WORD inactive_id[MAIN_ITEMCOUNT] = {MUSIC, RECORD, VOICE, FM, SYSTEM,DSC};
const WORD active_id[MAIN_ITEMCOUNT] = {MUSICA, RECORDA, VOICEA, FMA, SYSTEMA,DSCOK};

const WORD inactive_id_nofm[MAIN_ITEMCOUNT-1] = {MUSIC, RECORD, VOICE, SYSTEM,CAMERA};
const WORD active_id_nofm[MAIN_ITEMCOUNT-1] = {MUSICA, RECORDA, VOICEA, SYSTEMA,CAMERAA};

//pic position
const BYTE inactive_pos[5] = {3, 3+(21+5), 3+(21+5)*2, 3+(21+5)*3, 3+(21+5)*4};

const BYTE inactive_pos_nofm[5] = {3, 3+(21+5), 3+(21+5)*2, 3+(21+5)*3, 3+(21+5)*4};

//ap id
const WORD ap_id[MAIN_ITEMCOUNT]={RESULT_MUSIC, RESULT_REC_NOSTART,
        RESULT_VOICE, RESULT_RADIO, RESULT_SYSTEM,RESULT_CAMERA};

const WORD ap_id_nofm[MAIN_ITEMCOUNT-1]={RESULT_MUSIC, RESULT_REC_NOSTART,
        RESULT_VOICE, RESULT_SYSTEM,RESULT_CAMERA};

#ifdef MAIN_DEBUG
    char lan_id=0;        //for test, language id
    function_menu_t menu;
    slider_t slider;
//    progress_t progress;

    void test(void);
#endif /* MAIN_DEBUG*/
/*
********************************************************************************
* Description : 初始化系统设置变量
*
* Arguments   :
*
* Returns     :
*
* Notes       :
*
********************************************************************************
*/
void read_var(void)
{
    BOOL result;

    //read comval
    result = VMRead(&g_comval, VM_SYSTEM, sizeof(g_comval));
    ASSERT(result);

    //check if valid
    if(g_comval.magic != MAGIC_COMVAL)
    {
        DUMP_STRING("comval init-ed!");

        //COMVAL_INIT(g_comval);
        GetDefaultComval(&g_comval);

        //write to vm
        result = VMWrite(&g_comval, VM_SYSTEM);
        ASSERT(result);

    }

    if ( g_comval.SuppCard == 1 )
    {
        SuppCardFlag = 1;
    }

    //init ap message
    ap_message_init(&g_comval);
    //sKY_SetBLightColor(g_comval.BLightColor);         //设置背光颜色。for s2 by ccm

    //set contrast just in main ap
    SetContrast(g_comval.DisplayContrast);
}
/*
********************************************************************************
* Description : 主函数
*
* Arguments   :
*
* Returns     : 结果消息或0
*
* Notes       :
*
********************************************************************************
*/
int main(int param)
{
    int active=0;    //当前活动的项目
    int i;
    char key;
    char IsUDisk=0;
    int result;
    int result_bak=0;    //关机时把上次执行的ap记在此
    BOOL need_draw=TRUE;
    BYTE sec_tester_count = 0;
    BYTE sec_staff_count = 0;
    BYTE item_count;        //主界面有几个项目
    BYTE item_index;
    BOOL with_fm;        //存在fm模块
#ifdef  SDK35FD
    usbval_t g_usbval;
#endif
    output8(0x4e,input8(0x4e) | 0x08);

//    output8(0x4e,input8(0x4e)& 0x7f);    //测试用,关Watchdog
    /* enable watch-dog */
    //output8(REG4E_RTC_WATCH_DOG, 0xaa);

#ifdef  CHGVDD
    output8(0x4f,0xa2);      //VCC  set to 3.0V, VDD set to 1.8V first step
#else
    output8(0x4f,0xa5);      //VCC  set to 3.0V, VDD set to 2.1V second step
#endif
    for (counter=0; counter<0x80; counter++){;}

    //ExecAP("config.ap", 0);     //for s2. del by ccm
    //安装驱动
    if(!DRV_Install("UI_S0724.DRV",0)) while(1) {;}    //缺省简体
    if(!DRV_Install("ky_hard.drv",0)) while(1) {;}
    if(!DRV_Install("vm_nanf.drv",0)) while(1) {;}

    //打开lcd
    ClearScreen(NULL);
    UpdateScreen(NULL);        //recommended by chliang
    StandbyScreen(TRUE);
    enable_interrupt();


    read_var();

#ifdef  SDK35FD
    VMRead(&g_usbval, VM_AP_UDISK, sizeof(usbval_t));
#endif

    //安装驱动
    switch (g_comval.langid)
    {
        case 2:
            if(!DRV_Install("UI_T0724.DRV",1)) while(1) {;}
            break;
        case 3:
            if(!DRV_Install("UI_J0724.DRV",1)) while(1) {;}
            break;
        case 4:
            if(!DRV_Install("UI_K0724.DRV",1)) while(1) {;}
            break;
        case LAN_ID_ENGLISH:
            if(!DRV_Install("UI_L0724.DRV",1)) while(1) {;}
            break;
        default:
            break;
    }

    ClearScreen(NULL);
    UpdateScreen(NULL);        //recommended by chliang
    StandbyScreen(TRUE);
    //TODO: support other language

    //初始化资源文件
    res_fp = ResOpen("ui30.res");
    ASSERT( res_fp != NULL);

    //mainap 的启动参数
    //result = param;
    //result =RESULT_FIRST_BOOT;
    result = RESULT_MAIN;

    //clear the message pool
    while(GetSysMsg() != Msg_KeyNull) {;}

    //show logo 1s
    //ResShowLogo(BOOTLOGO);
    //ap_sleep(2);
    draw_logo(FALSE);

#ifdef MAIN_DEBUG
    test();
#endif  /* MAIN_DEBUG*/

    IsUDisk = g_comval.Onlinedev;
    //check if usb plugin
    if(GetUsbCableStatus())
    {
            result = RESULT_UDISK;  //or RESULT_PDDRM
    }

    //check if fm exists, 0表示有fm, 比较奇怪
    with_fm = !g_comval.FMBuildInFlag;
    if(with_fm) item_count = MAIN_ITEMCOUNT;
    else item_count = MAIN_ITEMCOUNT-1;


    while(1)
    {
        output8(0x4e,input8(0x4e) | 0x08);

        //check if ap_main.ap started with param
        if(result == RESULT_NULL || result == RESULT_MAIN)
        {
        //no ap for bakup
            result_bak = RESULT_NULL;
//            result_bak=RESULT_MAIN;            //Start whith main
            //show icons
            if(need_draw)
            {
                ui_auto_update = FALSE;

                //show main logos
                ClearScreen(NULL);
                item_index = active - active % 5;

                for(i=0; i<5 ; i++)
                {
                    if ( item_index + i >= item_count )
                    {
                        break;
                    }
                    if(with_fm)
                    {
                        ResShowPic(inactive_id[item_index + i], inactive_pos[i], 0);
                    }
                    else
                    {
                        ResShowPic(inactive_id_nofm[item_index + i], inactive_pos_nofm[i], 0);
                    }
                }

                //show active logo
                if(with_fm)
                {
                    ResShowPic(active_id[active], inactive_pos[active % 5]-2, 0);
                }
                else
                {
                    ResShowPic(active_id_nofm[active], inactive_pos_nofm[active]-2, 0);
                }

                UpdateScreen(NULL);

                ui_auto_update = TRUE;
                need_draw= FALSE;
            }//need draw

            if(result == RESULT_MAIN)
            {
                char rtc_count=0;

                //start from other ap (user hold mode key)?
                do
                {
                    key = ap_get_message();
                    if(key == AP_KEY_NULL)
                    {
                    }
                    else if((key == AP_MSG_RTC) || (key == AP_MSG_CHARGING))
                    {
                        rtc_count++;
                    }
                    else rtc_count = 0;

                    //check time out
                    if(rtc_count >= 2) break;
                }
                while(key != (AP_KEY_MODE|AP_KEY_UP) );
            }
            else ASSERT(result == RESULT_NULL);    //start form first boot

            key = ap_get_message();

            //check sec key squence, just check key_up
            if(key != AP_MSG_RTC && key != AP_MSG_CHARGING &&
                (key & AP_KEY_UP) != 0)
            {
                //tester
                if(key == sec_tester[sec_tester_count])
                {
                    sec_tester_count++;
                }
                else
                {
                    sec_tester_count = 0;
                }

            //staff
                if(key == sec_staff[sec_staff_count])
                {
                    sec_staff_count++;
                }
                else
                {
                    sec_staff_count = 0;
                }
            }

                //handle msg
            switch( key )
            {
                case AP_KEY_NEXT|AP_KEY_HOLD:
                case AP_KEY_NEXT:
                    if(active < (item_count - 1))
                    {
                        active++;
                    }
                    else
                    {
                        active = 0;
                    }
                    need_draw= TRUE;

                    break;
                case AP_KEY_PREV|AP_KEY_HOLD:
                case AP_KEY_PREV:
                    if(active > 0)
                    {
                        active--;
                    }
                    else
                    {
                        active = item_count - 1;
                    }
                    need_draw= TRUE;

                    break;
                case AP_KEY_MODE | AP_KEY_UP:
                    if(with_fm)
                    {
                        result = ap_id[active];
                    }
                    else
                    {
                        result = ap_id_nofm[active];
                    }

⌨️ 快捷键说明

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