swf.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:30k
- /*-----------------------------------------------------------------------------
- | @(#) swf.c
- |
- | Keybridge: The storage about the flash movie.
- |
- | THIS SOFTWARE IS THE SOLE PROPRIETY OF SHENZHEN KEYBRIDGE COMMUNICATIONS CO.,
- | LTD. AND CANNOT BE PUBLISHED, MODIFIED, REPRODUCED, OR TRANSMITTED, IN PART OR
- | IN WHOLE, IN ANY FORM WHATSOEVER, WITHOUT THE PRIOR WRITTEN PERMISSION OF
- | SHENZHEN KEYBRIDGE COMMUNICATIONS CO., LTD.
- |
- | COPYRIGHT (C) 2006-2007. SHENZHEN KEYBRIDGE COMMUNICATIONS CO., LTD.
- | ALL RIGHTS RESERVED.
- +----------------------------------------------------------------------------*/
- /*----------------------------------------------------------
- | Include definition below this line
- +----------------------------------------------------------*/
-
- #include "db.h"
- #include "osp.h"
- #include "flash.h"
- #include "string.h"
- #include "gendef.h"
- #include "kb_machblue_client.h"
- #include "swf.h"
- #include "kb_movie.h"
-
- /*----------------------------------------------------------
- | Global variable definition below this line
- +----------------------------------------------------------*/
- /*
- | the chain table saved all the data of the menu flash movie
- */
- static kb_swf_t s_kb_swf_menu,s_kb_swf_logo;
- /*
- | Fucntion Name: KB_FlashRead_Offset
- | Description: Read Data from the Flash memory with offset.
- | Input parameter: secID is the flash memory Section ID(address/(1024*64))
- | Offset is offset of the flash memory address
- | NumberToRead is size of the memory which you want to read
- | Output parameter: Buffer is the data which is fit for the requirement
- | Returen: RET_OK Read success
- | RET_FAIL Read failure
- */
- KB_DBRET KB_FlashRead_Offset( UINT32 secID,UINT32 Offset,UINT8 *Buffer,UINT32 NumberToRead)
- {
- int ar_co = 0,i = 0;
- long tem_size = 0,full_size = 0;
- unsigned char *buff,*buff1;
-
- ar_co = (NumberToRead + Offset)%2;
- if (ar_co == 1)
- full_size = 1 + NumberToRead + Offset;
- else
- full_size = NumberToRead + Offset;
- buff = (unsigned char *)mb_malloc((UINT32)full_size);
- buff1 = (unsigned char *)mb_malloc(65536);
- while(full_size>0)
- {
- if(full_size>65536)
- tem_size = 65536;
- else
- tem_size = full_size;
- if (KB_FlashRead(secID+i, 0, (UINT8 *)buff1,tem_size) != RETOK)
- {
- return RET_FAIL;
- }
- memcpy(buff+i*65536,buff1,tem_size);
- i++;
- full_size = full_size - 65536;
- }
- memcpy(Buffer, buff+Offset,NumberToRead);
- if(KB_OSPFree(buff)!=Ret_OK)
- {
- return RET_FAIL;
- }
- if(KB_OSPFree(buff1)!=Ret_OK)
- {
- return RET_FAIL;
- }
- return RET_OK;
- }
- /*
- | Fucntion Name: kb_swf_deleteData
- | Description: Delete the chain talbe which stored the data of all the menu movie
- | Input parameter: None
- | Output parameter: None
- | Returen: RET_OK free the data of the chain table success
- | RET_FAIL free the data of the chain table failing
- */
- KB_DBRET kb_swf_deleteData(void)
- {
- kb_swf_save_t *kb_swf_1,*kb_swf_2=s_kb_swf_menu.kb_swf;
- while(kb_swf_2!=NULL)
- {
- kb_swf_1=kb_swf_2->pNext;
- if(KB_OSPFree(kb_swf_2->data)!=Ret_OK)
- {
- return RET_FAIL;
- }
- if(KB_OSPFree(kb_swf_2)!=Ret_OK)
- {
- return RET_FAIL;
- }
- kb_swf_2=kb_swf_1;
- }
- s_kb_swf_menu.kb_swf=NULL;
- s_kb_swf_menu.count=0;
-
- return RET_OK;
- }
- /*
- | Fucntion Name: kb_swf_createData
- | Description: Create a node which would be inserted into the chain list which the menu movie were
- | stored.
- | Input parameter: name is the name of the current movie.
- | size is the size of the current movie
- | pdata is the data of hte current movie
- | Output parameter: None
- | Returen: None
- */
- kb_swf_save_t*kb_swf_createData(kb_movie_name name,unsigned long size,unsigned char *pData,unsigned char version)
- {
- kb_swf_save_t * p_swf;
-
- p_swf=(kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
- p_swf->name = name;
- p_swf->size = size;
- p_swf->version = version;
- p_swf->data = pData;//KB_OSPMalloc(p_swf->size);
- //memcpy(p_swf->data, pData, p_swf->size);
- p_swf->pNext = NULL;
-
- return p_swf;
- }
- /*
- | Fucntion Name: kb_swf_insertMenuData
- | Description: Inert the node into the chain list which the data of the menu movie were stored.
- | Input parameter: pData is the data of the node which would be inserted.
- | Output parameter: None
- | Returen: None
- */
- void kb_swf_insertMenuData(kb_swf_save_t * pData)
- {
- kb_swf_save_t *p1,*p2;
-
- if (s_kb_swf_menu.kb_swf == NULL)
- {
- s_kb_swf_menu.count = 0;
- s_kb_swf_menu.kb_swf = pData;
- s_kb_swf_menu.kb_swf->pNext = NULL;
- }
- else
- {
- p1=s_kb_swf_menu.kb_swf;
- while (p1 ->pNext != NULL)
- {
- p2 = p1 ->pNext;
- p1 = p2;
- }
- p1 ->pNext = pData;
- }
- s_kb_swf_menu.count += 1;
- }
- /*
- | Fucntion Name: kb_Swf_MenuInit
- | Description: Initializing the Global variable Chain List before using the
- | data of the flash movie which were saved in the Flash Memory
- | Input parameter: None
- | Output parameter: None
- | Returen: RET_OK get the data of the flash movie success
- | RET_FAIL get the data of the flash movie failing
- | ___________________________________________________________________________________________________________________________________________________________
- ||version(1byte)|data size(4bytes)|swf count(1byte)|name1(1byte) |size1(4bytes)|swf1(size1 bytes) |...... |name(count-1)(1byte)|size(count-1)(4bytes)|swf(count-1)(size(count-1) bytes)|
- ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
- */
- KB_DBRET kb_Swf_MenuInit(void)
- {
- #if 1
- kb_swf_save_t* p_swf;
- unsigned char version,index,count,name;
- unsigned char *pFlash=NULL,*pData=NULL,*pSwf=NULL;
- unsigned long size,size1,size2,size3,size4;
- unsigned long secID=MENU_FLASH_MOVIE_ADDRESS_START,readBytes;
- pFlash=KB_FlashGetSectorAddr(MENU_FLASH_MOVIE_ADDRESS_START);
- if(pFlash==NULL)
- return RET_FAIL;
- size1=*(pFlash+1);
- size2=*(pFlash+2);
- size3=*(pFlash+3);
- size4=*(pFlash+4);
- size=((size1<<24)&0xFF000000)|((size2<<16)&0xFF0000)|((size3<<8)&0xFF00)|(size4&0xFF);
- if((size%65536)!=0)
- size=(size/65536+1)*65536;
- pData=(unsigned char*)mb_malloc(size);
- if(pData==NULL)
- return RET_FAIL;
-
- while(size>0)
- {
- if(size>=64*1024)
- readBytes=64*1024;
- else
- readBytes=size;
-
- if(KB_FlashRead(secID,0,pData+(secID-MENU_FLASH_MOVIE_ADDRESS_START)*64*1024,readBytes)!=RETOK)
- return RET_FAIL;
- secID+=1;
- size-=readBytes;
- }
- if(kb_swf_deleteData()!=RET_OK)
- return RET_FAIL;
- pFlash=pData;
- version=*pFlash;
- pFlash+=5;
- count=*pFlash++;
-
- for(index=0;index<count;index++)
- {
- name=*pFlash++;
-
- size1=*pFlash++;
- size2=*pFlash++;
- size3=*pFlash++;
- size4=*pFlash++;
- size=((size1<<24)&0xFF000000)|((size2<<16)&0xFF0000)|((size3<<8)&0xFF00)|(size4&0xFF);
-
- pSwf=(unsigned char*)mb_malloc(size);
- if(pSwf==NULL)
- return RET_FAIL;
- mb_memcpy(pSwf,pFlash,size);
-
- p_swf=kb_swf_createData(name,size,pSwf,version);
- kb_swf_insertMenuData(p_swf);
- pFlash+=size;
- }
- mb_free(pData);
-
- return RET_OK;
- #else
- int i;
- unsigned char name=0;
- unsigned char buff[4],count;
- unsigned char *pData;
- unsigned long size,offset = 2;
- kb_swf_save_t* p_swf;
- unsigned char version = KB_SWF_VersionGet(1);
- if(kb_swf_deleteData()!=RET_OK)
- {
- return RET_FAIL;
- }
-
- if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,1,&count,1)!=RET_OK)
- {
- return RET_FAIL;
- }
-
- for(i = 0; i<count; i++)
- {
- if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)&name,1)!=RET_OK)
- {
- return RET_FAIL;
- }
- offset += 1;
- if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)buff,4)!=RET_OK)
- {
- return RET_FAIL;
- }
- size = (buff[0]<<24)+(buff[1]<<16)+(buff[2]<<8)+buff[3];
- offset += 4;
- pData = KB_OSPMalloc((UINT32)size);
-
- if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)pData,size)!=RET_OK)
- {
- return RET_FAIL;
- }
- offset += size;
-
- p_swf = kb_swf_createData(name,size,pData,version);
- kb_swf_insertMenuData(p_swf);
- if(KB_OSPFree(pData)!=Ret_OK)
- {
- return RET_FAIL;
- }
- }
- return RET_OK;
- #endif
- }
- /*
- | Fucntion Name: KB_Swf_GetLogo
- | Description: Get the movie data of the logo
- | Input parameter: None
- | Output parameter: pData is the pointer point to the first address of
- | the movie date of the logo
- | size is the size of the movie date(Byte)
- | Returen: RET_OK get the data of the flash movie success
- | RET_FAIL get the data of the flash movie failing
- */
- unsigned char * KB_Swf_GetLogo( unsigned long *sizeMovie)
- {
- *sizeMovie = s_kb_swf_logo.kb_swf->size;
- return s_kb_swf_logo.kb_swf->data;
- }
- unsigned char * KB_Swf_GetLogoSound(unsigned long *sizeSound)
- {
- *sizeSound = s_kb_swf_logo.kb_swf->pNext->size;
- return s_kb_swf_logo.kb_swf->pNext->data;
- }
- /*
- KB_DBRET KB_Swf_GetLogo(unsigned char **pDataMovie, unsigned long *sizeMovie)
- {
- kb_swf_save_t *p_swf,*p1;
-
- KB_OSPFree(*pDataMovie);
- p_swf=s_kb_swf_logo.kb_swf;
- *sizeMovie = p_swf->size;
- *pDataMovie=KB_OSPMalloc((UINT32)*sizeMovie);
- memcpy(*pDataMovie, p1->data, *sizeMovie);
- return RET_OK;
- }
- KB_DBRET KB_Swf_GetLogoSound(unsigned char **pDataSound, unsigned long *sizeSound)
- {
- kb_swf_save_t *p_swf;
-
- KB_OSPFree(*pDataSound);
- p_swf=s_kb_swf_logo.kb_swf;
- p_swf = p_swf->pNext;
-
- *sizeSound = p_swf->size;
- *pDataSound=KB_OSPMalloc((UINT32)*sizeSound);
- memcpy(*pDataSound, p_swf->data, *sizeSound);
- return RET_OK;
- }
- */
- /*
- | Fucntion Name: KB_Swf_GetMenuByName
- | Description: Get the movie data from the chain list which the data of
- | all the flash movie are saved
- | Input parameter: name is the name of the flash movie
- | Output parameter: pData is the pointer point to the first address of
- | the date of the flash movie
- | size is the size of the movie date(Byte)
- | Returen: RET_OK get the data of the flash movie success
- | RET_FAIL get the data of the flash movie failing
- */
- unsigned char * KB_Swf_GetMenuByName(kb_movie_name name,unsigned long *size)
- {
- unsigned char version;
- kb_swf_save_t *p_swf,*p1;
-
- p_swf=s_kb_swf_menu.kb_swf;
- p1 = p_swf;
-
- while(p1 != NULL)
- {
- if(p1->name == name)
- {
- break;
- }
- p1 = p1->pNext;
- }
- *size = p1->size;
- return p1->data;
- }
- /*
- | Fucntion Name: kb_swf_initSaveMenu
- | Description:
- | Input parameter: None
- | Output parameter: None
- | Returen: RET_OK save the data of the flash movie success
- | RET_FAIL save the data of the flash movie failing
- | ___________________________________________________________________________________________________________________________________________________________
- ||version(1byte)|data size(4bytes)|swf count(1byte)|name1(1byte) |size1(4bytes)|swf1(size1 bytes) |...... |name(count-1)(1byte)|size(count-1)(4bytes)|swf(count-1)(size(count-1) bytes)|
- ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
- */
- KB_DBRET kb_swf_initSaveMenu(void)
- {
- #if KB_SWF_TEST
- int i = 0,buff;
- long size;
- UINT8 *movie,*p;
- int name;
- unsigned char version,count;
- unsigned long movie_size;
- version = 0;
- count = 21;
-
-
- size = 1+4+1+5*21+movie_main_size+movie_video_list_size+movie_nvod_size+movie_epg_size+movie_search_size
- +movie_searchAll_size+movie_mail_size+movie_mail_popup_size+movie_sys_info_size+movie_help_size+movie_pf_size
- +movie_volume_size+movie_volumeMute_size+movie_popup_size+movie_ota_hint_size+movie_ch_no_size
- +movie_ca_inform_size+movie_dbc_weather_size+movie_dbc_gov_size+movie_swfUpdatePrompt_size+movie_voteMenu_size;
- movie=(UINT8*)mb_malloc(size);
-
- p=movie;
-
- *p++=version;
- *p++=(size>>24)&0xff;
- *p++=(size>>16)&0xff;
- *p++=(size>>8)&0xff;
- *p++=(size)&0xff;
-
- *p++ = count;
-
- name = kb_movie_menu_main;
- *p++ = name;
- movie_size = movie_main_size;//sizeof(movie_main);
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_main, movie_size);
-
- p+=movie_size;
- name = kb_movie_menu_video_list;
- *p++ = name;
- movie_size = movie_video_list_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_video_list, movie_size);
-
- p+= movie_size;
- name = kb_movie_menu_nvod;
- *p++ = name;
- movie_size = movie_nvod_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_nvod, movie_size);
-
- p+=movie_size;
- name = kb_movie_menu_epg;
- *p++ = name;
- movie_size = movie_epg_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_epg, movie_size);
-
- p+=movie_size;
- name = kb_movie_menu_search;
- *p++ = name;
- movie_size = movie_search_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_search, movie_size);
-
- p+=movie_size;
- name = kb_movie_menu_searchAll;
- *p++ = name;
- movie_size = movie_searchAll_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_searchAll, movie_size);
-
- p+=movie_size;
- name = kb_movie_menu_mail;
- *p++ = name;
- movie_size = movie_mail_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_mail, movie_size);
- p+=movie_size;
- name = kb_movie_menu_mail_popup;
- *p++ = name;
- movie_size = movie_mail_popup_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_mail_popup, movie_size);
- p+=movie_size;
- name = kb_movie_menu_sys_info;
- *p++ = name;
- movie_size = movie_sys_info_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_sys_info, movie_size);
- p+=movie_size;
- name = kb_movie_menu_help;
- *p++ = name;
- movie_size = movie_help_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_help, movie_size);
- p+=movie_size;
- name = kb_movie_menu_pf;
- *p++ = name;
- movie_size = movie_pf_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_pf, movie_size);
- p+= movie_size;
- name = kb_movie_menu_volume;
- *p++ = name;
- movie_size = movie_volume_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_volume, movie_size);
- p+=movie_size;
- name = kb_movie_menu_volumeMute;
- *p++ = name;
- movie_size = movie_volumeMute_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_volumeMute, movie_size);
- p+=movie_size;
- name = kb_movie_menu_popup;
- *p++ = name;
- movie_size = movie_popup_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_popup, movie_size);
- p+=movie_size;
- name = kb_movie_menu_otahint;
- *p++ = name;
- movie_size = movie_ota_hint_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_ota_hint, movie_size);
- p+=movie_size;
- name = kb_movie_menu_channle_no;
- *p++ = name;
- movie_size = movie_ch_no_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_ch_no, movie_size);
-
- p+=movie_size;
- name = kb_movie_ca_inform;
- *p++ = name;
- movie_size = movie_ca_inform_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_ca_inform, movie_size);
- p+=movie_size;
- name = kb_movie_dbc_weather;
- *p++ = name;
- movie_size = movie_dbc_weather_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_dbc_weather, movie_size);
-
- p+=movie_size;
- name = kb_movie_dbc_gov;;
- *p++ = name;
- movie_size = movie_dbc_gov_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_dbc_gov, movie_size);
- p+=movie_size;
- name = kb_movie_swfUpdatePrompt;;
- *p++ = name;
- movie_size = movie_swfUpdatePrompt_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_swfUpdatePrompt, movie_size);
-
- p+=movie_size;
- name = kb_movie_vote_voteMenu;
- *p++ = name;
- movie_size = movie_voteMenu_size;
- *p++=(movie_size>>24)&0xff;
- *p++=(movie_size>>16)&0xff;
- *p++=(movie_size>>8)&0xff;
- *p++=(movie_size)&0xff;
- memcpy(p, (UINT8*)movie_voteMenu, movie_size);
- p=movie;
- while(size>65536)
- {
-
- if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- i++;
- size = size-65536;
- p = p+65536;
- }
- buff = size%2;
- if (buff == 1)
- size = size+1;
-
- //if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
- if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- if(KB_OSPFree(movie)!=Ret_OK)
- {
- return RET_FAIL;
- }
- #endif
- return RET_OK;
-
- }
- /*
- | Fucntion Name: kb_swf_initSaveLogo
- | Description: Save data of the logo into the Flash memory
- | Input parameter: None
- | Output parameter:
- | Returen: RET_OK save the data of the logo flash success
- | RET_FAIL save the data of the logo flash failing
- */
- KB_DBRET kb_swf_initSaveLogo(void)
- {
- #if KB_SWF_TEST
- int i = 0,buff;
- long size;
- UINT8 *movie,*p,*p1;
- unsigned char version;
- unsigned long movie_size;
-
- version = 0;
- movie_size = movie_adve_logo_size;
- size = 1+ 4 + movie_adve_logo_size+4+mpegCocacola_size;
- movie=(UINT8*)mb_malloc(size);
- p=movie;
- *p++ = version;
- *p++ = (UINT8)((movie_size>>24)&0xff);
- *p++ = (UINT8)((movie_size>>16)&0xff);
- *p++ = (UINT8)((movie_size>>8)&0xff);
- *p++ = (UINT8)((movie_size)&0xff);
- memcpy(p, (UINT8*)movie_adve_logo, movie_size);
- p+=movie_size;
- *p++=(mpegCocacola_size>>24)&0xff;
- *p++=(mpegCocacola_size>>16)&0xff;
- *p++=(mpegCocacola_size>>8)&0xff;
- *p++=(mpegCocacola_size)&0xff;
- memcpy(p, (UINT8*)mpegCocacola, mpegCocacola_size);
-
- p1=movie;
- while(size>65536)
- {
- if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- i++;
- size = size-65536;
- p1 = p1+65536;
- }
- buff = size%2;
- if (buff == 1)
- size = size+1;
-
- //if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,size)!=RETOK)
- if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,65536)!=RETOK)
- {
- return RET_FAIL;
- }
-
- if(KB_OSPFree(movie)!=Ret_OK)
- {
- return RET_FAIL;
- }
- #endif
- return RET_OK;
-
- }
- /*
- | Fucntion Name: kb_swf_save
- | Description: Save all the menu movie into the Flash memory
- | Input parameter:
- | Output parameter:
- | Returen: RET_OK save the data of the flash movie success
- | RET_FAIL save the data of the flash movie failing
- */
- KB_DBRET kb_swf_save(void)
- {
- #if 1
- if(kb_swf_initSaveLogo()!= RET_OK)
- return RET_FAIL;
- printf("save logo successn");
- #endif
- #if 1
- if(kb_swf_initSaveMenu()!= RET_OK)
- return RET_FAIL;
- printf("save other flash movie successn");
- #endif
- return RET_OK;
- }
- /***
- 调试影片更新功能
- 该功能函数将在main.c 中的main 函数中被调用
- ***/
-
- void KB_SWF_INIT(void)
- {
- kb_swf_save_t *p = NULL;
- printf("nKB_SWF_INIT");
- #if KB_SWF_TEST
- printf("nSave swf to flash...");
- if(kb_swf_save()!=RET_OK)
- {
- printf("n[KB_SWF_INIT]flash movie save failn");
- }
- else
- printf("nSave swf to flash successfully.");
- #endif
- #if 1
- if(kb_swf_initLogo()!=RET_OK)
- {
- printf("n[KB_SWF_INIT]flash logo init failn");
- }
- #endif
- #if 1
- if(kb_Swf_MenuInit()!=RET_OK)
- {
- printf("n[KB_SWF_INIT]KB_Swf_Init failn");
- }
- #endif
- }
- //获取菜单版本号
- //type为0 的时候返回Logo 的版本号
- //type为1 的时候返回Menu 的版本号
- unsigned char KB_SWF_VersionGet(unsigned char type)
- {
- unsigned char version,c[2];
- if(type==0)
- {
- KB_FlashRead(LOGO_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,2);
- }
- else if(type==1)
- {
- KB_FlashRead(MENU_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,2);
- }
- version = c[0];
- return version;
- }
- //影片更新
- KB_DBRET KB_SWF_Update(KB_MovieInfoNode *menuUpdate)
- {
- unsigned char menuUpdateFlag = 0,logoUpdateFlag = 0;
- KB_MovieInfoNode *p = NULL;
- unsigned char version = 0;
-
- p = menuUpdate;
- while(p!=NULL)
- {
- if(p->st_MovieInfo.m_reserve1== kb_movie_adve_logo)
- {
- //更新Logo
- logoUpdateFlag = 1;
- if(kb_swf_updateLogoChainTable(p)!=RET_OK)
- {
- printf("n[KB_SWF_Update]update logo chain table fail !!!");
- return RET_FAIL;
- }
- }
- else
- {
- //更新Menu
-
- if(kb_swf_updateChainTable(p)==RET_OK)
- {
- menuUpdateFlag = 1;
- version = p->st_MovieInfo.m_reserve2;
- }
- }
- p = p->m_pNext;
- }
- if(logoUpdateFlag == 1)
- {
- if(kb_swf_updateLogo(version)!=RET_OK)
- {
- printf("n[KB_SWF_Update]update logo fail !!!");
- //return RET_FAIL;
- }
- }
-
- if(menuUpdateFlag == 1)
- {
- if(kb_swf_updateMenuMovie(version)!=RET_OK)
- {
-
- //return RET_FAIL;
- }
- }
- printf("n[KB_SWF_Update]enter the function named KB_SWF_Update");
-
- return RET_OK;
- }
- /*
- void print_buff(unsigned char *buff,unsigned long size)
- {
- int i ;
- printf("n");
- for(i = 0;i < size;i++)
- {
- printf(" 0x%02x",buff[i]);
- if((i!=0)&&(i%15==0))
- printf("n");
- }
- }
- */
- KB_DBRET kb_swf_updateLogoChainTable(KB_MovieInfoNode *movieInfo)
- {
- kb_swf_save_t *p = NULL;
-
- p = s_kb_swf_logo.kb_swf;
- if(movieInfo->st_MovieInfo.m_reserve3==1)
- {
- p->version = movieInfo->st_MovieInfo.m_reserve2;
- p->name = kb_movie_adve_logo;
- p->size = movieInfo->st_MovieInfo.m_nSize;
- if(KB_OSPFree(p->data)!=Ret_OK)
- {
- printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 1 !!!");
- return RET_FAIL;
- }
- p->data=(UINT8*)mb_malloc(p->size);
- memcpy(p->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, p->size);
- return RET_OK;
- }
- else if (movieInfo->st_MovieInfo.m_reserve3==2)
- {
- //printf("nmovie name is %s",movieInfo->st_MovieInfo.m_strName);
- //print_buff(movieInfo->st_MovieInfo.m_pData,100);
- p = p->pNext;
- p->version = movieInfo->st_MovieInfo.m_reserve2;
- p->name = kb_movie_adve_logoSound;
- p->size = movieInfo->st_MovieInfo.m_nSize;
- if(KB_OSPFree(p->data)!=Ret_OK)
- {
- printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 2 !!!");
- return RET_FAIL;
- }
- p->data=(UINT8*)mb_malloc(p->size);
- memcpy(p->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, p->size);
- return RET_OK; }
- else
- {
- printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 3 !!!");
- return RET_FAIL;
- }
-
- return RET_OK;
- }
- KB_DBRET kb_swf_updateChainTable(KB_MovieInfoNode *movieInfo)
- {
- kb_swf_save_t *kb_swf_save = NULL;
-
- kb_swf_save = s_kb_swf_menu.kb_swf;
- while(kb_swf_save!=NULL)
- {
- if(movieInfo->st_MovieInfo.m_reserve1==kb_swf_save->name)
- {
- break;
- }
- kb_swf_save = kb_swf_save->pNext;
- }
- if(kb_swf_save!=NULL)
- {
- kb_swf_save->name = movieInfo->st_MovieInfo.m_reserve1;
- kb_swf_save->size = movieInfo->st_MovieInfo.m_nSize;
- if(KB_OSPFree(kb_swf_save->data)!=Ret_OK)
- {
- return RET_FAIL;
- }
- kb_swf_save->data=(UINT8*)mb_malloc(kb_swf_save->size);
- memcpy(kb_swf_save->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, kb_swf_save->size);
- return RET_OK;
- }
- else
- {
- return RET_FAIL;
- }
-
- }
- /*
- | ___________________________________________________________________________________________________________________________________________________________
- ||version(1byte)|data size(4bytes)|swf count(1byte)|name1(1byte) |size1(4bytes)|swf1(size1 bytes) |...... |name(count-1)(1byte)|size(count-1)(4bytes)|swf(count-1)(size(count-1) bytes)|
- ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
- */
- KB_DBRET kb_swf_updateMenuMovie(unsigned char version)
- {
- int i = 0,buff;
- unsigned long size = 6,dataSize=0,moiveSize = 0;
- UINT8 *movie,*p;
- kb_swf_save_t *swfUpdate = s_kb_swf_menu.kb_swf;
-
- while(swfUpdate != NULL)
- {
- size+=5;
- size = size + swfUpdate->size;
- swfUpdate = swfUpdate->pNext;
- }
- movie=(UINT8*)mb_malloc(size);
- p=movie;
- *p++=version;
- dataSize=size;
- *p++=(dataSize>>24)&0xff;
- *p++=(dataSize>>16)&0xff;
- *p++=(dataSize>>8)&0xff;
- *p++=(dataSize)&0xff;
-
- *p++ = s_kb_swf_menu.count;
-
- swfUpdate = s_kb_swf_menu.kb_swf;
- while(swfUpdate != NULL)
- {
- //p+=swfUpdate->size;
- *p++ = swfUpdate->name;
- moiveSize = swfUpdate->size;
- *p++=(moiveSize>>24)&0xff;
- *p++=(moiveSize>>16)&0xff;
- *p++=(moiveSize>>8)&0xff;
- *p++=(moiveSize)&0xff;
- memcpy(p, (UINT8*)swfUpdate->data, moiveSize);
- p+=swfUpdate->size;
- swfUpdate = swfUpdate->pNext;
- }
- p=movie;
- while(size>65536)
- {
-
- if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- i++;
- size = size-65536;
- p = p+65536;
- }
- buff = size%2;
- if (buff == 1)
- size = size+1;
-
- //if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
- if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- if(KB_OSPFree(movie)!=Ret_OK)
- {
- return RET_FAIL;
- }
- return RET_OK;
- }
- KB_DBRET kb_swf_updateLogo(unsigned char version)
- {
- int i = 0,buff;
- long size = 0,movieSize = 0;
- UINT8 *movie,*p;
- kb_swf_save_t *swfUpdate = s_kb_swf_logo.kb_swf;
-
- while(swfUpdate != NULL)
- {
- size = size + swfUpdate->size;
- swfUpdate = swfUpdate->pNext;
- }
- size = 1+4+size+4;
- movie=(UINT8*)mb_malloc(size);
- p=movie;
- *p++=version;
- swfUpdate = s_kb_swf_logo.kb_swf;
- while(swfUpdate != NULL)
- {
- movieSize = swfUpdate->size;
- *p++=(movieSize>>24)&0xff;
- *p++=(movieSize>>16)&0xff;
- *p++=(movieSize>>8)&0xff;
- *p++=(movieSize)&0xff;
- memcpy(p, (UINT8*)swfUpdate->data, movieSize);
- p+=movieSize;
- swfUpdate = swfUpdate->pNext;
- }
- p=movie;
- while(size>65536)
- {
-
- if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- i++;
- size = size-65536;
- p = p+65536;
- }
- buff = size%2;
- if (buff == 1)
- size = size+1;
-
- //if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
- if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
- {
- return RET_FAIL;
- }
- if(KB_OSPFree(movie)!=Ret_OK)
- {
- return RET_FAIL;
- }
- return RET_OK;
- }
- KB_DBRET kb_swf_initLogo(void)
- {
- kb_swf_save_t *swfLogo = NULL,*p = NULL,*p1= NULL;
- unsigned char c[6],version;
- unsigned long sizeMovie,sizeSound;
- unsigned char *pData;
- s_kb_swf_logo.count = 2;
- swfLogo =(kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
- s_kb_swf_logo.kb_swf = swfLogo;
- p = swfLogo;
-
- if (KB_FlashRead_Offset(LOGO_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,6) != RETOK)
- {
- return RET_FAIL;
- }
- version = c[0];
- sizeMovie = (c[1]<<24)+(c[2]<<16)+(c[3]<<8)+c[4];
- pData=(unsigned char *)mb_malloc(sizeMovie);
- if(KB_FlashRead_Offset( LOGO_FLASH_MOVIE_ADDRESS_START,5,pData,sizeMovie)!=RET_OK)
- {
- return RET_FAIL;
- }
- p->version = version;
- p->name = kb_movie_adve_logo;
- p->size = sizeMovie;
- p->data=(UINT8*)mb_malloc(sizeMovie);
- memcpy(p->data, pData, sizeMovie);
- p->pNext= NULL;
- KB_OSPFree(pData);
-
- if (KB_FlashRead_Offset(LOGO_FLASH_MOVIE_ADDRESS_START, 1+4+sizeMovie, (UINT8*)c,4) != RETOK)
- {
- return RET_FAIL;
- }
- sizeSound = (c[0]<<24)+(c[1]<<16)+(c[2]<<8)+c[3];
- pData=(unsigned char *)mb_malloc(sizeSound);
- if(KB_FlashRead_Offset( LOGO_FLASH_MOVIE_ADDRESS_START,1+4+sizeMovie+4,pData,sizeSound)!=RET_OK)
- {
- return RET_FAIL;
- }
-
- p1 = (kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
- p1->version = version;
- p1->name = kb_movie_adve_logoSound;
- p1->size = sizeSound;
- p1->data=(UINT8*)mb_malloc(p1->size);
- memcpy(p1->data, (unsigned char*)pData, p1->size);
- p1->pNext = NULL;
- KB_OSPFree(pData);
- p->pNext = p1;
-
- return RET_OK;
- }
- //测试接口
- //构造一个需要更新的练表
- /*
- void kb_test_chainTableMovie(void)
- {
- KB_MovieInfoNode *menuUpdate = NULL,*p=NULL;
- printf("n[kb_test_chainTableMovie]KB_SWF_Update start");
- menuUpdate =(KB_MovieInfoNode*)KB_OSPMalloc(sizeof(KB_MovieInfoNode));
- p = menuUpdate;
- p->st_MovieInfo.m_reserve2 = 3;
- p->st_MovieInfo.m_reserve1 = kb_movie_adve_logo;
- p->st_MovieInfo.m_reserve3 = 1;
- p->st_MovieInfo.m_nSize= update_1_size;
- p->st_MovieInfo.m_pData=(UINT8*)KB_OSPMalloc(update_1_size);
- memcpy(p->st_MovieInfo.m_pData, (unsigned char*)update_1, p->st_MovieInfo.m_nSize);
- p = p->m_pNext;
-
- p = (KB_MovieInfoNode *)KB_OSPMalloc(sizeof(KB_MovieInfoNode));
- p->st_MovieInfo.m_reserve2 = 3;
- p->st_MovieInfo.m_reserve1 = kb_movie_adve_logo;
- p->st_MovieInfo.m_reserve3 = 2;
- p->st_MovieInfo.m_nSize= update_2_size;
- p->st_MovieInfo.m_pData=(UINT8*)KB_OSPMalloc(update_2_size);
- memcpy(p->st_MovieInfo.m_pData, (unsigned char*)update_2, p->st_MovieInfo.m_nSize);
- p->m_pNext = NULL;
-
- if(KB_SWF_Update(menuUpdate)!=RET_OK)
- {
- printf("[nkb_test_chainTableMovie]KB_SWF_Update fail");
- }
- printf("n[nkb_test_chainTableMovie]KB_SWF_Update success");
- }
- */
- /*EOF*/