博远CA移植文档说明
博远CA移植文档说明201212
为了方便CA在各种不同系统和平台上使用和CA系统的保密性,将CA重要部分做成库。
现在将CA分成如下几个个部分:
- CA提供给机顶盒函数接口
1.1
BU8 BYCASTB_Init(BU8 byReaderNo);
/====================================================/
功能:机顶盒启动的时候调用,对CAS模块初始化。
参数:byReaderNo:默认值为1,当为0xff,CA库函数重新初始化。
返回值:
BYCA_OK 初始化成功。
BYCA_ERROR 初始化失败。
/====================================================/
1.2
BU8 BYCASTB_GetVer(BU32*pdwVer, BU8*pCaSysSp, BU8*pCaSysCt)
/====================================================/
功能:机顶盒获得CA模块的版本。
参数:pdwVer: 返回版本号。
pCaSysSp: CA厂家名称 最大长度 64字节
pCaSysCt: CA所有权者 最大长度 32字节
返回值:
BYCA_OK 成功。
BYCA_ERROR 失败。
说明:返回CA模块的版本号。举例: 如果是0x00000104意思就是0.0.1.4。
/====================================================/
1.3
BU8 BYCASTB_GetCardID(BU32 *pdwCardID)
/====================================================/
功能:调用CAS模块,获得智能卡内部ID。
参数:pdwCardID: 返回智能卡内部ID。
返回值:
BYCA_OK 成功
BYCA_ERROR 失败
/====================================================/
1.4
BU8 BYCASTB_CASIDVerify(BU16 wCaSystemID)
/====================================================/
功能:机顶盒获得CASID后调用该接口判断CASID是否有效,如果有效则返回BYCA_OK,否则返回BYCA_ERROR。
本锐科公司正式使用时候CA_SYSTEM_ID 0x4b07 测试时候为CA_SYSTEM_ID 0x5971
参数:wCaSystemID: 机顶盒分析SI/PSI信息获得的CASID。
返回值:
BYCA_OK CASID有效
BYCA_ERROR CASID无效
/====================================================/
1.5
BVOID BYCASTB_SCInsert(BVOID)
/====================================================/
功能:当用户插卡时机顶盒主程序调用,通知CAS模块
/====================================================/
1.6
BVOID BYCASTB_SCRemove(BVOID)
/====================================================/
功能:当用户拔出智能卡时机顶盒主程序调用,通知CAS模块。
/====================================================/
1.7
BVOID BYCASTB_SetCurEcmInfos(BU8 byCount,
const SBYCAServiceInfo* pServiceInfos)
/====================================================/
功能:设置当前正在收看的节目的详细信息。
参数: pServiceInfos: SBYCAServiceInfo结构,描述节目的详细信息。
byCount: 设置类型。
说明:
/*----- ECM_PID设置的操作类型----- */
#define BYCAS_LIST_START 0x10 开始设置
#define BYCAS_LIST_END 0x11 设置结束
#define BYCAS_LIST_ADD 0x12 增加节目
当用户换频道时,机顶盒需要调用CAS提供的此函数,将当前节目的原始信息及ECM PID传递给CAS模块,CAS模块会根据当前频道的信息处理与当前频道相关的操作,如果当前频道为不加扰的频道,则需要将 byCount = 0或 pServiceInfos = NULL,可以停止ECM数据。
if(用户切换频道||或者当前频道中ECMPID发生增加或者减少)
{
BYCASTB_SetCurEcmInfos (BYCAS_LIST_START,BNULL);
if(如果当前频道中有ECMPID,既节目是加扰的) //有几个ECMPID送几次,ECMPID相同送一次就可以,一般情况只送一次。
BYCASTB_SetCurEcmInfos (BYCAS_LIST_ADD, pServiceInfos);
BYCASTB_SetCurEcmInfos (BYCAS_LIST_END,BNULL);
}
{ //解扰单个节目时候,这样设置
BYCASTB_SetCurEcmInfos(BYCAS_LIST_START,BNULL);
ServiceInfo.m_wServiceID[0] = ServiceId;
ServiceInfo.m_wEcmPid = EcmPid;
ServiceInfo.m_byServiceCount = 1;
BYCASTB_SetCurEcmInfos(BYCAS_LIST_ADD,&ServiceInfo);设置当前解扰的节目
BYCASTB_SetCurEcmInfos(BYCAS_LIST_END,BNULL);
}
最多同时解扰8个节目,一般情况,同一个节目的音频和视频的CW是一致的。
/====================================================/
1.8
BVOID BYCASTB_SetEmmPids(BU8 nEmmCount,BU16* pwEmmPids);
/====================================================/
功能:设置EMMPID,CAS模块将根据设置的EMMPID信息进行EMM数据接收处理。
参数:
pwEmmPids: CAT表中包含的descriptor中将有CA_system_ID及CA_PID,调用BYCASTB_CASIDVerify()校验有效的CA_PID即为EMM PID。
nEmmCount: EmmPid的个数,目前只支持nEmmCount=1,当为0时,停止EMM数据。
说明:
当机顶盒收到CAT表后,机顶盒需要调用CA提供的此函数,将EMM PID传过来,这样CA程序就可以根据此PID收取私有表,更新用户卡里的授权及为用户提供增值服务,当设置nEmmCount = 0或pwEmmPids = NULL时,CA模块会停止收取EMM。
{
if(BYCASTB_CASIDVerify(CaSystemId)==true)
{ BYCASTB_SetEmmPids(1, &EmmPid);}
}
/====================================================/
1.9
BVOID BYCASTB_StreamGuardDataGot(BU8 byReqID,BU8 bSuccess,BU16 wPID,BU8* byszReceiveData,BU32 wLen);
/====================================================/
功能:机顶盒主程序在收到CAS私有数据或者Time_Out,调用这个接口将数据提供给CAS模块处理。
参数:
byReqID:当前请求收取私有表的请求号,与BYSTBCA_SetStreamGuardFilter里的byReqID对应,申请表的TABLE_ID
{
EMM_TABLE_ID 0x81
ECM_TABLE_ID 0x82
PubEmail_Table_ID 0x91
PriEmail_Table_ID 0x92
PubAdress_Table_ID 0x93
CA_MENU_Table_ID 0x95
}
bSuccess: 收取数据有没有成功,成功为true,失败为false
wPID: 接收的数据的流的PID。
byszReceiveData: 收取的私有数据
wLen: 收取到的私有数据的长度
/====================================================/
1.10
BVOID BYCASTB_AddDebugMsg(BU8 bDebugFlag);
/====================================================/
功能:打开或关闭调试信息。
参数:bDebugFlag: 打开调试信息标志,1:打开调试信息;0:关闭调试信息。
{
BYCASTB_AddDebugMsg(1);该函数在初始化之前调用
BYCASTB_Init(1);
}
/====================================================/
1.11
BVOID BYCASTB_ShowOSDMsgOver(BU16 wDuration);
/====================================================/
这个函数暂时可以不用实现
/====================================================/
1.12
BU8 BYCASTB_GetEmailCount(BU16 *pEmailCount,BU16 *pNewEmailCount);
/====================================================/
功能:机顶盒获取E-mail个数接口。
参数:
*pEmailCount: 机顶盒中E-mail总个数。
*pNewEmailCount: 机顶盒中未读过的E-mail个数。
返回值:
BYCA_OK 成功
BYCA_ERROR 失败
/====================================================/
1.13
BU8 BYCASTB_GetEmailContent(BU16 icount,MAIL_DATA *pEmail);
/====================================================/
功能:机顶盒获取一个E-mail的内容。
参数:
icount: 当前读过第几封邮件号。0—表示第一封
*pEmail: 获取的E-mail结构。
返回值:
BYCA_OK: 获取E-mail成功。
BYCA_ERROR: 没有此E-mail。
/====================================================/
1.14
BU8 BYCASTB_EmailRead(BU16 icount);
/====================================================/
功能:机顶盒看完E-mail后,通知CAS的接口。
参数:
icount: 当前读过第几封邮件号,0—表示第一封。
返回值:
BYCA_OK: 设置E-mail为已读成功。
BYCA_ERROR: 失败
/====================================================/
1.15
BU8 BYCASTB_DelEmail(BU16 icount);
/====================================================/
功能:机顶盒删除E-mail接口。
参数: icount:
如果为0,表示删除邮箱中所有email;
1 表示第一封
返回值:
BYCA_OK: 删除E-mail成功。
BYCA_ERROR: 失败
/====================================================/
1.16
BU8 BYCASTB_GetProductCount(BU16 *pProductCount);
/====================================================/
参数:*pProductCount,返回实际产品个数
返回:如果有产品,返回BYCA_OK
如果没有产品,返回BYCA_ERROR
/====================================================/
1.17
BU8 BYCASTB_GetCaMenuProduct(CAMenu_Product *pCaMenu_product);
/====================================================/
参数:
pCaMenu_product->CaMenu_Product_Init 返回参数中这个变量没有意义
返回:
产品内容,如果成功返回BYCA_OK,否则BYCA_ERROR
/====================================================/
1.18
BVOID BYCA_ParseBAT(BU8* psibuffer);
/====================================================/
功能:为了实现区域漫游功能,需要用户调用的功能,当用户收到BAT数据后,
调用该函数,CI移植时候,只写函数,不实现
/====================================================/
1.19
BVOID BYCAS_NitZONEDes(BU8* databuf);
/====================================================/
功能:调用CAS模块,设置当前的区域。NIT插入的描述子结构为:
tag 8bit(0x9c)
length 8bit
zoneID 16BIT
CI移植时候,只写函数,不实现
/====================================================/
二、STB机顶盒给CA接口
2.1
BVOID BYSTBCA_GetSCStatus(BU8 * pbyStatus);
/====================================================/
功能:返回智能卡当前状态。
参数:pbyStatus: 返回智能卡状态,为BYCAS_SC_OUT、BYCAS_SC_IN两种之一。
/====================================================/
2.2
BU8 BYSTBCA_GetDataBufferAddr(BU32* lSize,BU32 * ppStartAddr);
/====================================================/
功能:获得机顶盒分配给CAS的存储空间的起点地址和大小(以字节为单位)。
参数:
ppStartAddr: 机顶盒分配给CAS的存储空间的开始地址。
lSize: 输出机顶盒分配给CAS的储存空间的大小。
默认分配64 * 1024 byte
/====================================================/
2.3
BU8 BYSTBCA_ReadDataBuffer(BU32 pStartAddr,BU32* plDataLen,BU8* pData);
/====================================================/
功能:读取保存在机顶盒中的信息。
参数:
pStartAddr: 要读取的存储空间的开始地址。
plDataLen: 输入为要读取的最长数据值;输出为实际读取的大小。
pData: 存放输出数据。
/====================================================/
2.4
BU8 BYSTBCA_WriteDataBuffer(BU32 pStartAddr,BU32 DataLen,BU8* pData);
/====================================================/
功能:向机顶盒的存储空间写信息。
参数:
pStartAddr: 要写的存储空间的开始地址。
DataLen: 输入为要写的数据的长度;输出为写入的实际长度。
pData: 要写的数据。
/====================================================/
2.5
BU8 BYSTBCA_Sleep(BU32 dwmsec);
/====================================================/
功能:挂起当前线程。
参数:
dwmsec: 毫秒。
/====================================================/
2.6
BU8 BYSTBCA_SemaphoreInit(BY_Semaphore *pSemaphore,BU8 flag);
/====================================================/
功能:初始化信号量,初始化后信号量没有信号。
参数:pSemaphore: 指向信号量的指针。
/====================================================/
2.7
BU8 BYSTBCA_SemaphoreDestory(BY_Semaphore *pSemaphore );
/====================================================/
功能:释放一个信号量。
参数:pSemaphore: 指向信号量的指针。
/====================================================/
2.8
BU8 BYSTBCA_SemaphoreSignal(BY_Semaphore *pSemaphore );
/====================================================/
功能:给信号量加信号。
参数:pSemaphore: 指向信号量的指针。
/====================================================/
2.9
BU8 BYSTBCA_SemaphoreWait(BY_Semaphore *pSemaphore );
/====================================================/
功能:等待信号量,等待成功之后,信号量为无信号。
参数:pSemaphore: 指向信号量的指针。
/====================================================/
2.10
BU8 BYSTBCA_RegisterTask(const BS8* szName,pThreadFunc pTaskFun);
/====================================================/
功能:CAS模块向机顶盒注册线程。
参数:
szName: 注册的线程名称。
pTaskFun: 要注册的线程函数。
/====================================================/
2.11
BU8 BYSTBCA_SetStreamGuardFilter(BU8 byReqID,BU16 wPID,BU8* szFilter,BU8* szMask,BU8 byLen,BU16 nWaitSecs);
/====================================================/
功能:设置过滤器接收CAS私有数据。
参数:
byReqID: 请求收表table_id。机顶盒应该保存该数据,接收到CAS私有数据后调用BYCASTB_StreamGuardDataGot()时应该将该数据返回。
wPID: 需要过滤的流的PID。
szFilter: 过滤器的值,为一个8个字节的数组,相当于8*8的过滤器。
szMask: 过滤器的掩码,为一个8个字节的数组,与8*8的过滤器对应,当szMask的某一bit位为0时表示要过滤的表对应的bit位不需要与szFilter里对应的bit位相同,当szMask某一位为1时表示要过滤的表对应的bit位一定要与szFilter里对应的bit位相同。(不包含数据长度的过滤)
byLen: 过滤器的长度,为8。
nWaitSecs: 收此表最长的等待时间,如果为0则无限等待,单位秒。
/====================================================/
2.12
BU8 BYSTBCA_SetDescrCW(BU16 wEcmPid,BU8 byKeyLen,const BU8* szOddKey,const BU8* szEvenKey,BU8 bTaingControl)
/====================================================/
功能:CA程序用此函数设置解扰器。将当前周期及下一周期的CW送给解扰器。
参数:
wEcmPID: CW所属的ECMPID。
szOddKey: 奇CW的数据。
szEvenKey: 偶CW的数据。
byKeyLen: CW的长度。8字节
bTaingControl: true:允许录像,false:不允许录像。
/====================================================/
2.13
void BYSTBCA_AddDebugMsg(BU32 Param1,BU32 Param2,const BS8 *pszMsg);
/====================================================/
功能:打印调试信息。
参数:Param1,Param2,pszMsg: 调试信息内容。
{
printf("[0x%x][0x%x] %s \n",Param1,Param2,pszMsg);
}
/====================================================/
2.14
BU8 BYSTBCA_SCAPDU(BU8 byReaderNo,const BU8* byszCommand,BU16* pbyLen,BU8* byszReply);
/====================================================/
功能:实现与智能卡之间的通讯。采用7816标准。
参数:
byReaderNo: 对应的读卡器编号。默认值设置为1
pbyLen: 输入为待发送命令字节的长度;输出为返回字节长度。
byszCommand: 待发送的一串命令字节。
byszReply: 返回的数据,空间长度恒为256字节。
/====================================================/
2.15
BVOID BYSTBCA_ShowPromptMessage(BU8 byMesageNo);
/====================================================/
功能:显示用户不能观看节目等提示信息,下面两个函数对应使用。
参数:
byMesageNo: 要显示的消息编号。
/====================================================/
2.16
BVOID BYSTBCA_HidePromptMessage(BVOID);
/====================================================/
该函数可以不需要实现
/====================================================/
2.17
BVOID BYSTBCA_ShowFingerPrinting(BU16 wEcmPid,BU32 dwCardID,BU32 wDuration);
/====================================================/
功能:显示指纹信息。
参数:
wEcmPid: ECM PID
dwCardID: 卡号。
wDuration: 持续秒数(可以不考虑显示时间,一直显示,直到收到消息取消)。
if((wEcmPid != 0x1fff) && (dwCardID != 0xffffffff))
显示 BOY 的水印图片 ,如果没有图片,显示PID和卡号
else if((wEcmPid == 0x1fff) && (dwCardID != 0xffffffff))
显示卡号
else if((wEcmPid == 0x1fff) && (dwCardID == 0xffffffff))
取消显示指纹
/====================================================/
2.18
BVOID BYSTBCA_ShowOSDMsg(const BS8* szTitle,const BS8* szOSD,BU16 wDuration);
/====================================================/
功能:以左滚字幕的方式显示OSD消息,可以是同步显示,也可以是异步显示。
参数:
szTitle: 显示标题。长度需要计算字符串的个数
szOSD: 用于显示的OSD信息。
wDuration: 0:显示一次后立即返回;其他值为显示的具体持续秒数。
说明:
用户可以通过遥控器取消当前OSD显示。
/====================================================/
2.19
BVOID BYSTBCA_EmailNotify(BU8 byShow);
/====================================================/
功能:显示新邮件的标志。
参数:
byShow: 标志类型。含义如下:
BYCAS_NEW_EAMIL 新邮件通知。
BYCAS_NEW_EMAIL_NO_ROOM 有新邮件,但Email空间不够。
BYCAS_EMAIL_NONE 没有新邮件。
/====================================================/
2.20
BU8 BYSTBCA_Random(BU8 blen,BU8 *pbBuf);
/====================================================/
功能: 提供随机数据,blen 一般为8
参数: blen 随机数据长度
pbBuf 返回blen个随机数
/====================================================/
2.21
BU8 BYCA_SetZoneFreq( BU32 Freq );
/====================================================/
功能:通知APP锁定某个频道信号,在该特定的频点寻找漫游信息。
参数: KHZ;
返回: true,表示频点已锁到,否则未锁定该频点。
移植CI时,不需要实现此功能
/====================================================/
2.22
void BYCASTBCA_UrgencyBroad(BU16 wOriNetID,BU16 wTSID,BU16 wServiceID,BU8 *pUTCTime);
/====================================================/
功能:应急广播, 切换到指定频道。
参数:
wOriNetID: 原始网络ID。
wTSID: 传送流ID。
wServiceID: 业务ID。
pUTCTime--5 bytes: UTC时间,该时间用户不需要处理。
移植CI时,不需要实现此功能
/====================================================/
2.23
/*++
功能:当用户插卡时,先调用该函数复位卡
返回: true 成功,false失败
参数:pATR 最大64 字节
--*/
BU8 BYCASTB_SCReset(BU8 *pATR);
- 漫游功能
第一步、开机启动盒子必须搜索主频点。且分析当前NIT的区域描述子。
NIT插入的描述子:
语法 |
位数 |
缩写 |
zone_limite_descriptor( ) { zone_tag = 0x9c zone_pair_length for(i=0;i<N;i++) { Reserved } } |
8 8 |
uimsbf uimsbf |
库里提供分析NIT该描述子的功能,机顶盒搜到该描述子(tag),后可直接调用下面的接口。
void BYCAS_NitZONEDes(BU8* databuf )
参数:传入的参数第一字节要为0X9C,就是说要将整个描述子都传给库。
第二步:库读出插入的智能卡的区域信息。该步由库完成。
第三步:机顶盒提供一个可以搜索频点的接口。
void BYSTBCA_SetZoneFreq( BU32 Freq)
库直接调用该接口,库里只提供一个频点参数,其它值都是网络里默认的值,然后调用机顶盒锁定信号。
第四步:设置Freq锁定后,收当前BAT表,将收到的表数据直接送给函数BYCA_ParseBAT,如果没有,2秒超时后直接进入当前节目,如果有数据,延时一秒后,收看当前节目。
库里的消息介绍:
#define STATUE_CA_CARD_ZONE_INVALID 30 /*您的智能卡不再服务区*/
#define STATUE_CA_CARD_ZONE_CHECK_ENTER 31 /* 正在寻找网络,请等待*/
#define STATUE_CA_CARD_ZONE_CHEKC_OK 32
/*漫游限制检查ok,提示机顶盒恢复正常工作,锁定当前信号,调用播放函数*/
四、智能卡说明
4.1接口符合7816标准(无PPS协商,采用标准速率)。
4.2智能卡的上电等待时间要求小于0.5秒。
4.3在ATR中,返回卡的版本号。
4.4时钟工作范围 1-5MHz。(所提供的SMART CARD时钟不能大于5MHz)
4.5供电电压3V-5.5V。
4.6环境温度 -25 – 85 度
备注:ECM表数据不大于2048字节,EMM表数据不大于4096字节
文章来源: blog.csdn.net,作者:悟空胆好小,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/xushx_bigbear/article/details/122729158
- 点赞
- 收藏
- 关注作者
评论(0)