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

📄 clockaclockapi.c

📁 C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码C 代码
💻 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 + -