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

📄 videobrowserapi.c

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