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

DVD

开发平台:

C/C++

  1. //*****************************************************************************
  2. //FileName:kb_machblue_client.c
  3. //
  4. //Description:Machblue client.
  5. //
  6. //Author:steven
  7. //
  8. //Date: 2006.12.25
  9. //
  10. //Version: v1.0
  11. //*****************************************************************************
  12. #include "stdio.h"
  13. #include "string.h"
  14. #include "rckeymap.h"
  15. #include "epg.h"
  16. #include "av.h"
  17. #include "timer.h"
  18. #include "avplay.h"
  19. #include "StbMoviesInfo.h"
  20. #include "cas21.h"
  21. #include "demand.h"
  22. #include "kb_machblue_client.h"
  23. #include "machblue_client.h"
  24. #include "machblue_init.h" 
  25. #include "machblue_porting_core.h"
  26. #include "kb_machblue_client_data.h"
  27. #include "kb_machblue_client_lc.h"
  28. #include "kb_machblue_client_task.h"
  29. #include "kb_movie.h"
  30.   
  31. //steven
  32. static mb_gfx_ctx_t  _kb_graphicsContext;
  33. static mb_client_t  _kb_client;
  34. static mb_semaphore_t  _kb_mStatusSem,g_kb_clientSem;
  35. static kb_movie_info_t g_kb_adv_swf;
  36. static kb_movie_struct_t  _kb_currentMovie;
  37. static BOOL _kb_movieClear=TRUE;
  38. static kb_movie_play_bak_t _kb_playMovie;
  39. static UINT32  movieCloseTimer = 0xffffffff;
  40. static BOOL  playFirst=FALSE;
  41. static unsigned char  g_kb_movie_playStatus=kb_movie_closed;
  42. //wisco
  43. static kb_lc_attributes_t  _kb_currentpAttribs;
  44. static BOOL _kb_secMovieFlag=FALSE;
  45. static kb_movie_name _kb_secMovieName;
  46. static char*  prompt_message;
  47. static bool playPrgFlag=false;
  48. static int prePrgType=0,prePrgNo=1;
  49. static int _kb_nvod_flag = 0;// 1 NVOD 0 VIDEO OR AUDIO
  50. static UINT32 _kb_number_key_value = 0;
  51. static mb_semaphore_t  g_kb_machblue_pcmStatus;
  52. static kb_movie_sound g_kb_machblue_pcmType=kb_movie_sound_cocacola;
  53. static BOOL g_kb_machblue_pcmFlag=false;
  54. static unsigned long g_kb_machblue_pcmDataHandle=0,g_kb_machblue_pcmSizeHandle=0;
  55. void kb_movie_playStatusSet(unsigned char status)
  56. {
  57. mb_semaphore_wait(_kb_mStatusSem);
  58. g_kb_movie_playStatus=status;
  59. mb_semaphore_signal(_kb_mStatusSem);
  60. }
  61. unsigned char kb_movie_playStatusGet(void)
  62. {
  63. unsigned char status;
  64. mb_semaphore_wait(_kb_mStatusSem);
  65. status=g_kb_movie_playStatus;
  66. mb_semaphore_signal(_kb_mStatusSem);
  67. return status;
  68. }
  69. static void Set_NVOD_Flag(int kb_nvod_flag)
  70. {
  71. _kb_nvod_flag = kb_nvod_flag;
  72. }
  73. static int Get_NVOD_Flag(void)
  74. {
  75. return _kb_nvod_flag;
  76. }
  77. /***
  78. A flash movie is playing on the screen, then play the ca inform flash movie.
  79. ***/
  80. void Play_CA_Inform()
  81. {
  82. kb_machblue_movie_close(TRUE);
  83. _kb_playMovie.name=kb_movie_ca_inform;
  84. _kb_playMovie.flag=TRUE;
  85. }
  86. /**
  87.  * reset current movie information used by machblue client.
  88.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  89.  */
  90. mb_error_t kb_machblue_movie_current_reset(void)
  91. {
  92. if(_kb_currentMovie.data!=NULL)
  93. mb_free(_kb_currentMovie.data);
  94. mb_memset(&_kb_currentMovie,0,sizeof(kb_movie_struct_t));
  95. //kb_movie_playStatusSet(kb_movie_closed);
  96. return MB_SUCCESS;
  97. }
  98. /**
  99.  * play movie by machblue lib.
  100.  * movie_name < movie name which to be activated >
  101.  
  102.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  103.  */
  104.  mb_error_t kb_machblue_movie_play(kb_movie_name movie_name)
  105.  {
  106. unsigned char *pData;
  107. unsigned long size;
  108. if(kb_movie_playStatusGet()!=kb_movie_closed)
  109. {
  110. mb_printf("nPlay movie error: some movie playing");
  111. return MB_FAILURE;
  112. }
  113. else
  114. kb_movie_playStatusSet(kb_movie_processing);
  115. //get movie data
  116. if(movie_name==kb_movie_adve_logo)
  117. {
  118. pData=(unsigned char*)KB_Swf_GetLogo(&size);
  119. }
  120. else if((movie_name==kb_movie_adve_realtime)||
  121. (movie_name==kb_movie_adve_alter))
  122. {
  123. pData=g_kb_adv_swf.pData;
  124. size=g_kb_adv_swf.size;
  125. }
  126. else
  127. {
  128. pData=(unsigned char*)KB_Swf_GetMenuByName(movie_name,&size);
  129. }
  130. _kb_currentMovie.info.name=movie_name;
  131. _kb_currentMovie.data=mb_malloc((mb_size_t)size);
  132. _kb_currentMovie.info.size=size;
  133. mb_memcpy(_kb_currentMovie.data,pData,size);
  134. //create movie
  135. if(mb_movie_create(&_kb_currentMovie.movie,_kb_currentMovie.data,_kb_currentMovie.info.size,NULL)!=MB_SUCCESS)
  136. {
  137.       mb_printf("n[Machblue]:Client create movie error.");
  138. kb_movie_playStatusSet(kb_movie_closed);
  139. return MB_FAILURE;
  140. }
  141. //attach movie
  142. if(mb_movie_attach(_kb_currentMovie.movie,_kb_client,NULL)!=MB_SUCCESS)
  143.     {
  144.       mb_printf("n[Machblue]:Client attach movie error.");
  145. kb_movie_playStatusSet(kb_movie_closed);
  146. return MB_FAILURE;
  147.     }
  148. mb_semaphore_wait(g_kb_clientSem);
  149. mb_printf("n[Machblue]:Client movie attached.");
  150. if(mb_movie_activate(_kb_currentMovie.movie,MB_AR_INITIAL,NULL)!=MB_SUCCESS)
  151.     {
  152.       mb_printf("n[Machblue]:Client activate movie error.");
  153. kb_movie_playStatusSet(kb_movie_closed);
  154. return MB_FAILURE;
  155.     }
  156. mb_semaphore_wait(g_kb_clientSem);
  157. mb_printf("n[Machblue]:Client movie activated.");
  158. kb_movie_playStatusSet(kb_movie_playing);
  159.  
  160. return MB_SUCCESS;
  161.  }
  162.       
  163. /**
  164.  * delete movie by machblue lib and reset movie information,clear screen
  165.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  166.  */
  167. mb_error_t kb_machblue_movie_delete(BOOL Menu_Exit)
  168. {
  169. static bool flag=false;
  170. if(mb_movie_delete(_kb_currentMovie.movie)!=MB_SUCCESS)
  171.     {
  172.       mb_printf("n[Machblue]:Client delete movie error.");
  173. return MB_FAILURE;
  174.     }
  175. switch(_kb_currentMovie.info.name)
  176. {
  177. case kb_movie_menu_mail:
  178. TFCASTB_LeaveMailManager();
  179. break;
  180. case kb_movie_adve_logo:
  181. if(flag)
  182. {
  183. break;
  184. }
  185. else
  186. {
  187. KB_Machblue_PcmFlagSet(kb_movie_sound_cocacola,false);
  188. if((KB_DBGetPrgTotal(DTVPRG)!=0)&&(playFirst==FALSE))
  189. {
  190. printf("nKB play current program when power on.");
  191. KB_DTVPlayCurPrg();       
  192. //kb_machblue_search_schedule();
  193. }
  194. else 
  195. {
  196. //play main menu movie
  197. //kb_machblue_movie_play(kb_movie_menu_main);
  198. }
  199. flag=true;
  200. break;
  201. }
  202. case kb_movie_menu_search:
  203. case kb_movie_menu_searchAll:
  204. if(KB_DBGetPrgTotal(DTVPRG)!=0)
  205. {
  206. KB_DTVSetPrg(prePrgType,prePrgNo);
  207. STB_StateSwitch(State_AV);
  208. }
  209. break;
  210. case kb_movie_adve_realtime:
  211. mb_free(g_kb_adv_swf.pData);
  212. g_kb_adv_swf.pData=NULL;
  213. Kb_clearAderTimer();
  214. break;
  215. case kb_movie_menu_help:
  216. case kb_movie_menu_sys_info:
  217. case kb_movie_dbc_weather:
  218. case kb_movie_dbc_gov:
  219. if(KB_DBGetPrgTotal(DTVPRG)!=0)
  220. {
  221. KB_DTVSetPrg(prePrgType,prePrgNo);
  222. STB_StateSwitch(State_AV);
  223. //KB_DTVRunNextPrg(prePrgType);
  224. }
  225. if(!Menu_Exit)
  226. {
  227. if(_kb_secMovieName==kb_movie_menu_main)
  228. playPrgFlag=true;
  229. }
  230. break;
  231. default:
  232. break;
  233. }
  234. kb_machblue_movie_current_reset();
  235. KB_AVSetWindow(0, 0, 720, 576);
  236. //clear osd
  237. if(Menu_Exit)
  238. mb_surface_osd_clear();
  239. return MB_SUCCESS;
  240. }
  241. /**
  242.  * close movie which playing. 
  243.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  244.  */
  245. mb_error_t kb_machblue_movie_close(BOOL Menu_Exit)
  246. {
  247. KB_TimerDisable(movieCloseTimer);
  248. if(kb_movie_playStatusGet()!=kb_movie_playing)
  249. {
  250. mb_printf("nClose movie error: no movie playing");
  251. return MB_FAILURE;
  252. }
  253. else
  254. kb_movie_playStatusSet(kb_movie_processing);
  255. _kb_movieClear=Menu_Exit;
  256. if(mb_movie_suspend(_kb_currentMovie.movie,MB_SR_SYSTEM)!=MB_SUCCESS)
  257.     {
  258.       mb_printf("n[Machblue]:Client suspend movie error.");
  259. kb_movie_playStatusSet(kb_movie_playing);
  260. return MB_FAILURE;
  261.     }
  262. mb_semaphore_wait(g_kb_clientSem);
  263. mb_printf("n[Machblue]:Client movie suspended.");
  264. if(mb_movie_detach(_kb_currentMovie.movie)!= MB_SUCCESS)
  265.     {
  266.       mb_printf("n[Machblue]:Client detach movie error.");
  267. kb_movie_playStatusSet(kb_movie_playing);
  268. return MB_FAILURE;
  269.     }
  270. mb_semaphore_wait(g_kb_clientSem);
  271. mb_printf("n[Machblue]:Client movie detached.");
  272. kb_movie_playStatusSet(kb_movie_closed);
  273. //if play the second movie
  274. if((Menu_Exit==FALSE)&&(_kb_secMovieFlag==FALSE))
  275. {
  276. _kb_secMovieFlag=TRUE;
  277. kb_machblue_movie_play(_kb_secMovieName);
  278. }
  279. if(_kb_playMovie.flag)
  280. {
  281. kb_machblue_movie_play(_kb_playMovie.name);
  282. if(_kb_currentMovie.info.name==kb_movie_menu_pf)
  283. KB_DTVGetEitPF();
  284. _kb_playMovie.flag=FALSE;
  285. }
  286. return MB_SUCCESS;
  287. }
  288. void kb_machblue_movieCloseAuto(void)
  289. {
  290. if(kb_movie_playStatusGet()==kb_movie_playing)
  291. {
  292. switch(_kb_currentMovie.info.name)
  293. {
  294. case kb_movie_menu_pf:
  295. case kb_movie_menu_volume:
  296. case kb_movie_menu_channle_no:
  297. case kb_movie_adve_logo:
  298. kb_machblue_movie_close(TRUE);
  299. break;
  300. default:
  301. break;
  302. }
  303. }
  304. }
  305. void kb_machblue_movieActivated(void)
  306. {
  307. unsigned char volume=15;
  308. BYTE mail_empty_num,mail_count;
  309. int r_pPrgType,r_pPrgNO,tv_pPrgType,tv_pPrgNO;
  310. KB_OSPMsgNode movie_msg;
  311. switch(_kb_currentMovie.info.name)
  312. {
  313. case kb_movie_menu_main:
  314. if(0)//(playPrgFlag)
  315. {
  316. if(KB_DBGetPrgTotal(DTVPRG)!=0)
  317. {
  318. KB_DTVSetPrg(prePrgType,prePrgNo);
  319. STB_StateSwitch(State_AV);
  320. KB_DTVRunNextPrg(prePrgType);
  321. }
  322. playPrgFlag=false;
  323. }
  324. if(Get_NVOD_Flag()==1)
  325. {
  326.                                 Set_NVOD_Flag(0);
  327. STB_StateSwitch(State_AV);
  328. }
  329.                         break;
  330. case kb_movie_menu_mail:
  331. KB_MB_lc_Set_Mail_Type(mail_list);
  332. TFCASTB_EnterMailManager();
  333. TFCASTB_GetEmailSpaceInfo(&mail_count,&mail_empty_num);
  334. KB_MB_lc_2_movie_word_Post_Task(mail_count);
  335. break;
  336. case kb_movie_menu_pf:
  337. KB_TimerDisable(movieCloseTimer);
  338. KB_TimerEnable(movieCloseTimer, 10000);
  339. break;
  340. case kb_movie_menu_volume:
  341. case kb_movie_menu_volumeMute:
  342. KB_MB_lc_2_movie_Post_Task();
  343. break;
  344. case kb_movie_menu_popup:
  345. movie_msg.Word1= KB_MOVIE_PROMPT_TO_MOVIE;
  346. movie_msg.Word2=(unsigned long)prompt_message;
  347. kb_machblue_task_post(&movie_msg);
  348. break;
  349. case kb_movie_menu_nvod:
  350. Set_NVOD_Flag(1);
  351. if (State_AV != KB_GetCurState() && State_NVOD != KB_GetCurState())
  352. {       
  353.     KB_DTVStopAV();      
  354. }
  355. STB_StateSwitch(State_NVOD);
  356. if (KB_DBGetNvodNum()>0)
  357. KB_NVODGetEit();
  358. else
  359. movie_msg.Word1 = KB_MOVIE_NVOD_TO_MOVIE;
  360. kb_machblue_task_post(&movie_msg);
  361. break;
  362. case kb_movie_menu_channle_no:
  363. KB_MB_lc_2_movie_word_Post_Task(_kb_number_key_value);
  364. KB_TimerDisable(movieCloseTimer);
  365. KB_TimerEnable(movieCloseTimer, 10000);
  366. break;
  367. case kb_movie_ca_inform:
  368. KB_DTVStopAV();      
  369. KB_MB_lc_2_movie_Post_Task();
  370. break;
  371. case kb_movie_dbc_gov:
  372. KB_DTVGetPrg(&prePrgType,&prePrgNo);
  373. KB_DTVStopAV(); 
  374. kb_dbc_govCatalog();
  375. break;
  376. case kb_movie_dbc_weather:
  377. KB_DTVGetPrg(&prePrgType,&prePrgNo);
  378. KB_DTVStopAV();     
  379. kb_weatherInit();
  380. break;
  381. case kb_movie_adve_logo:
  382. KB_Machblue_MpegSoundReSet();
  383. KB_Machblue_PcmFlagSet(kb_movie_sound_cocacola,true);
  384. KB_AVPlay(100,100,100);
  385. KB_DBGetPgmCurVol(&volume);
  386.      KB_DTVSetVolume(volume);   
  387. break;
  388. case kb_movie_menu_search:
  389. case kb_movie_menu_searchAll:
  390. case kb_movie_menu_help:
  391. KB_DTVGetPrg(&prePrgType,&prePrgNo);
  392. KB_DTVStopAV();  
  393. break;
  394. case kb_movie_menu_sys_info:
  395. KB_DTVGetPrg(&prePrgType,&prePrgNo);
  396. KB_DTVStopAV();     
  397. KB_MB_lc_2_movie_Post_Task();
  398. break;
  399. default:
  400. break;
  401. }
  402. }
  403. /**
  404.  * client notify
  405.  * machblue lib will send msg to client use this fun when complete some operation.
  406.  * reason
  407.  * args
  408.  * client_data
  409.  
  410.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  411.  */
  412. mb_error_t kb_machblue_clientNotify(mb_notif_reason_t reason,mb_args_t *args,void *client_data)
  413. {
  414. KB_OSPMsgNode movie_msg;
  415. mb_lc_attributes_t *pAttribs;
  416. BOOL lcToMovie=FALSE;
  417.     switch ( reason ) 
  418. {
  419.       case MB_NR_MOVIE_ATTACHED:
  420. mb_semaphore_signal(g_kb_clientSem);
  421.         break;
  422.       case MB_NR_MOVIE_DETACHED:
  423. kb_machblue_movie_delete(_kb_movieClear);
  424. mb_semaphore_signal(g_kb_clientSem);
  425.         break;
  426.       case MB_NR_MOVIE_ACTIVATED:  
  427. kb_machblue_movieActivated();
  428. mb_semaphore_signal(g_kb_clientSem);
  429. break;
  430.       case MB_NR_MOVIE_SUSPENDED:
  431. mb_semaphore_signal(g_kb_clientSem);
  432.         break;
  433.       case MB_NR_LC_SEND_COMPLETE:
  434. #if MB_PLAYER_1_2
  435.         mb_printf("n[Machblue]:Client notify lc send complete[%d].",MB_NR_LC_STATUS_ARG(args));
  436. #else
  437. mb_printf("n[Machblue]:Client notify lc send complete[%d].",MB_NR_LC_STATUS(args));
  438. #endif
  439. break;
  440.       case MB_NR_LC_REQUEST:
  441. #if MB_PLAYER_1_2
  442. pAttribs=(mb_lc_attributes_t*)MB_NR_LC_ATTRIBUTES_ARG(args);
  443. #else
  444. pAttribs=(mb_lc_attributes_t*)MB_NR_LC_ATTRIBUTES(args);
  445. #endif
  446. //mb_memcpy(&_kb_currentpAttribs,pAttribs,sizeof(mb_lc_attributes_t));
  447. /*add by steven*/
  448. mb_memcpy((void*)_kb_currentpAttribs.connection,(void*)pAttribs->connection,30);
  449. mb_memcpy((void*)_kb_currentpAttribs.function,(void*)pAttribs->function,30);
  450. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_name].name,(void*)pAttribs->parameters[lc_movie_name].name,5);
  451. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_name].value,(void*)pAttribs->parameters[lc_movie_name].value,30);
  452. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_type].name,(void*)pAttribs->parameters[lc_movie_type].name,5);
  453. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_type].value,(void*)pAttribs->parameters[lc_movie_type].value,30);
  454. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_lcName].name,(void*)pAttribs->parameters[lc_movie_lcName].name,5);
  455. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_lcName].value,(void*)pAttribs->parameters[lc_movie_lcName].value,30);
  456. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_funName].name,(void*)pAttribs->parameters[lc_movie_funName].name,5);
  457. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_movie_funName].value,(void*)pAttribs->parameters[lc_movie_funName].value,30);
  458. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_event_type].name,(void*)pAttribs->parameters[lc_event_type].name,5);
  459. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_event_type].value,(void*)pAttribs->parameters[lc_event_type].value,30);
  460. if((pAttribs->parameters[lc_data1].name!=NULL)&&(lcToMovie==FALSE))
  461. {
  462. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data1].name,(void*)pAttribs->parameters[lc_data1].name,5);
  463. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data1].value,(void*)pAttribs->parameters[lc_data1].value,30);
  464. }
  465. else
  466. lcToMovie=TRUE;
  467. if((pAttribs->parameters[lc_data2].name!=NULL)&&(lcToMovie==FALSE))
  468. {
  469. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data2].name,(void*)pAttribs->parameters[lc_data2].name,5);
  470. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data2].value,(void*)pAttribs->parameters[lc_data2].value,30);
  471. }
  472. else
  473. lcToMovie=TRUE;
  474. if((pAttribs->parameters[lc_data3].name!=NULL)&&(lcToMovie==FALSE))
  475. {
  476. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data3].name,(void*)pAttribs->parameters[lc_data3].name,5);
  477. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data3].value,(void*)pAttribs->parameters[lc_data3].value,30);
  478. }
  479. else
  480. lcToMovie=TRUE;
  481. if((pAttribs->parameters[lc_data4].name!=NULL)&&(lcToMovie==FALSE))
  482. {
  483. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data4].name,(void*)pAttribs->parameters[lc_data4].name,5);
  484. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data4].value,(void*)pAttribs->parameters[lc_data4].value,30);
  485. }
  486. else
  487. lcToMovie=TRUE;
  488. if((pAttribs->parameters[lc_data5].name!=NULL)&&(lcToMovie==FALSE))
  489. {
  490. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data5].name,(void*)pAttribs->parameters[lc_data5].name,5);
  491. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data5].value,(void*)pAttribs->parameters[lc_data5].value,30);
  492. }
  493. else
  494. lcToMovie=TRUE;
  495. if((pAttribs->parameters[lc_data6].name!=NULL)&&(lcToMovie==FALSE))
  496. {
  497. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data6].name,(void*)pAttribs->parameters[lc_data6].name,5);
  498. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data6].value,(void*)pAttribs->parameters[lc_data6].value,30);
  499. }
  500. else
  501. lcToMovie=TRUE;
  502. if((pAttribs->parameters[lc_data7].name!=NULL)&&(lcToMovie==FALSE))
  503. {
  504. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data7].name,(void*)pAttribs->parameters[lc_data7].name,5);
  505. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data7].value,(void*)pAttribs->parameters[lc_data7].value,30);
  506. }
  507. else
  508. lcToMovie=TRUE;
  509. if((pAttribs->parameters[lc_data8].name!=NULL)&&(lcToMovie==FALSE))
  510. {
  511. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data8].name,(void*)pAttribs->parameters[lc_data8].name,5);
  512. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data8].value,(void*)pAttribs->parameters[lc_data8].value,30);
  513. }
  514. else
  515. lcToMovie=TRUE;
  516. if((pAttribs->parameters[lc_data9].name!=NULL)&&(lcToMovie==FALSE))
  517. {
  518. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data9].name,(void*)pAttribs->parameters[lc_data9].name,5);
  519. mb_memcpy((void*)_kb_currentpAttribs.parameters[lc_data9].value,(void*)pAttribs->parameters[lc_data9].value,30);
  520. }
  521. else
  522. lcToMovie=TRUE;
  523. /*add by steven end*/
  524. movie_msg.Word1=KB_MOVIE_LC_TO_CCODE;
  525. movie_msg.Word2=(long)&_kb_currentpAttribs;
  526. kb_machblue_task_post(&movie_msg);
  527. mb_printf("n[Machblue]:Client notify lc request.");
  528.         break;
  529.      
  530.       case MB_NR_MOVIE_ABORT:
  531.         mb_printf("n[Machblue]:Client notify movie abort.");
  532.         break;
  533.       default:
  534.         mb_printf("n[Machblue]:Client notify unknown reason.");
  535.     }
  536.     return MB_SUCCESS;
  537. }
  538. void kb_machblue_movie_attrubutes_init(void)
  539. {
  540. _kb_currentpAttribs.connection=mb_malloc(30);
  541. _kb_currentpAttribs.function=mb_malloc(30);
  542. _kb_currentpAttribs.parameters[lc_movie_name].name=mb_malloc(5);
  543. _kb_currentpAttribs.parameters[lc_movie_name].value=mb_malloc(30);
  544. _kb_currentpAttribs.parameters[lc_movie_type].name=mb_malloc(5);
  545. _kb_currentpAttribs.parameters[lc_movie_type].value=mb_malloc(30);
  546. _kb_currentpAttribs.parameters[lc_movie_lcName].name=mb_malloc(5);
  547. _kb_currentpAttribs.parameters[lc_movie_lcName].value=mb_malloc(30);
  548. _kb_currentpAttribs.parameters[lc_movie_funName].name=mb_malloc(5);
  549. _kb_currentpAttribs.parameters[lc_movie_funName].value=mb_malloc(30);
  550. _kb_currentpAttribs.parameters[lc_event_type].name=mb_malloc(5);
  551. _kb_currentpAttribs.parameters[lc_event_type].value=mb_malloc(30);
  552. _kb_currentpAttribs.parameters[lc_data1].name=mb_malloc(5);
  553. _kb_currentpAttribs.parameters[lc_data1].value=mb_malloc(30);
  554. _kb_currentpAttribs.parameters[lc_data2].name=mb_malloc(5);
  555. _kb_currentpAttribs.parameters[lc_data2].value=mb_malloc(30);
  556. _kb_currentpAttribs.parameters[lc_data3].name=mb_malloc(5);
  557. _kb_currentpAttribs.parameters[lc_data3].value=mb_malloc(30);
  558. _kb_currentpAttribs.parameters[lc_data4].name=mb_malloc(5);
  559. _kb_currentpAttribs.parameters[lc_data4].value=mb_malloc(30);
  560. _kb_currentpAttribs.parameters[lc_data5].name=mb_malloc(5);
  561. _kb_currentpAttribs.parameters[lc_data5].value=mb_malloc(30);
  562. _kb_currentpAttribs.parameters[lc_data6].name=mb_malloc(5);
  563. _kb_currentpAttribs.parameters[lc_data6].value=mb_malloc(30);
  564. _kb_currentpAttribs.parameters[lc_data7].name=mb_malloc(5);
  565. _kb_currentpAttribs.parameters[lc_data7].value=mb_malloc(30);
  566. _kb_currentpAttribs.parameters[lc_data8].name=mb_malloc(5);
  567. _kb_currentpAttribs.parameters[lc_data8].value=mb_malloc(30);
  568. _kb_currentpAttribs.parameters[lc_data9].name=mb_malloc(5);
  569. _kb_currentpAttribs.parameters[lc_data9].value=mb_malloc(30);
  570. }
  571. /**
  572.  * init movie information used by machblue client.
  573.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  574.  */
  575. mb_error_t kb_machblue_movie_init(void)
  576. {
  577. kb_machblue_movie_current_reset();
  578. kb_machblue_movie_attrubutes_init();
  579. _kb_playMovie.flag=FALSE;
  580. _kb_playMovie.name=kb_movie_last;
  581. return MB_SUCCESS;
  582. }
  583. /**
  584.  * init machblue client used by keybridge.
  585.  */
  586. void kb_machblue_client_init(void)
  587. {
  588.      mb_init_config_t playerConfig;   
  589.        mb_error_t ret;
  590.     ret=mb_default_config_get(&playerConfig);
  591.    if(ret!=MB_SUCCESS)
  592.    {
  593.       mb_printf("n[Machblue]:Client get default config error[%d].",ret);
  594. return;
  595.    }
  596. playerConfig.registry.root_path[0]='';
  597. ret=mb_player_init(&playerConfig);
  598.    if(ret!=MB_SUCCESS)
  599.    {
  600.       mb_printf("n[Machblue]:Client init player error[%d].",ret);
  601. return;
  602.    }
  603.     // Create controle semaphore
  604. ret=mb_semaphore_create(&_kb_mStatusSem,1);
  605. if(ret!=MB_SUCCESS)
  606.     {
  607.      mb_printf("n[Machblue]:Client create operate semaphore error[%d].",ret);
  608. return;
  609.     }
  610. ret=mb_semaphore_create(&g_kb_machblue_pcmStatus,1);
  611. if(ret!=MB_SUCCESS)
  612.     {
  613.      mb_printf("n[Machblue]:Client create pcm flag semaphore error[%d].",ret);
  614. return;
  615.     }
  616. ret=mb_semaphore_create(&g_kb_clientSem,0);
  617. if(ret!=MB_SUCCESS)
  618.     {
  619.      mb_printf("n[Machblue]:Client create client semaphore error[%d].",ret);
  620. return;
  621.     }
  622.     // Initiale the graphique contexte
  623.     ret=mb_surface_graphics_init(&_kb_graphicsContext,NULL);
  624.     if(ret!=MB_SUCCESS)
  625.     {
  626.      mb_printf("n[Machblue]:Client init graphics surface error[%d].",ret);
  627. return;
  628.     }
  629.     // Create client (see client_api for more info)
  630.     ret=mb_client_create(&_kb_client,&_kb_graphicsContext,NULL,kb_machblue_clientNotify);
  631.     if (ret!=MB_SUCCESS)
  632.     {
  633.       mb_printf("n[Machblue]:Client create client error[%d].",ret);
  634. return;
  635.     }   
  636. ret=kb_machblue_movie_init();
  637. if(ret!=MB_SUCCESS)
  638.    {
  639.       mb_printf("n[Machblue]:Client init movies error[%d].",ret);
  640. return;
  641.    }
  642. movieCloseTimer=KB_TimerCreate(KB_TIMER_REPEAT,(KB_TIMER_FUNC_POINTER)kb_machblue_movieCloseAuto,NULL);
  643. //play logo movie
  644. //kb_machblue_movie_play(kb_movie_adve_logo);
  645. kb_machblue_movie_play(kb_movie_adve_logo);
  646. KB_TimerDisable(movieCloseTimer);
  647. KB_TimerEnable(movieCloseTimer, 14000);
  648. }
  649. void number_key_operation(int number)
  650. {
  651. int proTotal = 0;
  652. _kb_number_key_value = number;
  653. proTotal = KB_DBGetPrgTotal(KB_DTVGetPrePrgType());
  654. if((number>0)&&(number<=proTotal))
  655. {
  656. kb_machblue_movie_play(kb_movie_menu_channle_no);
  657. }
  658. }
  659.   
  660. /**
  661.  * remoter event manager.
  662.  * key < key pressed by remoter >
  663.  
  664.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  665.  */
  666. mb_error_t kb_machblue_key(rc_navKeyStroke_t key)
  667. {
  668. long keyValue;
  669. mb_event_t tEvent;
  670. mb_error_t ret;  
  671. int pPrgType,pPrgNO;
  672. static int poweron=1;
  673. //--------------------
  674. //软开关机控制
  675. if(KB_SysPowerIsDown())
  676. {
  677. if(key!=rc_KeyPower)
  678. key=rc_KeyInvalid;
  679. }
  680. if(key== rc_KeyPower)
  681. {
  682. if(poweron==1)
  683. {
  684. KB_SystemShutDownNow();
  685. poweron=0;
  686. }
  687. else if(poweron==0)
  688. {
  689. KB_SystemSetUpNow();
  690. poweron=1;
  691. }
  692. }
  693. //软开关机控制
  694. //--------------------
  695. switch(key)
  696. {
  697. case rc_KeyNum0:
  698. case rc_KeyNum1:
  699. case rc_KeyNum2:
  700. case rc_KeyNum3:
  701. case rc_KeyNum4:
  702. case rc_KeyNum5:
  703. case rc_KeyNum6:
  704. case rc_KeyNum7:
  705. case rc_KeyNum8:
  706. case rc_KeyNum9:
  707. if(kb_movie_playStatusGet()==kb_movie_closed)
  708. {
  709. number_key_operation(key);
  710. return MB_SUCCESS;
  711. }
  712. else
  713. break;
  714. //play program list movie
  715. case rc_KeyOK:
  716. if(kb_movie_playStatusGet()==kb_movie_closed)
  717. {
  718. kb_machblue_movie_play(kb_movie_menu_video_list);
  719. return MB_SUCCESS;   
  720. }
  721. else
  722. break;
  723. //play epg movie
  724. case rc_KeyGuide:
  725. if(kb_movie_playStatusGet()==kb_movie_closed)
  726. kb_machblue_movie_play(kb_movie_menu_epg);
  727. return MB_SUCCESS;
  728. //play menu movie
  729. case rc_KeyMenu:
  730. if(kb_movie_playStatusGet()==kb_movie_closed)
  731. {
  732. if(Get_NVOD_Flag()!=1)
  733. kb_machblue_movie_play(kb_movie_menu_main);
  734. else
  735. kb_machblue_movie_play(kb_movie_menu_nvod);
  736. }
  737. else if((kb_movie_playStatusGet()==kb_movie_playing)&&(
  738. _kb_currentMovie.info.name!=kb_movie_menu_main))
  739. {
  740. _kb_playMovie.name=kb_movie_menu_main;
  741. _kb_playMovie.flag=TRUE;
  742. kb_machblue_movie_close(TRUE);
  743. }
  744. return MB_SUCCESS;
  745. case rc_KeyExit:
  746. if(kb_movie_playStatusGet()==kb_movie_playing)
  747. {
  748. kb_machblue_movie_close(TRUE);
  749. }
  750. return MB_SUCCESS;
  751. case rc_KeyUp:
  752. if(kb_movie_playStatusGet()==kb_movie_closed)
  753. {
  754. if(Get_NVOD_Flag()!=1)
  755. {
  756. KB_DTVRunNextPrg(KB_DTVGetPrePrgType());
  757. kb_machblue_movie_play(kb_movie_menu_pf);
  758. //kb_machblue_movie_play(kb_movie_menu_pf);
  759. KB_DTVGetEitPF();
  760. }
  761. return MB_SUCCESS;
  762. }
  763. else if(kb_movie_playStatusGet()==kb_movie_playing)
  764. {
  765. if(_kb_currentMovie.info.name==kb_movie_menu_pf)
  766. {
  767. KB_DTVRunNextPrg(KB_DTVGetPrePrgType());
  768. KB_DTVGetEitPF();
  769. //KB_MB_lc_2_movie_Post_Task();
  770. KB_MB_lc_2_movie_word_Post_Task(0);
  771. KB_TimerDisable(movieCloseTimer);
  772. KB_TimerEnable(movieCloseTimer, 10000);
  773. return MB_SUCCESS;
  774. }
  775. else if((_kb_currentMovie.info.name==kb_movie_menu_popup)||
  776. ((_kb_currentMovie.info.name==kb_movie_adve_realtime)))
  777. {
  778. KB_DTVRunNextPrg(KB_DTVGetPrePrgType());
  779. kb_machblue_movie_close(TRUE);
  780. _kb_playMovie.name=kb_movie_menu_pf;
  781. _kb_playMovie.flag=TRUE;
  782. return MB_SUCCESS;
  783. }
  784. }
  785. else
  786. break;
  787. case rc_KeyDown:
  788. if(kb_movie_playStatusGet()==kb_movie_closed)
  789. {
  790. if(Get_NVOD_Flag()!=1)
  791. {
  792. KB_DTVRunPrePrg(KB_DTVGetPrePrgType());
  793. kb_machblue_movie_play(kb_movie_menu_pf);
  794. //kb_machblue_movie_play(kb_movie_menu_pf);
  795. KB_DTVGetEitPF();
  796. }
  797. return MB_SUCCESS;
  798. }
  799. else if(kb_movie_playStatusGet()==kb_movie_playing)
  800. {
  801. if(_kb_currentMovie.info.name==kb_movie_menu_pf)
  802. {
  803. KB_DTVRunPrePrg(KB_DTVGetPrePrgType());
  804. KB_DTVGetEitPF();
  805. //KB_MB_lc_2_movie_Post_Task();
  806. KB_MB_lc_2_movie_word_Post_Task(0);
  807. KB_TimerDisable(movieCloseTimer);
  808. KB_TimerEnable(movieCloseTimer, 10000);
  809. return MB_SUCCESS;
  810. }
  811. else if((_kb_currentMovie.info.name==kb_movie_menu_popup)||
  812. ((_kb_currentMovie.info.name==kb_movie_adve_realtime)))
  813. {
  814. KB_DTVRunPrePrg(KB_DTVGetPrePrgType());
  815. kb_machblue_movie_close(TRUE);
  816. _kb_playMovie.name=kb_movie_menu_pf;
  817. _kb_playMovie.flag=TRUE;
  818. return MB_SUCCESS;
  819. }
  820. }
  821. else
  822. break;
  823. case rc_KeyLeft:
  824. case rc_KeyVolMinus:
  825. if(kb_movie_playStatusGet()==kb_movie_closed)
  826. {
  827. INT32 volume=KB_DTVGetVolume();
  828. if(volume>0)
  829. {
  830. KB_DTVSetVolume((UINT8)(volume-1));
  831. }
  832. KB_DTVMute(FALSE);
  833. kb_machblue_movie_play(kb_movie_menu_volume);
  834. KB_TimerDisable(movieCloseTimer);
  835. KB_TimerEnable(movieCloseTimer, 10000);
  836. return MB_SUCCESS;
  837. }
  838. else if(kb_movie_playStatusGet()==kb_movie_playing)
  839. {
  840. if(_kb_currentMovie.info.name==kb_movie_menu_volume)
  841. {
  842. INT32 volume=KB_DTVGetVolume();
  843. if(volume>0)
  844. {
  845. KB_DTVSetVolume((UINT8)(volume-1));
  846. }
  847. KB_DTVMute(FALSE);
  848. KB_TimerDisable(movieCloseTimer);
  849. KB_TimerEnable(movieCloseTimer, 10000);
  850. KB_MB_lc_2_movie_Post_Task();
  851. return MB_SUCCESS;
  852. }
  853. else
  854. break;
  855. }
  856. case rc_KeyRight:
  857. case rc_KeyVolPlus:
  858. if(kb_movie_playStatusGet()==kb_movie_closed)
  859. {
  860. INT32 volume=KB_DTVGetVolume();
  861. if(volume<32)
  862. {
  863. KB_DTVSetVolume((UINT8)(volume+1));
  864. }
  865. KB_DTVMute(FALSE);
  866. kb_machblue_movie_play(kb_movie_menu_volume);
  867. KB_TimerDisable(movieCloseTimer);
  868. KB_TimerEnable(movieCloseTimer, 10000);
  869. return MB_SUCCESS;
  870. }
  871. else if(kb_movie_playStatusGet()==kb_movie_playing)
  872. {
  873. if(_kb_currentMovie.info.name==kb_movie_menu_volume)
  874. {
  875. INT32 volume=KB_DTVGetVolume();
  876. if(volume<32)
  877. {
  878. KB_DTVSetVolume((UINT8)(volume+1));
  879. }
  880. KB_DTVMute(FALSE);
  881. KB_TimerDisable(movieCloseTimer);
  882. KB_TimerEnable(movieCloseTimer, 10000);
  883. KB_MB_lc_2_movie_Post_Task();
  884. return MB_SUCCESS;
  885. }
  886. else
  887. break;
  888. }
  889. case rc_KeyMute:
  890. if(kb_movie_playStatusGet()==kb_movie_closed)
  891. {
  892. if(KB_DTVGetMuteFlag())
  893. {
  894. KB_DTVMute(FALSE);
  895. }
  896. else
  897. {
  898. KB_DTVMute(TRUE);
  899. }
  900. kb_machblue_movie_play(kb_movie_menu_volumeMute);
  901. KB_TimerDisable(movieCloseTimer);
  902. KB_TimerEnable(movieCloseTimer, 10000);
  903. return MB_SUCCESS;
  904. }
  905. else if(kb_movie_playStatusGet()==kb_movie_playing)
  906. {
  907. if(_kb_currentMovie.info.name==kb_movie_menu_volumeMute)
  908. {
  909. if(KB_DTVGetMuteFlag())
  910. {
  911. mb_printf("n[kb_machblue_key]the mute flag is true");
  912. KB_DTVMute(FALSE);
  913. }
  914. else
  915. {
  916. mb_printf("n[kb_machblue_key]the mute flag is false");
  917. KB_DTVMute(TRUE);
  918. }
  919. KB_TimerDisable(movieCloseTimer);
  920. KB_TimerEnable(movieCloseTimer, 10000);
  921. KB_MB_lc_2_movie_Post_Task();
  922. }
  923. return MB_SUCCESS;
  924. }
  925. break;
  926. case rc_KeyTrack:
  927. if(kb_movie_playStatusGet()==kb_movie_closed)
  928. {
  929. switch(KB_DTVGetTrack())
  930. {
  931. case LEFT_TRACK:
  932. KB_DTVSetTrack(RIGHT_TRACK);
  933. break;
  934. case RIGHT_TRACK:
  935. KB_DTVSetTrack(STEREO_TRACK);
  936. break;
  937. case STEREO_TRACK:
  938. KB_DTVSetTrack(LEFT_TRACK);
  939. break;
  940. default:
  941. KB_DTVSetTrack(LEFT_TRACK);
  942. break;
  943. }
  944. KB_DTVMute(FALSE);
  945. kb_machblue_movie_play(kb_movie_menu_volume);
  946. KB_TimerDisable(movieCloseTimer);
  947. KB_TimerEnable(movieCloseTimer, 10000);
  948. return MB_SUCCESS;
  949. }
  950. else if(kb_movie_playStatusGet()==kb_movie_playing)
  951. {
  952. if(_kb_currentMovie.info.name==kb_movie_menu_volume)
  953. {
  954. switch(KB_DTVGetTrack())
  955. {
  956. case LEFT_TRACK:
  957. KB_DTVSetTrack(RIGHT_TRACK);
  958. break;
  959. case RIGHT_TRACK:
  960. KB_DTVSetTrack(STEREO_TRACK);
  961. break;
  962. case STEREO_TRACK:
  963. KB_DTVSetTrack(LEFT_TRACK);
  964. break;
  965. default:
  966. KB_DTVSetTrack(LEFT_TRACK);
  967. break;
  968. }
  969. KB_DTVMute(FALSE);
  970. KB_TimerDisable(movieCloseTimer);
  971. KB_TimerEnable(movieCloseTimer, 10000);
  972. KB_MB_lc_2_movie_Post_Task();
  973. }
  974. return MB_SUCCESS;
  975. }
  976. break;
  977. case rc_KeyMail:
  978. return MB_SUCCESS;
  979. case rc_KeyNVOD:  
  980. if(kb_movie_playStatusGet()==kb_movie_closed)
  981. kb_machblue_movie_play(kb_movie_menu_nvod);
  982. return MB_SUCCESS;
  983. case rc_KeyF1:
  984. if(kb_movie_playStatusGet()==kb_movie_closed)
  985. kb_machblue_movie_play(kb_movie_vote_voteMenu);
  986. return MB_SUCCESS;
  987. }
  988. //button used by machblue lib
  989. switch(key)
  990. {
  991. //number button
  992. case rc_KeyNum0:
  993. keyValue=0x30;
  994. break;
  995. case rc_KeyNum1:
  996. keyValue=0x31;
  997. break;
  998. case rc_KeyNum2:
  999. keyValue=0x32;
  1000. break;
  1001. case rc_KeyNum3:
  1002. keyValue=0x33;
  1003. break;
  1004. case rc_KeyNum4:
  1005. keyValue=0x34;
  1006. break;
  1007. case rc_KeyNum5:
  1008. keyValue=0x35;
  1009. break;
  1010. case rc_KeyNum6:
  1011. keyValue=0x36;
  1012. break;
  1013. case rc_KeyNum7:
  1014. keyValue=0x37;
  1015. break;
  1016. case rc_KeyNum8:
  1017. keyValue=0x38;
  1018. break;
  1019. case rc_KeyNum9:
  1020. keyValue=0x39;
  1021. break;
  1022. //operate button
  1023. case rc_KeyUp:
  1024. keyValue=MB_KEY_UP;
  1025. break;
  1026. case rc_KeyDown:
  1027. keyValue=MB_KEY_DOWN;
  1028. break;
  1029. case rc_KeyLeft:
  1030. case rc_KeyVolMinus:
  1031. keyValue=MB_KEY_LEFT;
  1032. break;
  1033. case rc_KeyRight:
  1034. case rc_KeyVolPlus:
  1035. keyValue=MB_KEY_RIGHT;
  1036. break;
  1037. case rc_KeyOK:
  1038. keyValue=MB_KEY_SELECT;
  1039. break;
  1040. case rc_KeySwitch:
  1041. case rc_KeyTrack:
  1042. keyValue=MB_KEY_SHIFT;
  1043. break;
  1044. case rc_KeyReturn:
  1045. case rc_KeyMute:
  1046. keyValue=MB_KEY_ESCAPE;
  1047. break;
  1048. case rc_KeyBlue:
  1049. keyValue=MB_KEY_INSERT;
  1050. break;
  1051. case rc_KeyYellow:
  1052. keyValue = MB_KEY_DELETE;
  1053. break;
  1054. case rc_KeyRed:
  1055. keyValue=MB_KEY_CONTROL;
  1056. break;
  1057. case rc_KeyGreen:
  1058. keyValue=MB_KEY_CAPSLOCK;
  1059. break;
  1060. case rc_KeyPageUp:
  1061. keyValue=MB_KEY_PAGE_UP;
  1062. break;
  1063. case rc_KeyPageDown:
  1064. keyValue=MB_KEY_PAGE_DOWN;
  1065. break;
  1066. default:
  1067. mb_printf("nkb_machblue_key unvalid key");
  1068. return MB_FAILURE;
  1069. }
  1070. tEvent.type=MB_EVENT_KEY_DOWN;
  1071. MB_ASCII_CODE_ARG(&tEvent)=keyValue;
  1072. MB_KEY_CODE_ARG(&tEvent)=keyValue;
  1073. //key press down
  1074. if(kb_movie_playStatusGet()==kb_movie_playing)
  1075. {
  1076. ret=mb_movie_event_post(_kb_currentMovie.movie,&tEvent);
  1077. if(ret!=MB_SUCCESS)
  1078. {
  1079. mb_printf("n[Machblue]:Client button down operation error.");
  1080.        return MB_FAILURE;
  1081. }
  1082. }
  1083. //key pop up
  1084. tEvent.type=MB_EVENT_KEY_UP;
  1085. if(kb_movie_playStatusGet()==kb_movie_playing)
  1086. {
  1087. ret=mb_movie_event_post(_kb_currentMovie.movie,&tEvent);
  1088. if(ret!=MB_SUCCESS)
  1089. {
  1090. mb_printf("n[Machblue]:Client button up operation error.");
  1091.        return MB_FAILURE;
  1092. }
  1093. }
  1094. return MB_SUCCESS;
  1095. }
  1096. /**
  1097.  * Get machblue client graphics context. 
  1098.  * @return pointer of graphics context.
  1099.  */
  1100. mb_gfx_ctx_t *kb_machblue_getGraphicsContext(void)
  1101. {
  1102. return &_kb_graphicsContext;
  1103. }
  1104. /**
  1105.  * get current movie information. 
  1106.  * @return None.
  1107.  */
  1108. void kb_machblue_getCurMovieInfo(kb_movie_struct_t *current_movie)
  1109. {
  1110. *current_movie=_kb_currentMovie;
  1111. }
  1112. kb_movie_struct_t *kb_machblue_getCurrentMovie(void)
  1113. {
  1114. return &_kb_currentMovie;
  1115. }
  1116. /**
  1117.  * get movie data by information
  1118.  * pData < pointer to storage movie data >
  1119.  * pInfo < pointer of movie information >
  1120.  
  1121.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  1122.  */
  1123. mb_error_t kb_machblue_getMovieData(unsigned char *pData,kb_movie_info_t *pInfo)
  1124. {
  1125. mb_memcpy((void*)_kb_currentMovie.data,(const void*)pInfo->pData,(mb_size_t)_kb_currentMovie.info.size);
  1126. return MB_SUCCESS;
  1127. }
  1128. kb_movie_name kb_machblue_getMovieName(unsigned char *pName)
  1129. {
  1130. kb_movie_name movieName=kb_movie_last;
  1131. if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_MAIN,(mb_char_t*)pName)==0)
  1132. movieName=kb_movie_menu_main;
  1133. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_PGM_LIST,(mb_char_t*)pName)==0)
  1134. movieName=kb_movie_menu_video_list;
  1135. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_NVOD,(mb_char_t*)pName)==0)
  1136. movieName=kb_movie_menu_nvod;
  1137. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_EPG,(mb_char_t*)pName)==0)
  1138. movieName=kb_movie_menu_epg;
  1139. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_SEARCH,(mb_char_t*)pName)==0)
  1140. movieName=kb_movie_menu_search;
  1141. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_SEARCHALL,(mb_char_t*)pName)==0)
  1142. movieName=kb_movie_menu_searchAll;
  1143. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_MAIL,(mb_char_t*)pName)==0)
  1144. movieName=kb_movie_menu_mail;
  1145. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_SYS_INFO,(mb_char_t*)pName)==0)
  1146. movieName=kb_movie_menu_sys_info;
  1147. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_SYS_INFO_HELP,(mb_char_t*)pName)==0)
  1148. movieName=kb_movie_menu_help;
  1149. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_PF,(mb_char_t*)pName)==0)
  1150. movieName=kb_movie_menu_pf;
  1151. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_SOUND,(mb_char_t*)pName)==0)
  1152. movieName=kb_movie_menu_volume;
  1153. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_SOUND_MUTE,(mb_char_t*)pName)==0)
  1154. movieName=kb_movie_menu_volumeMute;
  1155. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_PROMPT,(mb_char_t*)pName)==0)
  1156. movieName=kb_movie_menu_popup;
  1157. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_DBC_WEATHER,(mb_char_t*)pName)==0)
  1158. movieName=kb_movie_dbc_weather;
  1159. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_DBC_GOV_BULLETIN,(mb_char_t*)pName)==0)
  1160. movieName=kb_movie_dbc_gov;
  1161. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_ADVE_LOGO,(mb_char_t*)pName)==0)
  1162. movieName=kb_movie_adve_logo;
  1163. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_CHANNEL_NO,(mb_char_t*)pName)==0)
  1164. movieName=kb_movie_menu_channle_no;
  1165. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_CA_INFORM,(mb_char_t*)pName)==0)
  1166. movieName=kb_movie_ca_inform;
  1167. else if(mb_strcmp((mb_char_t*)MOVIE_NAME_MENU_VOTE,(mb_char_t*)pName)==0)
  1168. movieName=kb_movie_vote_voteMenu;
  1169. return movieName;
  1170. }
  1171. /**
  1172.  * switch different menu movie
  1173.  * pAttribs < data of movie which will be switched >
  1174.  *
  1175.  * @return MB_SUCCESS, MB_FAILURE otherwise.
  1176.  */
  1177. mb_error_t kb_machblue_switchMenuMovie(kb_lc_attributes_t *pAttribs)
  1178. {
  1179. kb_movie_name movieName=kb_movie_last;
  1180. kb_movie_info_t *pInfo=NULL;
  1181. if(pAttribs==NULL)
  1182. {
  1183.       mb_printf("n[kb_machblue_switchMenuMovie]:Client menu operatioin attributes NULL.");
  1184. return MB_FAILURE;
  1185. }
  1186. movieName=kb_machblue_getMovieName((unsigned char *)pAttribs->parameters[lc_data1].value);
  1187. //mb_printf("n[machblue]kb_machblue_switchMenuMovie: aim moive name is %sn",(unsigned char *)pAttribs->parameters[lc_data1].value);
  1188. /*
  1189. if(movieName== kb_movie_menu_video_list)
  1190. {
  1191. int pro_total,pPrgType,pPrgNO;
  1192. pro_total = KB_DBGetPrgTotal(DTVPRG);
  1193. if (pro_total>0)
  1194. {     
  1195. KB_DTVGetPrg(&pPrgType,&pPrgNO);
  1196. if (pPrgType != DTVPRG)
  1197. {
  1198. mb_printf("nkb_machblue_switchMenuMovie play video");
  1199. KB_DTVPlayPrg(DTVPRG, 1); 
  1200. playFirst=TRUE;
  1201. }
  1202. }           
  1203. else
  1204. {
  1205. kb_machblue_lc_menu_noRadioList(DTVPRG);
  1206. return MB_SUCCESS;
  1207. }
  1208. }               
  1209. */
  1210. _kb_secMovieName=movieName;
  1211. _kb_secMovieFlag=FALSE;
  1212. kb_machblue_movie_close(FALSE);
  1213. return MB_SUCCESS;
  1214. }
  1215. //for test
  1216. void kb_machblue_create_schedule(unsigned long serviceID)
  1217. {
  1218. unsigned long index;
  1219. kb_movie_serviceList_t *pServList;
  1220. pServList=kb_mb_service_list_get();
  1221. KB_LoadDmdEnt();
  1222. KB_DelOnTimeDmdEnt();
  1223. //mb_printf("n************************************");
  1224. //mb_printf("n[Machblue]kb_machblue_create_schedule");
  1225. //mb_printf("n************************************");
  1226. for(index=0;index<pServList->count;index++)
  1227. {
  1228. if(pServList->services[index].info.display_id==serviceID)
  1229. {
  1230. kb_mb_event_schedule_create(&pServList->services[index]);
  1231. break;
  1232. }
  1233. }
  1234. }
  1235. void kb_machblue_search_schedule(void)
  1236. {
  1237. int pPrgType,pPrgNO;
  1238. unsigned short tsID,serviceID;
  1239. //printf("n$$$$$$$$$$$$$$$$$$$$$$$$$");
  1240. //printf("nstart to search event");
  1241. //printf("n$$$$$$$$$$$$$$$$$$$$$$$$$");
  1242. STB_StateSwitch(State_EPG);
  1243. KB_DTVGetCurPrgInfo(&tsID,&serviceID);
  1244. KB_DTVGetPrg(&pPrgType,&pPrgNO);
  1245. pPrgNO=KD_GetPrgInxByTsidSvcID(pPrgType,tsID,serviceID);
  1246. KB_EPGGetPrgSCH(pPrgType,pPrgNO+1);
  1247. }
  1248. void KB_MENUTranslateMsg(KB_OSPMsgNode* pInMsg)
  1249. {
  1250. }
  1251. bool kb_machblue_TSMovie2(KB_MovieInfoNode *pInfo)
  1252. {
  1253. unsigned short tsID=0,serviceID=0;
  1254. mb_printf("n-------kb_machblue_TSMovie2-------");
  1255. pInfo->st_MovieInfo.m_pData=mb_malloc((mb_size_t)pInfo->st_MovieInfo.m_nSize);
  1256. if(kb_dc_getMovie(pInfo)==FALSE)
  1257. {
  1258. mb_printf("n[Machblue]:Client get movie adver data error.");
  1259. mb_free(pInfo->st_MovieInfo.m_pData);
  1260. return false;
  1261. }   
  1262. if(KB_DTVGetCurPrgInfo(&tsID,&serviceID))
  1263. {
  1264. if(pInfo->st_MovieInfo.m_serviceID!=serviceID)
  1265. {
  1266. mb_free(pInfo->st_MovieInfo.m_pData);
  1267. return false;
  1268. }
  1269. }
  1270. g_kb_adv_swf.type=movie_adver;
  1271. g_kb_adv_swf.size=pInfo->st_MovieInfo.m_nSize;
  1272. g_kb_adv_swf.pData=pInfo->st_MovieInfo.m_pData;
  1273. g_kb_adv_swf.para1=0;
  1274. g_kb_adv_swf.para2=0;
  1275. g_kb_adv_swf.valid=TRUE;
  1276. g_kb_adv_swf.name=kb_movie_adve_realtime;
  1277. if(kb_movie_playStatusGet()==kb_movie_closed)
  1278. {
  1279. if(pInfo->st_MovieInfo.m_cfgType==kb_dc_ser_alter)
  1280. KB_Vote_SetServiceType(pInfo->st_MovieInfo.m_reserve1);
  1281. //play current movie
  1282. if(kb_machblue_movie_play(kb_movie_adve_realtime)!=MB_SUCCESS)
  1283. {
  1284. mb_free(pInfo->st_MovieInfo.m_pData);
  1285. return false;
  1286. }
  1287. else
  1288. return true;
  1289. }
  1290. else
  1291. {
  1292. mb_free(pInfo->st_MovieInfo.m_pData);
  1293. return false;
  1294. }
  1295. }
  1296. /*
  1297. *函数名称:KB_Machblue_PcmFlagSet
  1298. *
  1299. *函数简介:设置PCM  开关标志
  1300. *
  1301. *输入参数:flag  设置的PCM  开关标志的值
  1302. *
  1303. *输出参数:无
  1304. *
  1305. *返   回   值:无
  1306. */
  1307. void KB_Machblue_PcmFlagSet(kb_movie_sound type,BOOL flag)
  1308. {
  1309. mb_semaphore_wait(g_kb_machblue_pcmStatus);
  1310. g_kb_machblue_pcmType=type;
  1311. g_kb_machblue_pcmFlag=flag;
  1312. mb_semaphore_signal(g_kb_machblue_pcmStatus);
  1313. }
  1314. /*
  1315. *函数名称:KB_Machblue_PcmFlagGet
  1316. *
  1317. *函数简介:获得PCM  开关标志
  1318. *
  1319. *输入参数:无
  1320. *
  1321. *输出参数:flag PCM  开关标志
  1322. *
  1323. *返   回   值:无
  1324. */
  1325. void KB_Machblue_PcmFlagGet(BOOL *flag)
  1326. {
  1327. mb_semaphore_wait(g_kb_machblue_pcmStatus);
  1328. *flag=g_kb_machblue_pcmFlag;
  1329. mb_semaphore_signal(g_kb_machblue_pcmStatus);
  1330. }
  1331. void KB_Machblue_MpegSoundReSet(void)
  1332. {
  1333. unsigned long logoSoundSize;
  1334. unsigned char *logoSoundData;
  1335. logoSoundData = (unsigned char *)KB_Swf_GetLogoSound (&logoSoundSize);
  1336. *(unsigned char**)g_kb_machblue_pcmDataHandle=logoSoundData;
  1337. *(unsigned long*)g_kb_machblue_pcmSizeHandle=logoSoundSize;
  1338. }
  1339. /*
  1340. *函数名称:KB_Machblue_MpegSoundSet
  1341. *
  1342. *函数简介:设置MPEG  声音数据
  1343. *
  1344. *输入参数:无
  1345. *
  1346. *输出参数:pData 声音数据buffer  
  1347. *  size 声音数据字节数
  1348. *
  1349. *返   回   值:无
  1350. */
  1351. void KB_Machblue_MpegSoundSet(unsigned char **pData,unsigned long *size)
  1352. {
  1353. mb_error_t ret;
  1354. // Create pcm flag semaphore
  1355. ret=mb_semaphore_create(&g_kb_machblue_pcmStatus,1);
  1356. if(ret!=MB_SUCCESS)
  1357.     {
  1358.      mb_printf("n[Machblue]:Client create pcm flag semaphore error[%d].",ret);
  1359. return;
  1360.     }
  1361. g_kb_machblue_pcmDataHandle=(unsigned long)pData;
  1362. g_kb_machblue_pcmSizeHandle=(unsigned long)size;
  1363. }
  1364. /***
  1365. 在填加了swf 模块以后,所使用的影片播放接口
  1366. ***/
  1367. void kb_swf_test(unsigned char *p,unsigned long size)
  1368. {
  1369. g_kb_adv_swf.type=movie_adver;
  1370. g_kb_adv_swf.size=size;
  1371. g_kb_adv_swf.pData=p;
  1372. g_kb_adv_swf.para1=0;
  1373. g_kb_adv_swf.para2=0;
  1374. g_kb_adv_swf.valid=TRUE;
  1375. g_kb_adv_swf.name=kb_movie_adve_realtime;
  1376. //play current movie
  1377. if(kb_movie_playStatusGet()==kb_movie_closed)
  1378. kb_machblue_movie_play(kb_movie_adve_realtime);
  1379. else
  1380. {
  1381. _kb_playMovie.name=kb_movie_adve_realtime;
  1382. _kb_playMovie.flag=TRUE;
  1383. kb_machblue_movie_close(TRUE);
  1384. }
  1385. }
  1386. void kb_machblue_alterAdvPlay(unsigned char flag)
  1387. {
  1388. switch(flag)
  1389. {
  1390. case 1:
  1391. g_kb_adv_swf.size=movie_alter1_size;
  1392. g_kb_adv_swf.pData=movie_alter1;
  1393. break;
  1394. case 2:
  1395. g_kb_adv_swf.size=movie_alter2_size;
  1396. g_kb_adv_swf.pData=movie_alter2;
  1397. break;
  1398. default:
  1399. break;
  1400. }
  1401. g_kb_adv_swf.type=movie_adver;
  1402. g_kb_adv_swf.para1=0;
  1403. g_kb_adv_swf.para2=0;
  1404. g_kb_adv_swf.valid=TRUE;
  1405. g_kb_adv_swf.name=kb_movie_adve_alter;
  1406. //play current movie
  1407. if(kb_movie_playStatusGet()==kb_movie_closed)
  1408. kb_machblue_movie_play(kb_movie_adve_alter);
  1409. else if(kb_movie_playStatusGet()==kb_movie_playing)
  1410. {
  1411. _kb_playMovie.name=kb_movie_adve_alter;
  1412. _kb_playMovie.flag=TRUE;
  1413. kb_machblue_movie_close(TRUE);
  1414. }
  1415. }
  1416. void kb_machblue_updatePlay(void)
  1417. {
  1418. //play current movie
  1419. if(kb_movie_playStatusGet()==kb_movie_closed)
  1420. kb_machblue_movie_play(kb_movie_swfUpdatePrompt);
  1421. else if(kb_movie_playStatusGet()==kb_movie_playing)
  1422. {
  1423. _kb_playMovie.name=kb_movie_swfUpdatePrompt;
  1424. _kb_playMovie.flag=TRUE;
  1425. kb_machblue_movie_close(TRUE);
  1426. }
  1427. }
  1428. /* EOF... */