📄 videobrowserapi.c
字号:
//********************************************************************
// Name: PhotoBrowserAPI.c
//
// Copyright (C) Sitronix TECHNOLOGY INC.
// All rights reserved by Sitronix TECHNOLOGY INC.
//
// Project: ST3110
// Author: Terry Wu
// Begin Date: 2008/05/19
// Last update:
// $Header: $
// Description:
// PhotoBrowser
//
//
//********************************************************************
#pragma codeseg(APP)
#include "sys.h"
#include "img_position.h"
#include "ST3110_img_define.h"
#include "multilanguage.h"
#include "VideoBrowser.h"
#include <string.h>
void _video_browser_init(void);
void _video_browser_main(void);
void _video_show_name(uint8 result, uint8 index);
void _video_show_item_icon(uint8 type, uint8 index, int16 file_curr_paint_item);
void _video_update_cur_sel_item(void);
uint8 _load_path(uint32 ram_path_adr);
uint8 _load_base_path(uint8 *base_folder_ptr);
uint8 _get_battery_icon_index(void);
uint16 file_curr_sel_item;
uint16 Folders,Files;
uint8 page,file_curr_sel_icon,file_pre_sel_icon;
uint8 root_order,file_repaint_flag,nand_sd_flag,language;
uint8 sfnPtr[13],lfnPtr[256];
uint16 total_page,total_item;
uint8 volume,repeat;
void _video_browser_init(void)
{
uint8 target_file_flag;
uint16 cur_item_amount;
file_repaint_flag = API_SysReadValue(RAM_SHARING_ADR,VID_PAINT_FLAG);
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
nand_sd_flag = API_SysReadValue(RAM_SHARING_ADR,IS_NAND_SD);
volume = API_SysReadValue(RAM_SETTING_ADR,SET_VOLUME); // 0~16
repeat = API_SysReadValue(RAM_SETTING_ADR,SET_REPEAT);
language = API_SysReadValue(RAM_SETTING_ADR,SET_LANGUAGE);
API_FATGetItemAmountInFolder(&Folders,&Files,FF_VIDEO_FORM);
// file_repaint_flag : 0 from VideoEvent--no change page
// file_repaint_flag : 1 from MusicBrowser
// file_repaint_flag : 2 from VideoEvent--change page
// file_repaint_flag : 3 from VideoPlayer
// get file_curr_sel_icon, file_pre_sel_icon ,page
if(file_repaint_flag == 1 || file_repaint_flag == 3)
{
if(file_repaint_flag == 1)
{
#if RECORD_PATH
target_file_flag = _load_path(RAM_VID_PATH_ADR);
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
API_FATGetItemAmountInFolder(&Folders,&Files,FF_VIDEO_FORM);
#else
target_file_flag = FALSE;
_load_base_path(VID_FOLDER_NAME);
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
API_FATGetItemAmountInFolder(&Folders,&Files,FF_VIDEO_FORM);
#endif
}
else
target_file_flag = TRUE;
// calculate file_curr_sel_icon,file_pre_sel_icon,page
if(target_file_flag)
{
file_curr_sel_item = API_SysReadValue2B(RAM_VID_PATH_ADR,root_order*2)+Folders;
cur_item_amount = file_curr_sel_item;
if(root_order) // add return last layer icon
cur_item_amount++;
file_curr_sel_icon = (cur_item_amount-1)%VEDBRO_ITEM;
file_pre_sel_icon = 0;
if((cur_item_amount%VEDBRO_ITEM)!=0 )
page = (cur_item_amount/VEDBRO_ITEM);
else
page = (cur_item_amount/VEDBRO_ITEM)-1;
}
else
{
file_curr_sel_item = 0;
cur_item_amount = 0;
file_curr_sel_icon = 0;
file_pre_sel_icon = 0;
page = 0;
}
// for video browser
API_SysWriteValue(RAM_SHARING_ADR,VID_PAGE,page);
API_SysWriteValue(RAM_SHARING_ADR,VID_CUR_SEL,file_curr_sel_icon);
//API_SysWriteValue(RAM_SHARING_ADR,PHO_PRE_SEL,0);
//API_SysWriteValue(RAM_SHARING_ADR,PHO_PAINT_FLAG,TRUE);
}
else
{
file_curr_sel_icon = API_SysReadValue(RAM_SHARING_ADR,VID_CUR_SEL); //0~9
file_pre_sel_icon = API_SysReadValue(RAM_SHARING_ADR,VID_PRE_SEL); //0~9
page = API_SysReadValue(RAM_SHARING_ADR,VID_PAGE); //0~
}
if(root_order) // add return icon
total_item = Folders+Files+1;
else
total_item = Folders+Files;
if( (total_item)%VEDBRO_ITEM != 0)
total_page = (total_item/VEDBRO_ITEM) + 1;
else
total_page = (total_item/VEDBRO_ITEM);
if(file_repaint_flag)
{
if(language == 2)
API_LcmSetLanguage(CS_GBK);
else
API_LcmSetLanguage(CS_BIG5);
API_LcmSetCharForm(CHFS_16x16);
API_LcmSetCharColor(COLOR_WHITE,COLOR_DPF_BG);
API_LcmEnableKeepBackGround();
}
//show BG and volume ...iocn
if(API_SysReadValue(RAM_SHARING_ADR,LAST_TASK) != TASKID_VIDEOEVENT)
{
API_LcmPutSysImage(IMG_BACKGD,POS_PHOMENU_BG_X,POS_PHOMENU_BG_Y);
API_LcmPutSysImage(IMG_HEADER_VIDEO,POS_MUSBRO_LOG_X,POS_MUSBRO_LOG_X);
API_LcmPutSysImage(IMG_TEXT_HEADER_VIDEO_EN+language,POS_MUSBRO_TITLE_X,POS_MUSBRO_TITLE_Y);
API_LcmPutSysImage((volume/2)+IMG_VOLUME_0,POS_MUSBRO_VOL_X,POS_MUSBRO_VOL_Y);
API_LcmPutSysImage(repeat+IMG_REPEAT_0,POS_MUSBRO_REPEAT_X,POS_MUSBRO_REPEAT_Y);
//show battery icon
API_LcmPutSysImage(IMG_BATTERY_0+_get_battery_icon_index(),POS_MUSBRO_BATTERY_X,POS_MUSBRO_BATTERY_Y);
}
}
// show thumbnail and info
void _video_browser_main(void)
{
uint8 index;
uint8 move_h;
uint16 file_curr_paint_item;
API_LcmEnableKeepBackGround();
//clean previous sel bar first
API_LcmPutSysImage(IMG_NO_SELECT_BAR,POS_MUSBRO_SEL_X,POS_MUSBRO_SEL_Y+(file_pre_sel_icon*POS_MUSBRO_SEL_GAP_Y));
for(index = 0;index<VEDBRO_ITEM;index++)
{
if(root_order) //after second layer
file_curr_paint_item = (page*VEDBRO_ITEM) + index; //item number is from 0
else //root
file_curr_paint_item = (page*VEDBRO_ITEM) + index+1; //item number is from 1
// assign appropriate type
if((file_repaint_flag) || (index == file_curr_sel_icon) ||(index == file_pre_sel_icon) )
{
if(file_curr_paint_item == 0)
{
_video_show_item_icon(ICON_RETURN,index,file_curr_paint_item);
}
//show folder icon and name
else if( (file_curr_paint_item >=1) && (file_curr_paint_item <=Folders))
{
_video_show_item_icon(ICON_FOLDER,index,file_curr_paint_item);
}
else if( (file_curr_paint_item >= Folders+1) && (file_curr_paint_item <= Folders+Files) )
{
// show file icon and name
_video_show_item_icon(ICON_FILE,index,file_curr_paint_item);
}
else //clean sel and thu
{
API_LcmPutSysImage(IMG_NO_SELECT_BAR,POS_MUSBRO_SEL_X,POS_MUSBRO_SEL_Y+(index*POS_MUSBRO_SEL_GAP_Y));
}
}
}
//if there is no folder and file, show amount
if( total_item == 0)
_video_show_item_icon(ICON_NOFILE,0,0);
// show page bar
if(file_repaint_flag)
{
API_LcmPutSysImage(IMG_MOVE_BAR,POS_MUSBRO_MOVBAR_X,POS_MUSBRO_MOVBAR_Y);
if( (page == total_page -1) && (page!=0))
{
API_LcmPutSysImage(IMG_MOVE,POS_MUSBRO_EMOV_X,POS_MUSBRO_EMOV_Y);
}
else
{
move_h = (POS_MUSBRO_MOVEBARLEN/(total_page-1));
API_LcmPutSysImage(IMG_MOVE,POS_MUSBRO_SMOV_X,POS_MUSBRO_SMOV_Y+(move_h*page));
}
}
}
void _video_show_name(uint8 result, uint8 index)
{
if(result == 1) //show short file name
{
//API_LcmSetLanguage(CS_BIG5);
API_LcmShowString(sfnPtr,POS_MUSBRO_FN_X,POS_MUSBRO_FN_Y+(index*POS_MUSBRO_FN_GAP_Y));
}
else if(result == 2) //show long file name
{
API_LcmSetLanguage(CS_UNICODE);
API_LcmShowString(lfnPtr,POS_MUSBRO_FN_X,POS_MUSBRO_FN_Y+(index*POS_MUSBRO_FN_GAP_Y));
if(language == 2)
API_LcmSetLanguage(CS_GBK);
else
API_LcmSetLanguage(CS_BIG5);
}
}
void _video_show_item_icon(uint8 type, uint8 index, int16 file_curr_paint_item)
{
uint8 result;
uint16 string_ptr;
string_ptr = (uint16)lfnPtr;
// show selection bar and clean previous bar
if(index == file_curr_sel_icon)
{
//show select bar
API_LcmPutSysImage(IMG_SELECT_BAR,POS_MUSBRO_SEL_X,POS_MUSBRO_SEL_Y+(index*POS_MUSBRO_SEL_GAP_Y));
// show source icon
if(nand_sd_flag == FAT_IS_NAND)
API_LcmPutSysImage(IMG_SMALL_ICON_HD_NORMAL,POS_MUSBRO_ICON_X,POS_MUSBRO_ICON_Y);
else
API_LcmPutSysImage(IMG_SMALL_ICON_SD_NORMAL,POS_MUSBRO_ICON_X,POS_MUSBRO_ICON_Y);
//clean video number
API_LcmPutSysImage(IMG_NUMBER_BG,POS_MUSBRO_NUM_X,POS_MUSBRO_NUM_Y);
//if(file_curr_paint_item>0)
if(type > ICON_RETURN)
{
// show current number
//API_LcmDisableKeepBackGround();
API_LcmShowNumber2B(file_curr_paint_item,POS_MUSBRO_NUM_X,POS_MUSBRO_NUM_Y);
API_LcmShowNumber2B((Folders+Files),POS_MUSBRO_NUM_X+40,POS_MUSBRO_NUM_Y);
API_LcmShowString(TXT_PHOTO_LINE,POS_MUSBRO_NUM_X+32,POS_MUSBRO_NUM_Y);
//API_LcmEnableKeepBackGround();
}
}
else
{
API_LcmPutSysImage(IMG_NO_SELECT_BAR,POS_MUSBRO_SEL_X,POS_MUSBRO_SEL_Y+(index*POS_MUSBRO_SEL_GAP_Y));
}
if(type == ICON_RETURN)
{
if(index == file_curr_sel_icon)
API_LcmPutSysImage(IMG_FILE_ICON_RETURN_SELECT,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
else
API_LcmPutSysImage(IMG_FILE_ICON_RETURN_NORMAL,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
result = 2;
//strcpy(sfnPtr,TXT_PHOTO_RETURN_EN);
API_SysLoadValue(NAND_TEXT_ADR+(language*TIDX_AMOUNT_OF_ONE_LANGUAGE)+TIDX_RETURN,string_ptr,255);
}
else if(type == ICON_FOLDER)// folder icon
{
if(index == file_curr_sel_icon)
API_LcmPutSysImage(IMG_FILE_ICON_FOLDER_SELECT,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
else
API_LcmPutSysImage(IMG_FILE_ICON_FOLDER_NORMAL,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
//get folder name
result=API_FATGetFolderName(file_curr_paint_item, sfnPtr, lfnPtr);
}
else if(type == ICON_FILE) //video icon
{
if(index == file_curr_sel_icon)
API_LcmPutSysImage(IMG_ICON_VIDEO_ON,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
else
API_LcmPutSysImage(IMG_ICON_VIDEO_NORMAL,POS_MUSBRO_ICO_X,POS_MUSBRO_ICO_Y+(index*POS_MUSBRO_ICO_GAP_Y));
//get file name
result=API_FATGetFileName(FF_VIDEO_FORM,file_curr_paint_item-Folders, sfnPtr, lfnPtr);
}
API_LcmSetStringLenth((POS_MUSBRO_MOVBAR_X-POS_MUSBRO_FN_X)/8);
_video_show_name(result,index);
}
//***************************************************************************
// 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 index,result,root_order,i;
uint16 cur_path,pre_path;
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
cur_path = 0;
pre_path = 0;
index = 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,(index++)*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;
}
uint8 _load_base_path(uint8 *base_folder_ptr)
{
uint8 result,root_order;
uint16 folder_index;
root_order = API_SysReadValue(RAM_SHARING_ADR,ROOT_ORDER);
//return 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);
// get folder index
if(API_FATGetIdxOfSfn(base_folder_ptr,&folder_index) !=2 )
{
#if DEBUG
API_LcmShowString("can't find Music folder",0,0);
return;
#endif
result = FALSE;
}
else
{
// go to Music folder
if(API_FATEnterFolderName(base_folder_ptr))
{
API_SysWriteValue2B(RAM_CUR_PATH_ADR,root_order*2,folder_index);
root_order++;
API_SysWriteValue(RAM_SHARING_ADR,ROOT_ORDER,root_order);
result = TRUE;
}
}
return result;
}
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 + -