数码相关信息机顶盒移植手册_第1页
数码相关信息机顶盒移植手册_第2页
数码相关信息机顶盒移植手册_第3页
数码相关信息机顶盒移植手册_第4页
数码相关信息机顶盒移植手册_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1目1目 主要内 约 对机顶盒的要 234硬件要 软件要 卡通讯的移 5实现流1目1目 主要内 约 对机顶盒的要 234硬件要 软件要 卡通讯的移 5实现流 相关接口说 参考代 常见问题解 调试信息控制的移 6实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 7开机时的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 8插卡时的移 实现流 验收测试 相关接口说 机顶盒用到的CAS接 参考代 常见问题解 9拔卡时的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 切台时的移 1实现流 验收测试 相关接口说 机顶盒用到的CAS接 参考代 常见问题解 实现流 验收测试 相关接口说 机顶盒用到的CAS接 参考代 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 授权/反授权的实现流 授权查询的实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 修改观看级别的移 实现流 验收测试 相关接口说 2CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 修改工作时段的移 实现流 验收测试 相关接口说CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 修改工作时段的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 指纹功能的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 机卡配对功能的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 3常见问题解 单频点区域锁定功能的移植(非必要功能 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶常见问题解 单频点区域锁定功能的移植(非必要功能 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 节目区域限制的移植(非必要功能 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 一户多端(子母卡)功能的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 电子钱包信息查询的实现流 订购/退订IPP节目的实现流 已观看的IPP节目查询的实现流 实时购买IPP节目的实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 应急广播功能的移 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 免费预 实现流 验收测试 控制字加密的移植(非必要功能 实现流 4验收测试 CAS用到的机顶盒接 机顶盒用验收测试 CAS用到的机顶盒接 机顶盒用到的CAS接 常见问题解 双向数据处理功能的移植(非必要功能 实现流 验收测试 相关接口说 CAS用到的机顶盒接 机顶盒用到的CAS接 参考代 常见问题解 常量在移植中的使 测 附 相关文 标准 PMT CAT CA描述 52主要3约(简称数码视讯)StreamGuard5.22主要3约(简称数码视讯)StreamGuard5.2CAS数据的移植”。这类移植是必须按照顺序,逐一要完成的,因为它们是后续CAS功能移植的基础。CAS各项功能的,除了标识有(可选)的功能外,其它都必的移植”项中,“CAS用到的机顶盒接口”部分就是要求机顶盒实现的接口(“DVTSTBCA_”开头,在附件的《DVTSTB_CASInf.h》文件中机顶盒用到6接口”就是要求数码视讯实现的接口(函数以“DVTCASTB_”开头,都在附件的《DVTCAS_STBInf.h》文件中)接口”就是要求数码视讯实现的接口(函数以“DVTCASTB_”开头,都在附件的《DVTCAS_STBInf.h》文件中)接口中用到的常量、宏和结构定义,在附件的《DVTCAS_STBDataPublic.h》文件中前端:前端的CAS。IC卡:指数码视讯提供的CAS专用智能卡Service:业务,指一个频4对机顶盒的要硬件要基本要求CPU频率>=60MHz或者处理速度>=80MIPSRAM:CAS需要150K字ECM线程最大消耗600字节EMM数据接收线程最大消耗0字节;Msg线程最大消耗1340字节;7Flash:CAS64K字节,为了保护数据,CASflash(128K字节)通过数据备份机制来保护数据(备份机制见‘开机时的移植’中‘常EEPROM:CAS需要80字节CAS要用到4个过滤器,即:EcmFilter、PrivateEmmFilter、PublicEmmFilterIC卡通讯7816协议,电源电压Vcc5v±10%,即:4.50v~5.50vVclk为VIH0.70×Vcc~Vcc+0.3,VIL为-0.3~0.15×VccCLK3.57MHz;复位电压Vrst0.7×Vcc~Vcc+0.3,VIL为-0.3~0.15×Vcc;I/O引脚电压应该为VIH0.70×Vcc~Vcc+0.3,VIL为-0.3~0.15×Vcc,VOH0.70×Vcc~Vcc+0.3,VOL为-0.3~0.15×Vcc。899STB电压测试注意两点STB电压测试注意两点STB播放加扰节目时测电压软件要时,有可能250IPP信息。),因此,机顶盒的线程中要么动态申请大内存,要么分配足够的堆栈空间。CAS会说明需要大空间的接口。5卡通讯的移5.1实现流10智能卡版本的差异会有不同,机顶盒应该根据ISO7816标准分析ATR。智能卡版本的差异会有不同,机顶盒应该根据ISO7816标准分析ATR。令第一个命令过程(数据都是十六进制Send:00A404003f00Recv:90收到INS9000第二个命令过程(数据都是十六进制Send:00A404004a00Recv:90收到INS9000Send:00b2000506Send:0001ff0001Recv:61Send:00c0000067收到INS发取数据命令的5字节命令头Recv:0001640006f709456457000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044565400fdfdfddddddddddddddddddddddddd00000000000000004d1a92Recv:9090005.2相关接口说HRESULTDVTSTBCA_SCAPDU(BYTEbyReaderNo,BYTE*pbyLen,constBYTE*byszCommand,BYTE*byszReply);11盒区分此命令是要送到哪个卡座。单个卡座的,给0即可。byszReply256字节。盒区分此命令是要送到哪个卡座。单个卡座的,给0即可。byszReply256字节。卡返回以69开头的数据是正常的返回,这符合7816的T0协议。机顶盒在实现 接口时,如果通讯失败,直接返回错误CA模块即可5.3参考代HRESULTDVTSTBCA_SCAPDU(unsignedcharbyReaderNo,unsignedunsignedchar*byszCommand,unsignedchar*byszReply){inti=0;HRESULThRet=0;BYTEbysw[2]=BYTEbyrpylen=0,bytemplen=bytemplen=*pbyLen;for(i=0;i<100;i++)if(*pbyLen<5){hRet=goto}hRet=ICC_Write(byszCommand[i]);if(hRet)goto12}hRet=goto(0x60==bysw[0]}hRet=goto(0x60==bysw[0]((6==(bysw[0]>>4))||(9==(bysw[0]>>hRet=ICC_Read(&bysw[1]);gotoexit;}hRet=goto}if(byszCommand[4]!=(*pbyLen-{hRet=goto}hRet=ICC_Write(byszCommand[5+i]);if(hRet)goto}*pbyLen=forhRet=ICC_Read(&byszReply[i]);if(hRet)goto}forhRet=ICC_Read(&bysw[i]);if(hRet)goto}byrpylen=byszCommand[4];gotoexit;}}if*pbyLen=*pbyLen=byrpylen;*pbyLen+=1;*pbyLen+=13}return}5.4常见问题解分)ST5105}return}5.4常见问题解分)ST5105方案的一些问题方案中,设置了智能卡操作的超时时间,但是感觉实际上没有等那么答:stuart目录下api.c文件中,有如下版本定义语句:staticconstST_Revision_tRevision="STUART-REL_1.8.2";1.8.2及以前的版本(1.8.3版本已经修改了这个(ST_GetClocksPerSecond()*TimeOut)/1000ST_GetClocksPerSecond()5105中返回值为6250000,如果超时设置太大,会导致溢出,改为先除后乘可解决,即ST_GetClocksPerSecond()/1000*TimeOut。ST5105方案中(其他方案可参考),重置智能卡返回ATR正常,但是在之后调用操作,在拉Reset引脚之前都会设置参数,这样在随ATR字节的时候就会产生小Reset操作过程,由于受到此小脉冲的影响导致收到了一些垃圾数据,于是在之后的APDU执行时出错。解决办法是:在scdrv.c文件的SMART_InitiateAnswerToReset函数中,在SMART_IO_SetBitRate调用之后,增加空读操作(SMART_IO_Rx,给参数为读取0个字节,这样小脉冲在Reset操作之前就消除掉了,可以避免对卡的影响。6调试信息控制的移6.1实现CA模块中为集成方便和以后问题的查找,会在很多位置调用14 打印调试信默认为关闭打印,CA库打印的开启/关闭方法,请参见附件《CAS5.2.1.0_6.2 打印调试信默认为关闭打印,CA库打印的开启/关闭方法,请参见附件《CAS5.2.1.0_6.2验收测试6.3相关接口说voidDVTSTBCA_AddDebugMsg(constcharbDebugMsgSign:true:开启打印false:关闭打印2、机顶盒何时开启CA模块内部的打印:在成功调用CA初始化函数调用DVTSTBCA_AddDebugMsg(true)接口来开启CA模块内部的打印。6.4参考代{voidDVTSTBCA_AddDebugMsg(constchar15}6.5常见问题解无7开机7.1实现流}6.5常见问题解无7开机7.1实现流调DVTCASTB_AddDebugMsgSign(true)打开打印调用、和DVTSTBCA_RegisterTaskCASDVTSTBCA_Sleep进行任务挂调用DVTSTBCA_GetDataBufferAddr得到分配给CA模块使用的flash地址和大小。调用DVTSTBCA_ReadDataBuffer得到保存在flash中的信息。调用DVTSTBCA_GetDataFromEeprom得到eeprom内保存的数如果DVTSTBCA_GetDataFromEeprom返回成功,CA模块还可能调用调用DVTCASTB_AddDebugMsgSign(false)关闭打印。7.2验收测试XXXX是编译CA库的日期,YYYYCAS厂商信息。167.3相关接口说HRESULTDVTSTBCA_RegisterTask(constchar7.3相关接口说HRESULTDVTSTBCA_RegisterTask(constchar*szName,pThreadFunc注册的线程一般优先级即可,例如如果优先级为1~15,1为最低优先级,那么CA中ECM线程优先级可以设8CA线程优先级可以设置为7。当然,机顶盒一定要pSemaphore:用于存放信号量标识的地机顶盒创建信号量之后,将信号量的标识写入到pSemaphore地址内(*pSemaphore=新创建的信号量标识;),CA模块后续使用。需要注意的是,此函数不要给信号量加信号,CADVTSTBCA_SemaphoreInit后会马上调用DVTSTBCA_SemaphoreSignal来加信号。HRESULTDVTSTBCA_SemaphoreSignal(DVTCA_Semaphore*pSemaphorepSemaphore:用于存放信号量标识的地17pSemaphore:用于存放信号pSemaphore:用于存放信号量标识的地实现说明dwMicroseconds:挂起的时间,单位:毫秒HRESULTDVTSTBCA_GetDataBufferAddr(long*lSize,char**ppStartAddr:机顶盒分配给CASflash存储空间的开始地址18longchar*pFlashBeginAddr=0;longchar*pFlashBeginAddr=0;HRESULTDVTSTBCA_ReadDataBuffer(constchar*pStartAddr,long*plDataLen,BYTE*pData);pStartAddr:要读取的存储空间的开始地址HRESULTDVTSTBCA_WriteDataBuffer(constchar*pStartAddr,long*plDataLen,constBYTE*pData);lStartAddr:要写的存储空间的开始地实现说明CASflash中的数据应修改了,机顶盒应尽快把数据更新到flash中。HRESULTDVTSTBCA_SaveDataToEeprom(long*plDataLen,constBYTE*pData){return(HRESULT)-1;}1910.HRESULTDVTSTBCA_GetDataFromEeprom(long*plDataLen,BYTE*{return(HRESULT)-}10.HRESULTDVTSTBCA_GetDataFromEeprom(long*plDataLen,BYTE*{return(HRESULT)-}booltrue:成功false:失败,如果CA模块打印已经放开,失败的同时会有xxxxfailed!”字样的打印信息,机顶盒厂家可以把该信息给CA厂家进行问题定位。7.4参考代1.HRESULTDVTSTBCA_RegisterTask(constchar*szName,pThreadFunc{STB_OSAL_TaskId_tintif(NULL==szName||NULL==nTaskPrior=if(szNamenTaskPrior=sTaskID=STB_OSAL_TaskCreate(szName,);if(NULLsTaskID)returnreturn20}2.HRESULTDVTSTBCA_SemaphoreInit(DVTCA_Semaphore*pSemaphore{if(NULL==Id_Semaphore=if(NULL==return=(}2.HRESULTDVTSTBCA_SemaphoreInit(DVTCA_Semaphore*pSemaphore{if(NULL==Id_Semaphore=if(NULL==return=(return}HRESULTDVTSTBCA_SemaphoreSignal(DVTCA_Semaphore*pSemaphore{if(NULL===(=if(STB_OSAL_kNoError!=returnreturn}HRESULTDVTSTBCA_SemaphoreWait(DVTCA_Semaphore*pSemaphore{if(NULL==Id_Semaphore=sErr=ifreturn21return}HRESULTDVTSTBCA_Sleep(int){unsignedintms,step,step_ticks=ms=step=if(dwMilliseconds>step_ticks=step*whilereturn}HRESULTDVTSTBCA_Sleep(int){unsignedintms,step,step_ticks=ms=step=if(dwMilliseconds>step_ticks=step*while(dwMilliseconds>dwMilliseconds-=}if(dwMillisecondstask_delay(dwMilliseconds*msreturn}HRESULTchar**{StbErr_tsErr=if(NULL==lSize||NULL==sErr=STB_GetCaDataBuf((u32*)lSize,if(Err_OK!=returnreturn}7.StbErr_tSTB_GetCaDataBuf(u32*lSize,char**{if(NULL==lSize||NULL==return*lSize=*ppStartAddr=22return}8.HRESULTDVTSTBCA_ReadDataBuffer(constchar*pStartAddr,long*BYTE*{char*pbyCaBuf=u32dwCaSizeBuf=return}8.HRESULTDVTSTBCA_ReadDataBuffer(constchar*pStartAddr,long*BYTE*{char*pbyCaBuf=u32dwCaSizeBuf=StbErr_tsErr=if(NULL==pStartAddr||NULL==plDataLen||NULL==sErr=STB_GetCaDataBuf(&dwCaSizeBuf,(Err_OK!=returnstartaddroutof(pStartAddr<pbyCaBuf||pStartAddr>pbyCaBuf+returnendaddroutof((pStartAddr+*plDataLen)>(pbyCaBuf+returnmemcpy((void*)pData,(void*)pStartAddr,return}9.HRESULTDVTSTBCA_WriteDataBuffer(constchar*pStartAddr,long*constBYTE*{char*pbyCaBuf=u32dwCaSizeBuf=StbErr_tsErr=if(NULL==pStartAddr||NULL==plDataLen||NULL==returnsErr=STB_GetCaDataBuf(&dwCaSizeBuf,if(Err_OK!=23returnstartaddroutof((pStartAddr<pbyCaBuf)||(pStartAddr>(pbyCaBuf+returnendaddroutof((pStartAddr+*plDataLen)returnstartaddroutof((pStartAddr<pbyCaBuf)||(pStartAddr>(pbyCaBuf+returnendaddroutof((pStartAddr+*plDataLen)>(pbyCaBuf+returnmemcpy((void*)pStartAddr,(void*)pData,if(Err_OK!=returnreturn}7.5常见问题解Flash备份机制的方案cc2:1.相同时:进行b)241.BDVTSTBCA_GetDataBufferAddrDVTSTBCA_GetDataBufferAddr函数的实现。注意函数的返回值DVTSTBCA_ReadDataBuffer答:请检查DVTSTBCA_ReadDataBuffer函数的实现。注意函数的返回值是Lengthnot答:请检查DVTSTBCA_ReadDataBuffer函数的实现,是否没有按传入的参数dwReadLen得到指定长度的数据,或者虽然得到了指定长度的数据,但是将dwReadLen给错了。NotDVT答:CA模块检测到STB提供的数据格式不符,这对于第一次来说是正常的。但是如果flash读写正常实现了,STB不应该第二次出现此信息,如果出现,认为分配给CA模块的flash数据被破坏了。Lengthnotequaltomemory!答:flash数据被破坏。Invalidoffset,formatflashinfo!答:flash数据被破坏。Dataheadinvalidinflash,format...或Pairingdatainvalidin 或datainvalidinflash,clear...EmailIDdatainvalidinflash,clear...Urgencydatainvalidinflash,clear...writeheadbufferfailedinDVTSYS_SYSInfoFormat!writeparingflashbufferfailedinDVTSYS_SYSInfoFormat!writeemailbufferfailedinDVTSYS_SYSInfoFormat!writeEmailIDbufferfailureinDVTSYS_SYSInfoFormat!writeUrgencyVersionbufferfailureinDVTSYS_SYSInfoFormat!DVTSYS_SYSInfoInit25DVTEcm_EcmInitDVTEmm_EmmInitDVTEcm_EcmInitDVTEmm_EmmInitDVTMsg_InitOSD/DVTSTBCA_RegisterTask函注意事项 不会删除8插卡时的移8.1实现流邮件,调用DVTSTBCA_EmailNotify(DVTCAS_EMAIL_NEW)。调用DVTSTBCA_SemaphoreSignal和DVTSTBCA_SemaphoreWait对内部一些数调用DVTSTBCA_SCAPDU进行卡通讯,得到卡内的一些数如果是开机后第一次调用DVTCASTB_SCInsert,且卡启动了区域锁定,会调用DVTSTBCA_SwitchChannel进行单频点区域锁定的切268.2验收测试8.3相关接口说8.2验收测试8.3相关接口说byReaderNo:IC卡所在读卡器的编号,默认为0。如果机顶盒有多个读卡器,从8.4参考代1.HRESULT2.void{u32dwErr=dwErr=ifCA_PRINT(("error}}8.5常见问题解成功,不能收看节目,出现“请插卡”的提示IC要与卡座接触良好,STB279拔卡9.1实现流机顶盒9拔卡9.1实现流机顶盒检测到卡拔出后,调用DVTCASTB_SCRemove函数通知CA模块卡已经拔出9.2验收测试9.3相关接口说无void9.4常见问题解2810切台时的移10.1实现流机顶盒在刚表版本改变和切10切台时的移10.1实现流机顶盒在刚表版本改变和切台的时候需要调用CA模块当前ServiceECMPIDServiceIDPMT表版本需要实时检测,以保证Service从加扰状态变为不加扰状态(PMT表版本会更新),机顶盒能立即检测到,并调用DVTCASTB_SetCurEcmInfos接口告之CA模块,此时ECMPID值为0。机顶盒在同频点的频道间切换、在不同频点的频道间切换都需要按照此流程处理对于只保存业务的ServiceID等定位信息的切台时需要重新接收并分析PMT表,逐一得到其中的CA_Descriptor,调用DVTCASTB_CASIDVerify校验此CA_Descriptor中的CA_system_ID,如果DVTCASTB_CASIDVerify返回true,此CA_Descriptor中的CA_PID就是数码视讯CASECMPID。调用和调用DVTSTBCA_SetStreamGuardFilter设置Filter,开始过滤ECM数据如果有提示信息,会调用DVTSTBCA_HidePromptMessage隐藏提示信验收测试2910.3相关接口说10.3.1CASboolDVTCASTB_CASIDVerify(WORD10.3相关接口说10.3.1CASboolDVTCASTB_CASIDVerify(WORD注:数码视讯的CASID为0x4ad2。true:是数码视讯的CASID。pServiceInfoSDVTCAServiceInf结构指述数码视讯的ECMPIDServiceID10.4参考代HRESULTDVTSTBCA_SetStreamGuardFilter(BYTEbyReqID,WORDwPID,szFilter,constBYTE*szMask,BYTEbyLen,int{u32if(NULL==szFilter||NULL==returnif(8!=returndwErr=ifreturnreturn}3010.5常见问题解0,请检查是否这样实现的。10.5常见问题解0,请检查是否这样实现的。讯的ECMPID。答:PMTCA_Descriptor,如果机顶盒没有分析到,所以请机顶盒要逐一分疑问:PMT表什么时候改变?时也需要调用DVTCASTB_SetCurEcmInfos告知CA模块新的ECMPID和ServiceID值。视、音频分别加扰的处理说明:当视频加扰,音频不加扰时,不插卡时,STB应该有CAT改变时的移11.1实现流机顶盒在刚上电和检测到CAT表发生了变化的时候,应逐一分析CATCA_Descriptor,调用DVTCASTB_CASIDVerify,并判断返回false:不是数码视讯的CASID保存收到的EMMPID3111.2验收测试每次CAT表改变时,串口输出调试信息“SetEmmPID11.2验收测试每次CAT表改变时,串口输出调试信息“SetEmmPID11.3相关接口说11.3.1CAS11.3.2CASvoidDVTCASTB_SetEmmPid(WORDwEmmPid:数码视讯的EMMPID11.4常见问题解同密环境下测试时,不能找到数码视讯的EMMPID答:在同密环境下,CATCA_DescriptorCA_Descriptor不视讯的之后,应该继续分析后续的CA_Descriptor,直到找到属于数码视讯的CA_Descriptor,而不是发现一个不是后就不分析12FilterCAS数据的移12.1实现流CA模块会调DVTSTBCA_SetStreamGuardFilter去让机顶盒收取数码视讯的ECMEMM数据(同时会告诉机顶盒此Filter的过期时间,即:用filter去过滤数据最长的)机顶盒在收到数据或者过期时间到了的时候必须调用时间机顶盒调用DVTCASTB_StreamGuardDataGot的时候,要告知CA模块是哪个filter反馈(也就是第一个参数必须与设置过滤器时一样。如:CA模块调用32byszEcmMask,8,2)设置的过滤器,机顶盒在2秒内过滤到了数据,机顶盒用,byszEcmMask,8,2)设置的过滤器,机顶盒在2秒内过滤到了数据,机顶盒用,调用wReceiveDataLen,byszReceiveData)通知给CA模块机顶盒在调用DVTCASTB_StreamGuardDataGot后,可以释放过滤器,也可以不释放滤器,但在不释放过滤器时再次过滤到了新数据不应再次调用DVTCASTB_StreamGuardDataGot,需要等DVTSTBCA_SetStreamGuardFilter设置了filter后再用DVTCASTB_StreamGuardDataGot提供给CA模块,也就是说,DVTSTBCA_SetStreamGuardFilterDVTCASTB_StreamGuardDataGot是先后交替、一一对应的DVTSTBCA_SetDescrCW设置CW给机顶盒。DVTSTBCA_HidePromptMessage要求机顶盒隐藏错误提示信息。如果启动了指纹显示,会调用DVTSTBCA_ShowFingerPrinting接口。如果是OSD的数据,会调用DVTSTBCA_ShowOSDMsg接口。如果是应急广播数据,会调用DVTSTBCA_UrgencyBroadcastDVTSTBCA_CancelUrgencyBroadcast接口。如果是寻址数据,会调用DVTSTBCA_GetSoftVer接口和验收测试 ECM数据,串口打印信息“NewEcmdata相关接口说12.3.1CASHRESULTDVTSTBCA_SetStreamGuardFilter(BYTEbyReqID,wPID,33BYTE*szFilter,constBYTE*szMask,BYTEbyLen,BYTE*szFilter,constBYTE*szMask,BYTEbyLen,intbyReqIDFilter的标识。机顶盒应该保存该数据,wEcmPID:需要过滤的TSPIDbit0时表示要过滤的数据对应的bit位不szFilter里对应的bit相同;当szMask某一bit1时表示要过滤的数据对应的bit位一定要与szFilter里对应的bit位相同。机顶盒在DVTSTBCA_SetStreamGuardFilter函数中应先检查CA模块先前设filterbyReqIDfilter,如果有,必须先释放掉原来的,然后ST6FilterSTBFilter数据和szFilterszMaskTableID2个字节BYTEi;szActualFilter[0]=szFilter[0];szActualMask[0]=szMask[0];szActualFilter[i]=szFilter[i+2];szActualMask[i]=szMask[i+2];}34HRESULTDVTSTBCA_SetDescrCW(WORDwEcmPID,BYTEbyKeyLen,constBYTE*szOddKey,constBYTE*szEvenKey,boolbTapingControl);HRESULTDVTSTBCA_SetDescrCW(WORDwEcmPID,BYTEbyKeyLen,constBYTE*szOddKey,constBYTE*szEvenKey,boolbTapingControl);wEcmPIDCW对应的ECMPID,区分不同的ServiceCW。机顶盒用它来判断CA模块提CW是否为当前正观看的加扰节目的,如果不是,机顶盒应不使用这些CW。bTapingControl:录像控制,true允许录像,false禁止录像。此参数需要机顶盒的TS包头的加扰控制值(Transport_scrambling_control)的奇偶性来使用CW,奇时用奇CW,偶时用偶CW。如(时,那么当前的CW用szEvenKey,szOddKey为下一个CW。此时机顶盒即使收到了CW也不能使用。DWORD作一个CRC32,然后把值返回。 功能隐藏电视上因为调用 函数而显示的提示信息 DVTSTBCA_ShowPromptMessage(BYTE35byMesageNo:提示信息的编号 接口隐藏《DVTCAS_STBDataPublic.h》中有具体定义36宏定值提示内0124byMesageNo:提示信息的编号 接口隐藏《DVTCAS_STBDataPublic.h》中有具体定义36宏定值提示内012456789IC卡被禁止服12.3.2CASvoidDVTCASTB_StreamGuardDataGot(BYTEbyReqID,boolbSuccess,WORDwPID,WORDwLen,constBYTE*byszReceiveData);个接口通知CA12.3.2CASvoidDVTCASTB_StreamGuardDataGot(BYTEbyReqID,boolbSuccess,WORDwPID,WORDwLen,constBYTE*byszReceiveData);个接口通知CA模块,如果过滤到数据,还需把数据提供给CA模块。byReqIDFilterDVTSTBCA_SetStreamGuardFilter里对应。参见附件《DVTCAS_STBDataPublic.h》,有如下定义#defineDVTCA_STB_EMM_Private_SLOT#defineDVTCA_STB_EMM_Public_SLOT#defineDVTCA_STB_EMM_Group_SLOTbSuccess:过滤到了数据时为true,超时时123 //forGroupfalsewPID:过滤到数据时的PID,与DVTSTBCA_SetStreamGuardFilter里的wPIDwLen:过滤到的数据的长度。当bSuccessfalse时,此值将CA模块使用byszReceiveDatabSuccessfalseCA模块使12.4参考代1.HRESULTDVTSTBCA_SetDescrCW(WORDwEcmPID,BYTEbyKeyLen,constBYTE*constBYTE*szEvenKey,bool{if(NULL==szOddKey||NULL==return37宏定值提示内if(8!=returnsErr=if(ST_NO_ERROR!=returnsErr=if(ST_NO_ERROR!=returnreturn}if(8!=returnsErr=if(ST_NO_ERROR!=returnsErr=if(ST_NO_ERROR!=returnreturn}12.5常见问题解ReqIDCA模块检查到DVTCASTB_StreamGuardDataGot的byReqID参数值不是DVTEmm_EmmDataGotfailure.TheEmmPidisCA模块检查到DVTCASTB_StreamGuardDataGot的wPid参数值不是setEcmfilterCA模块设置的Filter收不到数据,但从码流中分析有数据有的机顶盒的过滤器只支持6个字节的过滤,不支持8个字节的过滤,而CAfilter8个字节的(TableID8个字节),因2、3个字节的数据去掉,把后面的数据往前移。filterTSECM(EMM)包,没有去(或EMM)包,第一个ECM(或EMM)包不符合过滤器的条件,整个包就被机顶盒丢弃,这样就会漏掉第二个ECM(或EMM)38的PID去设置过滤器,因而过滤不到数据。要机顶盒检查的PID去设置过滤器,因而过滤不到数据。要机顶盒检查 的实现代码需要机顶盒有滤不到EMM的现象。题,需要机顶盒检查DVTSTBCA_SetStreamGuardFilter的实现代码,最好有机公有数据过滤器,4FF授权/反授权功能的移13.1授权/反授权的实现流CADVTSTBCA_SetStreamGuardFilterSTB的过滤传递给CA模块。3913.2授权查询的实现流机顶盒提供菜单(为第二级的菜单,第一级的菜单为“智能卡服务用户选择菜单后,机13.2授权查询的实现流机顶盒提供菜单(为第二级的菜单,第一级的菜单为“智能卡服务用户选择菜单后,机顶盒调用DVTCASTB_GetOperatorInfo(-1,pbyCount,接口(SDVTCATvsInfopOperatorInfo[5]数组,大概占140个字节的内返回DVTCA_OK:成功得到所有的运营商信息,注意:运营商名称最多有用户按“确认”键时,STB调用DVTCASTB_GetServiceEntitles接口(调用前需要定一个SDVTCAServiceEntitle[250]数组或动态申请250*sizeof(SDVTCAServiceEntitle)40返DVTCA_OK:成功得到授权信息,继续后续返DVTCA_OK:成功得到授权信息,继续后续13.3验收测试13.4相关接口说13.4.1CAS13.4.2CASHRESULTDVTCASTB_GetOperatorInfo(WORDwTVSID,BYTE*41SDVTCATvsInfo*wTVSID:运营商ID,如果是-1,则返回所有SDVTCATvsInfo*wTVSID:运营商ID,如果是-1,则返回所有的运营商信5个数组,存放返回SDVTCAServiceEntitle*psEntitles);wTVSID:运营商的ID的最大数组个数为250。数组,存放返回的信息例代码转成char数组。使用时参考代码=(BYTEbyEntitleCount=250;}4213.5参考代时间转换函数boolGetDateStrFromValC(intwInputDate,char*{/*szOutmemoryisprovidedby13.5参考代时间转换函数boolGetDateStrFromValC(intwInputDate,char*{/*szOutmemoryisprovidedbyoutside,anditsoutformatislike2002-5-22.*/intnYear,nMon,nDay,nTemp,nDate=wInputDate;charsz[30];nYear=1970;if((nYear%4==0&&nYear%100!=0)||nYear%400==0)nTemp=366;nTemp=365;if(nDate-nTemp<0)nDate-=nTemp;nYear++;nMon=1;if(2==nMon){/*ifis==}elseif(4==nMon||6nTemp=nTemp=31;if(nDate-nTemp<0)nDate-=nTemp;nMon++;nMon9nMon||12<nMon)returnfalse;=+=nDate;nDay||31<nDay)returnfalse;return}时间转换函数boolGetTimeStrFromValC(u32nInputTime,char*43intintnDate,nHour,nMin,nSec,nOff,nTime;char===nInputTime/(24*3600);nInputTime%(24*3600);nTime/3600;<=(nHour+8))//tolocalhour.nDate++;returnfalse;nOff=strlen(szTime);if(8>nOff)returnnTime=nInputTime%3600;nMin=nTime/60;nMin||59<nMin)returnfalse;=nTime%if(0>nSec||59<nSec)returnfalse;sprintf(szTime+nOff,"%d:%d:%d",(nHour+8)%24,nMin,nSec);return}13.6常见问题解观看节目在CA模块设置EcmFilter后,尽管filter过滤数据超时了(一直在过滤数据,但没有过滤到),但机顶盒没有调用DVTCASTB_StreamGuardDataGot通知CA模块超时,导致CA模块无法再次设置Filter,也就无法收到ECM数据,所以导致了这个FilterCAS数据的移植”中的数码视讯的ECM是多个sections的,机顶盒没有根据CA模块设置的Filter要求去问题需要机顶盒的filter能够过滤到数据,并且要根据44DVTSTBCA_SetStreamGuardFilter中的参数去过滤数DVTSTBCA_SetStreamGuardFilter中的参数去过滤数STBIC中读出的多运营商的授权等信息不0。例如:STB时,其参数的初值要赋为定义的最大值 在调用DVTCASTB_GetServiceEntitles()时,14信息显示的移14.1实现流45机顶盒调用DVTCASTB_GetStreamGuardManuInfo获取CAS供应商信息,但是机顶盒调用DVTCASTB_GetStreamGuardManuInfo获取CAS供应商信息,但是机顶盒调用DVTCASTB_GetMotherInfo得到母卡卡号如果母卡卡号不为4614.2验收测试14.314.2验收测试14.3相关接口说14.3.1CAS14.3.2CASHRESULTDVTCASTB_GetStreamGuardManuInfo(SDVTCAManuInfo*pManu:指向保存返回信息的SDVTCAManuInfo结构对pManu–>m_dwCardID:pManu–>m_dwSCCOSVer:pManu–>m_dwSTBCASVer:pManu智能卡COS版本:47HRESULTDVTCASTB_GetRating(BYTE*DVTCA_OK:成观看级别为3~18,共15级。卡中默认值为18,即可以观看所有级别的节目。HRESULTDVTCASTB_GetWorkTime(BYTE*pbyStartHour,BYTE*pbyStartMinute,BYTE*pbyEndHour,BYTE*pbyEndMinute);DVTCA_OK:成么只能晚上20:00到第二天5点能收看,其他时间不能收看。HRESULTDVTCASTB_GetAreaInfo(SDVTCAAreaInfo*48psAreaInfo-其他值HRESULTDVTCASTB_GetMotherInfo(DWORD功能参数psAreaInfo-其他值HRESULTDVTCASTB_GetMotherInfo(DWORD功能参数如果不为0则子母卡属性为子卡卡号为其他值14.4常见问题解15PIN码的移15.1实现流49如果一致,机顶盒调用DVTCASTB_VerifyPin校验原PIN码,判断函数返回 如果返回DVTCA_OK:意味着校验通过,机顶盒接着调用50DVTCASTB_ChangePin修码,根据函数返回值,在界面下方给15.2验收DVTCASTB_ChangePin修码,根据函数返回值,在界面下方给15.2验收测试无15.3相关接口说15.3.1CAS15.3.2CASHRESULTDVTCASTB_VerifyPin(constSDVTCAPinpPin:用户在界面上输入的PINDVTCAERR_STB_PIN_ERR:输入PIN码错误 被锁定SDVTCAPinPIN;PIN.m_byLen=8;PIN.m_byszPin[2]=PIN.m_byszPin[3]=51PIN.m_byszPin[4]=0x05;PIN.m_byszPin[5]=0x06;PIN.m_byszPin[6]=0x07;PIN.m_byszPin[7]=nRet=PIN.m_byszPin[4]=0x05;PIN.m_byszPin[5]=0x06;PIN.m_byszPin[6]=0x07;PIN.m_byszPin[7]=nRet=//处理返回值PIN被锁定。DVTCAERR_STB_DATA_LEN_ERROR:PIN码长度错误常见问题解PIN3PIN码失败锁卡的情况,因为如果测试了,卡必须拿到CAS厂商来解锁才能继续使用,浪费时间。修改观看级别的移实现流52用户选择菜单后,机顶盒调用 接口,处理返回值用户选择菜单后,机顶盒调用 接口,处理返回值DVTCA_OK:弹出修改观看级别的界面。(换焦点,按左右键修改级别的值如果返回失败,根据错误码在界面下方给出相应的提如果返回DVTCA_OK,机顶盒接着调用DVTCASTB_SetRating设置观5316.2验收测试16.3相关接口说16.3.1CAS16.2验收测试16.3相关接口说16.3.1CAS16.3.2CASHRESULTDVTCASTB_SetRating(BYTEDVTCA_OK:成功16.4常见问题解17修改工作时段的移17.1实现流54用户选择菜单后,机顶盒调用 接口,处理返回值用户选择菜单后,机顶盒调用 接口,处理返回值DVTCA_OK:弹出修改工作时段的界面。(换焦点,通过遥控器数字键修改工作时段)分钟是否在00~59之间:55 DVTCA_OK 来设置观看级别17.2验收测 DVTCA_OK 来设置观看级别17.2验收测试17.3相关接口说17.3.1CAS17.3.2CASHRESULTDVTCASTB_SetWorkTime(BYTEbyStartHour,BYTEbyEndHour,BYTEbyEndMinute);byStartHour0~23。byEndHour:结束工作的小时,取值范围为0~23。DVTCA_OK:成功5617.4常见问题解17.4常见问题解18OSD功能的移18.1实现流机顶盒在电视屏幕下方以左滚字幕的形式显示OSD内容,显示完毕后,机顶盒调用DVTCASTB_ShowOSDMsgOver(wDuration)接口通CA模块,wDuration为机顶盒显示完此OSD实际花的时间(单位为秒。—显示完毕后,机顶盒一定要调折18.2验收测试前端发送按次数的OSD,机顶盒可以按照设置的次数显示OSD57超过5秒。18.3相关接口说超过5秒。18.3相关接口说18.3.1CASvoidDVTSTBCA_ShowOSDMsg(BYTEbyPriority,constchar*byPriority:OSD优先级,0~3,优先级递增szOSD:用于显示的OSD信息,以“\0”结尾18.3.2CASvoidDVTCASTB_ShowOSDMsgOver(WORD18.4参考代 voidDVTSTBCA_ShowOSDMsg(BYTEbyPriority,constchar*{u32dwErr=Err_OK;if(dwErr){CA_PRINT(("errorDVTSTBCA_ShowOSDMsg(),%ld\n",58}}{}}{STB_OSAL_Status_tsErr;char*szBuf=NULL;if(NULL==returnErr_CA_Display;szBuf=STB_OSAL_MemoryAlloc(strlen(szStr)+1);if(NULL==szBuf)returnErr_CA_Display;memset(szBuf,0,strlen(szStr)+1);strcpy(szBuf,szStr);===sErr=STB_OSAL_MsgSendWithTimeOut(g_sScrollTaskID,&sMsg,if(sErr!={if(sErr==return}return}18.5常见问题解OSDDVTCASTB_ShowOSDMsgOverCA模块这次显示已经完毕,CA模块认为机顶盒始终没有显示完,也就不提供新的显59DVTCASTB_ShowOSDMsgOver接口来通知CA模块显示完毕时,传过来的wDurationDVTCASTB_ShowOSDMsgOver接口来通知CA模块显示完毕时,传过来的wDuration比实际显示的时间要大得多,也就是说机顶盒计时误差太大导致OSD显示少了。盒仍继续显示,直到OSD过期。答:机顶盒用DVTCASTB_ShowOSDMsgOver接口传过来的wDuration0,导19指纹功能的移19.1实现流(即:卡号),并用wDuration参数告知机顶盒应显示多长时间(单位为秒)特别注意:当内部卡号为8位时,机顶盒应该完整显示指纹信息。机顶盒如果在显示指纹的过程中,CA模块又调用了6019.2验收测试19.3相关接口19.2验收测试19.3相关接口说19.3.1CASdwCardID:要显示的内部卡号,长度一般6-8位,比如98843585wDuration:要显示的持续时间,单位19.3.2CAS19.4参考代{u32dwErr=if(dwErr)CA_PRINT(("errorDVTSTBCA_ShowFingerPrinting(),}{u32dwErr=Err_OK;OSD_RECT_tsRect;if(0==dwSeconds)returndwErr=CA_DrawFinger(dwID);if(dwErr)return =61sRect.height= sRect.y=CA_FINGERMSG_Y+CA_FINGERMSG_Y_STEPdwErr=sRect.height= sRect.y=CA_FINGERMSG_Y+CA_FINGERMSG_Y_STEPdwErr=ifreturnif(dwErr)returnif(dwErr)returnreturn}19.5常见问题解20Email功能的移20.1显示Email标识的实现流如果邮箱未满,调DVTSTBCA_EmailNotify(DVTCAS_EMAIL_NEW)通知62CA20.2管理Email的实CA20.2管理Email的实现流用户选择菜单后,机顶盒调用接口,处理返回DVTCA_OKDVTCASTB_GetEmailHead接口(调用前需要定63返DVTCA_OK:按如下要求,显示获取到的邮返DVTCA_OK:按如下要求,显示获取到的邮【上下】选左右】翻页【确认】读邮F3】删除选中的邮件F4如果在,机顶盒调用DVTCASTB_GetEmailContent接口,处理返回值: 返回DVTCA_OK:将此邮件设置为已读状64 返回其他值:检查pEmail->m_wEmailLength的值当 返回其他值:检查pEmail->m_wEmailLength的值当用户按“F3”键删除选中的邮件,确定后,首先检查,智能卡是否在卡槽如果在,机顶盒调用DVTCASTB_DelEmail接口,处理返回值返DVTCA_OK:意味着成功删除,机顶盒应删除显示列表中的选中邮返回:DVTCAERR_STB_NO_EMAIL,机顶盒提示:“非本卡邮当用户按“F4”键删除所有邮件,机顶盒调DVTCASTB_DelEmail返回DVTCA_OK,清空邮件列表20.3验收测试6520.4相关接口说20.4.1CASvoidDVTSTBCA_EmailNotify(BYTE20.4相关接口说20.4.1CASvoidDVTSTBCA_EmailNotify(BYTE20.4.2CAS *DVTCA_OK:成功66DVTCA_OK:成功SDVTCAEmailInfo[50]的数组,或者动态申请这么调用此函DVTCA_OK:成功SDVTCAEmailInfo[50]的数组,或者动态申请这么调用此函数前,需要定义 tVersion:Email的版本,也是Email的唯一标识DVTCA_OK:成功tVersion:Email的版本,也是Email的唯一标识tVersion:Email的版本,也是Email的唯一标识;如果为-1,表示删除所有邮件DVTCA_OK:成功20.5参考代 voidDVTSTBCA_EmailNotify(BYTE //作用:邮件状态的提{67u32dwErr=if(dwErr){CA_PRINT(("error}u32dwErr=if(dwErr){CA_PRINT(("error}}{u32STB_CA_EmailNotify(u32u32dwErr=Err_OK;switch{casecaseif(dwErr)returncaseif(dwErr)returnreturn}return}常见问题解Email 请一个“50*sizeof(SDVTCAEmailInfo)”的SDVTCAEmailInfo数组空间68答:CASEmail102420Kflash空间来保存,如果每答:CASEmail102420Kflash空间来保存,如果每封Email内容有1024字节,可以存放19Email;如果每封的Email内容256机顶盒在界面上提示用户“最多显示50封邮件”。DVTSTBCA_EmailNotify函数。该函DVTCAS_NEW_EAMIL(有新邮件),有新邮件)CA模块的逻辑以及完成了在相应操作后提示机顶盒显示什么标志。1、当调用DVTSTBCA_EmailNotify要求显示图标时,机顶盒在作其他显示任2CA调用 来设已读状态,删除邮件需要调用而不是仅仅从内存中删21机卡配对功能的移21.1实现流DVTSTBCA_ShowOSDMsgOSD,因此厂家需要先将OSD功能的移植完成。DVTSTBCA_WriteDataBuffer将机卡配对数据保存到flash)对数据存入Eeprom,否则,存入Flash6921.2验收测试21.2验收测试21.3相关接口说21.3.1CASHRESULTDVTSTBCA_SaveDataToEeprom(long*plDataLen,constBYTE*STBeeprom,则此函数一定要返回-1(即:0xffffffff)!机顶盒实现此函数的代码一定为HRESULTDVTSTBCA_SaveDataToEeprom(long*plDataLen,constBYTE*return(HRESULT)-}3)eepromEeprom80字节。如机HRESULTDVTSTBCA_SaveDataToEeprom(long*plDataLen,constBYTE*boolif(80<*plDataLen=bSucess=WriteEEprom(0,pData,*plDataLen);//写eeprom的函数可能不同,070returnreturn}//具体错误值由机顶盒确定,但returnreturn}//具体错误值由机顶盒确定,但一定不能是(HRESULT)-HRESULTDVTSTBCA_GetDataFromEeprom(long*plDataLen,BYTE*HRESULTDVTSTBCA_GetDataFromEeprom(long*plDataLen,BYTE*boolif(80<*plDataLen=//returnreturn}//具体错误值由机顶盒确定,但一定不能是(HRESULT)-21.3.2CAS21.4常见问题解flash,而是先放到内存中,隔段时间再写,就更慢了)71eepromCASeeprom答:是的eepromCASeeprom答:是的CA模块是根据-1来知道机顶盒是没有eeprom的,然后CA模块会自动把信息存flash中。如果没有eeprom,读写eeprom的函数又不返回-1,而是返回0或者其他的值,CA模块将无法保存机卡配对数据。表中的相关区域锁定的移22.1实现流NIT主频点通过隐藏菜单设置,隐藏菜单的实现规范详见《CAS5.2.1.0隐藏菜单规范机顶盒从设置的主频点NIT表中获取PDSD值专用数据说明描述符的 位置见下图如果获取到,与内存中的PDSD否则,不做处理 如果检测到前端NIT表版本有变化,机顶盒重新获取NITPDSDPDSD如果一致,不做处理否则,更新内存中的PDSD值,并保Flash根据运营商的需要,NIT区域锁定,可以采用前端设置PDSD值的方式,也可以72端设置的方式,厂家在填写端设置的方式,厂家在填写提交测试申请时,需要填写相应的方22.2验收测试22.3相关接口说22.3.1CAS机顶盒73其它值使用说明22.3.2CAS无22.4常见其它值使用说明22.3.2CAS无22.4常见问题解单频点区域锁定功能的移植(非必能23.1实现流CA模块调用DVTSTBCA_SwitchChannel接口通知机顶盒时,机顶盒切到单频点出“频点不存在”Service。否则,开始计时(时间是CA模块通过DVTSTBCA_SwitchChannel接口传给机顶 ’,背景画面使用开74前端是否启动NIT区域是是是否盒调用DVTCASTB_SwitchChannelOver(0)通知CA模块,然后成功切回原频道。盒调用DVTCASTB_SwitchChannelOver(0)通知CA模块,然后成功切回原频道。23.2验收测试23.3相关接口说23.3.1CASvoid功能:CA模块用此函数通知机顶盒特征码流接收完毕。HRESULTDVTSTBCA_SwitchChannel(WORD功能:CA模块用此函数通知机顶盒切换到单频点区域锁定的频点(wWaitSeconds秒)wWaiteconds:切换的超时时间,单位为。23.3.2CAS7523.4参考代boolg_bSwitchTask=false;//记录CA模块是23.4参考代boolg_bSwitchTask=false;//记录CA模块是否调用了DVTSTBCA_AreaLockOk接voidg_bAreaLockOK=}HRESULTDVTSTBCA_SwitchChannel(WORD;unsignedshortintif(机顶盒没有进行搜台)或者(没有设置单频点区域锁定的频点return}g_bSwitchTask=ture;return}{gotocontinued;ForbidSwitchChannel();//禁止用户切台操作 AllowSwitchChannel();//76 g_bSwitchTask=false;goto}while(计时的时间没有到wWaitSecondsif(g_bAreaLockOK){//秒模块调用了DVTSTBCA_AreaLockOkgoto}}AllowSwitchChannel();// ”的提示息SwitchToService(nCurrentFrequency,nCurrentServiceID);//切回到用户原来观看的g_bSwitchTask=false;}23.5常见问题解让CA模块在一定的时间内收取特征流,收完后机顶盒再切回到用户原来观看的77疑问:DVTSTBCA_SwitchChannel和DVTSTBCA_AreaLockOk怎么实现?24节目区域限制的移植(非疑问:DVTSTBCA_SwitchChannel和DVTSTBCA_AreaLockOk怎么实现?24节目区域限制的移植(非必要功能24.1实现流bouquet_idBATBAT在通过区域控制的情况下,机顶盒在搜索节目时,通过调用DVTCASTB_GetAreaInfoBAT表,24.2验收测试24.3相关接口说24.3.1CAS无24.3.2CASHRESULTDVTCASTB_GetAreaInfo(SDVTCAAreaInfo* 结构指针,获得区域信psAreaInfo->m_dwCardArea:卡当前区域78psAreaInfo->m_tSetStreamTime常见问题解无一户多端(子母卡)功能的实现流 某年某月某日某时:某分:某秒7980是子卡81(配对过程中请勿操作遥控器ECM数据,使卡中有系统时间,否则机ECM数据,使卡中有系统时间,否则机 如返回失败:机顶盒把界面的提示内容更换为“配对失败,请插入要配对的子82(配对过程中请勿操作遥控器(配对过程中请勿操作遥控器(配对过程中请勿操作遥控器25.2验收测试25.3相关接口说25.3.1CAS25.3.2CAS25.2验收测试25.3相关接口说25.3.1CAS25.3.2CASpData:输出的数据,最长为250字节。DVTCA_OK:成功读出的配对信息直接供 接口向子卡写入具入配对信息时返回失败83DataLen:输入的数据长DataLen:输入的数据长HRESULTDVTCASTB_GetMotherInfo(DWORD其他值25.4常见问题解示,也就是及时提示CA库发的消息,而不再提示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论