swf.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:30k
源码类别:

DVD

开发平台:

C/C++

  1. /*-----------------------------------------------------------------------------
  2.  | @(#) swf.c
  3.  |
  4.  | Keybridge: The storage about the flash movie.
  5.  |
  6.  | THIS SOFTWARE IS THE SOLE PROPRIETY OF SHENZHEN KEYBRIDGE COMMUNICATIONS CO., 
  7.  | LTD. AND CANNOT BE PUBLISHED, MODIFIED, REPRODUCED, OR TRANSMITTED, IN PART OR 
  8.  | IN WHOLE, IN ANY FORM WHATSOEVER, WITHOUT THE PRIOR WRITTEN PERMISSION OF
  9.  | SHENZHEN KEYBRIDGE COMMUNICATIONS CO., LTD.
  10.  |
  11.  | COPYRIGHT (C) 2006-2007. SHENZHEN KEYBRIDGE COMMUNICATIONS CO., LTD. 
  12.  | ALL RIGHTS RESERVED.
  13.  +----------------------------------------------------------------------------*/
  14.  /*----------------------------------------------------------
  15.  | Include definition below this line
  16.  +----------------------------------------------------------*/
  17.  
  18. #include "db.h"
  19. #include "osp.h"
  20. #include "flash.h"
  21. #include "string.h"
  22. #include "gendef.h"
  23. #include "kb_machblue_client.h"
  24. #include "swf.h"
  25. #include "kb_movie.h"
  26.    
  27. /*----------------------------------------------------------
  28.  | Global  variable definition below this line
  29.  +----------------------------------------------------------*/
  30. /*
  31. | the chain table saved all the data of the menu flash movie
  32. */
  33. static kb_swf_t s_kb_swf_menu,s_kb_swf_logo;
  34. /*
  35. | Fucntion Name:  KB_FlashRead_Offset
  36. | Description: Read Data from the Flash memory with offset.
  37. | Input parameter: secID is the flash memory Section ID(address/(1024*64))
  38. | Offset is offset of the flash memory address
  39. | NumberToRead is size of the memory which you want to read
  40. | Output parameter: Buffer is the data which is fit for the requirement
  41. | Returen: RET_OK Read success
  42. | RET_FAIL  Read failure
  43. */
  44. KB_DBRET KB_FlashRead_Offset( UINT32 secID,UINT32 Offset,UINT8 *Buffer,UINT32 NumberToRead)
  45. {
  46. int ar_co = 0,i = 0;
  47. long tem_size = 0,full_size = 0; 
  48. unsigned char *buff,*buff1;
  49. ar_co = (NumberToRead + Offset)%2;
  50. if (ar_co == 1)
  51. full_size = 1 + NumberToRead + Offset;
  52. else
  53. full_size = NumberToRead + Offset;
  54. buff = (unsigned char *)mb_malloc((UINT32)full_size);
  55. buff1 =  (unsigned char *)mb_malloc(65536);
  56. while(full_size>0)
  57. {
  58. if(full_size>65536)
  59. tem_size = 65536;
  60. else
  61. tem_size = full_size;  
  62. if (KB_FlashRead(secID+i, 0, (UINT8 *)buff1,tem_size) != RETOK)
  63. {
  64. return RET_FAIL;
  65. }
  66. memcpy(buff+i*65536,buff1,tem_size);
  67. i++;
  68. full_size = full_size - 65536;
  69. }
  70. memcpy(Buffer, buff+Offset,NumberToRead);
  71. if(KB_OSPFree(buff)!=Ret_OK)
  72. {
  73. return RET_FAIL;
  74. }
  75. if(KB_OSPFree(buff1)!=Ret_OK)
  76. {
  77. return RET_FAIL;
  78. }
  79. return RET_OK;
  80. }
  81. /*
  82. | Fucntion Name:  kb_swf_deleteData
  83. | Description: Delete the chain talbe which stored the data of all the menu movie
  84. | Input parameter: None
  85. | Output parameter: None
  86. | Returen: RET_OK free the data of the chain table success
  87. | RET_FAIL free the data of the chain table failing
  88. */
  89. KB_DBRET kb_swf_deleteData(void)
  90. {
  91. kb_swf_save_t  *kb_swf_1,*kb_swf_2=s_kb_swf_menu.kb_swf;
  92. while(kb_swf_2!=NULL)
  93. {
  94. kb_swf_1=kb_swf_2->pNext;
  95. if(KB_OSPFree(kb_swf_2->data)!=Ret_OK)
  96. {
  97. return RET_FAIL;
  98. }
  99. if(KB_OSPFree(kb_swf_2)!=Ret_OK)
  100. {
  101. return RET_FAIL;
  102. }
  103. kb_swf_2=kb_swf_1;
  104. }
  105. s_kb_swf_menu.kb_swf=NULL;
  106. s_kb_swf_menu.count=0;
  107. return RET_OK;
  108. }
  109. /*
  110. | Fucntion Name:  kb_swf_createData
  111. | Description: Create a  node which would be inserted into the chain list which the menu movie were
  112. | stored.
  113. | Input parameter: name is the name of the current movie.
  114. | size is the size of the current movie
  115. | pdata is the data of hte current movie
  116. | Output parameter: None
  117. | Returen: None             
  118. */
  119. kb_swf_save_t*kb_swf_createData(kb_movie_name name,unsigned long size,unsigned char *pData,unsigned char version)
  120. {
  121. kb_swf_save_t * p_swf;
  122. p_swf=(kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
  123. p_swf->name = name;
  124. p_swf->size = size;
  125. p_swf->version = version;
  126. p_swf->data = pData;//KB_OSPMalloc(p_swf->size);
  127. //memcpy(p_swf->data, pData, p_swf->size);
  128. p_swf->pNext = NULL;
  129. return p_swf;
  130. }
  131. /*
  132. | Fucntion Name:  kb_swf_insertMenuData
  133. | Description: Inert the node into the chain list which the data of the menu movie were stored.
  134. | Input parameter: pData is the data of the node which would be inserted.
  135. | Output parameter: None
  136. | Returen: None
  137. */
  138. void kb_swf_insertMenuData(kb_swf_save_t * pData)
  139. {
  140. kb_swf_save_t *p1,*p2;
  141. if (s_kb_swf_menu.kb_swf == NULL)
  142. {
  143. s_kb_swf_menu.count = 0;
  144. s_kb_swf_menu.kb_swf = pData;
  145. s_kb_swf_menu.kb_swf->pNext = NULL;
  146. }
  147. else
  148. {
  149. p1=s_kb_swf_menu.kb_swf;
  150. while (p1 ->pNext != NULL)
  151. {
  152. p2 = p1 ->pNext;
  153. p1 = p2;
  154. }
  155. p1 ->pNext = pData;
  156. }  
  157. s_kb_swf_menu.count += 1;
  158. }
  159. /*
  160. | Fucntion Name:  kb_Swf_MenuInit
  161. | Description: Initializing the Global variable Chain List before using the
  162. | data of the flash movie which were saved in the Flash Memory
  163. | Input parameter: None
  164. | Output parameter: None
  165. | Returen: RET_OK get the data of the flash movie success
  166. | RET_FAIL get the data of the flash movie failing
  167. | ___________________________________________________________________________________________________________________________________________________________
  168. ||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)|
  169. ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
  170. */
  171. KB_DBRET kb_Swf_MenuInit(void)
  172. {
  173. #if 1
  174. kb_swf_save_t* p_swf;
  175. unsigned char version,index,count,name;
  176. unsigned char *pFlash=NULL,*pData=NULL,*pSwf=NULL;
  177. unsigned long size,size1,size2,size3,size4;
  178. unsigned long secID=MENU_FLASH_MOVIE_ADDRESS_START,readBytes;
  179. pFlash=KB_FlashGetSectorAddr(MENU_FLASH_MOVIE_ADDRESS_START);
  180. if(pFlash==NULL)
  181. return RET_FAIL;
  182. size1=*(pFlash+1);
  183. size2=*(pFlash+2);
  184. size3=*(pFlash+3);
  185. size4=*(pFlash+4);
  186. size=((size1<<24)&0xFF000000)|((size2<<16)&0xFF0000)|((size3<<8)&0xFF00)|(size4&0xFF);
  187. if((size%65536)!=0)
  188. size=(size/65536+1)*65536;
  189. pData=(unsigned char*)mb_malloc(size);
  190. if(pData==NULL)
  191. return RET_FAIL;
  192. while(size>0)
  193. {
  194. if(size>=64*1024)
  195. readBytes=64*1024;
  196. else
  197. readBytes=size;
  198. if(KB_FlashRead(secID,0,pData+(secID-MENU_FLASH_MOVIE_ADDRESS_START)*64*1024,readBytes)!=RETOK)
  199. return RET_FAIL;
  200. secID+=1;
  201. size-=readBytes;
  202. }
  203. if(kb_swf_deleteData()!=RET_OK)
  204. return RET_FAIL;
  205. pFlash=pData;
  206. version=*pFlash;
  207. pFlash+=5;
  208. count=*pFlash++;
  209. for(index=0;index<count;index++)
  210. {
  211. name=*pFlash++;
  212. size1=*pFlash++;
  213. size2=*pFlash++;
  214. size3=*pFlash++;
  215. size4=*pFlash++;
  216. size=((size1<<24)&0xFF000000)|((size2<<16)&0xFF0000)|((size3<<8)&0xFF00)|(size4&0xFF);
  217. pSwf=(unsigned char*)mb_malloc(size);
  218. if(pSwf==NULL)
  219. return RET_FAIL;
  220. mb_memcpy(pSwf,pFlash,size);
  221. p_swf=kb_swf_createData(name,size,pSwf,version);
  222. kb_swf_insertMenuData(p_swf);
  223. pFlash+=size;
  224. }
  225. mb_free(pData);
  226. return RET_OK;
  227. #else
  228. int i;
  229. unsigned char name=0;
  230. unsigned char buff[4],count;
  231. unsigned char *pData;
  232. unsigned long size,offset = 2;
  233. kb_swf_save_t* p_swf;
  234. unsigned char version = KB_SWF_VersionGet(1);
  235. if(kb_swf_deleteData()!=RET_OK)
  236. {        
  237. return RET_FAIL;
  238. }
  239. if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,1,&count,1)!=RET_OK)
  240. {
  241. return RET_FAIL;
  242. }
  243. for(i = 0; i<count; i++)
  244. {
  245. if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)&name,1)!=RET_OK)
  246. {
  247. return RET_FAIL;
  248. }
  249. offset += 1;
  250. if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)buff,4)!=RET_OK)
  251. {
  252. return RET_FAIL;
  253. }
  254. size = (buff[0]<<24)+(buff[1]<<16)+(buff[2]<<8)+buff[3];
  255. offset += 4;
  256. pData = KB_OSPMalloc((UINT32)size);
  257. if(KB_FlashRead_Offset( MENU_FLASH_MOVIE_ADDRESS_START,offset,(UINT8*)pData,size)!=RET_OK)
  258. {
  259. return RET_FAIL;
  260. }
  261. offset += size;
  262. p_swf = kb_swf_createData(name,size,pData,version);
  263. kb_swf_insertMenuData(p_swf);
  264. if(KB_OSPFree(pData)!=Ret_OK)
  265. {
  266. return RET_FAIL;
  267. }
  268. }
  269. return RET_OK;
  270. #endif
  271. }
  272. /*
  273. | Fucntion Name:  KB_Swf_GetLogo
  274. | Description: Get the movie data of the logo 
  275. | Input parameter: None
  276. | Output parameter: pData is the pointer point to the first address of
  277. | the movie date of the logo
  278. | size is the size of the movie date(Byte)
  279. | Returen: RET_OK get the data of the flash movie success
  280. | RET_FAIL get the data of the flash movie failing
  281. */
  282. unsigned char * KB_Swf_GetLogo( unsigned long *sizeMovie)
  283. {
  284. *sizeMovie = s_kb_swf_logo.kb_swf->size;
  285. return s_kb_swf_logo.kb_swf->data;
  286. }
  287. unsigned char * KB_Swf_GetLogoSound(unsigned long *sizeSound)
  288. {
  289. *sizeSound = s_kb_swf_logo.kb_swf->pNext->size;
  290. return s_kb_swf_logo.kb_swf->pNext->data;
  291. }
  292. /*
  293. KB_DBRET KB_Swf_GetLogo(unsigned char **pDataMovie, unsigned long *sizeMovie)
  294. {
  295. kb_swf_save_t *p_swf,*p1;
  296. KB_OSPFree(*pDataMovie);
  297. p_swf=s_kb_swf_logo.kb_swf;
  298. *sizeMovie = p_swf->size;
  299. *pDataMovie=KB_OSPMalloc((UINT32)*sizeMovie);
  300. memcpy(*pDataMovie, p1->data, *sizeMovie);
  301. return RET_OK;
  302. }
  303. KB_DBRET KB_Swf_GetLogoSound(unsigned char **pDataSound, unsigned long *sizeSound)
  304. {
  305. kb_swf_save_t *p_swf;
  306. KB_OSPFree(*pDataSound);
  307. p_swf=s_kb_swf_logo.kb_swf;
  308. p_swf = p_swf->pNext;
  309. *sizeSound = p_swf->size;
  310. *pDataSound=KB_OSPMalloc((UINT32)*sizeSound);
  311. memcpy(*pDataSound, p_swf->data, *sizeSound);
  312. return RET_OK;
  313. }
  314. */
  315. /*
  316. | Fucntion Name:  KB_Swf_GetMenuByName
  317. | Description: Get the movie data from the chain list which the data of 
  318. | all the flash movie are saved
  319. | Input parameter: name is the name of the flash movie
  320. | Output parameter: pData is the pointer point to the first address of
  321. | the date of the flash movie
  322. | size is the size of the movie date(Byte) 
  323. | Returen: RET_OK get the data of the flash movie success
  324. | RET_FAIL get the data of the flash movie failing
  325. */
  326. unsigned char * KB_Swf_GetMenuByName(kb_movie_name name,unsigned long *size)
  327. {
  328. unsigned char version;
  329. kb_swf_save_t *p_swf,*p1;
  330. p_swf=s_kb_swf_menu.kb_swf;
  331. p1 = p_swf;
  332. while(p1 != NULL)
  333. {
  334. if(p1->name == name)
  335. {
  336. break;
  337. }
  338. p1 = p1->pNext;
  339. }
  340. *size = p1->size;
  341. return p1->data;
  342. }
  343. /*
  344. | Fucntion Name:  kb_swf_initSaveMenu
  345. | Description:
  346. | Input parameter: None
  347. | Output parameter: None
  348. | Returen: RET_OK save the data of the flash movie success
  349. | RET_FAIL save the data of the flash movie failing
  350. | ___________________________________________________________________________________________________________________________________________________________
  351. ||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)|
  352. ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
  353. */
  354.  KB_DBRET kb_swf_initSaveMenu(void)
  355. {     
  356. #if KB_SWF_TEST
  357. int i = 0,buff;  
  358. long size;
  359. UINT8 *movie,*p;
  360. int name;
  361. unsigned char version,count;
  362. unsigned long movie_size;
  363. version = 0;
  364. count = 21; 
  365.  
  366. size  = 1+4+1+5*21+movie_main_size+movie_video_list_size+movie_nvod_size+movie_epg_size+movie_search_size
  367. +movie_searchAll_size+movie_mail_size+movie_mail_popup_size+movie_sys_info_size+movie_help_size+movie_pf_size
  368. +movie_volume_size+movie_volumeMute_size+movie_popup_size+movie_ota_hint_size+movie_ch_no_size
  369. +movie_ca_inform_size+movie_dbc_weather_size+movie_dbc_gov_size+movie_swfUpdatePrompt_size+movie_voteMenu_size;
  370. movie=(UINT8*)mb_malloc(size);
  371. p=movie;
  372. *p++=version;
  373. *p++=(size>>24)&0xff;
  374. *p++=(size>>16)&0xff;
  375. *p++=(size>>8)&0xff;
  376. *p++=(size)&0xff;
  377. *p++ = count;
  378. name  = kb_movie_menu_main;
  379. *p++ = name;
  380. movie_size = movie_main_size;//sizeof(movie_main);
  381. *p++=(movie_size>>24)&0xff;
  382. *p++=(movie_size>>16)&0xff;
  383. *p++=(movie_size>>8)&0xff;
  384. *p++=(movie_size)&0xff;
  385. memcpy(p, (UINT8*)movie_main, movie_size);
  386. p+=movie_size;
  387. name = kb_movie_menu_video_list;
  388. *p++ = name;
  389. movie_size = movie_video_list_size;
  390. *p++=(movie_size>>24)&0xff;
  391. *p++=(movie_size>>16)&0xff;
  392. *p++=(movie_size>>8)&0xff;
  393. *p++=(movie_size)&0xff;
  394. memcpy(p, (UINT8*)movie_video_list, movie_size);
  395. p+= movie_size;
  396. name = kb_movie_menu_nvod;
  397. *p++ = name;
  398. movie_size = movie_nvod_size;
  399. *p++=(movie_size>>24)&0xff;
  400. *p++=(movie_size>>16)&0xff;
  401. *p++=(movie_size>>8)&0xff;
  402. *p++=(movie_size)&0xff;
  403. memcpy(p, (UINT8*)movie_nvod, movie_size);
  404. p+=movie_size;
  405. name  = kb_movie_menu_epg;
  406. *p++ = name;
  407. movie_size = movie_epg_size;
  408. *p++=(movie_size>>24)&0xff;
  409. *p++=(movie_size>>16)&0xff;
  410. *p++=(movie_size>>8)&0xff;
  411. *p++=(movie_size)&0xff;
  412. memcpy(p, (UINT8*)movie_epg, movie_size);
  413. p+=movie_size;
  414. name = kb_movie_menu_search;
  415. *p++ = name;
  416. movie_size = movie_search_size;
  417. *p++=(movie_size>>24)&0xff;
  418. *p++=(movie_size>>16)&0xff;
  419. *p++=(movie_size>>8)&0xff;
  420. *p++=(movie_size)&0xff;
  421. memcpy(p, (UINT8*)movie_search, movie_size);
  422.  
  423. p+=movie_size;
  424. name = kb_movie_menu_searchAll;
  425. *p++ = name;
  426. movie_size = movie_searchAll_size;
  427. *p++=(movie_size>>24)&0xff;
  428. *p++=(movie_size>>16)&0xff;
  429. *p++=(movie_size>>8)&0xff;
  430. *p++=(movie_size)&0xff;
  431. memcpy(p, (UINT8*)movie_searchAll, movie_size);
  432.  
  433. p+=movie_size;
  434. name = kb_movie_menu_mail;
  435. *p++ = name;
  436. movie_size = movie_mail_size;
  437. *p++=(movie_size>>24)&0xff;
  438. *p++=(movie_size>>16)&0xff;
  439. *p++=(movie_size>>8)&0xff;
  440. *p++=(movie_size)&0xff;
  441. memcpy(p, (UINT8*)movie_mail, movie_size);
  442. p+=movie_size;
  443. name = kb_movie_menu_mail_popup;
  444. *p++ = name;
  445. movie_size = movie_mail_popup_size;
  446. *p++=(movie_size>>24)&0xff;
  447. *p++=(movie_size>>16)&0xff;
  448. *p++=(movie_size>>8)&0xff;
  449. *p++=(movie_size)&0xff;
  450. memcpy(p, (UINT8*)movie_mail_popup, movie_size);
  451. p+=movie_size;
  452. name = kb_movie_menu_sys_info;
  453. *p++ = name;
  454. movie_size = movie_sys_info_size;
  455. *p++=(movie_size>>24)&0xff;
  456. *p++=(movie_size>>16)&0xff;
  457. *p++=(movie_size>>8)&0xff;
  458. *p++=(movie_size)&0xff;
  459. memcpy(p, (UINT8*)movie_sys_info, movie_size);
  460. p+=movie_size;
  461. name = kb_movie_menu_help;
  462. *p++ = name;
  463. movie_size = movie_help_size;
  464. *p++=(movie_size>>24)&0xff;
  465. *p++=(movie_size>>16)&0xff;
  466. *p++=(movie_size>>8)&0xff;
  467. *p++=(movie_size)&0xff;
  468. memcpy(p, (UINT8*)movie_help, movie_size);
  469. p+=movie_size;
  470. name = kb_movie_menu_pf;
  471. *p++ = name;
  472. movie_size = movie_pf_size;
  473. *p++=(movie_size>>24)&0xff;
  474. *p++=(movie_size>>16)&0xff;
  475. *p++=(movie_size>>8)&0xff;
  476. *p++=(movie_size)&0xff;
  477. memcpy(p, (UINT8*)movie_pf, movie_size);
  478. p+= movie_size;
  479. name  = kb_movie_menu_volume;
  480. *p++ = name;
  481. movie_size = movie_volume_size;
  482. *p++=(movie_size>>24)&0xff;
  483. *p++=(movie_size>>16)&0xff;
  484. *p++=(movie_size>>8)&0xff;
  485. *p++=(movie_size)&0xff;
  486. memcpy(p, (UINT8*)movie_volume, movie_size);
  487. p+=movie_size;
  488. name  = kb_movie_menu_volumeMute;
  489. *p++ = name;
  490. movie_size = movie_volumeMute_size;
  491. *p++=(movie_size>>24)&0xff;
  492. *p++=(movie_size>>16)&0xff;
  493. *p++=(movie_size>>8)&0xff;
  494. *p++=(movie_size)&0xff;
  495. memcpy(p, (UINT8*)movie_volumeMute, movie_size);
  496. p+=movie_size;
  497. name = kb_movie_menu_popup;
  498. *p++ = name;
  499. movie_size = movie_popup_size;
  500. *p++=(movie_size>>24)&0xff;
  501. *p++=(movie_size>>16)&0xff;
  502. *p++=(movie_size>>8)&0xff;
  503. *p++=(movie_size)&0xff;
  504. memcpy(p, (UINT8*)movie_popup, movie_size);
  505. p+=movie_size;
  506. name = kb_movie_menu_otahint;
  507. *p++ = name;
  508. movie_size = movie_ota_hint_size;
  509. *p++=(movie_size>>24)&0xff;
  510. *p++=(movie_size>>16)&0xff;
  511. *p++=(movie_size>>8)&0xff;
  512. *p++=(movie_size)&0xff;
  513. memcpy(p, (UINT8*)movie_ota_hint, movie_size);
  514. p+=movie_size;
  515. name = kb_movie_menu_channle_no;
  516. *p++ = name;
  517. movie_size = movie_ch_no_size;
  518. *p++=(movie_size>>24)&0xff;
  519. *p++=(movie_size>>16)&0xff;
  520. *p++=(movie_size>>8)&0xff;
  521. *p++=(movie_size)&0xff;
  522. memcpy(p, (UINT8*)movie_ch_no, movie_size);
  523. p+=movie_size;
  524. name = kb_movie_ca_inform;
  525. *p++ = name;
  526. movie_size = movie_ca_inform_size;
  527. *p++=(movie_size>>24)&0xff;
  528. *p++=(movie_size>>16)&0xff;
  529. *p++=(movie_size>>8)&0xff;
  530. *p++=(movie_size)&0xff;
  531. memcpy(p, (UINT8*)movie_ca_inform, movie_size);
  532. p+=movie_size;
  533. name = kb_movie_dbc_weather;
  534. *p++ = name;
  535. movie_size = movie_dbc_weather_size;
  536. *p++=(movie_size>>24)&0xff;
  537. *p++=(movie_size>>16)&0xff;
  538. *p++=(movie_size>>8)&0xff;
  539. *p++=(movie_size)&0xff;
  540. memcpy(p, (UINT8*)movie_dbc_weather, movie_size);
  541. p+=movie_size;
  542. name = kb_movie_dbc_gov;;
  543. *p++ = name;
  544. movie_size = movie_dbc_gov_size;
  545. *p++=(movie_size>>24)&0xff;
  546. *p++=(movie_size>>16)&0xff;
  547. *p++=(movie_size>>8)&0xff;
  548. *p++=(movie_size)&0xff;
  549. memcpy(p, (UINT8*)movie_dbc_gov, movie_size);
  550. p+=movie_size;
  551. name = kb_movie_swfUpdatePrompt;;
  552. *p++ = name;
  553. movie_size = movie_swfUpdatePrompt_size;
  554. *p++=(movie_size>>24)&0xff;
  555. *p++=(movie_size>>16)&0xff;
  556. *p++=(movie_size>>8)&0xff;
  557. *p++=(movie_size)&0xff;
  558. memcpy(p, (UINT8*)movie_swfUpdatePrompt, movie_size);
  559. p+=movie_size;
  560. name = kb_movie_vote_voteMenu;
  561. *p++ = name;
  562. movie_size = movie_voteMenu_size;
  563. *p++=(movie_size>>24)&0xff;
  564. *p++=(movie_size>>16)&0xff;
  565. *p++=(movie_size>>8)&0xff;
  566. *p++=(movie_size)&0xff;
  567. memcpy(p, (UINT8*)movie_voteMenu, movie_size);
  568. p=movie;
  569. while(size>65536)
  570. {
  571. if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  572. {
  573. return RET_FAIL;
  574. }
  575. i++;
  576. size = size-65536;
  577. p = p+65536;
  578. }
  579. buff = size%2;
  580. if (buff == 1)
  581. size = size+1;
  582. //if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
  583. if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  584. {
  585. return RET_FAIL;
  586. }
  587. if(KB_OSPFree(movie)!=Ret_OK)
  588. {
  589. return RET_FAIL;
  590. }
  591. #endif
  592. return  RET_OK;
  593. }
  594. /*
  595. | Fucntion Name:  kb_swf_initSaveLogo
  596. | Description: Save data of the logo into the Flash memory
  597. | Input parameter: None
  598. | Output parameter:
  599. | Returen: RET_OK save the data of the logo flash success
  600. | RET_FAIL save the data of the logo flash failing
  601. */
  602.  KB_DBRET kb_swf_initSaveLogo(void)
  603. {
  604. #if KB_SWF_TEST
  605. int i = 0,buff;
  606. long size;
  607. UINT8 *movie,*p,*p1;
  608. unsigned char version;
  609. unsigned long movie_size;
  610. version = 0;
  611. movie_size  = movie_adve_logo_size;
  612. size  = 1+ 4 + movie_adve_logo_size+4+mpegCocacola_size;
  613. movie=(UINT8*)mb_malloc(size);
  614. p=movie;
  615. *p++ = version;
  616. *p++ = (UINT8)((movie_size>>24)&0xff);
  617. *p++ = (UINT8)((movie_size>>16)&0xff);
  618. *p++ = (UINT8)((movie_size>>8)&0xff);
  619. *p++ = (UINT8)((movie_size)&0xff);
  620. memcpy(p, (UINT8*)movie_adve_logo, movie_size);
  621. p+=movie_size;
  622. *p++=(mpegCocacola_size>>24)&0xff;
  623. *p++=(mpegCocacola_size>>16)&0xff;
  624. *p++=(mpegCocacola_size>>8)&0xff;
  625. *p++=(mpegCocacola_size)&0xff;
  626. memcpy(p, (UINT8*)mpegCocacola, mpegCocacola_size);
  627. p1=movie;
  628. while(size>65536)
  629. {
  630. if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,65536)!=RETOK)
  631. {
  632. return RET_FAIL;
  633. }
  634. i++;
  635. size = size-65536;
  636. p1 = p1+65536;
  637. }
  638. buff = size%2;
  639. if (buff == 1)
  640. size = size+1;
  641. //if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,size)!=RETOK)
  642. if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p1,65536)!=RETOK)
  643. {
  644. return RET_FAIL;
  645. }
  646. if(KB_OSPFree(movie)!=Ret_OK)
  647. {
  648. return RET_FAIL;
  649. }
  650. #endif
  651. return  RET_OK;
  652. }
  653. /*
  654. | Fucntion Name:  kb_swf_save
  655. | Description: Save all the menu movie into the Flash memory
  656. | Input parameter:
  657. | Output parameter:
  658. | Returen: RET_OK save the data of the flash movie success
  659. | RET_FAIL save the data of the flash movie failing
  660. */
  661. KB_DBRET kb_swf_save(void)
  662. {
  663. #if 1
  664. if(kb_swf_initSaveLogo()!= RET_OK)
  665. return RET_FAIL;
  666. printf("save logo successn");
  667. #endif
  668. #if 1
  669. if(kb_swf_initSaveMenu()!= RET_OK)
  670. return RET_FAIL;
  671. printf("save other flash movie successn");
  672. #endif
  673. return RET_OK;
  674. }
  675. /***
  676. 调试影片更新功能
  677. 该功能函数将在main.c 中的main 函数中被调用
  678. ***/
  679.    
  680. void KB_SWF_INIT(void)
  681. {
  682. kb_swf_save_t  *p = NULL;
  683. printf("nKB_SWF_INIT");
  684. #if KB_SWF_TEST
  685. printf("nSave swf to flash...");
  686. if(kb_swf_save()!=RET_OK)      
  687. {
  688. printf("n[KB_SWF_INIT]flash movie save failn");
  689. }
  690. else
  691. printf("nSave swf to flash successfully.");
  692. #endif
  693. #if 1
  694. if(kb_swf_initLogo()!=RET_OK)
  695. {
  696. printf("n[KB_SWF_INIT]flash logo init failn");
  697. }
  698. #endif
  699. #if 1
  700. if(kb_Swf_MenuInit()!=RET_OK)  
  701. {
  702. printf("n[KB_SWF_INIT]KB_Swf_Init failn");
  703. }
  704. #endif
  705. }   
  706. //获取菜单版本号
  707. //type为0  的时候返回Logo  的版本号
  708. //type为1  的时候返回Menu 的版本号
  709. unsigned char KB_SWF_VersionGet(unsigned char type)
  710. {
  711. unsigned char version,c[2];
  712. if(type==0)
  713. {
  714. KB_FlashRead(LOGO_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,2);
  715. }
  716. else if(type==1)
  717. {
  718. KB_FlashRead(MENU_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,2);
  719. }
  720. version = c[0];
  721. return version;
  722. }
  723. //影片更新
  724. KB_DBRET KB_SWF_Update(KB_MovieInfoNode *menuUpdate)
  725. {
  726. unsigned char menuUpdateFlag = 0,logoUpdateFlag = 0;
  727. KB_MovieInfoNode *p = NULL;
  728. unsigned char version = 0;
  729. p = menuUpdate;
  730. while(p!=NULL)
  731. {
  732. if(p->st_MovieInfo.m_reserve1== kb_movie_adve_logo)
  733. {
  734. //更新Logo
  735. logoUpdateFlag = 1;
  736. if(kb_swf_updateLogoChainTable(p)!=RET_OK)
  737. {
  738. printf("n[KB_SWF_Update]update logo chain table fail !!!");
  739. return RET_FAIL;
  740. }
  741. }
  742. else
  743. {
  744. //更新Menu
  745. if(kb_swf_updateChainTable(p)==RET_OK)
  746. {
  747. menuUpdateFlag = 1;
  748. version = p->st_MovieInfo.m_reserve2;
  749. }
  750. }
  751. p = p->m_pNext;
  752. }
  753. if(logoUpdateFlag == 1)
  754. {
  755. if(kb_swf_updateLogo(version)!=RET_OK)
  756. {
  757. printf("n[KB_SWF_Update]update logo fail !!!");
  758. //return RET_FAIL;
  759. }
  760. }
  761. if(menuUpdateFlag == 1)
  762. {
  763. if(kb_swf_updateMenuMovie(version)!=RET_OK)
  764. {
  765. //return RET_FAIL;
  766. }
  767. }
  768. printf("n[KB_SWF_Update]enter the function named KB_SWF_Update");
  769. return RET_OK;
  770. }
  771. /*
  772. void print_buff(unsigned char *buff,unsigned long size)
  773. {
  774. int i ;
  775. printf("n");
  776. for(i = 0;i < size;i++)
  777. {
  778. printf("  0x%02x",buff[i]);
  779. if((i!=0)&&(i%15==0))
  780. printf("n");
  781. }
  782. }
  783. */
  784. KB_DBRET kb_swf_updateLogoChainTable(KB_MovieInfoNode *movieInfo)
  785. {
  786. kb_swf_save_t  *p = NULL;
  787. p = s_kb_swf_logo.kb_swf;
  788. if(movieInfo->st_MovieInfo.m_reserve3==1)
  789. {
  790. p->version = movieInfo->st_MovieInfo.m_reserve2;
  791. p->name = kb_movie_adve_logo;
  792. p->size = movieInfo->st_MovieInfo.m_nSize;
  793. if(KB_OSPFree(p->data)!=Ret_OK)
  794. {
  795. printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 1 !!!");
  796. return RET_FAIL;
  797. }
  798. p->data=(UINT8*)mb_malloc(p->size);
  799. memcpy(p->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, p->size);
  800. return RET_OK;
  801. }
  802. else if (movieInfo->st_MovieInfo.m_reserve3==2)
  803. {
  804. //printf("nmovie name is %s",movieInfo->st_MovieInfo.m_strName);
  805. //print_buff(movieInfo->st_MovieInfo.m_pData,100);
  806. p = p->pNext;
  807. p->version = movieInfo->st_MovieInfo.m_reserve2;
  808. p->name = kb_movie_adve_logoSound;
  809. p->size = movieInfo->st_MovieInfo.m_nSize;
  810. if(KB_OSPFree(p->data)!=Ret_OK)
  811. {
  812. printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 2 !!!");
  813. return RET_FAIL;
  814. }
  815. p->data=(UINT8*)mb_malloc(p->size);
  816. memcpy(p->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, p->size);
  817. return RET_OK; }
  818. else
  819. {
  820. printf("n[kb_swf_updateLogoChainTable]KB_OSPFree fail 3 !!!");
  821. return RET_FAIL;
  822. }
  823. return  RET_OK;
  824. }
  825. KB_DBRET kb_swf_updateChainTable(KB_MovieInfoNode *movieInfo)
  826. {
  827. kb_swf_save_t  *kb_swf_save = NULL;
  828. kb_swf_save = s_kb_swf_menu.kb_swf;
  829. while(kb_swf_save!=NULL)
  830. {
  831. if(movieInfo->st_MovieInfo.m_reserve1==kb_swf_save->name)
  832. {
  833. break;
  834. }
  835. kb_swf_save = kb_swf_save->pNext;
  836. }
  837. if(kb_swf_save!=NULL)
  838. {
  839. kb_swf_save->name = movieInfo->st_MovieInfo.m_reserve1;
  840. kb_swf_save->size = movieInfo->st_MovieInfo.m_nSize;
  841. if(KB_OSPFree(kb_swf_save->data)!=Ret_OK)
  842. {
  843. return RET_FAIL;
  844. }
  845. kb_swf_save->data=(UINT8*)mb_malloc(kb_swf_save->size);
  846. memcpy(kb_swf_save->data, (unsigned char*)movieInfo->st_MovieInfo.m_pData, kb_swf_save->size);
  847. return RET_OK;
  848. }
  849. else
  850. {
  851. return RET_FAIL;
  852. }
  853. }
  854. /*
  855. | ___________________________________________________________________________________________________________________________________________________________
  856. ||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)|
  857. ||____________|______________|______________|____________|___________|_______________|____|__________________|__________________|____________________________|
  858. */
  859. KB_DBRET kb_swf_updateMenuMovie(unsigned char version)
  860. {
  861. int i = 0,buff;
  862. unsigned long size = 6,dataSize=0,moiveSize = 0;
  863. UINT8 *movie,*p;
  864. kb_swf_save_t *swfUpdate = s_kb_swf_menu.kb_swf;
  865. while(swfUpdate != NULL)
  866. {
  867. size+=5;
  868. size = size + swfUpdate->size;
  869. swfUpdate = swfUpdate->pNext;
  870. }
  871. movie=(UINT8*)mb_malloc(size);
  872. p=movie;
  873. *p++=version;
  874. dataSize=size;
  875. *p++=(dataSize>>24)&0xff;
  876. *p++=(dataSize>>16)&0xff;
  877. *p++=(dataSize>>8)&0xff;
  878. *p++=(dataSize)&0xff;
  879. *p++ =  s_kb_swf_menu.count;
  880. swfUpdate = s_kb_swf_menu.kb_swf;
  881. while(swfUpdate != NULL)
  882. {
  883. //p+=swfUpdate->size;
  884. *p++ = swfUpdate->name;
  885. moiveSize = swfUpdate->size;
  886. *p++=(moiveSize>>24)&0xff;
  887. *p++=(moiveSize>>16)&0xff;
  888. *p++=(moiveSize>>8)&0xff;
  889. *p++=(moiveSize)&0xff;
  890. memcpy(p, (UINT8*)swfUpdate->data, moiveSize);
  891. p+=swfUpdate->size;
  892. swfUpdate = swfUpdate->pNext;
  893. }
  894. p=movie;
  895. while(size>65536)
  896. {
  897. if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  898. {
  899. return RET_FAIL;
  900. }
  901. i++;
  902. size = size-65536;
  903. p = p+65536;
  904. }
  905. buff = size%2;
  906. if (buff == 1)
  907. size = size+1;
  908. //if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
  909. if(KB_FlashWrite(MENU_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  910. {
  911. return RET_FAIL;
  912. }
  913. if(KB_OSPFree(movie)!=Ret_OK)
  914. {
  915. return RET_FAIL;
  916. }
  917. return  RET_OK;
  918. }
  919. KB_DBRET kb_swf_updateLogo(unsigned char version)
  920. {
  921. int i = 0,buff;
  922. long size = 0,movieSize = 0;
  923. UINT8 *movie,*p;
  924. kb_swf_save_t *swfUpdate = s_kb_swf_logo.kb_swf;
  925. while(swfUpdate != NULL)
  926. {
  927. size = size + swfUpdate->size;
  928. swfUpdate = swfUpdate->pNext;
  929. }
  930. size = 1+4+size+4; 
  931. movie=(UINT8*)mb_malloc(size);
  932. p=movie;
  933. *p++=version;
  934. swfUpdate = s_kb_swf_logo.kb_swf;
  935. while(swfUpdate != NULL)
  936. {
  937. movieSize = swfUpdate->size;
  938. *p++=(movieSize>>24)&0xff;
  939. *p++=(movieSize>>16)&0xff;
  940. *p++=(movieSize>>8)&0xff;
  941. *p++=(movieSize)&0xff;
  942. memcpy(p, (UINT8*)swfUpdate->data, movieSize);
  943. p+=movieSize;
  944. swfUpdate = swfUpdate->pNext;
  945. }
  946. p=movie;
  947. while(size>65536)
  948. {
  949. if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  950. {
  951. return RET_FAIL;
  952. }
  953. i++;
  954. size = size-65536;
  955. p = p+65536;
  956. }
  957. buff = size%2;
  958. if (buff == 1)
  959. size = size+1;
  960. //if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,size)!=RETOK)
  961. if(KB_FlashWrite(LOGO_FLASH_MOVIE_ADDRESS_START+i,0,(UINT8 *)p,65536)!=RETOK)
  962. {
  963. return RET_FAIL;
  964. }
  965. if(KB_OSPFree(movie)!=Ret_OK)
  966. {
  967. return RET_FAIL;
  968. }
  969. return  RET_OK;
  970. }
  971. KB_DBRET kb_swf_initLogo(void)
  972. {
  973. kb_swf_save_t *swfLogo = NULL,*p = NULL,*p1= NULL;
  974. unsigned char c[6],version;
  975. unsigned long sizeMovie,sizeSound;
  976. unsigned char *pData;
  977. s_kb_swf_logo.count = 2;
  978. swfLogo =(kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
  979. s_kb_swf_logo.kb_swf = swfLogo;
  980. p = swfLogo;
  981. if (KB_FlashRead_Offset(LOGO_FLASH_MOVIE_ADDRESS_START, 0, (UINT8*)c,6) != RETOK)
  982. {
  983. return RET_FAIL;
  984. }
  985. version = c[0];
  986. sizeMovie = (c[1]<<24)+(c[2]<<16)+(c[3]<<8)+c[4];
  987. pData=(unsigned char *)mb_malloc(sizeMovie);
  988. if(KB_FlashRead_Offset( LOGO_FLASH_MOVIE_ADDRESS_START,5,pData,sizeMovie)!=RET_OK)
  989. {
  990. return RET_FAIL;
  991. }
  992. p->version = version;
  993. p->name = kb_movie_adve_logo;
  994. p->size = sizeMovie;
  995. p->data=(UINT8*)mb_malloc(sizeMovie);
  996. memcpy(p->data, pData, sizeMovie);
  997. p->pNext= NULL;
  998. KB_OSPFree(pData);
  999. if (KB_FlashRead_Offset(LOGO_FLASH_MOVIE_ADDRESS_START, 1+4+sizeMovie, (UINT8*)c,4) != RETOK)
  1000. {
  1001. return RET_FAIL;
  1002. }
  1003. sizeSound = (c[0]<<24)+(c[1]<<16)+(c[2]<<8)+c[3];
  1004. pData=(unsigned char *)mb_malloc(sizeSound);
  1005. if(KB_FlashRead_Offset( LOGO_FLASH_MOVIE_ADDRESS_START,1+4+sizeMovie+4,pData,sizeSound)!=RET_OK)
  1006. {
  1007. return RET_FAIL;
  1008. }
  1009. p1 = (kb_swf_save_t *)mb_malloc(sizeof(kb_swf_save_t));
  1010. p1->version = version;
  1011. p1->name = kb_movie_adve_logoSound;
  1012. p1->size = sizeSound;
  1013. p1->data=(UINT8*)mb_malloc(p1->size);
  1014. memcpy(p1->data, (unsigned char*)pData, p1->size);
  1015. p1->pNext = NULL;
  1016. KB_OSPFree(pData);
  1017. p->pNext = p1;
  1018. return  RET_OK;
  1019. }
  1020. //测试接口
  1021. //构造一个需要更新的练表
  1022. /*
  1023. void kb_test_chainTableMovie(void)
  1024. {
  1025. KB_MovieInfoNode *menuUpdate = NULL,*p=NULL;
  1026. printf("n[kb_test_chainTableMovie]KB_SWF_Update start");
  1027. menuUpdate =(KB_MovieInfoNode*)KB_OSPMalloc(sizeof(KB_MovieInfoNode));
  1028. p = menuUpdate;
  1029. p->st_MovieInfo.m_reserve2 = 3;
  1030. p->st_MovieInfo.m_reserve1 = kb_movie_adve_logo;
  1031. p->st_MovieInfo.m_reserve3 = 1;
  1032. p->st_MovieInfo.m_nSize= update_1_size;
  1033. p->st_MovieInfo.m_pData=(UINT8*)KB_OSPMalloc(update_1_size);
  1034. memcpy(p->st_MovieInfo.m_pData, (unsigned char*)update_1, p->st_MovieInfo.m_nSize);
  1035. p = p->m_pNext;
  1036. p = (KB_MovieInfoNode *)KB_OSPMalloc(sizeof(KB_MovieInfoNode));
  1037. p->st_MovieInfo.m_reserve2 = 3;
  1038. p->st_MovieInfo.m_reserve1 = kb_movie_adve_logo;
  1039. p->st_MovieInfo.m_reserve3 = 2;
  1040. p->st_MovieInfo.m_nSize= update_2_size;
  1041. p->st_MovieInfo.m_pData=(UINT8*)KB_OSPMalloc(update_2_size);
  1042. memcpy(p->st_MovieInfo.m_pData, (unsigned char*)update_2, p->st_MovieInfo.m_nSize);
  1043. p->m_pNext = NULL;
  1044. if(KB_SWF_Update(menuUpdate)!=RET_OK)
  1045. {
  1046. printf("[nkb_test_chainTableMovie]KB_SWF_Update fail");
  1047. }
  1048. printf("n[nkb_test_chainTableMovie]KB_SWF_Update success");
  1049. */
  1050. /*EOF*/