📄 clockaclockapi.c
字号:
//********************************************************************
// Name: mjpAPI.c
//
// Copyright (C) Sitronix TECHNOLOGY INC.
// All rights reserved by Sitronix TECHNOLOGY INC.
//
// Project: ST3110
// Author: Terry Wu
// Begin Date: 2008/01/01
// Last update: 2008/04/01
// $Header: $
// Description:
// motion jpg function
//
//
//********************************************************************
#include <intr6502.h>
#include "sys.h"
#include "img_position.h"
#include "ST3110_img_define.h"
#include "PhotoShow.h"
#include "Clock.h"
#pragma codeseg(APP)
uint16 current_file_no;
uint16 Folders,Files;
uint8 sfnPtr[13],lfnPtr[256];
uint8 photo_action,root_order;
uint8 slide_show_enable,slide_time,slide_seq;
uint8 sec_bak,min_bak;
uint8 pho_boarder;
uint8 photo_state;
extern uint16 counter_2HZ;
extern uint8 counter_2HZ_enable;
uint8 slide_bat_lv_idx,cur_bat_lv_icon_idx;
void _digi_clock_init(void);
void _digi_clock_date(void);
void _digi_clock_alarm(void);
uint8 _load_path(uint32 ram_path_adr);
void _PhoShow_init(void);
void _PhoShow_play_next(void);
void _PhoShow_play_last(void);
void _PhotoShow_play_random(void);
void _PhotoShowFrame(void);
void _alarm_set(void);
void _exit_to_PhoBro(void);
void _show_battery(void);
uint8 _get_battery_icon_index(void);
void _digi_clock_init(void)
{
counter_2HZ_enable = FALSE;
photo_state = PHO_STATE_STOP;
API_LcmSetLanguage(CS_BIG5);
API_LcmSetCharForm(CHFS_16x16);
API_LcmSetCharColor(COLOR_WHITE,COLOR_DPF_BG);
API_LcmEnableKeepBackGround();
pho_boarder = API_SysReadValue(RAM_SETTING_ADR,SET_PHO_BOARDER); //0~4
// show BG
API_LcmPutSysImage(IMG_BACKGD,0,0);
//show time
//API_TimeInitAnalogClock(IMG_CLOCK_BACKGD, 9, 26);
API_LcmPutSysImage(IMG_CLOCK_BACKGD,9,26);
//show hour, min, sec hand
sec_bak = API_TimeGetSecond();
min_bak = API_TimeGetMinute();
API_TimeUpdateAnalogClock(9,26,NAND_A_CLK_ADR,COLOR_CLK_BG,API_TimeGetHour(),min_bak,sec_bak,ALOG_DRAW_ALL);
//show date
_digi_clock_date();
//show alarm
_digi_clock_alarm();
//show battery
_show_battery();
slide_bat_lv_idx = _get_battery_icon_index();
cur_bat_lv_icon_idx = _get_battery_icon_index();
//show frame
API_LcmPutSysImage(IMG_PHOTO_FRAME_WHITE+pho_boarder,POS_CLKDCLK_FRAME_X,POS_CLKDCLK_FRAME_Y);
//get first pic and show it
if(_load_path(RAM_PHO_PATH_ADR))
{
_PhoShow_init();
}
else
{
API_LcmPutSysImage(IMG_PHOTO_FRAME,POS_CLKDCLK_FIRPHO_X,POS_CLKDCLK_FIRPHO_Y);
photo_state = PHO_STATE_NOPIC;
}
}
void _digi_clock_date(void)
{
uint8 week;
uint16 clock_year;
uint8 clock_month,clock_day;
clock_year = API_TimeGetYear();
clock_month = API_TimeGetMonth();
clock_day = API_TimeGetDay();
week = API_TimeGetWeek(clock_year,clock_month,clock_day);
//show date BG
API_LcmPutSysImage(IMG_CLOCK_DATE,POS_CLKDCLK_DATE_BG_X,POS_CLKDCLK_DATE_BG_Y);
//show week
API_LcmPutSysImage((IMG_WEEK_0+week),POS_CLKDCLK_WEEK_X,POS_CLKDCLK_WEEK_Y);
//show day
if(clock_day<10)
{
API_LcmPutSysImage((IMG_DAY_0+clock_day),POS_CLKDCLK_DAY0_X,POS_CLKDCLK_DAY0_Y);
}
else
{
API_LcmPutSysImage((IMG_DAY_0+(clock_day/10)),POS_CLKDCLK_DAY1_X,POS_CLKDCLK_DAY1_Y);
API_LcmPutSysImage((IMG_DAY_0+(clock_day%10)),POS_CLKDCLK_DAY2_X,POS_CLKDCLK_DAY2_Y);
}
//show month
API_LcmPutSysImage((IMG_MONTH_01+clock_month-1),POS_CLKDCLK_MON_X,POS_CLKDCLK_MON_Y);
}
void _digi_clock_alarm(void)
{
//show alarm1
if(API_SysReadValue(RAM_SETTING_ADR,SET_ALARM1_EN))
API_LcmPutSysImage(IMG_ALARM_1_ON,POS_CLKDCLK_ALARM1_X,POS_CLKDCLK_ALARM1_Y);
else
API_LcmPutSysImage(IMG_ALARM_1_OFF,POS_CLKDCLK_ALARM1_X,POS_CLKDCLK_ALARM1_Y);
//show alarm2
if(API_SysReadValue(RAM_SETTING_ADR,SET_ALARM2_EN))
API_LcmPutSysImage(IMG_ALARM_2_ON,POS_CLKDCLK_ALARM2_X,POS_CLKDCLK_ALARM2_Y);
else
API_LcmPutSysImage(IMG_ALARM_2_OFF,POS_CLKDCLK_ALARM2_X,POS_CLKDCLK_ALARM2_Y);
}
//***************************************************************************
// Func: uint8 _load_path(uint32 ram_path_adr)
// Input: ram_path_adr : ram address
// Output: result : TRUE
// : FALSE
// Description: load path, assign CUR_FILE_L in RAM_SHARING_ADR and return result
//
//***************************************************************************
uint8 _load_path(uint32 ram_path_adr)
{
uint8 temp,result,root_order,i;
uint16 cur_path,pre_path;
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
cur_path = 0;
pre_path = 0;
temp = 0;
result = 0;
//return to root
while(root_order!=0)
{
API_FATExitFolder();
API_SysWriteValue2B(RAM_CUR_PATH_ADR,root_order*2,0);
root_order--;
}
API_SysWriteValue(RAM_SHARING_ADR,ROOT_ORDER,root_order);
while((cur_path=API_SysReadValue2B(ram_path_adr,(temp++)*2 )) !=0 )
{
if(pre_path == 0) // first layer
{
pre_path = cur_path;
}
else
{
if(API_FATEnterFolder(pre_path))
{
if(root_order<8) //only record 8 order path
API_SysWriteValue2B(RAM_CUR_PATH_ADR,root_order*2,pre_path);
API_SysWriteValue(RAM_SHARING_ADR,ROOT_ORDER,++root_order);
pre_path = cur_path;
}
else
{
//if wrong path return to root
while(root_order!=0)
{
API_FATExitFolder();
API_SysWriteValue2B(RAM_CUR_PATH_ADR,root_order*2,0);
root_order--;
}
API_SysWriteValue(RAM_SHARING_ADR,ROOT_ORDER,root_order);
//clean record path and current path
for(i=0;i<8;i++)
{
API_SysWriteValue2B(ram_path_adr,i*2,0);
API_SysWriteValue2B(RAM_CUR_PATH_ADR,i*2,0);
}
return FALSE;
}
}
}
// cur_path=0, handle pre_path
if(pre_path == 0) //no path, jump photo browser
{
result = FALSE;
}
else
{
result = TRUE;
API_SysWriteValue2B(RAM_SHARING_ADR,CUR_FILE_L,pre_path);
}
return result;
}
void _PhoShow_init(void)
{
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
slide_show_enable = API_SysReadValue(RAM_SETTING_ADR,SET_SLIDE_EN);
slide_time = API_SysReadValue(RAM_SETTING_ADR,SET_SLIDE_TIME); // 0~7
slide_seq = API_SysReadValue(RAM_SETTING_ADR,SET_SLIDE_SEQ); //0:sequence 1:random
photo_action = PHOTOSHOW_ACTION_NONE;
API_FATGetItemAmountInFolder(&Folders,&Files,FF_PHOTO_FORM);
current_file_no = API_SysReadValue2B(RAM_SHARING_ADR,CUR_FILE_L);
if(current_file_no>Files)
current_file_no = Files;
//show frame
//API_PhotoSetSize(POS_CLKDCLK_PHOTO_X,POS_CLKDCLK_PHOTO_Y,POS_CLKDCLK_PHOTO_W,POS_CLKDCLK_PHOTO_H);
//API_PhotoSetEffect(PPM_FS,0);
_PhotoShowFrame();
}
void _PhoShow_play_next(void)
{
if(current_file_no >= Files)
current_file_no = 1;
else
current_file_no++;
//show frame
_PhotoShowFrame();
}
void _PhoShow_play_last(void)
{
if(current_file_no <= 1)
current_file_no = Files;
else
current_file_no--;
//show frame
_PhotoShowFrame();
}
void _PhotoShow_play_random(void)
{
current_file_no = API_SysRandom(Files);
//API_LcmDisableKeepBackGround();
//API_LcmShowNumber2B(current_file_no,0,0);
//show frame
_PhotoShowFrame();
}
void _PhotoShowFrame(void)
{
uint16 width,high;
//show frame
//API_LcmPutSysImage(IMG_PHOTO_FRAME_WHITE+pho_boarder,POS_CLKDCLK_FRAME_X,POS_CLKDCLK_FRAME_Y);
API_PhotoSetFile(FF_PHOTO_FORM,current_file_no);
API_SysWriteValue2B(RAM_SHARING_ADR,CUR_FILE_L,current_file_no);
API_SysWriteValue2B(RAM_PHO_PATH_ADR,root_order*2,current_file_no);
API_FATGetFileName(FF_PHOTO_FORM,current_file_no,sfnPtr,lfnPtr);
if(API_PhotoGetFormID() == FF_ID_JPG)
{
API_PhotoGetWH(FF_PHOTO_FORM,current_file_no,&width,&high);
if((width < POS_CLKDCLK_PHOTO_W) || (high < POS_CLKDCLK_PHOTO_H))
API_LcmClearScreen(POS_CLKDCLK_PHOTO_X,POS_CLKDCLK_PHOTO_Y,POS_CLKDCLK_PHOTO_W,POS_CLKDCLK_PHOTO_H);
API_PhotoSetEffect(PPM_FS,0);
}
else
{
API_LcmPutSysImage(IMG_PHOTO_FRAME_WHITE+pho_boarder,POS_CLKDCLK_FRAME_X,POS_CLKDCLK_FRAME_Y);
API_PhotoSetEffect(PPM_NORMAL,0);
}
if(API_PhotoPlay(POS_CLKDCLK_PHOTO_X,POS_CLKDCLK_PHOTO_Y,POS_CLKDCLK_PHOTO_W,POS_CLKDCLK_PHOTO_H))
{
photo_state = PHO_STATE_PLAY;
}
else
//if(!API_PhotoPlay(POS_CLKDCLK_PHOTO_X,POS_CLKDCLK_PHOTO_Y,POS_CLKDCLK_PHOTO_W,POS_CLKDCLK_PHOTO_H))
{
//reload MPL lib
//API_SysLoadMediaLib();
// set hardware volume
//API_SysSetHardwareVolume(0,0); // DAC set 0
//API_SysSetHardwareVolume(4,10); // Mixer set 10
//set mixer output
//API_SysMixerOutputSelection(MIXER_DAC);
//show default frame
API_LcmPutSysImage(IMG_PHOTO_FRAME_WHITE+pho_boarder,POS_CLKDCLK_FRAME_X,POS_CLKDCLK_FRAME_Y);
API_LcmPutSysImage(IMG_PHOTO_FRAME,POS_CLKDCLK_FIRPHO_X,POS_CLKDCLK_FIRPHO_Y);
photo_state = PHO_STATE_STOP;
// slide show next pic
if(slide_show_enable)
{
counter_2HZ = 0;
counter_2HZ_enable = TRUE;
}
#if DEBUG
API_LcmShowString("photoplay error",10,150);
#endif
}
}
void _alarm_set(void)
{
uint8 alarm_enable[2];
uint8 alarm_hr[2],alarm_min[2];
uint8 hour,minute,alarm_select;
hour = API_TimeGetHour();
minute = API_TimeGetMinute();
alarm_enable[0] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM1_EN);
alarm_enable[1] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM2_EN);
alarm_hr[0] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM1_HOUR);
alarm_hr[1] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM2_HOUR);
alarm_min[0] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM1_MIN);
alarm_min[1] = API_SysReadValue(RAM_SETTING_ADR,SET_ALARM2_MIN);
if(alarm_enable[0] && alarm_enable[1]) // all alarm1 and alarm2 are on
{
if( (uint8)(alarm_hr[0]-hour) < (uint8)(alarm_hr[1]-hour) )//alarm1
{
alarm_select = 1;
}
else if( (alarm_hr[0]-hour) == (alarm_hr[1]-hour) )
{
if( (uint8)(alarm_min[0]-minute) < (uint8)(alarm_min[1]-minute) ) // alarm1
{
alarm_select = 1;
if(alarm_min[0]-minute == 0)
{
alarm_select = 2;
}
}
else if( (alarm_min[0]-minute) == (alarm_min[1]-minute) ) //both
{
alarm_select = 1;
}
else //alarm2
{
if(alarm_min[1]-minute == 0)
{
alarm_select = 1;
}
else
{
alarm_select = 2;
}
}
}
else //alarm2
{
alarm_select = 2;
}
}
else if(alarm_enable[0]) // alarm1
{
alarm_select = 1;
}
else if(alarm_enable[1]) // alarm2
{
alarm_select = 2;
}
if(alarm_enable[0] || alarm_enable[1])
{
API_TimeSetAlertHour(alarm_hr[alarm_select-1]);
API_TimeSetAlertMinute(alarm_min[alarm_select-1]);
}
}
void _exit_to_PhoBro(void)
{
// paint photo browser BG
API_SysWriteValue(RAM_SHARING_ADR,LAST_TASK,TASKID_CLOCKACLOCK);
//set photo browser parameter
#if RECORD_PATH
API_SysWriteValue(RAM_SHARING_ADR,PHO_PAINT_FLAG,3);
#else
API_SysWriteValue(RAM_SHARING_ADR,PHO_PAINT_FLAG,1);
#endif
API_OsSetCurrentTask(TASKID_PHOTOBROWSER);
}
void _show_battery(void)
{
API_LcmPutSysImage(IMG_BATTERY_0+_get_battery_icon_index(),POS_MUSBRO_BATTERY_X,POS_MUSBRO_BATTERY_Y);
}
uint8 _get_battery_icon_index(void)
{
uint8 bat_lv_icon_index;
uint8 bat_lv;
bat_lv = API_SysGetVolLv();
if(BATTERY_LV4 <= bat_lv) // > LV4
bat_lv_icon_index = 4;
else if( BATTERY_LV3 <= bat_lv && bat_lv < BATTERY_LV4) // LV3<= <LV4
bat_lv_icon_index = 3;
else if( BATTERY_LV2 <= bat_lv && bat_lv < BATTERY_LV3) // LV2<= <LV3
bat_lv_icon_index = 2;
else if( BATTERY_LV1 <= bat_lv && bat_lv < BATTERY_LV2) // LV1<= <LV2
bat_lv_icon_index = 1;
else if( BATTERY_LV0 <= bat_lv && bat_lv < BATTERY_LV1) // LV0<= <LV1
bat_lv_icon_index = 0;
return bat_lv_icon_index;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -