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

DVD

开发平台:

C/C++

  1. #include <string.h>
  2. #include <assert.h>
  3. #include "flash.h"
  4. #include "db.h"
  5. #include "sipsi.h"  
  6. #include "dmd.h"  
  7. #include "eprom.h"
  8. #include "av.h"
  9. //added by yyj 2007.7.3
  10. #include "demand.h"
  11. //added by yyj 2007.7.16
  12. #include "gendef.h"
  13. KB_DBPrgAllInfo gPrgAllInfo;
  14. KB_DBE2PDATA gE2pData;
  15. static UINT8 gDtvCfgFlag[KB_DB_MAX_DTV];
  16. static UINT8 gRadCfgFlag[KB_DB_MAX_RAD];
  17. //added by whale 07/05/25
  18. static UINT8 gDataCfgFlag[KB_DB_MAX_DATA];
  19. static KB_DBMailNode gMailInfo[KB_DB_MAX_MAIL];
  20. //added by yyj 2007.6.27 start
  21. static UINT8 gVidDispMode;// 视频制式
  22. static UINT8 gVidAspectRatio;// 屏幕宽高比
  23. static UINT8 gConfigAudioVol; // 统一音量
  24. static UINT8 gConfigAudioTrack; // 统一声道
  25. static UINT8 gConfigAdultRank;// 成人级别
  26. static UINT8 gConfigMenuLan;//菜单语言
  27. static UINT8 gConfigMenuTran;// 菜单透明度
  28. //added by yyj 2007.6.27 end
  29. static UINT16 KD_GetFreeNumCfg(UINT8 nPrgType);
  30. static KB_DBRET KD_ResetMailInfo(void);
  31. static KB_DBRET KD_InitMail(void);
  32. static KB_DBRET KD_InitChnnlInfo(void);
  33. static KB_DBRET KD_InitDtvInfo(void);
  34. //added by whale 07/05/25
  35. static KB_DBRET KD_InitDataInfo(void);
  36. static KB_DBRET KD_InitRadInfo(void);
  37. static KB_DBRET KD_ResetNvodInfo(UINT8 bType);
  38. static KB_DBRET KD_InitNvodInfo(void);
  39. static KB_DBRET KD_InitCurPrgInfo(void);
  40. static KB_DBRET KD_InitCurPrgInfo(void);
  41. KB_DBRET KD_ResetCurPrgInfo(void);
  42. static KB_DBRET KD_ResetNetInfo(void);
  43. static KB_DBRET KD_InitNetInfo(void);
  44. static KB_DBRET KD_ResetSysparInfo(void);
  45. static KB_DBRET KD_InitSysparInfo(void);
  46. static KB_DBRET KD_ResetPwdInfo(void);
  47. static KB_DBRET KD_InitPwdInfo(void);
  48. static KB_DBRET KD_ResetSrchInfo(void);
  49. static KB_DBRET KD_InitSrchInfo(void);
  50. static KB_DBRET KD_ResetFavDtv(void);
  51. static KB_DBRET KD_InitFavDtv(void);
  52. static KB_DBRET KD_ResetFavRad(void);
  53. static KB_DBRET KD_InitFavRad(void);
  54. static KB_DBRET KD_ResetSerList(void);
  55. static KB_DBRET KD_InitSerList(void);
  56. static void KD_InitPrgConfig(void);
  57. //static KB_DBRET KD_InitPrgNum(void);
  58. //static KB_DBRET KD_GetPrgNum(void);
  59. static void quicksort(KB_DBPrgInfo *pbuf,int low,int high);
  60. static int quickpart(KB_DBPrgInfo *pbuf,int i,int j);
  61. static KB_DBRET KD_GetPrgConfig(void);
  62. //added by yyj 2007.6.15 start
  63. static KB_DBRET KD_InitPgmCurVol(void);
  64. static KB_DBRET KD_ResetPgmCurVol(void);
  65. //added by yyj 2007.6.15 end
  66. //added by yyj 2007.6.27 start
  67. static KB_DBRET KD_InitVideoDispMode(void);
  68. static KB_DBRET KD_ResetVideoDispMode(void);
  69. static KB_DBRET KD_InitVideoAspectRatio(void);
  70. static KB_DBRET KD_ResetVideoAspectRatio(void);
  71. static KB_DBRET KD_InitPgmCurTrack(void);
  72. static KB_DBRET KD_ResetPgmCurTrack(void);
  73. static KB_DBRET KD_InitAdultRank(void);
  74. static KB_DBRET KD_ResetAdultRank(void);
  75. static KB_DBRET KD_InitMenuLan(void);
  76. static KB_DBRET KD_ResetMenuLan(void);
  77. static KB_DBRET KD_InitMenuTran(void);
  78. static KB_DBRET KD_ResetMenuTran(void);
  79. //added by yyj 2007.6.27 end
  80. //added by yyj 2007.6.27 
  81. #define KB_DB_DEFAULT_MENU_LAN CHINESE
  82. #define KB_DB_DEFAULT_MENU_TRAN  LEVEL_3
  83. /////////////////////
  84. //added by yyj 2007.6.19
  85. static KB_DBRET KD_InitSTBInfo(void);
  86. static KB_DBRET KD_ResetSTBInfo(void);
  87. /////////////////////
  88. //added by yyj 2007.7.3 
  89. //static KB_DBRET KD_ResetDemandInfo(void);
  90. KB_DBRET KB_DBInit(void)
  91. {
  92.     KB_DBRET tRet;
  93.     //UINT8 updateInfo[2];    
  94.      //moved by lsp 07/3/14
  95.      printf("nKB_DBInit");
  96.      if (KD_InitSysparInfo() != RET_OK)
  97.      {
  98.          printf("nKD_InitSysparInfo() != RET_OKn");//lsp 07/3/14
  99.          tRet = KD_ResetSysparInfo();
  100.          if (tRet != RET_OK)
  101.          {
  102.              return tRet;
  103.          }
  104.      }
  105.     //lsp 07/3/14
  106.     if (KB_FlashRead(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  107.     {
  108.         return RET_FAIL;
  109.     }
  110.     else
  111.     {
  112.        if(gPrgAllInfo.gChnnlInfo.nTotal==0xFF)
  113.     gPrgAllInfo.gChnnlInfo.nTotal=0;
  114.      if(gPrgAllInfo.gDTVInfo.nTotal==0xFFFF)
  115. gPrgAllInfo.gDTVInfo.nTotal=0;
  116. if(gPrgAllInfo.gRADInfo.nTotal==0xFFFF)
  117. gPrgAllInfo.gRADInfo.nTotal=0;
  118. //added by whale 07/05/25 start
  119. if(gPrgAllInfo.gDATAInfo.nTotal==0xFFFF)
  120. gPrgAllInfo.gDATAInfo.nTotal=0;
  121. //added by whale 07/05/25 end
  122.     }
  123. tRet = KD_GetPrgConfig();
  124. if (tRet != RET_OK)
  125. {
  126. return tRet;
  127. }
  128.     
  129.     if (KD_InitMail() != RET_OK)
  130.     {
  131.         tRet = KD_ResetMailInfo();
  132.         if (tRet != RET_OK)
  133.         {
  134.             return tRet;
  135.         }
  136.     }
  137.     
  138.     if (KD_InitChnnlInfo() != RET_OK)
  139.     {
  140.         tRet = KB_DBResetChnnlInfo(BufferSave);
  141.         if (tRet != RET_OK)
  142.         {   
  143.             return tRet;
  144.         }
  145.     }
  146. else
  147. {
  148.     if (KD_InitDtvInfo() != RET_OK)
  149.     {
  150.         tRet = KB_DBResetDtvInfo(FlashSave);
  151.         if (tRet != RET_OK)
  152.         {
  153.             return tRet;
  154.         }
  155.     }
  156.     if (KD_InitFavDtv() != RET_OK)
  157.     {
  158.         tRet = KD_ResetFavDtv();
  159.         if (tRet != RET_OK)
  160.         {
  161.             return tRet;
  162.         }
  163.     }
  164.         
  165.     if (KD_InitRadInfo() != RET_OK)
  166.     {        
  167.         tRet = KB_DBResetRadInfo(FlashSave);
  168.         if (tRet != RET_OK)
  169.         {
  170.             return tRet;
  171.         }        
  172.     }
  173.     if (KD_InitFavRad() != RET_OK)
  174.     {
  175.         tRet = KD_ResetFavRad();
  176.         if (tRet != RET_OK)
  177.         {
  178.             return tRet;
  179.         }
  180.     }
  181.     //added by whale 07/05/25 start
  182.     if (KD_InitDataInfo() != RET_OK)
  183.     {
  184.         tRet = KB_DBResetDataInfo(FlashSave);
  185.         if (tRet != RET_OK)
  186.         {
  187.             return tRet;
  188.         }
  189.     }     
  190.     //added by whale 07/05/25 end
  191.     if (KD_InitNvodInfo() != RET_OK)
  192.     {
  193.         tRet = KD_ResetNvodInfo(FlashSave);
  194.         if (tRet != RET_OK)
  195.         {
  196.             return tRet;
  197.         }
  198.     }         
  199.         
  200.     if (KD_InitCurPrgInfo() != RET_OK)
  201.     {
  202.         tRet = KD_ResetCurPrgInfo();
  203.         if (tRet != RET_OK)
  204.         {
  205.             return tRet;
  206.         }
  207.     }
  208. }
  209.     if (KD_InitNetInfo() != RET_OK)
  210.     {
  211.         tRet = KD_ResetNetInfo();
  212.         if (tRet != RET_OK)
  213.         {
  214.             return tRet;
  215.         }
  216.     }
  217.      //moved by lsp 07/3/14
  218.      /* if (KD_InitSysparInfo() != RET_OK)
  219.     {
  220.         tRet = KD_ResetSysparInfo();
  221.         if (tRet != RET_OK)
  222.         {
  223.             return tRet;
  224.         }
  225.     }*/
  226.     //lsp 07/3/14
  227.     
  228.     if (KD_InitPwdInfo() != RET_OK)
  229.     {
  230.         tRet = KD_ResetPwdInfo();
  231.         if (tRet != RET_OK)
  232.         {
  233.             return tRet;
  234.         }
  235.     }
  236.     
  237.     if (KD_InitSrchInfo() != RET_OK)
  238.     {
  239.         tRet = KD_ResetSrchInfo();
  240.         if (tRet != RET_OK)
  241.         {
  242.             return tRet;
  243.         }
  244.     }
  245.     if (KD_InitSerList() != RET_OK)
  246.     {
  247.         tRet = KD_ResetSerList();
  248.         if (tRet != RET_OK)
  249.         {
  250.             return tRet;
  251.         }
  252.     }
  253.     //added by yyj 2007.6.15 start
  254.     if (KD_InitPgmCurVol() != RET_OK)
  255.     {
  256.         tRet = KD_ResetPgmCurVol();
  257.         if (tRet != RET_OK)
  258.         {
  259.             return tRet;
  260.         }
  261.     }
  262.     //added by yyj 2007.6.15 end
  263.     //added by yyj 2007.6.19 start
  264.     if (KD_InitSTBInfo() != RET_OK)
  265.     {
  266.         tRet = KD_ResetSTBInfo();
  267.         if (tRet != RET_OK)
  268.         {
  269.             return tRet;
  270.         }
  271.     }
  272.   //added by yyj 2007.6.19 end
  273.   //added by yyj 2007.6.27 start
  274.  if (KD_InitVideoDispMode() != RET_OK)
  275. {
  276.     tRet = KD_ResetVideoDispMode();
  277.     if (tRet != RET_OK)
  278.     {
  279.         return tRet;
  280.     }
  281. }
  282.     if (KD_InitVideoAspectRatio() != RET_OK)
  283. {
  284.     tRet = KD_ResetVideoAspectRatio();
  285.     if (tRet != RET_OK)
  286.     {
  287.         return tRet;
  288.     }
  289. }
  290. if (KD_InitPgmCurTrack() != RET_OK)
  291. {
  292.     tRet = KD_ResetPgmCurTrack();
  293.     if (tRet != RET_OK)
  294.     {
  295.         return tRet;
  296.     }
  297. }
  298. if (KD_InitAdultRank() != RET_OK)
  299. {
  300.     tRet = KD_ResetAdultRank();
  301.     if (tRet != RET_OK)
  302.     {
  303.         return tRet;
  304.     }
  305. }
  306. if (KD_InitMenuLan() != RET_OK)
  307. {
  308.     tRet = KD_ResetMenuLan();
  309.     if (tRet != RET_OK)
  310.     {
  311.         return tRet;
  312.     }
  313. }
  314. if (KD_InitMenuTran() != RET_OK)
  315. {
  316.     tRet = KD_ResetMenuTran();
  317.     if (tRet != RET_OK)
  318.     {
  319.         return tRet;
  320.     }
  321. }
  322.   //added by yyj 2007.6.27 end
  323.     
  324.     KD_InitPrgConfig();
  325.     
  326.     return RET_OK;
  327. }
  328. static void quicksort(KB_DBPrgInfo *pbuf,int low,int high)
  329. {
  330.     int i;
  331.     if(low < high)
  332.     {
  333.         i = quickpart(pbuf,low,high);
  334.         quicksort(pbuf,low,i-1);
  335.         quicksort(pbuf,i+ 1,high);
  336.     }
  337. }
  338. static int quickpart(KB_DBPrgInfo *pbuf,int i,int j)
  339. {
  340.     KB_DBPrgInfo b;
  341.     
  342.     memcpy(&b,&pbuf[i],sizeof(KB_DBPrgInfo));
  343.     while(i<j)
  344.     {
  345.         while(i<j && pbuf[j].SvcID >= b.SvcID)
  346.         {
  347.             j --;
  348.         }
  349.         if(i< j)
  350.             memcpy(&pbuf[i++],&pbuf[j],sizeof(KB_DBPrgInfo));
  351.         
  352.         while(i<j && pbuf[i].SvcID <= b.SvcID)
  353.         {
  354.             i ++;
  355.         }
  356.         if(i<j)
  357.             memcpy(&pbuf[j --],&pbuf[i],sizeof(KB_DBPrgInfo));
  358.     }
  359.     
  360.     memcpy(&pbuf[i],&b,sizeof(KB_DBPrgInfo));
  361.     return i;
  362. }
  363. KB_DBRET KB_DBSaveChlPatVer(UINT16  Freq,UINT8 patVer)
  364. {
  365.     KB_DBRET ret = RET_FAIL;
  366.     int i,find = 0;
  367.     
  368.     for(i = 0;i< gPrgAllInfo.gChnnlInfo.nTotal;i++)
  369.     {
  370.         if(Freq == gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq)
  371.         {
  372.             find = 1;
  373.             break;
  374.         }
  375.     }
  376.     
  377.     if(find == 1)
  378.     {
  379.         gPrgAllInfo.gChnnlInfo.ChannelList[i].PATVersion = patVer;
  380.         ret = RET_OK;
  381.     }
  382.     
  383.     return  ret ;
  384. }
  385. KB_DBRET KB_DBSaveChlSdtVer(UINT16  Freq,UINT8 sdtVer)
  386. {
  387.     KB_DBRET ret = RET_FAIL;
  388.     int i,find = 0;
  389.     
  390.     for(i = 0;i< gPrgAllInfo.gChnnlInfo.nTotal;i++)
  391.     {
  392.         if(Freq == gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq)
  393.         {
  394.             find = 1;
  395.             break;
  396.         }
  397.     }
  398.     
  399.     if(find == 1)
  400.     {
  401.         gPrgAllInfo.gChnnlInfo.ChannelList[i].SDTVersion = sdtVer;
  402.         ret = RET_OK;
  403.     }
  404.     
  405.     return  ret ;
  406. }
  407. KB_DBRET KB_DBSaveChlInfo(UINT8 addtype,UINT16 OrgNetID,UINT16  tsID,
  408.                                                UINT16  Freq, UINT16  Symb,UINT8   QAM)
  409. {
  410.     int i;
  411.     for(i = 0;i< gPrgAllInfo.gChnnlInfo.nTotal;i++)
  412.     {
  413.         if(Freq == gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq)  
  414.         {
  415.             gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID = tsID;
  416.             gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq = Freq;
  417.             gPrgAllInfo.gChnnlInfo.ChannelList[i].Symb = Symb;
  418.             gPrgAllInfo.gChnnlInfo.ChannelList[i].QAM = QAM;
  419.             if(addtype == 0)
  420.             {
  421.                 gPrgAllInfo.gChnnlInfo.ChannelList[i].NitAddType = addtype;
  422.             }
  423.             return RET_OK;
  424.         }
  425.     }
  426.     
  427.     if ( i >= KB_DB_MAX_CHANNEL_NUM )
  428.     {
  429.         return RET_FAIL; 
  430.     }
  431.     
  432.     gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID = tsID;
  433.     gPrgAllInfo.gChnnlInfo.ChannelList[i].OrgNetID = OrgNetID;
  434.     gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq = Freq;
  435.     gPrgAllInfo.gChnnlInfo.ChannelList[i].Symb = Symb;
  436.     gPrgAllInfo.gChnnlInfo.ChannelList[i].QAM = QAM;
  437.     gPrgAllInfo.gChnnlInfo.ChannelList[i].NitAddType = addtype;
  438.     gPrgAllInfo.gChnnlInfo.nTotal ++;
  439.     return RET_OK;
  440. }
  441. KB_DBRET KD_GetNitInfo(unsigned char *o_pcNITName,
  442.                                     UINT8 *NitVersion)
  443. {
  444.     o_pcNITName = gE2pData.gNetInfo.NetworkName;
  445.     *NitVersion = gE2pData.gNetInfo.NitVersion;
  446.     return RET_OK;
  447. }
  448. KB_DBRET KB_DBSaveNitInfo(KB_DBNetInfo *ptNetworkInfo)
  449. {
  450.     
  451.     gE2pData.gNetInfo = *ptNetworkInfo;
  452.     
  453.     if (KB_E2PWrite(KB_NVM_NETWORK_INFO_ADDR, (UINT8 *)&gE2pData.gNetInfo, sizeof(KB_DBNetInfo), NULL) != RETOK)
  454.     {
  455.         return RET_FAIL;
  456.     }
  457.     
  458.     return RET_OK;
  459. }
  460. UINT16  KB_DBGetPrgTotal(UINT8 nPrgType)
  461. {
  462.     UINT16 ret = 0;
  463.     
  464.     if (nPrgType == DTVPRG)
  465.     {
  466.         ret = gPrgAllInfo.gDTVInfo.nTotal;
  467.     }
  468.     else if (nPrgType == RADIOPRG)
  469.     {
  470.         ret = gPrgAllInfo.gRADInfo.nTotal;
  471.     }
  472.     //added by whale 07/05/25 start
  473.     else if (nPrgType == DATAPRG)
  474.     {
  475.         ret = gPrgAllInfo.gDATAInfo.nTotal;
  476.     }
  477.     //added by whale 07/05/25 end
  478.     else
  479.     {
  480. ret = 0;
  481.     }
  482.     if (ret == 65535)
  483.     {
  484. ret = 0;
  485.     }
  486.     //--add by shriek gPrgAllInfo.gDATAInfo.nTotal=623669
  487.     if(ret>=23669) 
  488. ret = 0;
  489.     //--end
  490.     return ret;
  491. }
  492. UINT16 KB_DBGetFavPrgTotal(UINT8 nPrgType)
  493. {
  494.     UINT16 ret =  0xffff;
  495.     if(nPrgType != DTVPRG && nPrgType != RADIOPRG)
  496.     {
  497.         printf("nKB_DBGetFavPrgTotal::input PrgType(%d) error",
  498.                 nPrgType);
  499.         return ret;
  500.     }
  501.     
  502.     if (DTVPRG == nPrgType)
  503.     {
  504.         ret = gE2pData.gDTVFavInfo.nTotal;
  505.     }
  506.     else if (RADIOPRG == nPrgType)
  507.     {
  508.         ret = gE2pData.gRADFavInfo.nTotal;
  509.     }
  510.     
  511.     return ret;
  512. }
  513. KB_DBRET KB_DBGetPrgInfo(UINT16 nPrgInx,
  514.                                     UINT8 nPrgType,
  515.                                     KB_DBPrgInfo *pPrgInfo,
  516.                                     KB_DBChnnlInfo *pChnnlInfo,
  517.                                     UINT8 *pTrack,
  518.                                     UINT8 *pbVolume,
  519.                                     UINT8 *pLockFlag)
  520. {
  521.     
  522.     UINT8  nConfigInfo = 0;
  523. UINT8 i;
  524.     if((nPrgInx <0 ) || (nPrgInx >= KB_DBGetPrgTotal(nPrgType)))
  525.     {
  526.         return RET_FAIL;
  527.     }
  528.     
  529.     if (nPrgType == DTVPRG)
  530.     {
  531.         memcpy(pPrgInfo,&gPrgAllInfo.gDTVInfo.PgmList[nPrgInx],sizeof(KB_DBPrgInfo));
  532.         
  533.         nConfigInfo = gE2pData.gDTVPrgCfgInfo[pPrgInfo->IndexOfConfigInfo].Lock_Track_Vol;
  534.     }
  535.     else if (nPrgType == RADIOPRG)
  536.     {
  537.         memcpy(pPrgInfo,&gPrgAllInfo.gRADInfo.PgmList[nPrgInx],sizeof(KB_DBPrgInfo));
  538.         
  539.         nConfigInfo = gE2pData.gRADPrgCfgInfo[pPrgInfo->IndexOfConfigInfo].Lock_Track_Vol;
  540.     }
  541.     //added by whale 07/05/25 start
  542.     else if (nPrgType == DATAPRG)
  543.     {
  544.         memcpy(pPrgInfo,&gPrgAllInfo.gDATAInfo.PgmList[nPrgInx],sizeof(KB_DBPrgInfo));
  545.         
  546.         nConfigInfo = gE2pData.gDATAPrgCfgInfo[pPrgInfo->IndexOfConfigInfo].Lock_Track_Vol;
  547.     }
  548.     //added by whale 07/05/25 end
  549.     
  550.     *pLockFlag = (UINT8)((nConfigInfo >> 7) & 0x01);
  551.     *pTrack    = (UINT8)((nConfigInfo >> 5) & 0x03);
  552.     *pbVolume   = (UINT8)(nConfigInfo & 0x1F);
  553. for (i=0; i<gPrgAllInfo.gChnnlInfo.nTotal; i++)
  554. {
  555.     if (nPrgType == DTVPRG)
  556.     {
  557. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  558.  == gPrgAllInfo.gDTVInfo.PgmList[nPrgInx].TSID)
  559. {
  560. break;
  561. }
  562.     }
  563.     else if (nPrgType == RADIOPRG)
  564.     {
  565. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  566.  == gPrgAllInfo.gRADInfo.PgmList[nPrgInx].TSID)
  567. {
  568. break;
  569. }
  570.     }
  571.     //added by whale 07/05/25 start
  572.     else if (nPrgType == DATAPRG)
  573.     {
  574. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  575.  == gPrgAllInfo.gDATAInfo.PgmList[nPrgInx].TSID)
  576. {
  577. break;
  578. }
  579.     }
  580.     //added by whale 07/05/25 end
  581. }
  582. if (i < gPrgAllInfo.gChnnlInfo.nTotal)
  583. {
  584. memcpy(pChnnlInfo,
  585.                 &gPrgAllInfo.gChnnlInfo.ChannelList[i],
  586.                 sizeof(KB_DBChnnlInfo));
  587. }
  588. else
  589. {
  590. memset(pChnnlInfo,0,sizeof(KB_DBChnnlInfo));
  591. return RET_FAIL;
  592. }
  593.     
  594.     return RET_OK;
  595. }
  596. KB_DBRET KB_DBGetAllPrgConfig(void)
  597. {
  598.     UINT16 i, sum, indexofconfig;
  599.     KB_DBPrgConfigNode *confignode;
  600.     
  601.     sum = gPrgAllInfo.gDTVInfo.nTotal;
  602.     for (i = 0; i < sum; ++i)
  603.     {
  604.         indexofconfig = gPrgAllInfo.gDTVInfo.PgmList[i].IndexOfConfigInfo;
  605.         confignode = &gE2pData.gDTVPrgCfgInfo[indexofconfig];
  606.         if (confignode->Flag == CONFIG_USED + 1)
  607.         {
  608.             if (KB_E2PRead((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  609.                 (UINT8 *)confignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  610.             {
  611.                 return RET_FAIL;
  612.             }
  613.         }
  614.     }
  615.     sum = gPrgAllInfo.gRADInfo.nTotal;
  616.     for (i = 0; i < sum; ++i)
  617.     {
  618.         indexofconfig = gPrgAllInfo.gRADInfo.PgmList[i].IndexOfConfigInfo;
  619.         confignode = &gE2pData.gRADPrgCfgInfo[indexofconfig];
  620.         if (confignode->Flag == CONFIG_USED + 1)
  621.         {
  622.             if (KB_E2PRead((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  623.                 (UINT8 *)confignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  624.             {
  625.                 return RET_FAIL;
  626.             }
  627.             
  628.         }
  629.     }
  630.     //added by whale 07/05/25 start
  631.     sum = gPrgAllInfo.gDATAInfo.nTotal;
  632.     for (i = 0; i < sum; ++i)
  633.     {
  634.         indexofconfig = gPrgAllInfo.gDATAInfo.PgmList[i].IndexOfConfigInfo;
  635.         confignode = &gE2pData.gDATAPrgCfgInfo[indexofconfig];
  636.         if (confignode->Flag == CONFIG_USED + 1)
  637.         {
  638.             if (KB_E2PRead((UINT16)(KB_NVM_DATA_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  639.                 (UINT8 *)confignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  640.             {
  641.                 return RET_FAIL;
  642.             }
  643.             
  644.         }
  645.     }
  646.     //added by whale 07/05/25 end
  647.     
  648.     return RET_OK;
  649. }
  650. KB_DBRET KB_DBGetPrgConfig(UINT8 PrgType, UINT16 PrgNo)
  651. {
  652.     UINT16 indexofconfig;
  653.     UINT16 readstartaddress;
  654.     UINT8 *confignode;
  655.     
  656.     if (PrgType == DTVPRG)
  657.     {
  658.         readstartaddress = KB_NVM_DTV_PGM_CFG_ADDR;
  659.         indexofconfig = gPrgAllInfo.gDTVInfo.PgmList[PrgNo].IndexOfConfigInfo;
  660.         confignode = (UINT8 *)&gE2pData.gDTVPrgCfgInfo[indexofconfig];
  661.     }
  662.     else if (PrgType == RADIOPRG)
  663.     {
  664.         readstartaddress = KB_NVM_RAD_PGM_CFG_ADDR;
  665.         indexofconfig = gPrgAllInfo.gRADInfo.PgmList[PrgNo].IndexOfConfigInfo;
  666.         confignode = (UINT8 *)&gE2pData.gRADPrgCfgInfo[indexofconfig];
  667.     }
  668.     //added by whale 07/05/25 start
  669.     else if (PrgType == DATAPRG)
  670.     {
  671.         readstartaddress = KB_NVM_DATA_PGM_CFG_ADDR;
  672.         indexofconfig = gPrgAllInfo.gDATAInfo.PgmList[PrgNo].IndexOfConfigInfo;
  673.         confignode = (UINT8 *)&gE2pData.gDATAPrgCfgInfo[indexofconfig];
  674.     }
  675.     //added by whale 07/05/25 end
  676.     if (KB_E2PRead((UINT16)(readstartaddress + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  677.         confignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  678.     {
  679.         return RET_FAIL;
  680.     }
  681.     return RET_OK;
  682. }
  683. UINT16 KB_DBGetSvcIDByNO(UINT8 prgType, UINT16 prgInx)
  684. {
  685. UINT16 service_id;
  686. switch (prgType)
  687. {
  688. case DTVPRG:
  689. service_id = gPrgAllInfo.gDTVInfo.PgmList[prgInx].SvcID;
  690. break;
  691. case RADIOPRG:
  692. service_id = gPrgAllInfo.gRADInfo.PgmList[prgInx].SvcID;
  693. break;
  694. //added by whale 07/05/25 start
  695. case DATAPRG:
  696. service_id = gPrgAllInfo.gDATAInfo.PgmList[prgInx].SvcID;
  697. break;
  698. //added by whale 07/05/25 end
  699. default:
  700. service_id = KB_DB_INVALID_PROGRAMNO;
  701. break;
  702. }
  703. return service_id;
  704. }
  705. UINT16 KD_GetPrgInxBySvcID(UINT8 PrgType, UINT16 ServiceID)
  706. {
  707.     UINT16 i = 0, sum = 0;
  708.     
  709.     sum = KB_DBGetPrgTotal(PrgType);
  710. if (DTVPRG == PrgType)
  711. {
  712.     for (i = 0; i < sum; ++i)
  713.     {
  714.         if (gPrgAllInfo.gDTVInfo.PgmList[i].SvcID == ServiceID)
  715.         {
  716. return i;
  717.         }
  718.     }
  719. }
  720. else if (RADIOPRG== PrgType)
  721. {
  722.     for (i = 0; i < sum; ++i)
  723.     {
  724.         if (gPrgAllInfo.gRADInfo.PgmList[i].SvcID == ServiceID)
  725.         {
  726. return i;
  727.         }
  728.     }
  729. }
  730. //added by whale 07/05/25 start
  731. else if (DATAPRG== PrgType)
  732. {
  733.     for (i = 0; i < sum; ++i)
  734.     {
  735.         if (gPrgAllInfo.gDATAInfo.PgmList[i].SvcID == ServiceID)
  736.         {
  737. return i;
  738.         }
  739.     }
  740. }
  741. //added by whale 07/05/25 end
  742. else
  743. {
  744. return KB_DB_INVALID_PROGRAMNO;
  745. }
  746. return KB_DB_INVALID_PROGRAMNO;
  747.     
  748. }
  749. KB_DBRET KB_DBGetFavPrgInfoByFavInx(UINT8 Favindex, 
  750.                                             UINT8 nPrgType,
  751.                                             UINT16 *pwPrgInx,
  752.                                             KB_DBPrgInfo *pPrgInfo,
  753.                                             KB_DBChnnlInfo *pChnnlInfo,
  754.                                             UINT8 *pTrack,
  755.                                             UINT8 *pbVolume,
  756.                                             UINT8 *pLockFlag)
  757. {
  758.     if(pwPrgInx == NULL || pPrgInfo == NULL || pChnnlInfo == NULL
  759.         || pTrack == NULL || pbVolume == NULL || pLockFlag == NULL)
  760.     {
  761.         return RET_FAIL;
  762.     }
  763.     
  764.     if (nPrgType == DTVPRG)
  765.     {
  766.         *pwPrgInx = KD_GetPrgInxByTsidSvcID(nPrgType, 
  767.                                                 gE2pData.gDTVFavInfo.FavList[Favindex].TsId,
  768.                                                 gE2pData.gDTVFavInfo.FavList[Favindex].SrvId);
  769.         if (*pwPrgInx == KB_DB_INVALID_PROGRAMNO || KB_DBGetPrgInfo(*pwPrgInx, DTVPRG, pPrgInfo,
  770.             pChnnlInfo, pTrack, pbVolume, pLockFlag) != RET_OK)
  771.         {
  772.             return RET_FAIL;
  773.         }
  774.     }
  775.     else if (nPrgType == RADIOPRG)
  776.     {
  777.         *pwPrgInx = KD_GetPrgInxByTsidSvcID(nPrgType, 
  778.                                                 gE2pData.gRADFavInfo.FavList[Favindex].TsId,
  779.                                                 gE2pData.gRADFavInfo.FavList[Favindex].SrvId);
  780.         if (*pwPrgInx == KB_DB_INVALID_PROGRAMNO || KB_DBGetPrgInfo(*pwPrgInx, RADIOPRG, pPrgInfo,
  781.             pChnnlInfo, pTrack, pbVolume, pLockFlag) != RET_OK)
  782.         {
  783.             return RET_FAIL;
  784.         }
  785.     }
  786.     
  787.     return RET_OK;
  788. }
  789. KB_DBRET KB_DBGetChlNoByModPara(UINT16 pFreq,UINT16 wSymb,
  790.                                                     UINT8 bQam,UINT8 *pbChannelNo)
  791. {
  792.     UINT8 i;
  793.     
  794.     for (i = 0; i < gPrgAllInfo.gChnnlInfo.nTotal; ++i)
  795.     {
  796.         if (gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq == pFreq
  797.             && gPrgAllInfo.gChnnlInfo.ChannelList[i].Symb == wSymb
  798.             && gPrgAllInfo.gChnnlInfo.ChannelList[i].QAM  == bQam)
  799.         {
  800.             *pbChannelNo = i;
  801.             return RET_OK;
  802.         }
  803.     }
  804.     
  805.     return RET_FAIL;
  806. }
  807. KB_DBRET KB_DBGetModParaByChlNo(UINT8 bChannelNo,UINT16 *pFre,
  808.                                             UINT16 *pSymb,UINT8 *pQam)
  809.                                             
  810. {  
  811.     *pFre = gPrgAllInfo.gChnnlInfo.ChannelList[bChannelNo].Freq;
  812.     *pSymb = gPrgAllInfo.gChnnlInfo.ChannelList[bChannelNo].Symb;
  813.     *pQam  = gPrgAllInfo.gChnnlInfo.ChannelList[bChannelNo].QAM;
  814.     return RET_OK;
  815. }
  816. KB_DBRET KB_DBGetSrchInfo(KB_DBSrchInfo *pSrchInfo)
  817. {
  818.     *pSrchInfo = gE2pData.gSrchInfo;
  819.     return RET_OK;
  820. }
  821. KB_DBRET KB_DBSaveSrchInfo(KB_DBSrchInfo *pSrchInfo)
  822. {
  823.     gE2pData.gSrchInfo = *pSrchInfo;
  824.     
  825.     if (KB_E2PWrite(KB_NVM_SEARCH_INFO_ADDR, (UINT8 *)&gE2pData.gSrchInfo, sizeof(KB_DBSrchInfo), NULL) != RETOK)
  826.     {
  827.         return RET_FAIL;
  828.     }
  829.     
  830.     return RET_OK;
  831. }
  832. KB_DBRET KB_DBGetCurPrgInfo(unsigned short *pPrgNO, unsigned char *pPrgType)
  833. {
  834.     *pPrgNO = gE2pData.gCurPrgInfo.prgNO;
  835.     *pPrgType = gE2pData.gCurPrgInfo.prgType;
  836.     return RET_OK;
  837. }
  838. KB_DBRET KB_DBGetTsIDByFre(UINT16 *TsID,unsigned long Fre)
  839. {
  840.     int i;
  841.     
  842.     if(TsID == NULL)
  843.     {
  844.         return RET_FAIL;
  845.     }
  846.     
  847.     for(i = 0;i< gPrgAllInfo.gChnnlInfo.nTotal;i++)
  848.     {
  849.         if(gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq == Fre)
  850.         {
  851.             *TsID = gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID;
  852.             return RET_OK;
  853.         }
  854.     }
  855.     
  856.     return RET_FAIL;
  857. }
  858. KB_DBRET KB_DBSaveCurPrgInfo(UINT16 nPrgNO, UINT8 nPrgType)
  859. {
  860.    
  861.     gE2pData.gCurPrgInfo.prgNO = nPrgNO;
  862.     gE2pData.gCurPrgInfo.prgType= nPrgType;
  863.    
  864.     if(KB_E2PWrite(KB_NVM_CUR_PGM_ADDR, (UINT8 *)&gE2pData.gCurPrgInfo, sizeof(KB_DBCurPrgInd), NULL) != RETOK)
  865.     {
  866.         return RET_FAIL;
  867.     }
  868.     
  869.     return RET_OK;
  870. }
  871. KB_DBRET KB_DBSavePrgAVPara(UINT16 nPrgNO, UINT8 nPrgType,unsigned short nPcrPID, 
  872.                                        unsigned short nAudioPID, 
  873.                                        unsigned short nVideoPID)
  874. {
  875.     unsigned short totalChannels;
  876.     
  877.     switch(nPrgType)
  878.     {
  879.     case RADIOPRG:
  880.         totalChannels = KB_DBGetPrgTotal(nPrgType);
  881.         if(nPrgNO > totalChannels || nPrgNO == 0)
  882.             return RET_FAIL;
  883.         
  884.         gPrgAllInfo.gRADInfo.PgmList[nPrgNO - 1].AudioPID  = nAudioPID;
  885.         gPrgAllInfo.gRADInfo.PgmList[nPrgNO - 1].VideoPID  = nVideoPID;
  886.         gPrgAllInfo.gRADInfo.PgmList[nPrgNO - 1].PCRPID  = nPcrPID;
  887.         
  888.         break;
  889.     //added by whale 07/05/25 start
  890.     case DATAPRG:
  891.         totalChannels = KB_DBGetPrgTotal(nPrgType);
  892.         if(nPrgNO > totalChannels || nPrgNO == 0)
  893.             return RET_FAIL;
  894.         
  895.         gPrgAllInfo.gDATAInfo.PgmList[nPrgNO - 1].AudioPID  = nAudioPID;
  896.         gPrgAllInfo.gDATAInfo.PgmList[nPrgNO - 1].VideoPID  = nVideoPID;
  897.         gPrgAllInfo.gDATAInfo.PgmList[nPrgNO - 1].PCRPID  = nPcrPID;
  898.         
  899.         break;
  900.     //added by whale 07/05/25 end
  901.     default:
  902.         totalChannels = KB_DBGetPrgTotal(nPrgType);
  903.         if(nPrgNO > totalChannels || nPrgNO == 0)
  904.             return RET_FAIL;
  905.         
  906.         gPrgAllInfo.gDTVInfo.PgmList[nPrgNO - 1].AudioPID  = nAudioPID;
  907.         gPrgAllInfo.gDTVInfo.PgmList[nPrgNO - 1].VideoPID  = nVideoPID;
  908.         gPrgAllInfo.gDTVInfo.PgmList[nPrgNO - 1].PCRPID  = nPcrPID;
  909.         
  910.         break;
  911.     }
  912.     return RET_OK;
  913. }
  914. KB_DBRET KB_DBChangePrgInfo(UINT16 nPrgInx, UINT8 nPrgType, 
  915.                                            KB_DBPrgInfo *pPrgInfo)
  916. {
  917.     
  918.     if (nPrgType == DTVPRG)
  919.     {
  920.         gPrgAllInfo.gDTVInfo.PgmList[nPrgInx] = *pPrgInfo;
  921.         
  922.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  923.         {
  924.             return RET_FAIL;
  925.         }
  926.     }
  927.     else if (nPrgType == RADIOPRG)
  928.     {
  929.         gPrgAllInfo.gRADInfo.PgmList[nPrgInx] = *pPrgInfo;
  930.         
  931.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  932.         {
  933.             return RET_FAIL;
  934.         }
  935.     }
  936.     //added by whale 07/05/25 start
  937.     else if (nPrgType == DATAPRG)
  938.     {
  939.         gPrgAllInfo.gDATAInfo.PgmList[nPrgInx] = *pPrgInfo;
  940.         
  941.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  942.         {
  943.             return RET_FAIL;
  944.         }
  945.     }
  946.     //added by whale 07/05/25 end
  947.     return RET_OK;
  948. }
  949. static void KD_AddPrgToBuffer(UINT8 nPrgType, KB_DBPrgInfo *pPrgInfo)
  950. {
  951.     UINT16 indexofconfig;
  952.     KB_DBPrgConfigNode *ptConfigNode;
  953.     KB_DBPrgInfo *ptPgmNode;
  954.     
  955.     if (nPrgType == DTVPRG)
  956.     {
  957.         ptPgmNode = &gPrgAllInfo.gDTVInfo.PgmList[gPrgAllInfo.gDTVInfo.nTotal];
  958.         indexofconfig = KD_GetFreeNumCfg(DTVPRG);
  959.         gDtvCfgFlag[indexofconfig] = 1;
  960.         ptConfigNode = &gE2pData.gDTVPrgCfgInfo[indexofconfig];
  961.         ++gPrgAllInfo.gDTVInfo.nTotal;
  962.     }
  963.     else if (nPrgType == RADIOPRG)
  964.     {
  965.         ptPgmNode = &gPrgAllInfo.gRADInfo.PgmList[gPrgAllInfo.gRADInfo.nTotal];
  966.         indexofconfig = KD_GetFreeNumCfg(RADIOPRG);
  967.         gRadCfgFlag[indexofconfig] = 1;
  968.         ptConfigNode = &gE2pData.gRADPrgCfgInfo[indexofconfig];
  969.         ++gPrgAllInfo.gRADInfo.nTotal;
  970.     }
  971.     //added by whale 07/05/25 start
  972.     else if (nPrgType == DATAPRG)
  973.     {
  974.         ptPgmNode = &gPrgAllInfo.gDATAInfo.PgmList[gPrgAllInfo.gDATAInfo.nTotal];
  975.         indexofconfig = KD_GetFreeNumCfg(DATAPRG);
  976.         gDataCfgFlag[indexofconfig] = 1;
  977.         ptConfigNode = &gE2pData.gRADPrgCfgInfo[indexofconfig];
  978.         ++gPrgAllInfo.gDATAInfo.nTotal;
  979.     }
  980.     //added by whale 07/05/25 end
  981.     ptConfigNode->Lock_Track_Vol = 0x14;
  982.     ptConfigNode->Flag = CONFIG_USED;
  983.     ptPgmNode->IndexOfConfigInfo = indexofconfig;
  984. }
  985. void KB_DBAddPrgInfo(KB_DBPrgNode *prginfo,UINT16 prgSum,
  986.                        unsigned short *addDtv, unsigned short *addMusic)
  987. {
  988.     int i, j;
  989.     UINT16 prgtotal,prgMax;
  990.     int found = 0;
  991.     int len = 0;
  992.     UINT8 prgType;
  993.     unsigned short addDtvprg = 0,addMusicprg = 0;
  994.     
  995.     KB_DBPrgInfo *prgInfoPos = NULL;
  996.     
  997.     for(i = 0; i < prgSum; i ++)
  998.     {
  999.         if(prginfo[i].PATVersion != KB_DB_UNKNOWN_VERSION 
  1000. && prginfo[i].PMTVersion != KB_DB_UNKNOWN_VERSION)
  1001.         {
  1002.             //预防没有SDT下发的情况Srv_name,Srv_type,bCAFlag的设置,但是按现在的流程是走不到的
  1003.             if(prginfo[i].SDTVersion == KB_DB_UNKNOWN_VERSION)
  1004.             {
  1005.                 strcpy(prginfo[i].name, "未知节目名");
  1006.                 prginfo[i].bCAFlag = 0; 
  1007.                 if((prginfo[i].Video_Pid != 0) 
  1008. && (prginfo[i].Audio_Pid != 0) 
  1009. && (prginfo[i].PCR_Pid != 0))
  1010.                 {
  1011.                     prginfo[i].service_type = 0x01;
  1012.                 }
  1013.                 else if(prginfo[i].Video_Pid == 0 
  1014.     && prginfo[i].Audio_Pid != 0 
  1015.     && prginfo[i].PCR_Pid != 0)
  1016.                 {
  1017.                     prginfo[i].service_type = 0x02;
  1018.                 }
  1019.                 else
  1020.                 {
  1021.                     prginfo[i].service_type = 0;
  1022.                 }
  1023.             }
  1024.             //printf("-=prginfo[%d].service_type=0x%x=-n", i, prginfo[i].service_type);
  1025.             switch(prginfo[i].service_type)
  1026.             {
  1027.             case 0x01:
  1028.             case 0x02:
  1029.      //added by whale 07/05/25
  1030.      case 0x0C: 
  1031.                 if(prginfo[i].service_type == 0x01)
  1032.                 {
  1033.                     prgInfoPos = gPrgAllInfo.gDTVInfo.PgmList;
  1034.                     prgMax = KB_DB_MAX_DTV;
  1035.                     prgtotal = gPrgAllInfo.gDTVInfo.nTotal;
  1036.                     prgType = DTVPRG;
  1037.                     addDtvprg++;
  1038.                 }
  1039.                 else if(prginfo[i].service_type == 0x02)
  1040.                 {
  1041.                     prgInfoPos = gPrgAllInfo.gRADInfo.PgmList;
  1042.                     prgMax   = KB_DB_MAX_RAD;
  1043.                     prgtotal = gPrgAllInfo.gRADInfo.nTotal;
  1044.                     prgType = RADIOPRG;
  1045.                     addMusicprg ++;
  1046.                 }
  1047.                 //added by whale 07/05/25 start
  1048.                 else if(prginfo[i].service_type == 0x0C)
  1049.                 {
  1050.                     prgInfoPos = gPrgAllInfo.gDATAInfo.PgmList;
  1051.                     prgMax   = KB_DB_MAX_DATA;
  1052.                     prgtotal = gPrgAllInfo.gDATAInfo.nTotal;
  1053.                     prgType = DATAPRG;
  1054.       //printf("-=prgtotal=%d, prgType=%d=-n", prgtotal, prgType);
  1055.                  }
  1056.                 //added by whale 07/05/25 end
  1057.                 if(prgInfoPos == NULL)
  1058.                 {
  1059.                     return;
  1060.                 }
  1061.                 
  1062.                 if(prgtotal >= prgMax)
  1063.                 {
  1064.                     return;
  1065.                 }
  1066.                 for(j = 0; j < prgtotal; j++)
  1067.                 {
  1068.                     if( prgInfoPos[j].TSID == prginfo[i].TSID)
  1069.                     {
  1070.                         if(prgInfoPos[j].SvcID != prginfo[i].SerID)
  1071.                         {                        
  1072.                             continue;
  1073.                         }
  1074.                         prgInfoPos[j].AudioPID  = prginfo[i].Audio_Pid;
  1075.                         prgInfoPos[j].PCRPID  = prginfo[i].PCR_Pid;
  1076.                         prgInfoPos[j].VideoPID  = prginfo[i].Video_Pid;
  1077.                         prgInfoPos[j].ScrambleFlag = prginfo[i].bCAFlag;
  1078.                         len = strlen(prginfo[i].name);
  1079.                         if(len >= 20)
  1080.                         {
  1081.                             len = 18;
  1082.                         }
  1083.                         memset(prgInfoPos[j].Name,0,20);
  1084.                         memcpy(prgInfoPos[j].Name,prginfo[i].name,len);
  1085.                         prgInfoPos[j].Name[len] = '';
  1086.                         prgInfoPos[j].Name[len + 1] = '';
  1087.                         found = 1;
  1088.                         break;
  1089.                     }
  1090.                 }
  1091.                 if(found  == 1)
  1092.                 {
  1093.                     found = 0;
  1094.                     continue;
  1095.                 }
  1096.                 
  1097.                 prgInfoPos[j].TSID = prginfo[i].TSID;
  1098.                 prgInfoPos[j].PMTPID = prginfo[i].PMTPid;
  1099.                 prgInfoPos[j].PMTVersion = prginfo[i].PMTVersion;
  1100.                 prgInfoPos[j].SvcID = prginfo[i].SerID;
  1101.                 prgInfoPos[j].VideoPID = prginfo[i].Video_Pid;
  1102.                 prgInfoPos[j].AudioPID = prginfo[i].Audio_Pid;
  1103.                 prgInfoPos[j].PCRPID= prginfo[i].PCR_Pid;
  1104.                 prgInfoPos[j].ScrambleFlag = prginfo[i].bCAFlag;
  1105.                 
  1106.                 len = strlen(prginfo[i].name);
  1107.                 if(len >= 18)
  1108.                 {
  1109.                     len = 18;
  1110.                 }
  1111.                 
  1112.                 memset(prgInfoPos[j].Name,0,20);
  1113.                 memcpy(prgInfoPos[j].Name,prginfo[i].name,len);
  1114.                 prgInfoPos[j].Name[len] = '';
  1115.                 prgInfoPos[j].Name[len + 1] = '';
  1116.                 //IndexOfConfigInfo是 gPrgAllInfo中业务 与 gE2pData 联系的索引
  1117.                 //仅在下面函数申请连接一次,并更新全局数组gDtvCfgFlag/gRadCfgFlag/gDataCfgFlag
  1118.                 //                         更新gPrgAllInfo中某业务类型的nTotal  
  1119.                 KD_AddPrgToBuffer(prgType,NULL);
  1120.                 
  1121.                 break;
  1122.             case 0x04:
  1123.             case 0x05:
  1124.                 break;
  1125.      //masked by whale 07/05/25 start
  1126.             //case 0x0C:                
  1127.             //    break;
  1128.             //masked by whale 07/05/25 end
  1129.          }
  1130. }
  1131.     }
  1132.     
  1133.     *addDtv = addDtvprg;
  1134.     *addMusic = addMusicprg;
  1135.     return;
  1136. }
  1137. KB_DBRET KB_DBSavePrgInfo(int saveType)
  1138. {
  1139.     int i;
  1140.   
  1141.     if(saveType == 1)
  1142.     {
  1143.         //quicksort(gPrgAllInfo.gDTVInfo.PgmList,0,gPrgAllInfo.gDTVInfo.nTotal - 1);
  1144.         //quicksort(gPrgAllInfo.gRADInfo.PgmList,0,gPrgAllInfo.gRADInfo.nTotal - 1);
  1145.  //added by whale 07/05/25
  1146.  //quicksort(gPrgAllInfo.gDATAInfo.PgmList,0,gPrgAllInfo.gDATAInfo.nTotal - 1);
  1147.         //KB_DBSavePrgFavFlag(2,0,DTVPRG,NULL);
  1148.         //KB_DBSavePrgFavFlag(2,0,RADIOPRG,NULL);
  1149.     }
  1150.     
  1151.     KB_DBSaveToFlash();
  1152.     KB_DBFavPrgRefresh();
  1153.     
  1154.     for (i = 0; i < KB_DB_MAX_DTV; ++i)
  1155.     {
  1156.         if (gDtvCfgFlag[i] == 1)
  1157.         {
  1158.             if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  1159.                 (UINT8 *)&gE2pData.gDTVPrgCfgInfo[i], 
  1160.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  1161.             {
  1162.                 return RET_FAIL;
  1163.             }
  1164.             
  1165.         }
  1166.     }
  1167.     
  1168.     for (i = 0; i < KB_DB_MAX_RAD; ++i)
  1169.     {
  1170.         if (gRadCfgFlag[i] == 1)
  1171.         {
  1172.             if (KB_E2PWrite((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  1173.                 (UINT8 *)&gE2pData.gRADPrgCfgInfo[i],
  1174.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  1175.             {
  1176.                 return RET_FAIL;
  1177.             }
  1178.             
  1179.         }
  1180.     }
  1181.     //added by whale 07/05/25 start
  1182.     for (i = 0; i < KB_DB_MAX_DATA; ++i)
  1183.     {
  1184.         if (gDataCfgFlag[i] == 1)
  1185.         {
  1186.             if (KB_E2PWrite((UINT16)(KB_NVM_DATA_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  1187.                 (UINT8 *)&gE2pData.gDATAPrgCfgInfo[i],
  1188.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  1189.             {
  1190.                 return RET_FAIL;
  1191.             }
  1192.             
  1193.         }
  1194.     }
  1195.     //added by whale 07/05/25 end
  1196.     KD_InitPrgConfig();
  1197.     
  1198.     return RET_OK;
  1199. }
  1200. static BOOL KB_DBIsPrgExist(UINT8    PrgType,
  1201.                              UINT16   TsId,
  1202.                              UINT16   SrvId)
  1203. {
  1204.     UINT16          i = 0;
  1205.     UINT16          max = 0;
  1206.     UINT16          total = 0;
  1207.     BOOL            ret = FALSE;
  1208.     KB_DBPrgInfo *prgInfo;
  1209.     
  1210.     switch(PrgType)
  1211.     {
  1212.     case DTVPRG:
  1213.         total = gPrgAllInfo.gDTVInfo.nTotal;
  1214.         max = KB_DB_MAX_DTV;
  1215.         prgInfo = gPrgAllInfo.gDTVInfo.PgmList;
  1216.         break;
  1217.         
  1218.     case RADIOPRG:
  1219.         total = gPrgAllInfo.gRADInfo.nTotal;
  1220.         max = KB_DB_MAX_RAD;
  1221.         prgInfo = gPrgAllInfo.gRADInfo.PgmList;
  1222.         break;
  1223.         default:
  1224.             printf("nKB_DBCheckPrgByTsIdSrvId::PrgType(%d) not support",
  1225.                     PrgType);
  1226.             return FALSE;
  1227.     }
  1228.     
  1229.     if ((NULL == prgInfo) || (0 == total) || (total > max)) 
  1230.     {
  1231.         printf("nKB_DBCheckPrgByTsIdSrvId::unknown error! prgInfo(0x%x), total(%d)",
  1232.                 prgInfo, total);
  1233.         return FALSE;
  1234.     }
  1235.     
  1236.     for(i = 0;i<total;i++)
  1237.     {
  1238.         if (prgInfo[i].SvcID == SrvId
  1239.             && prgInfo[i].TSID == TsId)
  1240.         {
  1241.             ret = TRUE;
  1242.             break;
  1243.         }
  1244.     }
  1245.     return ret;
  1246. }
  1247. #if 0
  1248. KB_DBRET KB_DBSavePrgFavFlag(UINT8 FavType,UINT16 nNumPrg, UINT8 nPrgType, UINT16 *pPrgToAdd)
  1249. {
  1250.     int total = 0;
  1251.     UINT8 *favTotal = NULL,numprg;
  1252.     int i,j,writeLen = 0,writeLen2 = 0;
  1253.     KB_DBFavNode *favPrgNo = NULL;
  1254.     UINT16 addrFav;
  1255.     UINT8 *writeAddr = NULL;
  1256.     UINT8 *writeAddr2 = NULL;
  1257.     KB_DBPrgInfo programInfo;
  1258.     KB_DBChnnlInfo channelInfo;
  1259.     UINT8 track;
  1260.     UINT8 volume;
  1261.     UINT8 lockFlag;
  1262.     
  1263.     if((pPrgToAdd == NULL) && (FavType != 2))
  1264.     {
  1265.         return RET_FAIL;
  1266.     }
  1267.     
  1268.     if(nPrgType != DTVPRG && nPrgType != RADIOPRG)
  1269.     {
  1270.         return RET_FAIL;
  1271.     }
  1272.     
  1273.     switch(nPrgType)
  1274.     {
  1275.     case DTVPRG:
  1276.         total = KB_DB_MAX_FAV_DTV;
  1277.         favTotal = &gE2pData.gDTVFavInfo.nTotal;
  1278.         favPrgNo  = gE2pData.gDTVFavInfo.FavList;
  1279.         addrFav = KB_NVM_FAV_DTV_ADDR;
  1280.         writeAddr = (UINT8 *)&gE2pData.gDTVFavInfo;
  1281.         writeLen = sizeof(KB_DBFavDtvInfo);
  1282.         writeAddr2 = (UINT8 *)&gE2pData.gDTVFavInfo;
  1283.         writeLen2 = sizeof(KB_DBFavDtvInfo);
  1284.         break;
  1285.         
  1286.     case RADIOPRG:
  1287.         total = KB_DB_MAX_FAV_RAD;
  1288.         favTotal = &gE2pData.gRADFavInfo.nTotal;
  1289.         favPrgNo  = gE2pData.gRADFavInfo.FavList;
  1290.         addrFav = KB_NVM_FAV_RAD_ADDR;
  1291.         writeAddr = (UINT8*)&gE2pData.gRADFavInfo;
  1292.         writeLen = sizeof(KB_DBPrgConfigNode);
  1293.         writeAddr2 = (UINT8 *)&gE2pData.gRADFavInfo;
  1294.         writeLen2 = sizeof(KB_DBFavRadInfo);
  1295.         break;
  1296.     }
  1297.     
  1298.     switch(FavType)
  1299.     {
  1300.     case 0:
  1301.         *favTotal = 0;
  1302.         numprg = 1;
  1303.         for( i = 1; i<= nNumPrg;i++)
  1304.         {
  1305.             if((pPrgToAdd[i] == KB_DB_PGM_FAVORITE) && ( numprg < total))
  1306.             {
  1307.                 if (KB_DBGetPrgInfo(i - 1, nPrgType, &programInfo, &channelInfo, &track, &volume, &lockFlag) == RET_OK)
  1308.                 {
  1309.                     favPrgNo[numprg].TsId = programInfo.TSID;
  1310.                     favPrgNo[numprg].SrvId = programInfo.SvcID;
  1311.                     *favTotal = numprg;
  1312.                     numprg ++;
  1313.                 }
  1314.             }
  1315.         }
  1316.         break;
  1317.         
  1318.     case 1:
  1319.         for( i = 1; i<= nNumPrg;i++)
  1320.         {
  1321.             {
  1322.                 favPrgNo[i ] = pPrgToAdd[i];
  1323.             }
  1324.         }
  1325.         break;
  1326.     case 2:
  1327.         numprg = *favTotal;
  1328.         for(i = 1;i <= numprg ;)
  1329.         {
  1330.             if(KB_DBIsPrgExist(nPrgType, favPrgNo[i].TsId, favPrgNo[i].SrvId) == FALSE)
  1331.             {
  1332.                 j = i;
  1333.                 for(j = i;j < numprg - 1 ;j++)
  1334.                 {
  1335.                     favPrgNo[j] = favPrgNo[j + 1];
  1336.                 }
  1337.                 numprg --;
  1338.             }
  1339.             else
  1340.             {
  1341.                 i++;
  1342.             }
  1343.         }
  1344.         *favTotal = numprg;
  1345.         break;
  1346.     default:
  1347.         break;
  1348.     }
  1349.     
  1350.     if(KB_E2PWrite(addrFav, writeAddr, writeLen, NULL) != RETOK)
  1351.     {
  1352.         return RET_FAIL;
  1353.     }
  1354.     
  1355.     return RET_OK;
  1356. }
  1357. #endif
  1358. KB_DBRET KB_DBGetSysPara(KB_DBSysInfo *pSysPara)
  1359. {
  1360.     *pSysPara = gE2pData.gSysPara;
  1361.     return RET_OK;
  1362. }
  1363. KB_DBRET KB_DBSaveSysPara(KB_DBSysInfo *pSysPara)
  1364. {
  1365.     
  1366.     gE2pData.gSysPara = *pSysPara;
  1367.     
  1368.     if (KB_E2PWrite(KB_NVM_SYS_PARA_ADDR, (UINT8 *)&gE2pData.gSysPara, sizeof(KB_DBSysInfo), NULL) != RETOK)
  1369.     {
  1370.         return RET_FAIL;
  1371.     }
  1372.     
  1373.     return RET_OK;
  1374. }
  1375. KB_DBRET KB_DBGetPwdInfo(KB_DBPwdInfo *pPwdInfo)
  1376. {
  1377.     *pPwdInfo = gE2pData.gPwdInfo;
  1378.     
  1379.     return RET_OK;
  1380. }
  1381. void KB_DBDelFavPrg(unsigned char type, UINT16 TsId, UINT16 SrvId)
  1382. {
  1383.     UINT8      find = 0;
  1384.     UINT16     i = 0;
  1385.     UINT16     j = 0;
  1386.     UINT16     nTotalNo = 0;  
  1387.     
  1388.     nTotalNo  = KB_DBGetFavPrgTotal(type) ;        
  1389.     
  1390.     if (DTVPRG == type)
  1391.     {
  1392.         if (nTotalNo == 0 || nTotalNo > KB_DB_MAX_FAV_DTV)
  1393.         {
  1394.             printf("nKB_DBDelFavPrg::dtv Total(%d) error", nTotalNo);
  1395.             return;
  1396.         }
  1397.         
  1398.         for(i = 0; i < nTotalNo; i++)
  1399.         {
  1400.             if(TsId == gE2pData.gDTVFavInfo.FavList[i].TsId
  1401.                && SrvId == gE2pData.gDTVFavInfo.FavList[i].SrvId)
  1402.             {
  1403.                 find = 1;
  1404.                 break;
  1405.             }
  1406.         }
  1407.         
  1408.         if (1 == find)
  1409.         {
  1410.             for(j = i; j < (nTotalNo - 1); j++)
  1411.             {
  1412.                 memcpy(&gE2pData.gDTVFavInfo.FavList[j], 
  1413.                        &gE2pData.gDTVFavInfo.FavList[j+1], 
  1414.                        sizeof(KB_DBFavNode));
  1415.             }
  1416.             gE2pData.gDTVFavInfo.nTotal --;
  1417.             
  1418.             if(KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, ( UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  1419.          {
  1420.                 printf("nKB_DBDelFavPrg::KB_E2PWrite dtv fail");
  1421.                 return ;
  1422.          }
  1423.             
  1424.         }
  1425.     else
  1426.     {
  1427.             printf("nKB_DBDelFavPrg::specified type(0x%x)-TsId(0x%x)-SrvId(0x%x) not found in gE2pData",
  1428.                     type, TsId, SrvId);
  1429.         }
  1430.         return;
  1431.     }
  1432.     else if (RADIOPRG == type)
  1433.     {
  1434.         if (nTotalNo == 0 || nTotalNo > KB_DB_MAX_FAV_RAD)
  1435.         {
  1436.             printf("nKB_DBDelFavPrg::radio Total(%d) error", nTotalNo);
  1437.             return;
  1438.         }
  1439.         
  1440.         for(i = 0; i < nTotalNo;i++)
  1441.         {
  1442.             if(TsId == gE2pData.gRADFavInfo.FavList[i].TsId
  1443.                && SrvId == gE2pData.gRADFavInfo.FavList[i].SrvId)
  1444.             {
  1445.                 find = 1;
  1446.                 break;
  1447.             }
  1448.         }
  1449.         
  1450.         if(1 == find)
  1451.         {
  1452.             for(j = i; j < (nTotalNo - 1); j++)
  1453.             {
  1454.                 memcpy(&gE2pData.gRADFavInfo.FavList[j], 
  1455.                        &gE2pData.gRADFavInfo.FavList[j+1], 
  1456.                        sizeof(KB_DBFavNode));
  1457.             }
  1458.             gE2pData.gRADFavInfo.nTotal -- ;
  1459.             
  1460.             if(KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, ( UINT8 *)&gE2pData.gRADFavInfo, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  1461.          {
  1462.                 printf("nKB_DBDelFavPrg::KB_E2PWrite rad fail");
  1463.                 return ;
  1464.          }
  1465.         }
  1466.         else
  1467.         {
  1468.             printf("nKB_DBDelFavPrg::specified type(0x%x)-TsId(0x%x)-SrvId(0x%x) not found in gE2pData",
  1469.                     type, TsId, SrvId);
  1470.         }
  1471.         return;
  1472.     }
  1473.     else
  1474.     {
  1475.         printf("nKB_DBDelFavPrg::input type(%d) error", type);
  1476.         return;
  1477.     }
  1478.     
  1479.     return;
  1480. }
  1481. unsigned short KB_DBDelPrgInfo(unsigned char type,unsigned short nPrgInx)
  1482. {
  1483.     int nPgmNo = nPrgInx,i;
  1484.     int total;
  1485.     KB_DBPrgInfo *tmpPrgInfo = NULL;
  1486.     UINT16 SerID;
  1487.     
  1488.     total = KB_DBGetPrgTotal(type);
  1489.     
  1490.     if(nPgmNo >= total || nPgmNo < 0)
  1491.     {
  1492.         return KB_DB_DTV_FAILURE;
  1493.     }
  1494.     
  1495.     if (DTVPRG == type)
  1496.     {
  1497.         tmpPrgInfo = gPrgAllInfo.gDTVInfo.PgmList;
  1498.     }
  1499.     else if (RADIOPRG == type)
  1500.     {
  1501.         tmpPrgInfo = gPrgAllInfo.gRADInfo.PgmList;
  1502.     }
  1503.     else
  1504.     {
  1505.         printf("nKB_DBDelPrgInfo::input PrgType(%d) error!", type);
  1506.         return KB_DB_DTV_FAILURE;
  1507.     }
  1508.     SerID = tmpPrgInfo[nPgmNo].SvcID;
  1509.     KB_DBDelFavPrg(type, tmpPrgInfo[nPgmNo].TSID, SerID);
  1510.     
  1511.     for(i = nPgmNo;i < total - 1; i++)
  1512.     {
  1513.         memcpy(&tmpPrgInfo[i],&tmpPrgInfo[i + 1],sizeof(KB_DBPrgInfo));
  1514.     }
  1515.     
  1516.     if (DTVPRG == type)
  1517.     {
  1518.         gPrgAllInfo.gDTVInfo.nTotal --;
  1519.     }
  1520.     else if (RADIOPRG == type)
  1521.     {
  1522.         gPrgAllInfo.gRADInfo.nTotal --;
  1523.     }
  1524.     return KB_DB_DTV_SUCCESS;
  1525. }
  1526. KB_DBRET KB_DBSavePwdInfo(KB_DBPwdInfo *pPwdInfo)
  1527. {
  1528.     gE2pData.gPwdInfo = *pPwdInfo;
  1529.     
  1530.     if (KB_E2PWrite(KB_NVM_PASSWORD_ADDR, (UINT8* )&gE2pData.gPwdInfo, sizeof(KB_DBPwdInfo), NULL) != RETOK)
  1531.     {
  1532.         return RET_FAIL;
  1533.     }
  1534.     
  1535.     return RET_OK;
  1536. }
  1537. KB_DBRET KB_DBGetMailNum(UINT8 *pMailNum)
  1538. {
  1539.     if(pMailNum == NULL)
  1540.     {
  1541.         return RET_FAIL;
  1542.     }
  1543.     
  1544.     *pMailNum = gE2pData.gMailInfo.nTotal;
  1545.     return RET_OK;
  1546. }
  1547. KB_DBRET KB_DBSaveNvodInfo(KB_SIRefSvcCell AddNvodInfo)
  1548. {
  1549.     int total,i;
  1550.     total = gPrgAllInfo.gNVODInfo.nTotal;
  1551.     
  1552.     if(total >= KB_DB_MAX_NVOD)
  1553.     {
  1554.         return RET_FAIL;
  1555.     }
  1556.     //added by whale 07/03/28 for judging refsvcid repeat 
  1557.     for (i=0; i<total; i++)
  1558.     {
  1559. if (gPrgAllInfo.gNVODInfo.RefSvc[i].RefSvcId == AddNvodInfo.refScvId)
  1560. {
  1561. return RET_FAIL;
  1562. }
  1563.     }
  1564.     //add end
  1565.     gPrgAllInfo.gNVODInfo.RefSvc[total].RefSvcId = AddNvodInfo.refScvId;
  1566.     strcpy((char*)gPrgAllInfo.gNVODInfo.RefSvc[total].RefSvcName,(char*)AddNvodInfo.refScvName);
  1567.     gPrgAllInfo.gNVODInfo.RefSvc[total].TsID = AddNvodInfo.TsID;
  1568.     gPrgAllInfo.gNVODInfo.RefSvc[total].ShiftNum = 0;
  1569.     
  1570.     for(i = 0;i< AddNvodInfo.shiftSvcNum;i++)
  1571.     {
  1572.         gPrgAllInfo.gNVODInfo.RefSvc[total].ShiftList[i].ServiceId = 
  1573.             AddNvodInfo.shiftSvc[i].svcId;
  1574.         gPrgAllInfo.gNVODInfo.RefSvc[total].ShiftList[i].TSID= 
  1575.             AddNvodInfo.shiftSvc[i].tsId;
  1576.         gPrgAllInfo.gNVODInfo.RefSvc[total].ShiftNum ++;
  1577.     }
  1578.     gPrgAllInfo.gNVODInfo.nTotal ++;
  1579.     return RET_OK;
  1580. }
  1581. /*KB_DBRET KD_GetNvodNum(UINT8 *pNvodNum)
  1582. {
  1583.     *pNvodNum = gPrgAllInfo.gNVODInfo.nTotal;
  1584.     return RET_OK;
  1585. }*/
  1586. UINT8 KB_DBGetNvodNum(void)
  1587. {
  1588.     return gPrgAllInfo.gNVODInfo.nTotal;
  1589. }
  1590. KB_DBRET KB_DBGetNvodInfo(KB_SIRefSvcCell * pRefSvcInfo, int * o_pNums)
  1591. {
  1592.     int i,total,j;
  1593.     if((pRefSvcInfo == NULL ) || (o_pNums == NULL))
  1594.     {
  1595.         return RET_FAIL;
  1596.     }
  1597.     
  1598.     total = gPrgAllInfo.gNVODInfo.nTotal;
  1599.     * o_pNums = total;
  1600.     
  1601.     for(i = 0;i<total;i++)
  1602.     {
  1603.         pRefSvcInfo[i].refScvId = gPrgAllInfo.gNVODInfo.RefSvc[i].RefSvcId;
  1604. strcpy((char*)pRefSvcInfo[i].refScvName,
  1605. (char*)gPrgAllInfo.gNVODInfo.RefSvc[i].RefSvcName);
  1606.         pRefSvcInfo[i].TsID     = gPrgAllInfo.gNVODInfo.RefSvc[i].TsID;
  1607.         pRefSvcInfo[i].shiftSvcNum = gPrgAllInfo.gNVODInfo.RefSvc[i].ShiftNum;
  1608.         KB_DBGetChnlInfoByTsID(pRefSvcInfo[i].TsID,
  1609. &pRefSvcInfo[i].freq,&pRefSvcInfo[i].symb,(UINT8*)&pRefSvcInfo[i].qam);
  1610.         for( j = 0;j < gPrgAllInfo.gNVODInfo.RefSvc[i].ShiftNum;j++)
  1611.         {
  1612.             pRefSvcInfo[i].shiftSvc[j].svcId = gPrgAllInfo.gNVODInfo.RefSvc[i].ShiftList[j].ServiceId;
  1613.             pRefSvcInfo[i].shiftSvc[j].tsId = gPrgAllInfo.gNVODInfo.RefSvc[i].ShiftList[j].TSID;
  1614.         }
  1615.     }
  1616.     
  1617.     return RET_OK;
  1618. }
  1619. KB_DBRET KB_DBGetChnlInfoByTsID(UINT16 TSID,
  1620.                                              unsigned short *pFreq,unsigned short *pSymbl,unsigned char  *pQam)
  1621. {
  1622.     int i,find = 0;
  1623.     
  1624.     if( (pFreq == NULL) || (pSymbl == NULL) || (pQam == NULL))
  1625.     {
  1626.         return RET_FAIL;
  1627.     }
  1628.     
  1629.     for(i = 0;i< gPrgAllInfo.gChnnlInfo.nTotal;i++)
  1630.     {
  1631.         if(gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID == TSID)
  1632.         {
  1633.             find = 1;
  1634.             break;
  1635.         }
  1636.     }
  1637.     
  1638.     if(find == 1)
  1639.     {
  1640.         *pFreq = gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq;
  1641.         *pSymbl = gPrgAllInfo.gChnnlInfo.ChannelList[i].Symb;
  1642.         *pQam = gPrgAllInfo.gChnnlInfo.ChannelList[i].QAM;
  1643.     }
  1644.     else
  1645.     {
  1646.         *pFreq = 0;
  1647.         *pSymbl = 0;
  1648.         *pQam = 0;
  1649.     }
  1650.     
  1651.     return RET_OK;
  1652. }
  1653. KB_DBRET KB_DBSaveToFlash()
  1654. {
  1655.     
  1656.     if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  1657.     {
  1658.         return RET_FAIL;
  1659.     }
  1660.     
  1661.     return RET_OK;
  1662. }
  1663. static UINT16 KD_GetFreeNumCfg(UINT8 nPrgType) 
  1664. {
  1665.     UINT16 i;
  1666.     
  1667.     switch(nPrgType)
  1668.     {
  1669.     case DTVPRG: 
  1670.         for (i = 0; i < KB_DB_MAX_DTV; ++i)
  1671.         {
  1672.             if(gE2pData.gDTVPrgCfgInfo[i].Flag == CONFIG_NO_USED)
  1673.             {
  1674.                 return i;
  1675.             }
  1676.         }
  1677.         break;
  1678.         
  1679.     case RADIOPRG:
  1680.         for (i = 0; i < KB_DB_MAX_RAD; ++i)
  1681.         {
  1682.             if(gE2pData.gRADPrgCfgInfo[i].Flag == CONFIG_NO_USED)
  1683.             {
  1684.                 return i;
  1685.             }
  1686.         }
  1687.         break;
  1688.     //added by whale 07/05/25 start
  1689.     case DATAPRG:
  1690.         for (i = 0; i < KB_DB_MAX_DATA; ++i)
  1691.         {
  1692.             if(gE2pData.gDATAPrgCfgInfo[i].Flag == CONFIG_NO_USED)
  1693.             {
  1694.                 return i;
  1695.             }
  1696.         }
  1697.         break;
  1698.     //added by whale 07/05/25 end
  1699.     }
  1700.     
  1701.     return RET_OK;
  1702. }
  1703. KB_DBRET KB_DBReset(void)
  1704. {
  1705.     KB_DBRET tRet;
  1706.     
  1707.     gPrgAllInfo.gChnnlInfo.nTotal = 0;
  1708.     memset(&gPrgAllInfo.gChnnlInfo,0,sizeof(KB_DBDTVChnnlInfo));
  1709.     if (KB_DBResetDtvInfo(BufferSave) != RET_OK)
  1710.     {
  1711.         printf("n[DB]:KB_DBResetDtvInfo error");
  1712.         return RET_FAIL;
  1713.     }
  1714.     
  1715.     if (KD_ResetFavDtv() != RET_OK)
  1716.     {
  1717.      printf("n[DB]:KD_ResetFavDtv error");
  1718.         return RET_FAIL;
  1719.     }
  1720.     
  1721.     if (KB_DBResetRadInfo(BufferSave) != RET_OK)
  1722.     {
  1723.      printf("n[DB]:KB_DBResetRadInfo error");
  1724.         return RET_FAIL;
  1725.     }
  1726.     
  1727.     if (KD_ResetFavRad() != RET_OK)
  1728.     {
  1729.      printf("n[DB]:KD_ResetFavRad error");
  1730.         return RET_FAIL;
  1731.     }
  1732.     //added by whale 07/05/25 start
  1733.     if (KB_DBResetDataInfo(BufferSave) != RET_OK)
  1734.     {
  1735.         printf("n[DB]:KB_DBResetDataInfo error");
  1736.         return RET_FAIL;
  1737.     }
  1738.     //added by whale 07/05/25 end
  1739.     KD_ResetNvodInfo(BufferSave);
  1740.     
  1741.     tRet = KD_ResetCurPrgInfo();
  1742.     if (tRet != RET_OK)
  1743.     {
  1744.      printf("n[DB]:KD_ResetCurPrgInfo error");
  1745.         return tRet;
  1746.     }
  1747.     tRet = KD_ResetSysparInfo();
  1748.     if (tRet != RET_OK)
  1749.     {
  1750.      printf("n[DB]:KD_ResetSysparInfo error");
  1751.         return tRet;
  1752.     }
  1753.     
  1754.     tRet = KD_ResetPwdInfo();
  1755.     if (tRet != RET_OK)
  1756.     {
  1757.      printf("n[DB]:KD_ResetPwdInfo error");
  1758.         return tRet;
  1759.     }
  1760.     
  1761.     
  1762.     tRet = KD_ResetSrchInfo();
  1763.     if (tRet != RET_OK)
  1764.     {
  1765.      printf("n[DB]:KD_ResetSrchInfo error");
  1766.         return tRet;
  1767.     }
  1768.     
  1769.     tRet = KD_ResetMailInfo();
  1770.     if (tRet != RET_OK)
  1771.     {
  1772.      printf("n[DB]:KD_ResetMailInfo error");
  1773.         return tRet;
  1774.     }
  1775.     
  1776.     //added by yyj 2007.6.27 start
  1777. tRet = KD_ResetVideoDispMode();
  1778. if (tRet != RET_OK)
  1779. {
  1780.     printf("n[DB]:KD_ResetVideoDispMode error");
  1781.     return tRet;
  1782. }
  1783. tRet = KD_ResetVideoAspectRatio();
  1784. if (tRet != RET_OK)
  1785. {
  1786.     printf("n[DB]:KD_ResetVideoAspectRatio error");
  1787.     return tRet;
  1788. }
  1789. tRet = KD_ResetPgmCurVol();
  1790. if (tRet != RET_OK)
  1791. {
  1792.     printf("n[DB]:KD_ResetPgmCurVol error");
  1793.     return tRet;
  1794. }
  1795. tRet = KD_ResetPgmCurTrack();
  1796. if (tRet != RET_OK)
  1797. {
  1798.     printf("n[DB]:KD_ResetPgmCurTrack error");
  1799.     return tRet;
  1800. }
  1801. tRet = KD_ResetAdultRank();
  1802. if (tRet != RET_OK)
  1803. {
  1804.     printf("n[DB]:KD_ResetAdultRank error");
  1805.     return tRet;
  1806. }
  1807. tRet = KD_ResetMenuLan();
  1808. if (tRet != RET_OK)
  1809. {
  1810.     printf("n[DB]:KD_ResetMenuLan error");
  1811.     return tRet;
  1812. }
  1813. tRet = KD_ResetMenuTran();
  1814. if (tRet != RET_OK)
  1815. {
  1816.     printf("n[DB]:KD_ResetMenuTran error");
  1817.     return tRet;
  1818. }
  1819.     //added by yyj 2007.6.27 end
  1820.     
  1821. //added by yyj 2007.7.3 start
  1822.  tRet = KD_ResetDemandInfo();
  1823. if (tRet != RET_OK)
  1824. {
  1825.     printf("n[DB]:KD_ResetDemandInfo error");
  1826.     return tRet;
  1827. }
  1828. //added by yyj 2007.7.3 end
  1829.     if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  1830.     {
  1831.         printf("n[DB]:KB_FlashWrite error");
  1832.         return RET_FAIL;
  1833.     }
  1834. printf("n[DB]:Data base reset ok.");
  1835.     return RET_OK;
  1836. }
  1837. KB_DBRET KD_GetSvcList(KB_DBListInfo *pSvcList)
  1838. {
  1839.     *pSvcList = gE2pData.stServiceListInfo;
  1840.     
  1841.     return RET_OK;
  1842. }
  1843. KB_DBRET KD_SaveSvcList(KB_DBListInfo *pSvcList)
  1844. {
  1845.     gE2pData.stServiceListInfo = *pSvcList;
  1846.     
  1847.     if (KB_E2PWrite(KB_NVM_SERVICELIST_INFO_ADDR, (UINT8* )&gE2pData.stServiceListInfo, sizeof(KB_DBListInfo), NULL) != RETOK)
  1848.     {
  1849.         return RET_FAIL;
  1850.     }
  1851.     
  1852.     return RET_OK;
  1853. }
  1854. static KB_DBRET KD_ResetMailInfo(void)
  1855. {
  1856.     UINT8 i;
  1857.     
  1858.     gE2pData.gMailInfo.nTotal = 0;
  1859.     
  1860.     if (KB_E2PWrite(KB_NVM_MAIL_INDEX_ADDR, (UINT8 *)(&gE2pData.gMailInfo), sizeof(KB_DBMailIndex), NULL) != RETOK)
  1861.     {
  1862.         return RET_FAIL;
  1863.     }
  1864.     
  1865.     
  1866.     for (i = 0; i < KB_DB_MAX_MAIL; ++i)
  1867.     {
  1868.         gMailInfo[i].Flag = CONFIG_NO_USED;
  1869.     }
  1870.     
  1871.     return RET_OK;
  1872. }
  1873. KB_DBRET KB_DBResetChnnlInfo(UINT8 bType)
  1874. {
  1875.     gPrgAllInfo.gChnnlInfo.nTotal = 0;
  1876.     memset(&gPrgAllInfo.gChnnlInfo,0,sizeof(KB_DBDTVChnnlInfo));
  1877.     KD_ResetNvodInfo(BufferSave);
  1878.     return RET_OK;
  1879. }
  1880. static KB_DBRET KD_InitChnnlInfo()
  1881. {
  1882.     if (gPrgAllInfo.gChnnlInfo.nTotal > KB_DB_MAX_CHANNEL_NUM)
  1883.     {
  1884.         return RET_FAIL;
  1885.     }
  1886.     
  1887.     return RET_OK;
  1888. }
  1889. static KB_DBRET KD_InitCurPrgInfo(void)
  1890. {
  1891.     if (KB_E2PRead(KB_NVM_CUR_PGM_ADDR, (UINT8 *)&gE2pData.gCurPrgInfo, sizeof(KB_DBCurPrgInd), NULL) != RETOK)
  1892.     {
  1893.         return RET_FAIL;
  1894.     }
  1895.     
  1896.     return RET_OK;
  1897. }
  1898. static KB_DBRET KD_InitDtvInfo()
  1899. {
  1900.     UINT16 i, sum;
  1901.     
  1902.     sum = gPrgAllInfo.gDTVInfo.nTotal;
  1903.     if (sum > KB_DB_MAX_DTV)
  1904.     {
  1905.         return RET_FAIL;
  1906.     }
  1907.     
  1908.     for (i = 0; i < sum; ++i)
  1909.     {
  1910.         gE2pData.gDTVPrgCfgInfo[i].Flag = CONFIG_USED + 1;
  1911.     }
  1912.     
  1913.     return RET_OK;
  1914. }
  1915. //added by whale 07/05/25 start
  1916. static KB_DBRET KD_InitDataInfo(void)
  1917. {
  1918.     UINT16 i, sum;
  1919.     
  1920.     sum = gPrgAllInfo.gDATAInfo.nTotal;
  1921.     if (sum > KB_DB_MAX_DATA)
  1922.     {
  1923.         return RET_FAIL;
  1924.     }
  1925.     
  1926.     for (i = 0; i < sum; ++i)
  1927.     {
  1928.         gE2pData.gDATAPrgCfgInfo[i].Flag = CONFIG_USED + 1;
  1929.     }
  1930.     
  1931.     return RET_OK;
  1932. }
  1933. //added by whale 07/05/25 end
  1934. KB_DBRET KB_DBResetDtvInfo(UINT8 bType)
  1935. {
  1936.     UINT16 i,len;
  1937.     UINT8 flag = CONFIG_NO_USED;
  1938.     
  1939.     
  1940.     len = gPrgAllInfo.gDTVInfo.nTotal ;
  1941.     if(len > KB_DB_MAX_DTV)
  1942.     {
  1943.         len = KB_DB_MAX_DTV;
  1944.     }
  1945. gPrgAllInfo.gDTVInfo.nTotal = 0;
  1946.     for (i = 0; i < KB_DB_MAX_DTV; ++i)
  1947.     {
  1948.         if (gE2pData.gDTVPrgCfgInfo[i].Flag == CONFIG_USED
  1949.             || gE2pData.gDTVPrgCfgInfo[i].Flag == CONFIG_USED + 1)
  1950.         {
  1951.             gE2pData.gDTVPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  1952.             if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  1953.                 (UINT8 *)&flag, sizeof(UINT8), NULL) != RETOK)
  1954.             {
  1955.                 return RET_FAIL;
  1956.             }
  1957.         }
  1958.     }
  1959.     
  1960.     if (bType == FlashSave)
  1961.     {
  1962.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  1963.         {
  1964.             return RET_FAIL;
  1965.         }
  1966.     }
  1967.     
  1968.     return RET_OK;
  1969. }
  1970. KB_DBRET KB_DBResetRadInfo(UINT8 bType)
  1971. {
  1972.     UINT16 i,serID,len;
  1973.     UINT8 flag = CONFIG_NO_USED;
  1974.     
  1975.     
  1976.     len = gPrgAllInfo.gRADInfo.nTotal ;
  1977.     if(len > KB_DB_MAX_RAD)
  1978.     {
  1979.         len = KB_DB_MAX_RAD;
  1980.     }
  1981.     for(i = 0;i< len;i++)
  1982.     {
  1983.         serID = gPrgAllInfo.gRADInfo.PgmList[i].SvcID;
  1984.     }
  1985.     gPrgAllInfo.gRADInfo.nTotal = 0;
  1986.     
  1987.     for (i = 0; i < KB_DB_MAX_RAD; ++i)
  1988.     {
  1989.         if (gE2pData.gRADPrgCfgInfo[i].Flag == CONFIG_USED
  1990.             || gE2pData.gRADPrgCfgInfo[i].Flag == CONFIG_USED + 1)
  1991.         {
  1992.             gE2pData.gRADPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  1993.             
  1994.             if (KB_E2PWrite((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  1995.                 (UINT8 *)&flag, sizeof(UINT8), NULL) != RETOK)
  1996.             {
  1997.                 return RET_FAIL;
  1998.             }
  1999.             
  2000.         }
  2001.     }
  2002.     
  2003.     if (bType == FlashSave)
  2004.     {
  2005.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  2006.         {
  2007.             return RET_FAIL;
  2008.         }
  2009.     }
  2010.     
  2011.     return RET_OK;
  2012. }
  2013. //added by whale 07/05/25 start
  2014. KB_DBRET KB_DBResetDataInfo(UINT8 bType)
  2015. {
  2016.     UINT16 i,len;
  2017.     UINT8 flag = CONFIG_NO_USED;
  2018.     
  2019.     
  2020.     len = gPrgAllInfo.gDATAInfo.nTotal ;
  2021.     if(len > KB_DB_MAX_DATA)
  2022.     {
  2023.         len = KB_DB_MAX_DATA;
  2024.     }
  2025. gPrgAllInfo.gDATAInfo.nTotal = 0;
  2026.     for (i = 0; i < KB_DB_MAX_DATA; ++i)
  2027.     {
  2028.         if (gE2pData.gDATAPrgCfgInfo[i].Flag == CONFIG_USED
  2029.             || gE2pData.gDATAPrgCfgInfo[i].Flag == CONFIG_USED + 1)
  2030.         {
  2031.             gE2pData.gDATAPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  2032.             if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + i * sizeof(KB_DBPrgConfigNode)),
  2033.                 (UINT8 *)&flag, sizeof(UINT8), NULL) != RETOK)
  2034.             {
  2035.                 return RET_FAIL;
  2036.             }
  2037.         }
  2038.     }
  2039.     
  2040.     if (bType == FlashSave)
  2041.     {
  2042.         if (KB_FlashWrite(KB_DB_SECTOR, 0, (UINT8*)&gPrgAllInfo, sizeof(KB_DBPrgAllInfo)) != RETOK)
  2043.         {
  2044.             return RET_FAIL;
  2045.         }
  2046.     }
  2047.     
  2048.     return RET_OK;
  2049. }
  2050. //added by whale 07/05/25 end
  2051. static KB_DBRET KD_ResetNvodInfo(UINT8 bType)
  2052. {
  2053.     gPrgAllInfo.gNVODInfo.nTotal = 0;
  2054.     return RET_OK;
  2055. }
  2056. //added by whale 07/06/01 start
  2057. void KB_DBClearAllProg (void)
  2058. {
  2059. KB_DBResetDtvInfo(BufferSave);
  2060. KB_DBResetRadInfo(BufferSave);
  2061. KB_DBResetDataInfo(BufferSave);
  2062. KD_ResetNvodInfo(BufferSave);
  2063. KB_DBResetChnnlInfo(BufferSave);
  2064. KB_FlashErase(KB_DB_SECTOR);
  2065. }
  2066. //added by whale 07/06/01 end
  2067. static KB_DBRET KD_InitNvodInfo(void)
  2068. {
  2069.     UINT16 sum;
  2070.     
  2071.     sum = gPrgAllInfo.gNVODInfo.nTotal;
  2072.     if (sum > KB_DB_MAX_NVOD)
  2073.     {
  2074.         return RET_FAIL;
  2075.     }
  2076.     
  2077.     return RET_OK;
  2078. }
  2079. static KB_DBRET KD_InitSysparInfo(void)
  2080. {
  2081.     if (KB_E2PRead(KB_NVM_SYS_PARA_ADDR, (UINT8 *)&gE2pData.gSysPara, sizeof(KB_DBSysInfo), NULL) != RETOK)
  2082.     {
  2083.         return RET_FAIL;
  2084.     }
  2085.     return RET_OK;
  2086. }
  2087. KB_DBRET KD_ResetCurPrgInfo(void)
  2088. {
  2089.     gE2pData.gCurPrgInfo.prgNO = 1;
  2090.     gE2pData.gCurPrgInfo.prgType = DTVPRG;
  2091.     
  2092.     if (KB_E2PWrite(KB_NVM_CUR_PGM_ADDR, (UINT8 *)&gE2pData.gCurPrgInfo, sizeof(KB_DBCurPrgInd), NULL) != RETOK)
  2093.     {
  2094.         return RET_FAIL;
  2095.     }
  2096.     else
  2097.         
  2098.     {
  2099.         return RET_OK;
  2100.     }
  2101. }
  2102. static KB_DBRET KD_ResetNetInfo(void)
  2103. {
  2104.     gE2pData.gNetInfo.NetworkName[0] = '';
  2105.     gE2pData.gNetInfo.NitVersion = 0;
  2106.     
  2107.     if (KB_E2PWrite(KB_NVM_NETWORK_INFO_ADDR, (UINT8 *)&gE2pData.gNetInfo, sizeof(KB_DBNetInfo), NULL) != RETOK)
  2108.     {
  2109.         return RET_FAIL;
  2110.     }
  2111.     else
  2112.         
  2113.     {
  2114.         return RET_OK;
  2115.     }
  2116. }
  2117. static KB_DBRET KD_ResetPwdInfo(void)
  2118. {
  2119.     gE2pData.gPwdInfo.PwdSwitch = PSW_OFF;
  2120.     strcpy((char *)gE2pData.gPwdInfo.Password, "8888");
  2121.     
  2122.     if (KB_E2PWrite(KB_NVM_PASSWORD_ADDR, (UINT8 *)&gE2pData.gPwdInfo, sizeof(KB_DBPwdInfo), NULL) != RETOK)
  2123.     {
  2124.         return RET_FAIL;
  2125.     }
  2126.     
  2127.     
  2128.     return RET_OK;
  2129. }
  2130. static KB_DBRET KD_ResetSysparInfo(void)
  2131. {
  2132.     gE2pData.gSysPara.ScreenFormat = KB_AV_ASPECT_RATIO_4TO3;
  2133.     gE2pData.gSysPara.Language = CHINESE;
  2134.     gE2pData.gSysPara.IPAddress[0] =  192;
  2135.     gE2pData.gSysPara.IPAddress[1] =  168;
  2136.     gE2pData.gSysPara.IPAddress[2] =  0;
  2137.     gE2pData.gSysPara.IPAddress[3] =  96;
  2138.     gE2pData.gSysPara.Mask[0] = 255;
  2139.     gE2pData.gSysPara.Mask[1] = 255;
  2140.     gE2pData.gSysPara.Mask[2] = 255;
  2141.     gE2pData.gSysPara.Mask[3] = 0;
  2142.     gE2pData.gSysPara.TimeZone = 8;
  2143.     gE2pData.gSysPara.timeDateUserOffset=0;//lsp 07/3/14
  2144.     gE2pData.gSysPara.ShutDownInfo = 0xff;
  2145.     gE2pData.gSysPara.SetUpInfo    = 0xff;
  2146.     
  2147.     if (KB_E2PWrite(KB_NVM_SYS_PARA_ADDR, (UINT8 *)&gE2pData.gSysPara, sizeof(KB_DBSysInfo), NULL) != RETOK)
  2148.     {
  2149.         return RET_FAIL;
  2150.     }
  2151.     else
  2152.     {
  2153.         return RET_OK;
  2154.     }
  2155. }
  2156. static KB_DBRET KD_ResetFavRad(void)
  2157. {
  2158.     gE2pData.gRADFavInfo.nTotal = 0;
  2159.     
  2160.     
  2161.     if (KB_E2PWrite(KB_NVM_FAV_RAD_ADDR, (UINT8 *)&gE2pData.gRADFavInfo, sizeof(KB_DBFavRadInfo), NULL) != RETOK)
  2162.     {
  2163.         printf("nKD_ResetFavRad::KB_E2PWrite fail");
  2164.         return RET_FAIL;
  2165.     }
  2166.     else
  2167.     {
  2168.         return RET_OK;
  2169.     }
  2170. }
  2171. static KB_DBRET KD_InitPwdInfo(void)
  2172. {
  2173.     if (KB_E2PRead(KB_NVM_PASSWORD_ADDR, (UINT8 *)&gE2pData.gPwdInfo, sizeof(KB_DBPwdInfo), NULL) != RETOK)
  2174.     {
  2175.         return RET_FAIL;
  2176.     }
  2177.     return RET_OK;
  2178. }
  2179. static KB_DBRET KD_InitRadInfo()
  2180. {
  2181.     UINT16 i, sum;
  2182.     
  2183.     sum = gPrgAllInfo.gRADInfo.nTotal;
  2184.     if (sum > KB_DB_MAX_RAD)
  2185.     {
  2186.         return RET_FAIL;
  2187.     }
  2188.     
  2189.     for (i = 0; i < sum; ++i)
  2190.     {
  2191.         gE2pData.gRADPrgCfgInfo[i].Flag = CONFIG_USED + 1;
  2192.     }
  2193.     
  2194.     return RET_OK;
  2195. }
  2196. static KB_DBRET KD_InitSrchInfo(void)
  2197. {
  2198.     if (KB_E2PRead(KB_NVM_SEARCH_INFO_ADDR, (UINT8 *)&gE2pData.gSrchInfo, sizeof(KB_DBSrchInfo), NULL) != RETOK)
  2199.     {
  2200.         return RET_FAIL;
  2201.     }
  2202.     return RET_OK;
  2203. }
  2204. static KB_DBRET KD_ResetSrchInfo(void)
  2205. {
  2206.     
  2207.     gE2pData.gSrchInfo.Frequency = 256 * 10;
  2208.     gE2pData.gSrchInfo.SymbolRate = 6875;
  2209.     gE2pData.gSrchInfo.QamType =  QAM64;
  2210.     gE2pData.gSrchInfo.SearchNIT = 1;
  2211.     
  2212.     
  2213.     if (KB_E2PWrite(KB_NVM_SEARCH_INFO_ADDR, (UINT8 *)&gE2pData.gSrchInfo, sizeof(KB_DBSrchInfo), NULL) != RETOK)
  2214.     {
  2215.         return RET_FAIL;
  2216.     }
  2217.     else
  2218.     {
  2219.         return RET_OK;
  2220.     }
  2221.     
  2222.     
  2223. }
  2224. static KB_DBRET KD_ResetFavDtv(void)
  2225. {
  2226.     gE2pData.gDTVFavInfo.nTotal = 0;
  2227.     
  2228.     
  2229.     if (KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, (UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  2230.     {
  2231.         printf("nKD_ResetFavDtv::KB_E2PWrite fail");
  2232.         return RET_FAIL;
  2233.     }
  2234.     else
  2235.     {
  2236.         return RET_OK;
  2237.     }
  2238. }
  2239. static KB_DBRET KD_InitFavDtv(void)
  2240. {
  2241.     if (KB_E2PRead(KB_NVM_FAV_DTV_ADDR, (UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  2242.     {
  2243.         printf("nKD_InitFavDtv::KB_E2PRead fail");
  2244.         return RET_FAIL;
  2245.     }
  2246.     
  2247.     return RET_OK;
  2248. }
  2249. static KB_DBRET KD_InitFavRad(void)
  2250. {
  2251.     if (KB_E2PRead(KB_NVM_FAV_RAD_ADDR, (UINT8*)&gE2pData.gRADFavInfo, sizeof(KB_DBFavRadInfo), NULL) != RETOK)
  2252.     {
  2253.         printf("nKD_InitFavRad::KB_E2PRead fail");
  2254.         return RET_FAIL;
  2255.     }
  2256.     
  2257.     return RET_OK;
  2258. }
  2259. static void KD_InitPrgConfig(void)
  2260. {
  2261.     UINT16 i;
  2262.     
  2263.     for (i = 0; i < KB_DB_MAX_DTV; ++i)
  2264.     {
  2265.         gDtvCfgFlag[i] = 0;
  2266.     }
  2267.     for (i = 0; i < KB_DB_MAX_RAD; ++i)
  2268.     {
  2269.         gRadCfgFlag[i] = 0;
  2270.     }
  2271.     //added by whale 07/05/25 start
  2272.     for (i = 0; i < KB_DB_MAX_DATA; ++i)
  2273.     {
  2274.         gDataCfgFlag[i] = 0;
  2275.     }
  2276.     //added by whale 07/05/25 end
  2277. }
  2278. static KB_DBRET KD_InitNetInfo(void)
  2279. {
  2280.     if (KB_E2PRead(KB_NVM_NETWORK_INFO_ADDR, (UINT8 *)&gE2pData.gNetInfo, sizeof(KB_DBNetInfo), NULL) != RETOK)
  2281.     {
  2282.         return RET_FAIL;
  2283.     }
  2284.     
  2285.     return RET_OK;
  2286. }
  2287. static KB_DBRET KD_InitMail(void)
  2288. {
  2289.     UINT8 i, bIndex;
  2290.     
  2291.     if (KB_E2PRead(KB_NVM_MAIL_INDEX_ADDR, (UINT8 *)&gE2pData.gMailInfo, sizeof(KB_DBMailIndex), NULL) != RETOK)
  2292.     {
  2293.         return RET_FAIL;
  2294.     }
  2295.     
  2296.     for (i = 0; i < KB_DB_MAX_MAIL; ++i)
  2297.     {
  2298.         if (gMailInfo[i].Flag != CONFIG_USED
  2299.             && gMailInfo[i].Flag != CONFIG_NO_USED)
  2300.         {
  2301.             return RET_FAIL;
  2302.         }
  2303.     }
  2304.     
  2305.     for (i = 0; i < gE2pData.gMailInfo.nTotal; ++i)
  2306.     {
  2307.         bIndex = gE2pData.gMailInfo.MailIndexList[i].Index;
  2308.         
  2309.         if (gMailInfo[bIndex].Flag != CONFIG_USED)
  2310.         {
  2311.             return RET_FAIL;
  2312.         }
  2313.     }
  2314.     return RET_OK;
  2315. }
  2316. unsigned short KB_DBGetPrgAvInfoByPrgNo(UINT8 prgType,
  2317. unsigned short nPrgNO, 
  2318. KB_DBPRGPID *pPrgPid)
  2319. {
  2320.   
  2321.     if (prgType == DTVPRG)
  2322.     {
  2323.         pPrgPid->PCR_Pid = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].PCRPID;
  2324. pPrgPid->Audio_Pid = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].AudioPID;
  2325. pPrgPid->Video_Pid = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].VideoPID;
  2326.     }
  2327.     else if (prgType == RADIOPRG)
  2328.     {
  2329.         pPrgPid->PCR_Pid = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].PCRPID;
  2330. pPrgPid->Audio_Pid = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].AudioPID;
  2331. pPrgPid->Video_Pid = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].VideoPID;
  2332.     }
  2333.     //added by whale 07/05/25 start
  2334.     else if (prgType == DATAPRG)
  2335.     {
  2336.         pPrgPid->PCR_Pid = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].PCRPID;
  2337. pPrgPid->Audio_Pid = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].AudioPID;
  2338. pPrgPid->Video_Pid = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].VideoPID;
  2339.     }
  2340.     //added by whale 07/05/25 end
  2341.   return KB_DB_DTV_SUCCESS;
  2342. }
  2343. static KB_DBRET KD_ResetSerList(void)
  2344. {
  2345.     gE2pData.stServiceListInfo.DtvNum = 0;
  2346.     gE2pData.stServiceListInfo.RadNum = 0;
  2347.     
  2348.     if (KB_E2PWrite(KB_NVM_SERVICELIST_INFO_ADDR, (UINT8 *)&gE2pData.stServiceListInfo, sizeof(KB_DBListInfo), NULL) != RETOK)
  2349.     {
  2350.         return RET_FAIL;
  2351.     }
  2352.     
  2353.     return RET_OK;
  2354. }
  2355. static KB_DBRET KD_InitSerList(void)
  2356. {
  2357.     if (KB_E2PRead(KB_NVM_SERVICELIST_INFO_ADDR, (UINT8 *)&gE2pData.stServiceListInfo, sizeof(KB_DBListInfo), NULL) != RETOK)
  2358.     {
  2359.         return RET_FAIL;
  2360.     }
  2361.     
  2362.     return RET_OK;
  2363. }
  2364. INT32 KB_DBGetSvc2_TSID(INT32 nTsId, INT32 nPrgType, 
  2365.                                    INT32 *pSvcID1,    INT32 nCount1,
  2366.                                    INT32 *pSvcID2, INT32 nCount2)
  2367. {
  2368.     UINT16 i = 0, sum = 0, j;
  2369.     KB_DBPrgInfo programInfo;
  2370.     KB_DBChnnlInfo channelInfo;
  2371.     UINT8 track;
  2372.     UINT8 volume;
  2373.     UINT8 lockFlag;
  2374.     INT32 nNumber;
  2375.     
  2376.     sum = KB_DBGetPrgTotal((UINT8)nPrgType);
  2377.     nNumber = 0;
  2378.     for (i = 0; i < sum; ++i)
  2379.     {
  2380.         if (KB_DBGetPrgInfo(i, (UINT8)nPrgType, &programInfo, &channelInfo, &track, &volume, &lockFlag) == RET_OK)
  2381.         {
  2382.             if (programInfo.TSID == nTsId)
  2383.             {
  2384.                 for (j = 0; j < nCount2; j++)
  2385.                 {                    
  2386.                     if (programInfo.SvcID== *(pSvcID2 + j))
  2387.                     {
  2388.                         break;
  2389.                     }
  2390.                 }
  2391.                 
  2392.                 if (j >= nCount2)
  2393.                 {
  2394.                     *(pSvcID1 + nNumber) = programInfo.SvcID;
  2395.                     nNumber ++;
  2396.                     
  2397.                     if (nNumber == nCount1)
  2398.                     {
  2399.                         break;
  2400.                     }
  2401.                 }                
  2402.             }
  2403.         }
  2404.     }
  2405.     
  2406.     return nNumber;
  2407. }
  2408. KB_DBRET KD_GetNVOD_Svc(KB_SIRefSvcCell *refSvc)
  2409. {
  2410. UINT16 loop,i;
  2411.     for (loop=0;loop<gPrgAllInfo.gNVODInfo.nTotal;loop++)
  2412.    {
  2413.    if (gPrgAllInfo.gNVODInfo.RefSvc[loop].RefSvcId==refSvc->refScvId)
  2414.    {
  2415.         strcpy((char*)gPrgAllInfo.gNVODInfo.RefSvc[loop].RefSvcName,(char*)refSvc->refScvName);
  2416.         gPrgAllInfo.gNVODInfo.RefSvc[loop].TsID = refSvc->TsID;
  2417.         gPrgAllInfo.gNVODInfo.RefSvc[loop].ShiftNum = 0;
  2418.             for(i = 0;i< refSvc->shiftSvcNum;i++)
  2419.         {
  2420.         gPrgAllInfo.gNVODInfo.RefSvc[loop].ShiftList[i].ServiceId = 
  2421. refSvc->shiftSvc[i].svcId;
  2422.         gPrgAllInfo.gNVODInfo.RefSvc[loop].ShiftList[i].TSID= 
  2423. refSvc->shiftSvc[i].tsId;
  2424.         gPrgAllInfo.gNVODInfo.RefSvc[loop].ShiftNum ++;
  2425.         }
  2426.             return RET_OK;
  2427.    }
  2428.    }
  2429.   
  2430.    return RET_FAIL;
  2431. }
  2432. static KB_DBRET KD_GetPrgConfig(void)
  2433. {
  2434.     UINT16 i, sum, indexofconfig;
  2435.     KB_DBPrgConfigNode *pConfignode;
  2436.     
  2437.     sum = gPrgAllInfo.gDTVInfo.nTotal;
  2438. if (sum == 65535)
  2439. {
  2440. sum = 0;
  2441. }
  2442.     for (i = 0; i < sum; ++i)
  2443.     {
  2444.         indexofconfig = gPrgAllInfo.gDTVInfo.PgmList[i].IndexOfConfigInfo;
  2445.         pConfignode = &gE2pData.gDTVPrgCfgInfo[indexofconfig];
  2446.         if (KB_E2PRead((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  2447.                 (UINT8 *)pConfignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  2448.         {
  2449.             return RET_FAIL;
  2450.         }
  2451.     }
  2452.     sum = gPrgAllInfo.gRADInfo.nTotal;
  2453. if (sum == 65535)
  2454. {
  2455. sum = 0;
  2456. }
  2457.     for (i = 0; i < sum; ++i)
  2458.     {
  2459.         indexofconfig = gPrgAllInfo.gRADInfo.PgmList[i].IndexOfConfigInfo;
  2460.         pConfignode = &gE2pData.gRADPrgCfgInfo[indexofconfig];
  2461.  
  2462.         if (KB_E2PRead((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  2463.                 (UINT8 *)pConfignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  2464.         {
  2465.             return RET_FAIL;
  2466.         }
  2467.     }
  2468.     //added by whale 07/05/25 start
  2469.     sum = gPrgAllInfo.gDATAInfo.nTotal;
  2470. if (sum == 65535)
  2471. {
  2472. sum = 0;
  2473. }
  2474.     for (i = 0; i < sum; ++i)
  2475.     {
  2476.         indexofconfig = gPrgAllInfo.gDATAInfo.PgmList[i].IndexOfConfigInfo;
  2477.         pConfignode = &gE2pData.gDATAPrgCfgInfo[indexofconfig];
  2478.  
  2479.         if (KB_E2PRead((UINT16)(KB_NVM_DATA_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode)),
  2480.                 (UINT8 *)pConfignode, sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  2481.         {
  2482.             return RET_FAIL;
  2483.         }
  2484.     }
  2485.     //added by whale 07/05/25 end
  2486.     return RET_OK;
  2487. }
  2488. unsigned short KB_DBGetChnlInfoByPrgNO(UINT8 prgType,
  2489. unsigned short nPrgNO, 
  2490.   unsigned long * pFrea, 
  2491.   unsigned long * pSymb, 
  2492.   unsigned char * pQam)
  2493. {
  2494.     UINT16 i;
  2495. for (i=0; i<gPrgAllInfo.gChnnlInfo.nTotal; i++)
  2496. {
  2497.     if (prgType == DTVPRG)
  2498.     {
  2499. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  2500.  == gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].TSID)
  2501. {
  2502. break;
  2503. }
  2504.     }
  2505.     else if (prgType == RADIOPRG)
  2506.     {
  2507. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  2508.  == gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].TSID)
  2509. {
  2510. break;
  2511. }
  2512.     }
  2513.     //added by whale 07/05/25 start
  2514.     else if (prgType == DATAPRG)
  2515.     {
  2516. if (gPrgAllInfo.gChnnlInfo.ChannelList[i].TSID 
  2517.  == gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].TSID)
  2518. {
  2519. break;
  2520. }
  2521.     }
  2522.     //added by whale 07/05/25 end
  2523. }
  2524.     *pFrea = (unsigned long)gPrgAllInfo.gChnnlInfo.ChannelList[i].Freq* 100000;
  2525.     *pSymb = (unsigned long)gPrgAllInfo.gChnnlInfo.ChannelList[i].Symb* 1000;
  2526.     *pQam  = (unsigned char)gPrgAllInfo.gChnnlInfo.ChannelList[i].QAM;
  2527.     return KB_DB_DTV_SUCCESS;
  2528. }
  2529. INT8 KD_GetNITVer(void)
  2530. {
  2531. UINT8 ver;
  2532. UINT8 networkName[22];
  2533. KB_DBRET ret;
  2534. ret = KD_GetNitInfo(networkName,&ver);
  2535. if(ret != RET_OK)
  2536. {
  2537. //ver = -1;
  2538. return -1;
  2539. }
  2540. return ver;
  2541. }
  2542. unsigned short KB_DBGetPrgPMT(UINT8 prgType,
  2543. unsigned short nPrgNO, 
  2544.   unsigned short * pPmtPID, 
  2545.   unsigned short * pSvcID)
  2546. {
  2547. KB_DBPrgInfo prgInfo;
  2548. KB_DBChnnlInfo chnnlInfo;
  2549. UINT8 bTrack;
  2550. UINT8 bVolume;
  2551. UINT8 bLockFlag;
  2552. if (KB_DBGetPrgInfo(nPrgNO - 1, prgType, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag) != RET_OK)
  2553. return KB_DB_DTV_FAILURE;
  2554. *pPmtPID = prgInfo.PMTPID;
  2555. *pSvcID = prgInfo.SvcID;
  2556. return KB_DB_DTV_SUCCESS;
  2557. }
  2558. unsigned char * KB_DBGetPrgName(UINT8 type,int nPrgNO)
  2559. {
  2560. static KB_DBPrgInfo prgInfo;
  2561. KB_DBChnnlInfo chnnlInfo;
  2562. UINT8 bTrack;
  2563. UINT8 bVolume;
  2564. UINT8 bLockFlag;
  2565. KB_DBGetPrgInfo(nPrgNO - 1, type, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2566. return prgInfo.Name;
  2567. }
  2568. unsigned short KB_DBGetCAFlagByPrgNo(int type,unsigned short nPrgNO)
  2569. {
  2570.   KB_DBPrgInfo prgInfo;
  2571.   KB_DBChnnlInfo chnnlInfo;
  2572.   UINT8 bTrack;
  2573.   UINT8 bVolume;
  2574.   UINT8 bLockFlag;
  2575.   KB_DBGetPrgInfo(nPrgNO - 1, type, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2576.   return prgInfo.ScrambleFlag;
  2577. }
  2578. KB_DBRET KB_DBSaveCAFlagByPrgNo(int type,unsigned short nPrgNO,unsigned char i_bCAFlag)
  2579. {
  2580.     if(((nPrgNO - 1) <0 ) || ((nPrgNO - 1) >= KB_DBGetPrgTotal(type)))
  2581.     {
  2582.         return RET_FAIL;
  2583.     }
  2584.     
  2585.     if (type == DTVPRG)
  2586. {
  2587.         gPrgAllInfo.gDTVInfo.PgmList[nPrgNO - 1].ScrambleFlag = i_bCAFlag;
  2588.     }
  2589.     else if (type == RADIOPRG)
  2590.     {
  2591.         gPrgAllInfo.gRADInfo.PgmList[nPrgNO - 1].ScrambleFlag = i_bCAFlag;
  2592.     }
  2593.     return RET_OK;
  2594. }
  2595. unsigned char  KB_DBGetPatVerByPrgNo(UINT8 prgType,unsigned short nPrgNO)
  2596. {
  2597.   KB_DBPrgInfo prgInfo;
  2598.   KB_DBChnnlInfo chnnlInfo;
  2599.   UINT8 bTrack;
  2600.   UINT8 bVolume;
  2601.   UINT8 bLockFlag;
  2602.   KB_DBGetPrgInfo(nPrgNO - 1, prgType, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2603.   return chnnlInfo.PATVersion;
  2604. }
  2605. unsigned char KB_DBGetPmtVerByPrgNo(UINT8 prgType,unsigned short nPrgNO)
  2606. {
  2607.   KB_DBPrgInfo prgInfo;
  2608.   KB_DBChnnlInfo chnnlInfo;
  2609.   UINT8 bTrack;
  2610.   UINT8 bVolume;
  2611.   UINT8 bLockFlag;
  2612.   KB_DBGetPrgInfo(nPrgNO - 1, prgType, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2613.   return prgInfo.PMTVersion;
  2614. }
  2615. unsigned char  KB_DBGetSdtVer(UINT8 prgType,unsigned short nPrgNO)
  2616. {
  2617.   KB_DBPrgInfo prgInfo;
  2618.   KB_DBChnnlInfo chnnlInfo;
  2619.   UINT8 bTrack;
  2620.   UINT8 bVolume;
  2621.   UINT8 bLockFlag;
  2622.   KB_DBGetPrgInfo(nPrgNO - 1, prgType, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2623.   return chnnlInfo.SDTVersion;
  2624. }
  2625. char  KB_DBGetPrgTrace(UINT8 bPrgType,unsigned short nPrgNO)
  2626. {
  2627. UINT16 nConfigInd;
  2628.     UINT8 nConfigInfo;
  2629. UINT8 bTrack;
  2630.     if (bPrgType == DTVPRG)
  2631.     {
  2632.         nConfigInd = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2633.         nConfigInfo = gE2pData.gDTVPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2634.     }
  2635.     else if (bPrgType == RADIOPRG)
  2636.     {
  2637.         nConfigInd = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2638.         nConfigInfo = gE2pData.gRADPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2639.     }
  2640.     //added by whale 07/05/25 start
  2641.     else if (bPrgType == DATAPRG)
  2642.     {
  2643.         nConfigInd = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2644.         nConfigInfo = gE2pData.gDATAPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2645.     }
  2646.     //added by whale 07/05/25 end
  2647. bTrack  = ((nConfigInfo >> 5) & 0x03);
  2648.     return bTrack;
  2649. }
  2650.  /* ---------------------------------
  2651. * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
  2652. * =================================
  2653. * |锁 | 声道  |       音量        |
  2654. * ---------------------------------*/
  2655. KB_DBRET  KB_DBSaveTrace(UINT8 bPrgType,unsigned short nPrgNO,UINT8  nTrack)
  2656. {
  2657.     UINT16 indexofconfig;
  2658.     UINT8  nConfigInfo;
  2659.     UINT32 nAddress1, nAddress2, nOffset;
  2660.     
  2661.     if (bPrgType == DTVPRG)
  2662.     {
  2663.         indexofconfig = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2664.         
  2665.         nConfigInfo = gE2pData.gDTVPrgCfgInfo[indexofconfig].Lock_Track_Vol;
  2666.         
  2667.         nConfigInfo &= 0x80;
  2668.         nConfigInfo |= (nTrack & 0x7f);
  2669.         gE2pData.gDTVPrgCfgInfo[indexofconfig].Lock_Track_Vol = nConfigInfo;
  2670.         nAddress1 = (UINT32)&(gE2pData.gDTVPrgCfgInfo[indexofconfig].Flag);
  2671.         nAddress2 = (UINT32)&(gE2pData.gDTVPrgCfgInfo[indexofconfig].Lock_Track_Vol);
  2672.         nOffset   = nAddress2 - nAddress1;        
  2673.         if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + sizeof(KB_DBPrgConfigNode) * indexofconfig + (int)nOffset),
  2674.             (UINT8 *)&nConfigInfo, sizeof(UINT8), NULL) != RETOK)
  2675.         {
  2676.             return RET_FAIL;
  2677.         }
  2678.     }
  2679.     else if (bPrgType == RADIOPRG)
  2680.     {
  2681.         indexofconfig = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2682.         
  2683.         nConfigInfo = gE2pData.gRADPrgCfgInfo[indexofconfig].Lock_Track_Vol;
  2684.         
  2685.         nConfigInfo &= 0x80;
  2686.         nConfigInfo |= (nTrack & 0x7f);
  2687.         gE2pData.gRADPrgCfgInfo[indexofconfig].Lock_Track_Vol = nConfigInfo;
  2688.         nAddress1 = (UINT32)&(gE2pData.gRADPrgCfgInfo[indexofconfig].Flag);
  2689.         nAddress2 = (UINT32)&(gE2pData.gRADPrgCfgInfo[indexofconfig].Lock_Track_Vol);
  2690.         nOffset   = nAddress2 - nAddress1;      
  2691.         if (KB_E2PWrite((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode) + (int)nOffset),
  2692.             (UINT8 *)&nConfigInfo, sizeof(UINT8), NULL) != RETOK)
  2693.         {
  2694.             return RET_FAIL;
  2695.         }
  2696.     }
  2697.     //added by whale 07/05/25 start
  2698.     else if (bPrgType == DATAPRG)
  2699.     {
  2700.         indexofconfig = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2701.         
  2702.         nConfigInfo = gE2pData.gDATAPrgCfgInfo[indexofconfig].Lock_Track_Vol;
  2703.         
  2704.         nConfigInfo &= 0x80;
  2705.         nConfigInfo |= (nTrack & 0x7f);
  2706.         gE2pData.gDATAPrgCfgInfo[indexofconfig].Lock_Track_Vol = nConfigInfo;
  2707.         nAddress1 = (UINT32)&(gE2pData.gDATAPrgCfgInfo[indexofconfig].Flag);
  2708.         nAddress2 = (UINT32)&(gE2pData.gDATAPrgCfgInfo[indexofconfig].Lock_Track_Vol);
  2709.         nOffset   = nAddress2 - nAddress1;      
  2710.         if (KB_E2PWrite((UINT16)(KB_NVM_DATA_PGM_CFG_ADDR + indexofconfig * sizeof(KB_DBPrgConfigNode) + (int)nOffset),
  2711.             (UINT8 *)&nConfigInfo, sizeof(UINT8), NULL) != RETOK)
  2712.         {
  2713.             return RET_FAIL;
  2714.         }
  2715.     }
  2716.     //added by whale 07/05/25 end
  2717.     return RET_OK;
  2718. }
  2719. KB_DBRET KB_DBSaveDemandInfo(UINT16 size, UINT8 *buff )
  2720. {
  2721.    
  2722.   if(KB_E2PWrite(KB_NVM_DEMAND_INFO_ADDR, buff, size, NULL) != RETOK)
  2723.     {
  2724.         return RET_FAIL;
  2725.     }
  2726.     
  2727.     return RET_OK;
  2728. }
  2729.   KB_DBRET KB_DBGetDemandInfo(UINT16 size, UINT8 *buff )
  2730. {
  2731.    
  2732.   if(KB_E2PRead(KB_NVM_DEMAND_INFO_ADDR, buff, size, NULL) != RETOK)
  2733. {
  2734.         return RET_FAIL;
  2735.     }
  2736.     
  2737.     return RET_OK;
  2738. }
  2739. unsigned char KB_DBGetVolumeByPrgNo(unsigned char *pVolume, unsigned char bType,
  2740.                                            unsigned short nPrgNO)
  2741. {
  2742. UINT16 nConfigInd;
  2743.      UINT8 nConfigInfo;
  2744. UINT8 bVolume;
  2745.     if (bType == DTVPRG)
  2746.     {
  2747.         nConfigInd = gPrgAllInfo.gDTVInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2748.         nConfigInfo = gE2pData.gDTVPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2749.     }
  2750.     else if (bType == RADIOPRG)
  2751.     {
  2752.         nConfigInd = gPrgAllInfo.gRADInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2753.         nConfigInfo = gE2pData.gRADPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2754.     }
  2755.     //added by whale 07/05/25 start
  2756.     else if (bType == DATAPRG)
  2757.     {
  2758.         nConfigInd = gPrgAllInfo.gDATAInfo.PgmList[nPrgNO-1].IndexOfConfigInfo;
  2759.         nConfigInfo = gE2pData.gDATAPrgCfgInfo[nConfigInd].Lock_Track_Vol;
  2760.     }
  2761.     //added by whale 07/05/25 end
  2762. bVolume  = (nConfigInfo & 0x1F); 
  2763.     *pVolume = bVolume;
  2764. return bVolume;
  2765. }
  2766. KB_DBRET KB_DBSaveVolume(unsigned char nVolume, UINT8 bPrgType,unsigned short nPrgNO)
  2767. {
  2768.   KB_DBPrgInfo prgInfo;
  2769.   KB_DBChnnlInfo chnnlInfo;
  2770.   UINT8 bTrack;
  2771.   UINT8 bVolume;
  2772.   UINT8 bLockFlag;
  2773.   UINT8 bTrackVolume;
  2774.   KB_DBGetPrgInfo(nPrgNO - 1, bPrgType, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  2775.   bTrackVolume = bTrack << 5 | nVolume;
  2776.   KB_DBSaveTrace(bPrgType,nPrgNO,bTrackVolume);
  2777.   return RET_OK;
  2778. }
  2779. unsigned char KB_DBGetZone(signed char *pTimeZone)
  2780. {
  2781. #if 1
  2782.    *pTimeZone=8;
  2783. #else
  2784.   KB_DBSysInfo params;
  2785.   KB_DBGetSysPara(&params);
  2786.   if( (params.TimeZone > 12) || (params.TimeZone < -12) )
  2787.     return KB_DB_DTV_FAILURE;
  2788.   *pTimeZone = params.TimeZone;
  2789. #endif
  2790.    return KB_DB_DTV_SUCCESS;
  2791. }
  2792. //lsp  07/3/14
  2793. unsigned char KB_DBSaveZone(signed char pTimeZone)
  2794. {
  2795.      KB_DBSysInfo params;
  2796.      KB_DBGetSysPara(&params);
  2797.      if( (params.TimeZone > 12) || (params.TimeZone < -12) )
  2798.      return KB_DB_DTV_FAILURE;
  2799.      params.TimeZone= pTimeZone;
  2800.      KB_DBSaveSysPara(&params);
  2801.     return KB_DB_DTV_SUCCESS;
  2802. }
  2803. UINT32 KB_DBGetTimeDateUserOffset(void)
  2804. {
  2805.       KB_DBSysInfo params; 
  2806.       KB_DBGetSysPara(&params);
  2807.       return  params.timeDateUserOffset;
  2808. }
  2809. void KB_DBSaveTimeDateUserOffset(UINT32 tDUserOffset)
  2810. {
  2811.       KB_DBSysInfo params; 
  2812.       KB_DBGetSysPara(&params);
  2813.       params.timeDateUserOffset= tDUserOffset;
  2814.       KB_DBSaveSysPara(&params);
  2815. }
  2816. //end lsp 07/3/14
  2817. unsigned char KB_DBGetLanguageFlag(void)
  2818. {
  2819.   KB_DBSysInfo params;
  2820.   unsigned char type = 0;
  2821.   KB_DBGetSysPara(&params);
  2822.   if(params.Language >= 2)
  2823.    return type;
  2824.   return params.Language;
  2825. }
  2826. /*=============================================================
  2827.  函数名称 : KB_DBSetLanguageFlag
  2828.  功    能 : 设置语言类型标志
  2829.  入    口 : nLanFlag---语言类型
  2830.  出    口 : 无
  2831.  返    回 : RET_OK---成功,RET_FAIL---失败
  2832. =============================================================*/
  2833. KB_DBRET KB_DBSaveLanguageFlag(UINT8 nLanFlag)
  2834. {
  2835.     gE2pData.gSysPara.Language = nLanFlag;
  2836.         
  2837.     if (KB_E2PWrite(KB_NVM_SYS_PARA_ADDR, (UINT8 *)&gE2pData.gSysPara, sizeof(KB_DBSysInfo), NULL) != RETOK)
  2838.     {
  2839.         return RET_FAIL;
  2840.     }
  2841.     else
  2842.     {
  2843.         return RET_OK;
  2844.     }
  2845. }
  2846. void KB_DBSwitchProInfo(UINT8 nPrgType ,int oldnitem,int newnitem)
  2847. {
  2848. KB_DBPrgInfo  tempPrg;
  2849. if(nPrgType==DTVPRG)
  2850. {
  2851. tempPrg=gPrgAllInfo.gDTVInfo.PgmList[oldnitem];
  2852. gPrgAllInfo.gDTVInfo.PgmList[oldnitem]=gPrgAllInfo.gDTVInfo.PgmList[newnitem];
  2853. gPrgAllInfo.gDTVInfo.PgmList[newnitem]=tempPrg;
  2854. }
  2855. //modified by whale 07/05/25
  2856. //else
  2857. else if (nPrgType==RADIOPRG)
  2858. {
  2859. tempPrg= gPrgAllInfo.gRADInfo.PgmList[oldnitem];
  2860. gPrgAllInfo.gRADInfo.PgmList[oldnitem]=gPrgAllInfo.gRADInfo.PgmList[newnitem];
  2861. gPrgAllInfo.gRADInfo.PgmList[newnitem]=tempPrg;
  2862. }
  2863. }
  2864. UINT16 KB_DBGetPrgNoByFavIndex(UINT8 nPrgType ,int FavIndex)
  2865. {
  2866.   UINT16 uiRealPgmNo;
  2867.   KB_DBPrgInfo tPlayInfo;
  2868.   KB_DBChnnlInfo chnnlInfo;
  2869.   UINT8 bTrack, bVol, bLockFlag;
  2870.   
  2871.   KB_DBGetFavPrgInfoByFavInx(FavIndex , nPrgType, &uiRealPgmNo, &tPlayInfo, &chnnlInfo, &bTrack, &bVol, &bLockFlag);
  2872.   return uiRealPgmNo;
  2873. }
  2874. int KB_PrgSort(UINT8 Prgtype,UINT16 *changeState)
  2875. {
  2876.     int total,i,find,tmpPos = -1;
  2877.     int okSort = 0;
  2878.     unsigned char  *name = NULL;
  2879.     KB_DBPrgInfo  tmpPrg,tmpPrg2;
  2880.     UINT16 sortstate[200 + 1],AfterSortState[200 + 1],AfterSort[ 201 ];
  2881.     int end = 0;
  2882.     KB_DBPrgInfo  *changeInfo = NULL;
  2883.     int changeTotal;
  2884.     
  2885.     total = KB_DBGetPrgTotal(Prgtype);
  2886.     switch(Prgtype)
  2887.     {
  2888.     case DTVPRG:
  2889.         changeInfo = gPrgAllInfo.gDTVInfo.PgmList;
  2890.         changeTotal = gPrgAllInfo.gDTVInfo.nTotal;
  2891.         break;
  2892.     case RADIOPRG:
  2893.         changeInfo = gPrgAllInfo.gRADInfo.PgmList;
  2894.         changeTotal = gPrgAllInfo.gRADInfo.nTotal;
  2895.         break;
  2896.     //added by whale 07/05/25 start
  2897.     case DATAPRG:
  2898.         changeInfo = gPrgAllInfo.gDATAInfo.PgmList;
  2899.         changeTotal = gPrgAllInfo.gDATAInfo.nTotal;
  2900.         break;
  2901.     //added by whale 07/05/25 end
  2902.     default:
  2903.         return -1;
  2904.     }
  2905.     
  2906.     for( i = 0; i < total + 1;i ++ )
  2907.     {
  2908.         sortstate[i] = i ;
  2909.         AfterSort[i] = i ;
  2910.         AfterSortState[i] = 0;
  2911.     }
  2912.     
  2913.     while(okSort < total)
  2914.     {
  2915.         if(tmpPos != -1)
  2916.         {
  2917.             for(i = 1 ;i < total + 1;i++)
  2918.             {
  2919.                 if(changeState[i] == tmpPos)
  2920.                 {
  2921.                     break;
  2922.                 }
  2923.             }
  2924.             
  2925.             {
  2926.                 memcpy(&tmpPrg2,&tmpPrg,sizeof(KB_DBPrgInfo));
  2927.                 memcpy(&tmpPrg,&changeInfo[i - 1],sizeof(KB_DBPrgInfo));
  2928.                 memcpy(&changeInfo[i - 1],&tmpPrg2,sizeof(KB_DBPrgInfo));
  2929.                 AfterSort[i] = tmpPos;
  2930.             }
  2931.             AfterSortState[i] = 1;
  2932.             tmpPos = sortstate [ i ] ;
  2933.             
  2934.             for( i = 1 ; i< total + 1 ;i++)
  2935.             {
  2936.                 if((AfterSortState[ i ] == 1) && (tmpPos == AfterSort[i] ))
  2937.                 {
  2938.                     tmpPos = -1;
  2939.                 }
  2940.             }
  2941.         }
  2942.         else
  2943.         {
  2944.             end = 1;
  2945.             for(i = 1;i < total + 1;i++)
  2946.             {
  2947.                 if(changeState[i] != AfterSort[i])
  2948.                 {
  2949.                     find = i;
  2950.                     end = 0;
  2951.                     break;
  2952.                 }
  2953.                 else
  2954.                 {
  2955.                     AfterSortState[i] = 1;
  2956.                 }
  2957.             }
  2958.             
  2959.             if(end == 1)
  2960.             {
  2961.                 okSort = total;
  2962.             }
  2963.             else
  2964.             {
  2965.                 {
  2966.                     memcpy(&tmpPrg,&changeInfo[find - 1],sizeof(KB_DBPrgInfo));
  2967.                     memcpy(&changeInfo[find - 1],&changeInfo[changeState[find] - 1],sizeof(KB_DBPrgInfo));
  2968.                     AfterSort[find] = changeState[find];
  2969.                 }
  2970.                 tmpPos = sortstate[find];
  2971.                 AfterSortState[find] = 1;
  2972.             }
  2973.         }
  2974.     }
  2975.     
  2976.     for(i = 0;i< total;i++)
  2977.     {
  2978.         {
  2979.             name = changeInfo[i].Name;
  2980.         }
  2981.     }
  2982.     KB_DBSavePrgInfo(0);
  2983.     
  2984.     return 0;
  2985. }
  2986. /*KB_DBRET KB_DBSaveCurPrg(unsigned short nPrgNO, unsigned char nPrgType)
  2987. {
  2988.    
  2989.     gE2pData.gCurPrgInfo.prgNO = nPrgNO - 1;
  2990.     gE2pData.gCurPrgInfo.prgType= nPrgType;
  2991.    
  2992.     if(KB_E2PWrite(KB_NVM_CUR_PGM_ADDR, (UINT8 *)&gE2pData.gCurPrgInfo, sizeof(KB_DBCurPrgInd), NULL) != RETOK)
  2993.     {
  2994.         return RET_FAIL;
  2995.     }
  2996.     
  2997.     return RET_OK;
  2998.  
  2999. }*/
  3000. void KB_ReadBannerDispTime(char *bannerDispTime)
  3001. {
  3002. if (KB_E2PRead(KB_NVM_LAST_BANNER_DISPTIME_OFFSET, (UINT8 *)bannerDispTime, sizeof(char), NULL) != RETOK)
  3003. {
  3004. printf("===FAIL load_pos====n");
  3005. }
  3006. }
  3007. void KB_SaveBannerDispTime(char *bannerDispTime)
  3008. {
  3009. if (KB_E2PWrite(KB_NVM_LAST_BANNER_DISPTIME_OFFSET, (UINT8 *)bannerDispTime, sizeof(char), NULL) != RETOK)
  3010. {
  3011. printf("===FAIL save_pos====n");
  3012. }
  3013. }
  3014.  
  3015.  //added by yyj start 2007.6.14
  3016. KB_DBRET KB_DBSavePgmCurVol(UINT8 buff )
  3017. {
  3018.     gConfigAudioVol=buff;
  3019.     if(KB_E2PWrite(KB_NVM_CONFIG_AUDIO_VOLUME_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3020.     {
  3021.         return RET_FAIL;
  3022.     }
  3023.     
  3024.     return RET_OK;
  3025. }
  3026.  KB_DBRET KB_DBGetPgmCurVol(UINT8 *buff )
  3027. {
  3028.     *buff=gConfigAudioVol;
  3029.      if(*buff>=KB_AV_MAX_VOLUME)
  3030.      {
  3031.           *buff=KB_AV_DEFAULT_VOLUME;
  3032.      }
  3033.     
  3034.     return RET_OK;
  3035. }
  3036. static KB_DBRET KD_InitPgmCurVol(void)
  3037. {
  3038.     if (KB_E2PRead(KB_NVM_CONFIG_AUDIO_VOLUME_OFFSET, (UINT8 *)&gConfigAudioVol, sizeof(UINT8), NULL) != RETOK)
  3039.     {
  3040.         return RET_FAIL;
  3041.     }
  3042.     
  3043.     return RET_OK;
  3044. }
  3045. static KB_DBRET KD_ResetPgmCurVol(void)
  3046. {
  3047.     gConfigAudioVol=KB_AV_DEFAULT_VOLUME;
  3048.     
  3049.     if (KB_E2PWrite(KB_NVM_CONFIG_AUDIO_VOLUME_OFFSET, (UINT8 *)&gConfigAudioVol, sizeof(UINT8), NULL) != RETOK)
  3050.     {
  3051.         return RET_FAIL;
  3052.     }
  3053.     
  3054.     return RET_OK;
  3055. }
  3056. ///////////序列号////////////
  3057. KB_DBRET KD_DBGetSerialNumInfo(UINT16 size, UINT8 *buff)
  3058. {
  3059.   
  3060.     if (KB_E2PRead(KB_NVM_UPDATE_IN_SERIAL_NUM_OFFSET, buff, size, NULL) != RETOK)
  3061.     {
  3062.         return RET_FAIL;
  3063.     }
  3064.     
  3065.     return RET_OK;
  3066. }
  3067. KB_DBRET KD_DBSaveSerialNumInfo(UINT16 size, UINT8 *buff)
  3068. {
  3069.   
  3070.     if (KB_E2PWrite(KB_NVM_UPDATE_IN_SERIAL_NUM_OFFSET, buff, size, NULL) != RETOK)
  3071.     {
  3072.         return RET_FAIL;
  3073.     }
  3074.     
  3075.     return RET_OK;
  3076. }
  3077. //////////////////////////////////
  3078. //added by yyj end 2007.6.14
  3079. //added by yyj start 2007.6.19
  3080. //机顶盒信息
  3081. KB_DBRET KB_DBSaveSTBInfo(KB_DBSTBInfo buff )
  3082. {
  3083.     gE2pData.gSTBInfo=buff;
  3084.     if(KB_E2PWrite(KB_NVM_STB_INFO_ADDR, (UINT8 *)&buff, sizeof(KB_DBSTBInfo), NULL) != RETOK)
  3085.     {
  3086.         return RET_FAIL;
  3087.     }
  3088.     
  3089.     return RET_OK;
  3090. }
  3091.  KB_DBRET KB_DBGetSTBInfo(KB_DBSTBInfo *buff )
  3092. {
  3093.     *buff=gE2pData.gSTBInfo;
  3094.   
  3095.     return RET_OK;
  3096. }
  3097. static KB_DBRET KD_InitSTBInfo(void)
  3098. {
  3099.     UINT8 str[]="------";
  3100.     UINT8 crc[] = "KBSTBINFO";
  3101.     if (KB_E2PRead(KB_NVM_STB_INFO_ADDR, (UINT8 *)&gE2pData.gSTBInfo, sizeof(KB_DBSTBInfo), NULL) != RETOK)
  3102.     {
  3103.         return RET_FAIL;
  3104.     }
  3105.     if (memcmp(gE2pData.gSTBInfo.CRC, crc, 10))
  3106.     {
  3107.     #if 1
  3108. memcpy(gE2pData.gSTBInfo.CRC, crc, 10);
  3109.        memcpy(gE2pData.gSTBInfo.STB_Model, str, 20);
  3110. memcpy(gE2pData.gSTBInfo.HW_Info, str, 20);
  3111. strcpy((char *)gE2pData.gSTBInfo.HW_Vervion,"1.0.0");
  3112. memcpy(gE2pData.gSTBInfo.SW_Info, str, 20);
  3113. strcpy((char *)gE2pData.gSTBInfo.SW_Vervion,"1.0.0");
  3114. memset(gE2pData.gSTBInfo.SW_Release_Time, 0xff, 20);
  3115. strcpy((char *)gE2pData.gSTBInfo.CA_Version,"1.0.0");
  3116. strcpy((char *)gE2pData.gSTBInfo.Manufacturer,"键桥通讯"); 
  3117. if(KB_E2PWrite(KB_NVM_STB_INFO_ADDR, (UINT8 *)&gE2pData.gSTBInfo, sizeof(KB_DBSTBInfo), NULL) != RETOK)
  3118. {
  3119.         return RET_FAIL;
  3120. }
  3121.     #else
  3122. return RET_FAIL;
  3123.     #endif
  3124.     }
  3125.     
  3126.     return RET_OK;
  3127. }
  3128. static KB_DBRET KD_ResetSTBInfo(void)
  3129.        UINT8 str[]="------";
  3130.      UINT8 crc[] = "KBSTBINFO";
  3131. memcpy(gE2pData.gSTBInfo.CRC, crc, 10);
  3132.        memcpy(gE2pData.gSTBInfo.STB_Model, str, 20);
  3133. memcpy(gE2pData.gSTBInfo.HW_Info, str, 20);
  3134. strcpy((char *)gE2pData.gSTBInfo.HW_Vervion,"1.0.0");
  3135. memcpy(gE2pData.gSTBInfo.SW_Info, str, 20);
  3136. strcpy((char *)gE2pData.gSTBInfo.SW_Vervion,"1.0.0");
  3137. memset(gE2pData.gSTBInfo.SW_Release_Time, 0xff, 20);
  3138. strcpy((char *)gE2pData.gSTBInfo.CA_Version,"1.0.0");
  3139. strcpy((char *)gE2pData.gSTBInfo.Manufacturer,"键桥通讯"); 
  3140. if (KB_E2PWrite(KB_NVM_STB_INFO_ADDR, (UINT8 *)&gE2pData.gSTBInfo, sizeof(KB_DBSTBInfo), NULL) != RETOK)
  3141. {
  3142.     return RET_FAIL;
  3143. }
  3144. return RET_OK;
  3145. }
  3146. //added by yyj end 2007.6.19
  3147. //added by yyj 2007.6.27 start
  3148. KB_DBRET KB_DBSaveVideoDispMode(UINT8 buff )
  3149. {
  3150.     gVidDispMode=buff;
  3151.     if(KB_E2PWrite(KB_NVM_VIDEO_DISPLAY_MODE_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3152.     {
  3153.         return RET_FAIL;
  3154.     }
  3155.     
  3156.     return RET_OK;
  3157. }
  3158.  KB_DBRET KB_DBGetVideoDispMode(UINT8 *buff )
  3159. {
  3160.     *buff=gVidDispMode;
  3161.      printf("n[KB_DBGetVideoDispMode]:gVidDispMode=%d",gVidDispMode);
  3162.      
  3163.      if(*buff>=KB_AV_VIDEO_DISPLAY_MAX_TYPE)
  3164.      {
  3165.           *buff=KB_AV_DEFAULT_DISP_MODE;
  3166.      }
  3167.     
  3168.     return RET_OK;
  3169. }
  3170. static KB_DBRET KD_InitVideoDispMode(void)
  3171. {
  3172.     if (KB_E2PRead(KB_NVM_VIDEO_DISPLAY_MODE_OFFSET, (UINT8 *)&gVidDispMode, sizeof(UINT8), NULL) != RETOK)
  3173.     {
  3174.         return RET_FAIL;
  3175.     }
  3176.     
  3177.     return RET_OK;
  3178. }
  3179. static KB_DBRET KD_ResetVideoDispMode(void)
  3180. {
  3181.     gVidDispMode=KB_AV_DEFAULT_DISP_MODE;
  3182.     
  3183.     if (KB_E2PWrite(KB_NVM_VIDEO_DISPLAY_MODE_OFFSET, (UINT8 *)&gVidDispMode, sizeof(UINT8), NULL) != RETOK)
  3184.     {
  3185.         return RET_FAIL;
  3186.     }
  3187.     
  3188.     return RET_OK;
  3189. }
  3190. KB_DBRET KB_DBSaveVideoAspectRatio(UINT8 buff )
  3191. {
  3192.     gVidAspectRatio=buff;
  3193.     if(KB_E2PWrite(KB_NVM_VIDEO_ASPECT_RATIO_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3194.     {
  3195.         return RET_FAIL;
  3196.     }
  3197.     
  3198.     return RET_OK;
  3199. }
  3200.  KB_DBRET KB_DBGetVideoAspectRatio(UINT8 *buff )
  3201. {
  3202.     *buff=gVidAspectRatio;
  3203.      if(*buff>KB_AV_ASPECT_RATIO_16TO9)
  3204.      {
  3205.           *buff=KB_AV_DEFAULT_ASPECT_RATIO;
  3206.      }
  3207.     
  3208.     return RET_OK;
  3209. }
  3210. static KB_DBRET KD_InitVideoAspectRatio(void)
  3211. {
  3212.     if (KB_E2PRead(KB_NVM_VIDEO_ASPECT_RATIO_OFFSET, (UINT8 *)&gVidAspectRatio, sizeof(UINT8), NULL) != RETOK)
  3213.     {
  3214.         return RET_FAIL;
  3215.     }
  3216.     
  3217.     return RET_OK;
  3218. }
  3219. static KB_DBRET KD_ResetVideoAspectRatio(void)
  3220. {
  3221.     gVidAspectRatio=KB_AV_DEFAULT_ASPECT_RATIO;
  3222.     
  3223.     if (KB_E2PWrite(KB_NVM_VIDEO_ASPECT_RATIO_OFFSET, (UINT8 *)&gVidAspectRatio, sizeof(UINT8), NULL) != RETOK)
  3224.     {
  3225.         return RET_FAIL;
  3226.     }
  3227.     
  3228.     return RET_OK;
  3229. }
  3230. KB_DBRET KB_DBSavePgmCurTrack(UINT8 buff )
  3231. {
  3232.     gConfigAudioTrack=buff;
  3233.     if(KB_E2PWrite(KB_NVM_CONFIG_AUDIO_TRACK_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3234.     {
  3235.         return RET_FAIL;
  3236.     }
  3237.     
  3238.     return RET_OK;
  3239. }
  3240.  KB_DBRET KB_DBGetPgmCurTrack(UINT8 *buff )
  3241. {
  3242.     *buff=gConfigAudioTrack;
  3243.      if(*buff>STEREO_TRACK)
  3244.      {
  3245.           *buff=KB_AV_DEFAULT_TRACK;
  3246.      }
  3247.     
  3248.     return RET_OK;
  3249. }
  3250. static KB_DBRET KD_InitPgmCurTrack(void)
  3251. {
  3252.     if (KB_E2PRead(KB_NVM_CONFIG_AUDIO_TRACK_OFFSET, (UINT8 *)&gConfigAudioTrack, sizeof(UINT8), NULL) != RETOK)
  3253.     {
  3254.         return RET_FAIL;
  3255.     }
  3256.     
  3257.     return RET_OK;
  3258. }
  3259. static KB_DBRET KD_ResetPgmCurTrack(void)
  3260. {
  3261.     gConfigAudioTrack=KB_AV_DEFAULT_TRACK;
  3262.     
  3263.     if (KB_E2PWrite(KB_NVM_CONFIG_AUDIO_TRACK_OFFSET, (UINT8 *)&gConfigAudioTrack, sizeof(UINT8), NULL) != RETOK)
  3264.     {
  3265.         return RET_FAIL;
  3266.     }
  3267.     
  3268.     return RET_OK;
  3269. }
  3270. KB_DBRET KB_DBSaveAdultRank(UINT8 buff )
  3271. {
  3272.     gConfigAdultRank=buff;
  3273.     if(KB_E2PWrite(KB_NVM_CONFIG_ADULT_RANK_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3274.     {
  3275.         return RET_FAIL;
  3276.     }
  3277.     
  3278.     return RET_OK;
  3279. }
  3280.  KB_DBRET KB_DBGetAdultRank(UINT8 *buff )
  3281. {
  3282.     *buff=gConfigAdultRank;
  3283.      if(*buff>RANK_18)
  3284.      {
  3285.           *buff=KB_AV_DEFAULT_ADULT_RANK;
  3286.      }
  3287.     
  3288.     return RET_OK;
  3289. }
  3290. static KB_DBRET KD_InitAdultRank(void)
  3291. {
  3292.     if (KB_E2PRead(KB_NVM_CONFIG_ADULT_RANK_OFFSET, (UINT8 *)&gConfigAdultRank, sizeof(UINT8), NULL) != RETOK)
  3293.     {
  3294.         return RET_FAIL;
  3295.     }
  3296.     
  3297.     return RET_OK;
  3298. }
  3299. static KB_DBRET KD_ResetAdultRank(void)
  3300. {
  3301.     gConfigAdultRank=KB_AV_DEFAULT_ADULT_RANK;
  3302.     
  3303.     if (KB_E2PWrite(KB_NVM_CONFIG_ADULT_RANK_OFFSET, (UINT8 *)&gConfigAdultRank, sizeof(UINT8), NULL) != RETOK)
  3304.     {
  3305.         return RET_FAIL;
  3306.     }
  3307.     
  3308.     return RET_OK;
  3309. }
  3310. KB_DBRET KB_DBSaveMenuLan(UINT8 buff )
  3311. {
  3312.     gConfigMenuLan=buff;
  3313.     if(KB_E2PWrite(KB_NVM_CONFIG_MENU_LANG_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3314.     {
  3315.         return RET_FAIL;
  3316.     }
  3317.     
  3318.     return RET_OK;
  3319. }
  3320.  KB_DBRET KB_DBGetMenuLan(UINT8 *buff )
  3321. {
  3322.     *buff=gConfigMenuLan;
  3323.      if(*buff>=ENGLISH)
  3324.      {
  3325.           *buff=KB_DB_DEFAULT_MENU_LAN;
  3326.      }
  3327.     
  3328.     return RET_OK;
  3329. }
  3330. static KB_DBRET KD_InitMenuLan(void)
  3331. {
  3332.     if (KB_E2PRead(KB_NVM_CONFIG_MENU_LANG_OFFSET, (UINT8 *)&gConfigMenuLan, sizeof(UINT8), NULL) != RETOK)
  3333.     {
  3334.         return RET_FAIL;
  3335.     }
  3336.     
  3337.     return RET_OK;
  3338. }
  3339. static KB_DBRET KD_ResetMenuLan(void)
  3340. {
  3341.     gConfigMenuLan=KB_DB_DEFAULT_MENU_LAN;
  3342.     
  3343.     if (KB_E2PWrite(KB_NVM_CONFIG_MENU_LANG_OFFSET, (UINT8 *)&gConfigMenuLan, sizeof(UINT8), NULL) != RETOK)
  3344.     {
  3345.         return RET_FAIL;
  3346.     }
  3347.     
  3348.     return RET_OK;
  3349. }
  3350. KB_DBRET KB_DBSaveMenuTran(UINT8 buff )
  3351. {
  3352.     gConfigMenuTran=buff;
  3353.     if(KB_E2PWrite(KB_NVM_CONFIG_MENU_TRAN_OFFSET, &buff, sizeof(UINT8), NULL) != RETOK)
  3354.     {
  3355.         return RET_FAIL;
  3356.     }
  3357.     
  3358.     return RET_OK;
  3359. }
  3360.  KB_DBRET KB_DBGetMenuTran(UINT8 *buff )
  3361. {
  3362.     *buff=gConfigMenuTran;
  3363.      if(*buff>=LEVEL_3)
  3364.      {
  3365.           *buff=KB_DB_DEFAULT_MENU_TRAN;
  3366.      }
  3367.     
  3368.     return RET_OK;
  3369. }
  3370. static KB_DBRET KD_InitMenuTran(void)
  3371. {
  3372.     if (KB_E2PRead(KB_NVM_CONFIG_MENU_TRAN_OFFSET, (UINT8 *)&gConfigMenuTran, sizeof(UINT8), NULL) != RETOK)
  3373.     {
  3374.         return RET_FAIL;
  3375.     }
  3376.     
  3377.     return RET_OK;
  3378. }
  3379. static KB_DBRET KD_ResetMenuTran(void)
  3380. {
  3381.     gConfigMenuTran=KB_DB_DEFAULT_MENU_TRAN;
  3382.     
  3383.     if (KB_E2PWrite(KB_NVM_CONFIG_MENU_TRAN_OFFSET, (UINT8 *)&gConfigMenuTran, sizeof(UINT8), NULL) != RETOK)
  3384.     {
  3385.         return RET_FAIL;
  3386.     }
  3387.     
  3388.     return RET_OK;
  3389. }
  3390. //added by yyj 2007.6.27 end 
  3391.  
  3392. //added by yyj 2007.7.3 start
  3393. KB_DBRET KD_ResetDemandInfo(void)
  3394. {
  3395. char head[9];
  3396. //int nSize;
  3397. KB_DBRET ret;
  3398. //int *pnde;
  3399. #if 0
  3400. //先读取信息的总长度
  3401.  memset(head,0x00,9);
  3402.  ret=KB_DBGetDemandInfo(8,(UINT8 *)head);
  3403.  if(ret==RET_FAIL)
  3404.     return RET_FAIL;
  3405.  if(strncmp(head,EDHF_OPER_FLAG,4)!=0)
  3406.     return RET_OK;
  3407. #endif
  3408.  KB_ClearAllDmdEnt();
  3409.  KB_ClearDataLink();
  3410.  
  3411. //pnde=(int*)head;
  3412. //nSize=*(pnde+1);
  3413. //分配信息内存
  3414. //debuf=(char*)KB_OSPMalloc(nSize);
  3415. //if(NULL == debuf)
  3416. //return RET_FAIL;
  3417. //memset(debuf,0xFF,nSize);
  3418. memset(head,0x00,9);
  3419. if (KB_E2PWrite(KB_NVM_DEMAND_INFO_ADDR, (UINT8 *)head, 8, NULL) != RETOK)
  3420. {
  3421.     return RET_FAIL;
  3422. }
  3423.  
  3424. return RET_OK;
  3425. }
  3426. //added by yyj 2007.7.3 end
  3427. //added by yyj 2007.7.11 start
  3428. KB_DBRET KB_DBSaveOtaPara(KB_DBOtaPara *buff)
  3429. {
  3430. UINT8 writeData[14];
  3431. UINT32 i;
  3432. for(i=0;i<14;i++)   writeData[i]=0xFF;
  3433. //printf("n[KB_DBSaveOtaPara]:freq=%ld, Symb=%ld, qam=%ld,  pid=%ld",buff->freq, buff->Symb, buff->Qam, buff->PID);
  3434. //频率的转换    
  3435. writeData[0]=(UINT8)((buff->freq>>24)&0x000000ff);
  3436. writeData[1]=(UINT8)((buff->freq>>16)&0x000000ff);
  3437. writeData[2]=(UINT8)((buff->freq>>8)&0x000000ff);
  3438. writeData[3]=(UINT8)(buff->freq&0x000000ff);
  3439. printf("nn--writeData[0]=%x",writeData[0]);
  3440. printf("n--writeData[1]=%x",writeData[1]);
  3441. printf("n--writeData[2]=%x",writeData[2]);
  3442. printf("n--writeData[3]=%x",writeData[3]);
  3443. //end
  3444. //符号率的转换    
  3445. writeData[4]=(UINT8)((buff->Symb>>24)&0x000000ff);
  3446. writeData[5]=(UINT8)((buff->Symb>>16)&0x000000ff);
  3447. writeData[6]=(UINT8)((buff->Symb>>8)&0x000000ff);
  3448. writeData[7]=(UINT8)(buff->Symb&0x000000ff);
  3449. printf("nn--writeData[4]=%x",writeData[4]);
  3450. printf("n--writeData[5]=%x",writeData[5]);
  3451. printf("n--writeData[6]=%x",writeData[6]);
  3452. printf("n--writeData[7]=%x",writeData[7]);
  3453. //end
  3454. writeData[8]=buff->Qam+3;
  3455. writeData[9]=(buff->PID>>8)&0x000000ff;
  3456. writeData[10]=buff->PID&0x000000ff;
  3457. writeData[12]=0x01;
  3458. writeData[13]=0x00;  
  3459.  if(KB_E2PWrite(KB_NVM_UPDATE_BASE_ADDR, writeData, 14, NULL)!=Ret_OK)
  3460. {
  3461.      printf("n Save OTA parameter error!");
  3462.      return RET_FAIL;
  3463. }  
  3464. KB_OSPTaskDelay(500);
  3465. #if 1
  3466. {
  3467. unsigned char flag[14];
  3468. KB_E2PRead((UINT32)KB_NVM_UPDATE_BASE_ADDR, (UINT8 *)flag, (UINT32)14, NULL);
  3469. printf("n 0x%x 0x%x 0x%x 0x%x  0x%x 0x%x 0x%x 0x%x",flag[0],flag[1],flag[2],flag[3],flag[4],flag[5],flag[6],flag[7]);
  3470. printf("n 0x%x  0x%x 0x%x  0x%x  0x%x 0x%x",flag[8],flag[9],flag[10],flag[11],flag[12],flag[13]);
  3471. }
  3472. #endif
  3473. return RET_OK;
  3474. }
  3475. unsigned short KB_DBGetPrgTsID(UINT8 type,int nPrgNO)
  3476. {
  3477. static KB_DBPrgInfo prgInfo;
  3478. KB_DBChnnlInfo chnnlInfo;
  3479. UINT8 bTrack;
  3480. UINT8 bVolume;
  3481. UINT8 bLockFlag;
  3482. KB_DBGetPrgInfo(nPrgNO - 1, type, &prgInfo, &chnnlInfo, &bTrack, &bVolume, &bLockFlag);
  3483. return prgInfo.TSID;
  3484. }
  3485. UINT16 KB_DBDelPrgInfoByTsidSrvid(UINT8      type,
  3486.                                      UINT16     Tsid,
  3487.                                      UINT16     SvcID)
  3488. {
  3489.     int        i = 0, j = 0;
  3490.     UINT16     total = 0;
  3491.     KB_DBPrgInfo *tmpPrgInfo = NULL;
  3492.     total = KB_DBGetPrgTotal(type);
  3493.     if (0 == total)
  3494.     {
  3495.         return KB_DB_DTV_FAILURE;
  3496.     }
  3497.     if (DTVPRG == type)
  3498.     {
  3499.         tmpPrgInfo = gPrgAllInfo.gDTVInfo.PgmList;
  3500.     }
  3501.     else if (RADIOPRG == type)
  3502.     {
  3503.         tmpPrgInfo = gPrgAllInfo.gRADInfo.PgmList;
  3504.     }
  3505.     else
  3506.     {
  3507.         printf("nKB_DBDelPrgInfo::input PrgType(%d) error!", type);
  3508.         return KB_DB_DTV_FAILURE;
  3509.     }
  3510.     for (j = 0; j < total; j++)
  3511.     {
  3512.         if (tmpPrgInfo[j].TSID == Tsid && tmpPrgInfo[j].SvcID == SvcID)
  3513.         {
  3514.             break;
  3515.         }
  3516.     }
  3517.     if (j >= total)
  3518.     {
  3519.         printf("nKB_DBDelPrgInfoByTsidSrvid::无匹配的srv");
  3520.         return KB_DB_DTV_FAILURE;
  3521.     }
  3522.     KB_DBDelFavPrg(type, Tsid, SvcID);
  3523.     for(i = j; i < total - 1; i++)
  3524.     {
  3525.         memcpy(&tmpPrgInfo[i], &tmpPrgInfo[i+1], sizeof(KB_DBPrgInfo));
  3526.     }
  3527.     if (DTVPRG == type)
  3528.     {
  3529.         gPrgAllInfo.gDTVInfo.nTotal--;
  3530.     }
  3531.     else if (RADIOPRG == type)
  3532.     {
  3533.         gPrgAllInfo.gRADInfo.nTotal--;
  3534.     }
  3535.     return KB_DB_DTV_SUCCESS;
  3536. }
  3537. UINT16 KD_GetPrgInxByTsidSvcID(UINT8      PrgType,
  3538.                                   UINT16     Tsid,   
  3539.                                   UINT16     ServiceID)
  3540. {
  3541.     UINT16 i = 0, sum = 0;
  3542.     
  3543.     sum = KB_DBGetPrgTotal(PrgType);
  3544.     if (0 == sum)
  3545.     {
  3546.         return KB_DB_INVALID_PROGRAMNO;
  3547.     }
  3548.     if (DTVPRG == PrgType)
  3549.     {
  3550.         for (i = 0; i < sum; ++i)
  3551.         {
  3552.             if (gPrgAllInfo.gDTVInfo.PgmList[i].SvcID == ServiceID
  3553.                  && gPrgAllInfo.gDTVInfo.PgmList[i].TSID == Tsid)
  3554.             {
  3555.                 return i;
  3556.             }
  3557.         }
  3558.     }
  3559.     else if (RADIOPRG== PrgType)
  3560.     {
  3561.         for (i = 0; i < sum; ++i)
  3562.         {
  3563.             if (gPrgAllInfo.gRADInfo.PgmList[i].SvcID == ServiceID
  3564.                  && gPrgAllInfo.gRADInfo.PgmList[i].TSID == Tsid)
  3565.             {
  3566.                 return i;
  3567.             }
  3568.         }
  3569.     }
  3570.     else if (DATAPRG== PrgType)
  3571.     {
  3572.         for (i = 0; i < sum; ++i)
  3573.         {
  3574.             if (gPrgAllInfo.gDATAInfo.PgmList[i].SvcID == ServiceID
  3575.                  && gPrgAllInfo.gDATAInfo.PgmList[i].TSID == Tsid)
  3576.             {
  3577.                 return i;
  3578.             }
  3579.         }
  3580.     }
  3581.     else
  3582.     {
  3583.      return KB_DB_INVALID_PROGRAMNO;
  3584.     }
  3585.     return KB_DB_INVALID_PROGRAMNO;
  3586.     
  3587. }
  3588. UINT8 KB_DBLockSrv(unsigned char type, UINT16 nPrgInx)
  3589. {
  3590.     UINT16  total = 0xff;
  3591.     UINT16  IndexOfConfigInfo = 0xff;
  3592.     
  3593.     total = KB_DBGetPrgTotal(type);
  3594.     
  3595.     if(nPrgInx >= total || nPrgInx < 0)
  3596.     {
  3597.         printf("nKB_DBLockSrv::input nPrgInx(%d){total(%d)} error!",
  3598.                 nPrgInx, total);
  3599.         return KB_DB_DTV_FAILURE;
  3600.     }
  3601.     
  3602.     if (DTVPRG == type)
  3603.     {
  3604.         IndexOfConfigInfo = gPrgAllInfo.gDTVInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3605.         gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol |= 0x80; 
  3606.         if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + IndexOfConfigInfo * sizeof(KB_DBPrgConfigNode)),
  3607.                 (UINT8 *)&gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo], 
  3608.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  3609.         {
  3610.             printf("nKB_DBLockSrv::KB_E2PWrite gDTVPrgCfgInfo fail");
  3611.             return KB_DB_DTV_FAILURE;
  3612.         }
  3613.     }
  3614.     else if (RADIOPRG == type)
  3615.     {
  3616.         IndexOfConfigInfo = gPrgAllInfo.gRADInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3617.         gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol |= 0x80; 
  3618.         if (KB_E2PWrite((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + IndexOfConfigInfo * sizeof(KB_DBPrgConfigNode)),
  3619.                 (UINT8 *)&gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo], 
  3620.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  3621.         {
  3622.             printf("nKB_DBLockSrv::KB_E2PWrite gRADPrgCfgInfo fail");
  3623.             return KB_DB_DTV_FAILURE;
  3624.         }
  3625.     }
  3626.     else
  3627.     {
  3628.         printf("nKB_DBLockSrv::input PrgType(%d) error!", type);
  3629.         return KB_DB_DTV_FAILURE;
  3630.     }
  3631.     
  3632.     return KB_DB_DTV_SUCCESS;
  3633. }
  3634. UINT8 KB_DBUnlockSrv(unsigned char type, UINT16 nPrgInx)
  3635. {
  3636.     UINT16  total = 0xff;
  3637.     UINT16  IndexOfConfigInfo = 0xff;
  3638.     
  3639.     total = KB_DBGetPrgTotal(type);
  3640.     
  3641.     if (nPrgInx >= total || nPrgInx < 0)
  3642.     {
  3643.         printf("nKB_DBUnlockSrv::input nPrgInx(%d){total(%d)} error!", 
  3644.                nPrgInx, total);
  3645.         return KB_DB_DTV_FAILURE;
  3646.     }
  3647.     
  3648.     if (DTVPRG == type)
  3649.     {
  3650.         IndexOfConfigInfo = gPrgAllInfo.gDTVInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3651.         gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol &= 0x7f; 
  3652.         if (KB_E2PWrite((UINT16)(KB_NVM_DTV_PGM_CFG_ADDR + IndexOfConfigInfo * sizeof(KB_DBPrgConfigNode)),
  3653.                 (UINT8 *)&gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo], 
  3654.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  3655.         {
  3656.             printf("nKB_DBUnlockSrv::KB_E2PWrite gDTVPrgCfgInfo fail");
  3657.             return KB_DB_DTV_FAILURE;
  3658.         }
  3659.     }
  3660.     else if (RADIOPRG == type)
  3661.     {
  3662.         IndexOfConfigInfo = gPrgAllInfo.gRADInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3663.         gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol &= 0x7f; 
  3664.         if (KB_E2PWrite((UINT16)(KB_NVM_RAD_PGM_CFG_ADDR + IndexOfConfigInfo * sizeof(KB_DBPrgConfigNode)),
  3665.                 (UINT8 *)&gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo], 
  3666.                 sizeof(KB_DBPrgConfigNode), NULL) != RETOK)
  3667.         {
  3668.             printf("nKB_DBUnlockSrv::KB_E2PWrite gRADPrgCfgInfo fail");
  3669.             return KB_DB_DTV_FAILURE;
  3670.         }
  3671.     }
  3672.     else
  3673.     {
  3674.         printf("nKB_DBUnlockSrv::input PrgType(%d) error!", type);
  3675.         return KB_DB_DTV_FAILURE;
  3676.     }
  3677.     
  3678.     return KB_DB_DTV_SUCCESS;
  3679. }
  3680. void KB_DBGetLockSrvInfo(UINT8 type,
  3681.                             UINT16 *pNum, 
  3682.                             UINT16 PrgIndex[])
  3683. {
  3684.     UINT8   LockFlag = 0xff;
  3685.     UINT16  loop = 0;
  3686.     UINT16  total = 0xffff;
  3687.     UINT16  IndexOfConfigInfo = 0xffff;
  3688.     if (NULL == pNum 
  3689.         || NULL == PrgIndex 
  3690.         || (DTVPRG != type && RADIOPRG != type))
  3691.     {
  3692.         printf("nKB_DBGetLockSrvInfo::input error. type(0x%x), pNum(0x%x), PrgIndex(0x%x)",
  3693.                 type, pNum, PrgIndex);
  3694.         if (NULL != pNum)
  3695.         {
  3696.             *pNum = 0;
  3697.         }
  3698.         
  3699.         return;
  3700.     }
  3701.     //先初始被锁定的节目个数为0
  3702.     *pNum = 0;
  3703.     
  3704.     if (DTVPRG == type)
  3705.     {
  3706.         total = KB_DBGetPrgTotal(type);
  3707.     
  3708.         if (0 == total || total > KB_DB_MAX_DTV)
  3709.         {
  3710.             return;
  3711.         }
  3712.         for (loop = 0; loop < total; loop++)
  3713.         {
  3714.             IndexOfConfigInfo = gPrgAllInfo.gDTVInfo.PgmList[loop].IndexOfConfigInfo;
  3715.             if (IndexOfConfigInfo >= KB_DB_MAX_DTV)
  3716.             {
  3717.                 printf("nKB_DBGetLockSrvInfo::Dtv IndexOfConfigInfo(0x%x) get error!",
  3718.                        IndexOfConfigInfo);
  3719.                 continue;
  3720.             }
  3721.             
  3722.             LockFlag = (gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol & 0x80)>>7;
  3723.             //记录被锁定的节目个数和节目索引号
  3724.             if (1 == LockFlag)
  3725.             {
  3726.                 PrgIndex[(*pNum)] = loop;
  3727.                 (*pNum)++;
  3728.             }
  3729.         }
  3730.     }
  3731.     else if (RADIOPRG == type)
  3732.     {
  3733.         total = KB_DBGetPrgTotal(type);
  3734.     
  3735.         if (0 == total || total > KB_DB_MAX_RAD)
  3736.         {
  3737.             return;
  3738.         }
  3739.         for (loop = 0; loop < total; loop++)
  3740.         {
  3741.             IndexOfConfigInfo = gPrgAllInfo.gRADInfo.PgmList[loop].IndexOfConfigInfo;
  3742.             if (IndexOfConfigInfo >= KB_DB_MAX_RAD)
  3743.             {
  3744.                 printf("nKB_DBGetLockSrvInfo::Rad IndexOfConfigInfo(0x%x) get error!",
  3745.                        IndexOfConfigInfo);
  3746.                 continue;
  3747.             }
  3748.             
  3749.             LockFlag = (gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol & 0x80)>>7;
  3750.             //记录被锁定的节目个数和节目索引号
  3751.             if (1 == LockFlag)
  3752.             {
  3753.                 PrgIndex[(*pNum)] = loop;
  3754.                 (*pNum)++;
  3755.             }
  3756.         }
  3757.     }
  3758.     else
  3759.     {
  3760.         printf("nKB_DBGetLockSrvInfo::input type(%d) error", type);
  3761.         return;
  3762.     }
  3763.     return;
  3764. }
  3765. BOOL KB_DBIsSrvLocked(UINT8 type, UINT16 nPrgInx)
  3766. {
  3767.     UINT8   LockFlag = 0xff;
  3768.     UINT16  total = 0xffff;
  3769.     UINT16  IndexOfConfigInfo = 0xffff;
  3770.     
  3771.     if (DTVPRG == type)
  3772.     {
  3773.         total = KB_DBGetPrgTotal(type);
  3774.         if (nPrgInx >= total || nPrgInx >= KB_DB_MAX_DTV)
  3775.         {
  3776.             printf("nKB_DBIsSrvLocked::input Dtv nPrgInx(%d){total(%d)} error!", 
  3777.                     nPrgInx, total);
  3778.             return FALSE;
  3779.         }
  3780.         
  3781.         IndexOfConfigInfo = gPrgAllInfo.gDTVInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3782.         if (IndexOfConfigInfo >= KB_DB_MAX_DTV)
  3783.         {
  3784.             printf("nKB_DBIsSrvLocked::Dtv IndexOfConfigInfo(0x%x) get error!",
  3785.                    IndexOfConfigInfo);
  3786.             return FALSE;
  3787.         }
  3788.         LockFlag = (gE2pData.gDTVPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol & 0x80)>>7;
  3789.         if (1 == LockFlag)
  3790.         {
  3791.             return TRUE;
  3792.         }
  3793.         else
  3794.         {
  3795.             return FALSE;
  3796.         }
  3797.     }
  3798.     else if (RADIOPRG == type)
  3799.     {
  3800.         total = KB_DBGetPrgTotal(type);
  3801.         if (nPrgInx >= total || nPrgInx >= KB_DB_MAX_RAD)
  3802.         {
  3803.             printf("nKB_DBIsSrvLocked::input Rad nPrgInx(%d){total(%d)} error!", 
  3804.                     nPrgInx, total);
  3805.             return FALSE;
  3806.         }
  3807.         
  3808.         IndexOfConfigInfo = gPrgAllInfo.gRADInfo.PgmList[nPrgInx].IndexOfConfigInfo;
  3809.         if (IndexOfConfigInfo >= KB_DB_MAX_RAD)
  3810.         {
  3811.             printf("nKB_DBIsSrvLocked::Dtv IndexOfConfigInfo(0x%x) get error!",
  3812.                    IndexOfConfigInfo);
  3813.             return FALSE;
  3814.         }
  3815.         LockFlag = (gE2pData.gRADPrgCfgInfo[IndexOfConfigInfo].Lock_Track_Vol & 0x80)>>7;
  3816.         if (1 == LockFlag)
  3817.         {
  3818.             return TRUE;
  3819.         }
  3820.         else
  3821.         {
  3822.             return FALSE;
  3823.         }
  3824.     }
  3825.     else
  3826.     {
  3827.         printf("nKB_DBIsSrvLocked::input type(%d) error", type);
  3828.         return FALSE;
  3829.     }
  3830. }
  3831. KB_DBRET KB_DBAddFavPrg(UINT8 type,
  3832.                             UINT16 TsId,
  3833.                             UINT16 SrvId)
  3834. {
  3835.     UINT16  loop = 0;
  3836.     UINT16  total = 0;
  3837.     
  3838.     if (type != DTVPRG && type != RADIOPRG)
  3839.     {
  3840.         printf("nKB_DBAddFavPrg::input type(%d) error", type);
  3841.         return RET_FAIL;
  3842.     }
  3843.     if (TRUE != KB_DBIsPrgExist(type, TsId, SrvId))
  3844.     {
  3845.         printf("nKB_DBAddFavPrg::Prg type(%d)-TsId(%d)-SrvId(%d) not exist",
  3846.                 type, TsId, SrvId);
  3847.         return RET_FAIL;
  3848.     }
  3849.     if (DTVPRG == type)
  3850.     {
  3851.         total = KB_DBGetFavPrgTotal(DTVPRG);
  3852.         if (total > KB_DB_MAX_FAV_DTV)
  3853.         {
  3854.             printf("nKB_DBAddFavPrg::dtv favor total(%d) exceeds max",
  3855.                     total);
  3856.             return RET_FAIL;
  3857.         }
  3858.         for (loop = 0; loop < gE2pData.gDTVFavInfo.nTotal; loop++)
  3859.         {
  3860.             if (gE2pData.gDTVFavInfo.FavList[loop].TsId == TsId
  3861.                 && gE2pData.gDTVFavInfo.FavList[loop].SrvId == SrvId)
  3862.             {
  3863.                 printf("nKB_DBAddFavPrg::dtv favor Tsid(%d), SrvId(%d) repeat add!",
  3864.                         TsId, SrvId);
  3865.                 return RET_OK;
  3866.             }
  3867.         }
  3868.         
  3869.         gE2pData.gDTVFavInfo.FavList[total].TsId = TsId;
  3870.         gE2pData.gDTVFavInfo.FavList[total].SrvId = SrvId;
  3871.         gE2pData.gDTVFavInfo.nTotal++;
  3872.         
  3873.         if (KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, (UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  3874.         {
  3875.             printf("nKB_DBAddFavPrg::KB_E2PWrite dtv fail");
  3876.             return RET_FAIL;
  3877.         }
  3878.     }
  3879.     else if (RADIOPRG == type)
  3880.     {
  3881.         total = KB_DBGetFavPrgTotal(RADIOPRG);
  3882.         if (total > KB_DB_MAX_FAV_RAD)
  3883.         {
  3884.             printf("nKB_DBAddFavPrg::radio favor total(%d) exceeds max",
  3885.                     total);
  3886.             return RET_FAIL;
  3887.         }
  3888.         for (loop = 0; loop < gE2pData.gDTVFavInfo.nTotal; loop++)
  3889.         {
  3890.             if (gE2pData.gRADFavInfo.FavList[loop].TsId == TsId
  3891.                 && gE2pData.gRADFavInfo.FavList[loop].SrvId == SrvId)
  3892.             {
  3893.                 printf("nKB_DBAddFavPrg::radio favor Tsid(%d), SrvId(%d) repeat add!",
  3894.                         TsId, SrvId);
  3895.                 return RET_OK;
  3896.             }
  3897.         }
  3898.         
  3899.         gE2pData.gRADFavInfo.FavList[total].TsId = TsId;
  3900.         gE2pData.gRADFavInfo.FavList[total].SrvId = SrvId;
  3901.         gE2pData.gRADFavInfo.nTotal++;
  3902.         
  3903.         if (KB_E2PWrite(KB_NVM_FAV_RAD_ADDR, (UINT8 *)&gE2pData.gRADFavInfo, sizeof(KB_DBFavRadInfo), NULL) != RETOK)
  3904.         {
  3905.             printf("nKB_SystemSetUp::KB_E2PWrite radio fail");
  3906.             return RET_FAIL;
  3907.         }
  3908.     }
  3909.     return RET_OK;
  3910. }
  3911. void KB_DBFavPrgRefresh(void)
  3912. {
  3913.     UINT8 i = 0;
  3914.     UINT8 j = 0;
  3915.     if (gE2pData.gDTVFavInfo.nTotal > KB_DB_MAX_FAV_DTV)
  3916.     {
  3917.         printf("nKB_DBFavPrgRefresh::dtv favor total(%d) exceeds max",
  3918.                 gE2pData.gDTVFavInfo.nTotal);
  3919.         KD_ResetFavDtv();
  3920.     }
  3921.     else
  3922.     {
  3923.         for (i = 0; i < gE2pData.gDTVFavInfo.nTotal;)
  3924.         {
  3925.             if (TRUE != KB_DBIsPrgExist(DTVPRG, 
  3926.                                           gE2pData.gDTVFavInfo.FavList[i].TsId, 
  3927.                                           gE2pData.gDTVFavInfo.FavList[i].SrvId))
  3928.             {
  3929.                 for (j = i; j < gE2pData.gDTVFavInfo.nTotal - 1 ;j++)
  3930.                 {
  3931.                     memcpy(&gE2pData.gDTVFavInfo.FavList[j], 
  3932.                            &gE2pData.gDTVFavInfo.FavList[j+1], 
  3933.                            sizeof(KB_DBFavNode)); 
  3934.                 }
  3935.                 gE2pData.gDTVFavInfo.nTotal--;
  3936.             }
  3937.             else
  3938.             {
  3939.                 i++;
  3940.             }
  3941.         }
  3942.     }
  3943.     if (KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, (UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  3944.     {
  3945.         printf("nKB_DBFavPrgRefresh::KB_E2PWrite dtv fail");
  3946.     }
  3947.     if (gE2pData.gRADFavInfo.nTotal > KB_DB_MAX_FAV_RAD)
  3948.     {
  3949.         printf("nKB_DBFavPrgRefresh::dtv favor total(%d) exceeds max",
  3950.                 gE2pData.gRADFavInfo.nTotal);
  3951.         KD_ResetFavRad();
  3952.     }
  3953.     else
  3954.     {
  3955.         for (i = 0; i < gE2pData.gRADFavInfo.nTotal;)
  3956.         {
  3957.             if (TRUE != KB_DBIsPrgExist(RADIOPRG, 
  3958.                                           gE2pData.gRADFavInfo.FavList[i].TsId, 
  3959.                                           gE2pData.gRADFavInfo.FavList[i].SrvId))
  3960.             {
  3961.                 for (j = i; j < gE2pData.gRADFavInfo.nTotal - 1 ;j++)
  3962.                 {
  3963.                     memcpy(&gE2pData.gRADFavInfo.FavList[j], 
  3964.                            &gE2pData.gRADFavInfo.FavList[j+1], 
  3965.                            sizeof(KB_DBFavNode)); 
  3966.                 }
  3967.                 gE2pData.gRADFavInfo.nTotal--;
  3968.             }
  3969.             else
  3970.             {
  3971.                 i++;
  3972.             }
  3973.         }
  3974.     }
  3975.     if (KB_E2PWrite(KB_NVM_FAV_RAD_ADDR, (UINT8 *)&gE2pData.gRADFavInfo, sizeof(KB_DBFavRadInfo), NULL) != RETOK)
  3976.     {
  3977.         printf("nKB_DBFavPrgRefresh::KB_E2PWrite radio fail");
  3978.     }
  3979.     return;
  3980. }
  3981. void KB_DBGetFavPrgInfo(UINT8 type,
  3982.                            UINT16 *pNum, 
  3983.                            UINT16 PrgIndex[])
  3984. {
  3985.     UINT8   find = 0;
  3986.     UINT16  i = 0;
  3987.     UINT16  j = 0;
  3988.     if (NULL == pNum 
  3989.         || NULL == PrgIndex 
  3990.         || (DTVPRG != type && RADIOPRG != type))
  3991.     {
  3992.         printf("nKB_DBGetFavPrgInfo::input error. type(0x%x), pNum(0x%x), PrgIndex(0x%x)",
  3993.                 type, pNum, PrgIndex);
  3994.         
  3995.         if (NULL != pNum)
  3996.         {
  3997.             *pNum = 0;
  3998.         }
  3999.         
  4000.         return;
  4001.     }
  4002.     //先初始喜爱的节目个数为0
  4003.     *pNum = 0;
  4004.     if (DTVPRG == type)
  4005.     {
  4006.         if (gE2pData.gDTVFavInfo.nTotal > KB_DB_MAX_FAV_DTV
  4007.             || 0 == gE2pData.gDTVFavInfo.nTotal)
  4008.         {
  4009.             printf("nKB_DBGetFavPrgInfo::gE2pData favor dtv total(%d) error.",
  4010.                     gE2pData.gDTVFavInfo.nTotal);
  4011.             return;
  4012.         }
  4013.         if (gPrgAllInfo.gDTVInfo.nTotal > KB_DB_MAX_DTV)
  4014.         {
  4015.             printf("nKB_DBGetFavPrgInfo::gPrgAllInfo favor dtv total(%d) error.",
  4016.                     gPrgAllInfo.gDTVInfo.nTotal);
  4017.             return;
  4018.         }
  4019.         
  4020.         for (i = 0; i < gE2pData.gDTVFavInfo.nTotal; )
  4021.         {
  4022.             find = 0;
  4023.             for (j = 0; j < gPrgAllInfo.gDTVInfo.nTotal; j++)
  4024.             {
  4025.                 if (gPrgAllInfo.gDTVInfo.PgmList[j].TSID == gE2pData.gDTVFavInfo.FavList[i].TsId
  4026.                     && gPrgAllInfo.gDTVInfo.PgmList[j].SvcID == gE2pData.gDTVFavInfo.FavList[i].SrvId)
  4027.                 {
  4028.                     PrgIndex[(*pNum)] = j;
  4029.                     (*pNum)++;
  4030.                     find = 1;
  4031.                     break;
  4032.                 }
  4033.             }
  4034.             //对gPrgAllInfo已经不存在的dtv fav的刷新处理
  4035.             if (0 == find)
  4036.             {
  4037.                 for (j = i; j < gE2pData.gDTVFavInfo.nTotal - 1 ;j++)
  4038.                 {
  4039.                     memcpy(&gE2pData.gDTVFavInfo.FavList[j], 
  4040.                            &gE2pData.gDTVFavInfo.FavList[j+1], 
  4041.                            sizeof(KB_DBFavNode)); 
  4042.                 }
  4043.                 gE2pData.gDTVFavInfo.nTotal--;
  4044.                 
  4045.                 if (KB_E2PWrite(KB_NVM_FAV_DTV_ADDR, (UINT8 *)&gE2pData.gDTVFavInfo, sizeof(KB_DBFavDtvInfo), NULL) != RETOK)
  4046.                 {
  4047.                     printf("nKB_DBGetFavPrgInfo::KB_E2PWrite dtv fail");
  4048.                 }
  4049.             }
  4050.             else
  4051.             {
  4052.                 i++;
  4053.             }
  4054.         }
  4055.     }
  4056.     else if (RADIOPRG == type)
  4057.     {
  4058.         if (gE2pData.gRADFavInfo.nTotal > KB_DB_MAX_FAV_RAD
  4059.             || 0 == gE2pData.gRADFavInfo.nTotal)
  4060.         {
  4061.             printf("nKB_DBGetFavPrgInfo::gE2pData favor radio total(%d) error.",
  4062.                     gE2pData.gRADFavInfo.nTotal);
  4063.             return;
  4064.         }
  4065.         if (gPrgAllInfo.gRADInfo.nTotal > KB_DB_MAX_RAD)
  4066.         {
  4067.             printf("nKB_DBGetFavPrgInfo::gPrgAllInfo favor radio total(%d) error.",
  4068.                     gPrgAllInfo.gRADInfo.nTotal);
  4069.             return;
  4070.         }
  4071.         for (i = 0; i < gE2pData.gRADFavInfo.nTotal; )
  4072.         {
  4073.             find = 0;
  4074.             for (j = 0; j < gPrgAllInfo.gRADInfo.nTotal; j++)
  4075.             {
  4076.                 if (gPrgAllInfo.gRADInfo.PgmList[j].TSID == gE2pData.gRADFavInfo.FavList[i].TsId
  4077.                     && gPrgAllInfo.gRADInfo.PgmList[j].SvcID == gE2pData.gRADFavInfo.FavList[i].SrvId)
  4078.                 {
  4079.                     PrgIndex[(*pNum)] = j;
  4080.                     (*pNum)++;
  4081.                     find = 1;
  4082.                     break;
  4083.                 }
  4084.             }
  4085.             //对gPrgAllInfo已经不存在的radio fav的刷新处理
  4086.             if (0 == find)
  4087.             {
  4088.                 for (j = i; j < gE2pData.gRADFavInfo.nTotal - 1 ;j++)
  4089.                 {
  4090.                     memcpy(&gE2pData.gRADFavInfo.FavList[j], 
  4091.                            &gE2pData.gRADFavInfo.FavList[j+1], 
  4092.                            sizeof(KB_DBFavNode)); 
  4093.                 }
  4094.                 gE2pData.gRADFavInfo.nTotal--;
  4095.                 if (KB_E2PWrite(KB_NVM_FAV_RAD_ADDR, (UINT8 *)&gE2pData.gRADFavInfo, sizeof(KB_DBFavRadInfo), NULL) != RETOK)
  4096.                 {
  4097.                     printf("nKB_DBGetFavPrgInfo::KB_E2PWrite radio fail");
  4098.                 }
  4099.             }
  4100.             else
  4101.             {
  4102.                 i++;
  4103.             }        
  4104.         }
  4105.     }
  4106.     else
  4107.     {
  4108.         printf("nKB_DBGetFavPrgInfo::input type(%d) error", type);
  4109.         return;
  4110.     }
  4111.  
  4112.     return;
  4113. }
  4114. void KB_DBGetFavPrgInfoInE2p(UINT8 type, void *pInfo)
  4115. {    
  4116.     if ((DTVPRG != type && RADIOPRG != type)
  4117.         || NULL == pInfo)
  4118.     {
  4119.         printf("nKB_DBGetFavPrgInfoInE2p::input error. type(%d), pInfo(0x%x)",
  4120.                 type, pInfo);
  4121.         return;
  4122.     }
  4123.     if (DTVPRG == type)
  4124.     {
  4125.         memcpy(pInfo, 
  4126.                &gE2pData.gDTVFavInfo, 
  4127.                sizeof(KB_DBFavDtvInfo));
  4128.     }
  4129.     else if (RADIOPRG == type)
  4130.     {
  4131.         memcpy(pInfo, 
  4132.                &gE2pData.gRADFavInfo, 
  4133.                sizeof(KB_DBFavRadInfo));
  4134.     }
  4135.     else
  4136.     {
  4137.         printf("nKB_DBGetFavPrgInfoInE2p::input error. type(%d)",
  4138.                 type);
  4139.     }
  4140.     return;
  4141. }
  4142. void KB_DBE2pCfgInfoRefresh(UINT8 nPrgType) 
  4143. {
  4144.     BOOL    find = FALSE;
  4145.     UINT16  i = 0;
  4146.     UINT16  j = 0;
  4147.     switch(nPrgType)
  4148.     {
  4149.         case DTVPRG: 
  4150.             {
  4151.                 for (i = 0; i < KB_DB_MAX_DTV; ++i)
  4152.                 {
  4153.                     if (CONFIG_USED == gE2pData.gDTVPrgCfgInfo[i].Flag
  4154.                         || (CONFIG_USED + 1) == gE2pData.gDTVPrgCfgInfo[i].Flag)
  4155.                     {
  4156.                         find = FALSE;
  4157.                         for (j = 0; j < gPrgAllInfo.gDTVInfo.nTotal; j++)
  4158.                         {
  4159.                             if (i == gPrgAllInfo.gDTVInfo.PgmList[j].IndexOfConfigInfo)
  4160.                             {
  4161.                                 find = TRUE;
  4162.                                 break;
  4163.                             }
  4164.                         }
  4165.                         if (FALSE == find)
  4166.                         {
  4167.                             gE2pData.gDTVPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  4168.                         }
  4169.                     }
  4170.                 }
  4171.             }
  4172.             break;
  4173.             
  4174.         case RADIOPRG:
  4175.             {
  4176.                 for (i = 0; i < KB_DB_MAX_RAD; ++i)
  4177.                 {
  4178.                     if (CONFIG_USED == gE2pData.gRADPrgCfgInfo[i].Flag
  4179.                         || (CONFIG_USED + 1) == gE2pData.gRADPrgCfgInfo[i].Flag)
  4180.                     {
  4181.                         find = FALSE;
  4182.                         for (j = 0; j < gPrgAllInfo.gRADInfo.nTotal; j++)
  4183.                         {
  4184.                             if (i == gPrgAllInfo.gRADInfo.PgmList[j].IndexOfConfigInfo)
  4185.                             {
  4186.                                 find = TRUE;
  4187.                                 break;
  4188.                             }
  4189.                         }
  4190.                         if (FALSE == find)
  4191.                         {
  4192.                             gE2pData.gRADPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  4193.                         }
  4194.                     }
  4195.                 }
  4196.             }
  4197.             break;
  4198.             
  4199.         case DATAPRG:
  4200.             {
  4201.                 for (i = 0; i < KB_DB_MAX_DATA; ++i)
  4202.                 {
  4203.                     if (CONFIG_USED == gE2pData.gDATAPrgCfgInfo[i].Flag
  4204.                         || (CONFIG_USED + 1) == gE2pData.gDATAPrgCfgInfo[i].Flag)
  4205.                     {
  4206.                         find = FALSE;
  4207.                         for (j = 0; j < gPrgAllInfo.gDATAInfo.nTotal; j++)
  4208.                         {
  4209.                             if (i == gPrgAllInfo.gDATAInfo.PgmList[j].IndexOfConfigInfo)
  4210.                             {
  4211.                                 find = TRUE;
  4212.                                 break;
  4213.                             }
  4214.                         }
  4215.                         if (FALSE == find)
  4216.                         {
  4217.                             gE2pData.gRADPrgCfgInfo[i].Flag = CONFIG_NO_USED;
  4218.                         }
  4219.                     }
  4220.                 }
  4221.             }
  4222.             break;
  4223.         default:
  4224.             printf("nKB_DBE2pCfgInfoRefresh::input PrgType(%d) error", nPrgType);
  4225.             break;
  4226.     }
  4227.     return;
  4228. }