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

DVD

开发平台:

C/C++

  1. #include "swf.h"
  2. #include "kb_watch.h"
  3. #include "time.h"
  4. #include "osp.h"
  5. #include "stbmoviesinfo.h"
  6. #include "XmlStbInfo.h"
  7. #include "kb_dc_task.h"
  8. #include "avplay.h"
  9. #include "pub_st.h"
  10. #include "timeclk.h"
  11. #include "kb_machblue_client.h"
  12. void KB_WatchTask(void)
  13. {
  14. time_t curTime, end_time;
  15. KB_OSPMsgNode msg;
  16. KB_MovieInfoNode *movieInfo=NULL;
  17. unsigned short curTSID,curServiceID;
  18. int x;
  19. unsigned long year,month,day,hour,minter,second;
  20. unsigned char verSTB=0,verDC=0;
  21. static bool updateInfo=false;
  22. while(1)
  23. {
  24. KB_OSPTaskDelay(2000);
  25. KB_TimeGetCurTime(&curTime);
  26. #if 0
  27. ConvertTimeStampToDate(curTime,&year,&month,&day);
  28. ConvertTimeStampToTime(curTime,&hour,&minter,&second);
  29. mb_printf("nKB_WatchTask current time[%d],year[%d],month[%d],day[%d],hour[%d],minter[%d],second[%d]",curTime,year,month,day,hour,minter,second);
  30. #endif
  31. movieInfo=KB_GetXmlMovieInfoHead();
  32. while(movieInfo!=NULL)
  33. {
  34. //数据广播数据文件
  35. if(((movieInfo->st_MovieInfo.m_cfgType==kb_dc_data_broadcast)||
  36.      (movieInfo->st_MovieInfo.m_cfgType==kb_dc_data_vote))&&
  37.    (movieInfo->st_MovieInfo.m_dataGet==kb_dc_data_no))
  38. {
  39. movieInfo->st_MovieInfo.m_dataGet=kb_dc_data_searching;
  40. msg.Word1=kb_db_data_get;
  41. msg.Word2=(UINT32)movieInfo;
  42. KB_DcMsgSend(&msg);
  43. }
  44. //交互广告影片文件
  45. else if((movieInfo->st_MovieInfo.m_cfgType==kb_dc_adv_alter)&&
  46.          (movieInfo->st_MovieInfo.m_dataGet==kb_dc_data_no))
  47. {
  48. movieInfo->st_MovieInfo.m_dataGet=kb_dc_data_searching;
  49. msg.Word1=kb_dc_movie_get;
  50. msg.Word2=(UINT32)movieInfo;
  51. KB_DcMsgSend(&msg);
  52. }
  53. //界面更新影片文件
  54. else if((movieInfo->st_MovieInfo.m_cfgType==kb_dc_swf_update)&&
  55.          (movieInfo->st_MovieInfo.m_dataGet==kb_dc_data_no))
  56. {
  57. verDC=movieInfo->st_MovieInfo.m_reserve2;
  58. //下发的版本号无效
  59. if((verDC==0)||(verDC==255))
  60. {
  61. movieInfo->st_MovieInfo.m_dataGet=kb_dc_data_searched;
  62. }
  63. else
  64. {
  65. if(movieInfo->st_MovieInfo.m_reserve1==kb_movie_adve_logo)
  66. verSTB=KB_SWF_VersionGet(0);
  67. else
  68. verSTB=KB_SWF_VersionGet(1);
  69. if(((verSTB>=250)&&(verSTB!=verDC))||(verSTB<verDC))
  70. {
  71. movieInfo->st_MovieInfo.m_dataGet=kb_dc_data_searching;
  72. msg.Word1=kb_dc_movie_get;
  73. msg.Word2=(UINT32)movieInfo;
  74. KB_DcMsgSend(&msg);
  75. }
  76. else
  77. {
  78. movieInfo->st_MovieInfo.m_dataGet=kb_dc_data_searched;
  79. }
  80. }
  81. }
  82. //插播广告
  83. else if(movieInfo->st_MovieInfo.m_cfgType==kb_dc_adv_rt)
  84. {
  85. if(KB_DTVGetCurPrgInfo(&curTSID,&curServiceID)==FALSE)
  86. {
  87. printf("nKB_DcTask get current program information error.");
  88. }
  89. else
  90. {
  91. //if((movieInfo->st_MovieInfo.m_tsID==curTSID)&&(movieInfo->st_MovieInfo.m_serviceID==curServiceID))
  92. if(movieInfo->st_MovieInfo.m_serviceID==curServiceID)
  93. {
  94. end_time = movieInfo->st_MovieInfo.m_nStartTime + (movieInfo->st_MovieInfo.m_nTimeStep*(movieInfo->st_MovieInfo.m_nTimesPlayed-1) + 10);
  95. if( (curTime>movieInfo->st_MovieInfo.m_nStartTime)&&(curTime<=end_time) )
  96. {
  97. x =  (curTime - movieInfo->st_MovieInfo.m_nStartTime)%(movieInfo->st_MovieInfo.m_nTimeStep);
  98. if((x>=0)&&(x<=10))
  99. {
  100. msg.Word1 = kb_dc_movie_play;
  101. msg.Word2=(UINT32)movieInfo;
  102. KB_DcMsgSend(&msg);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. movieInfo=movieInfo->m_pNext;
  109. }
  110. if(!updateInfo)
  111. {
  112. movieInfo=KB_GetXmlMovieInfoHead();
  113. if(movieInfo==NULL)
  114. continue;
  115. else
  116. updateInfo=true;
  117. while(movieInfo!=NULL)
  118. {
  119. if((movieInfo->st_MovieInfo.m_cfgType==kb_dc_swf_update)&&
  120.    (movieInfo->st_MovieInfo.m_dataGet==kb_dc_data_no))
  121. {
  122. updateInfo=false;
  123. break;
  124. }
  125. movieInfo=movieInfo->m_pNext;
  126. }
  127. if(updateInfo)
  128. {
  129. KB_MovieInfoNode *tmpInfo=NULL,*p1=tmpInfo,*p2;
  130. movieInfo=KB_GetXmlMovieInfoHead();
  131. while(movieInfo!=NULL)
  132. {
  133. //生成链表
  134. if((movieInfo->st_MovieInfo.m_cfgType==kb_dc_swf_update)&&
  135.    (movieInfo->st_MovieInfo.m_pData!=NULL))
  136. {
  137. p2=(KB_MovieInfoNode*)mb_malloc(sizeof(KB_MovieInfoNode));
  138. mb_memcpy(p2,movieInfo,sizeof(KB_MovieInfoNode));
  139. p2->st_MovieInfo.m_pData=(unsigned char*)mb_malloc(p2->st_MovieInfo.m_nSize);
  140. mb_memcpy(p2->st_MovieInfo.m_pData,movieInfo->st_MovieInfo.m_pData,p2->st_MovieInfo.m_nSize);
  141. if(tmpInfo==NULL)
  142. {
  143. tmpInfo=p2;
  144. p1->m_pNext=NULL;
  145. }
  146. else
  147. {
  148. p1->m_pNext=p2;
  149. p1=p2;
  150. p1->m_pNext=NULL;
  151. }
  152. }
  153. movieInfo=movieInfo->m_pNext;
  154. }
  155. KB_SWF_Update(tmpInfo);
  156. while(tmpInfo!=NULL)
  157. {
  158. mb_free(tmpInfo->st_MovieInfo.m_pData);
  159. p1=tmpInfo;
  160. tmpInfo=tmpInfo->m_pNext;
  161. mb_free(p1);
  162. }
  163. }
  164. }
  165. }
  166. }
  167. void KB_WatchTaskInit(void)
  168. {
  169. unsigned long TaskId;
  170. KB_OSPTaskInit("KB_WatchTask", 8*1024,(void(*)(void *))KB_WatchTask,
  171. 1*16,NULL,&TaskId);
  172. }