1. 概要:

目前对于越来越多的客户要求DTV工厂频道进行预置,以方便客户的工厂生产,这里提供一个笨拙的办法可以一次预置ATV+DTV+DVBS的节目

2. 方法:

(1) 让客户先搜到要预置的ATVDTVS2的节目,然后按MENU+7906进入到酒店模式菜单中,选择Export Databases,导出一个database.dat的文件给到我们;

(2) 拿到database.dat的文件后,用UE或者其他可以查看二进制文件的工具打开,找到DTVChannel的地方(一般在0x1D21地址的附近),如下图:      

     3463工厂频道预置方法_可编辑

                       1

(3) 从上图中可以看到”DTVChannel”后面有4个字节为”5A A5 A5 5A”,这四个字节为节目数据起始的标识,这4个字节之后的数据就是节目数据了。

(4) 用工具“Bin-txt.rar”打开这个BIN文件,转换成为可编辑的文档,如下图2

       3463工厂频道预置方法_可编辑_02

                       2

(5) 打开转换出的文档,找到”0x44, 0x54, 0x56, 0x43……”即”DTVChannel”对应的地方,并依此找到其后的”0x5A, 0xA5, 0xA5, 0x5A”节目数据开始的地方,将节目数据起始的地方前面的数据全部删掉,新建一个包含UINT8PreSetDtvChannel数组的dat文件,将”0x5A, 0xA5, 0xA5, 0x5A”后面的数据全部COPY扔到PreSetDtvChannel数组中,别看数据多,基本不影响代码空间。

     3463工厂频道预置方法_数组_03

(6) 在代码中添加对应的CVT_DEF_FAC_CHANNEL_TABLE_TYPE,添加后在MApp_CVT_DataImportExport.c文件开头的地方Include刚才建的dat文件。

(7) 之后只需要在客户的MODE ID里设置VT_DEF_FAC_CHANNEL_TABLE_TYPE即可。

                        

3. 代码的实现:

(1) 准备好如下代码,扔到你想扔的地方:

  

void msAPI_InstallFactoryDTV_channelTab(void)

{

  memcpy((void *)_PA2VA(RM_DTV_CHSET_START_ADDR - RM_GEN_USAGE + DRAM_64K_DB_START(((DATABASE_START_MEMORY_TYPE & MIU1) ? (DATABASE_START_ADR | MIU_INTERVAL) : (DATABASE_START_ADR)))), PreSetDtvdata , RM_DTV_CHSET_SIZE);

  g_u8QuickDataBase |= QUICK_DB_UPDATE;

  msAPI_Timer_Delayms(100);//10-20ms delay

  MApp_DB_QuickDatabaseMonitor();

  msAPI_Timer_Delayms(100);//10-20ms delay

  MApp_DB_QuickDatabaseMonitor();

  msAPI_CM_InitDTVDataManager();

  MApp_ChannelChange_VariableInit();

  MApp_TopStateMachine_SetTopState(STATE_TOP_CHANNELCHANGE);

}

 

(2) 建立一个名字你随便可以取的数组里,但是上面代码红色部分也得变,如:static const char PreSetDtvdata[]={};把2.7步骤里的数据拷到这个数组里。

(3) 调用msAPI_InstallFactoryDTV_channelTab即可预置工厂频道。