📄 cas21.h
字号:
case TFCAS_OK;
printf("购买成功");
break;
case other:
printf("其它相应错误");
break;
default:
break;
}
}
else
TFCASTB_StopIPPVBuyDlg(false,wEcmPid,NULL,NULL);
*/
extern WORD TFCASTB_StopIPPVBuyDlg(bool bBuyProgram,WORD wEcmPid,IN BYTE* pPinCode,IN STFCAIPPVPrice *pPrice);
extern WORD TFCASTB_DelIPPVProgram(WORD wTVSID,BYTE bySlotID,WORD wProductID,TFDATE wExpireDate);
#endif
#if INCLUDE_ADDRESSING_APP
/*++
说明 :
一下方法可以获得邮箱中全部邮件头信息
注意:
byFromIndex = 5并不是从逻辑上的第五封信开始取,而是从邮箱物理空间的第5封邮件位置开始取,
例子:
STFCAEmailHead ArrEmailHead[10];
BYTE byCount;
BYTE byFromIndex = 0;
while(true)
{
byCount = 10;
if(TFCASTB_GetEmailHeads(ArrEmailHead,&byCount,&byFromIndex) == TFCAS_OK)
{
for(BYTE i = 0;i<byCount;i++)
{
STFCAEmailContent EmailContent;
printf("邮件ID = 0x%8x\r\n",ArrEmailHead[i].m_dwActionID);
ArrEmailHead[i].m_szEmailHead[TFCA_MAXLEN_EMAIL_TITLE] = 0; //防止溢出+++
printf("邮件标题 = %s\r\n",ArrEmailHead[i].m_szEmailHead);
if(TFCASTB_GetEmailContent(ArrEmailHead[i].m_dwActionID,&EmailContent)==TFCAS_OK)
{
EmailContent.m_szEmail[TFCA_MAXLEN_EMAIL_CONTENT] = 0;//防止溢出+++
printf("邮件内容 = %s\r\n",EmailContent.m_szEmail);
}
//如果想删掉邮件
TFCASTB_DelEmail(ArrEmailHead[i].m_dwActionID);
}
}
if(byCount < 10) //所有邮件都已经取出
break;
}
--*/
extern WORD TFCASTB_GetEmailHeads(OUT STFCAEmailHead* pEmailHead,INOUT BYTE* pbyCount,INOUT BYTE* pbyFromIndex);
/*++
说明 :
和TFCASTB_GetEmailHeads相对应的函数 TFCASTB_GetEmailHeads是从前向后去找邮件
TFCASTB_GetEmailHeadsForFornt是从后向前找邮件,两着结合可以实现前后翻页
用法参考TFCASTB_GetEmailHeads
注意:
和TFCASTB_GetEmailHeads不同的是如果用TFCASTB_GetEmailHeadsForFornt获取全部邮件
*pbyFromIndex初始值等于TFCA_MAXLEN_EMAIL
--*/
extern WORD TFCASTB_GetEmailHeadsForFornt(OUT STFCAEmailHead* pEmailHead,INOUT BYTE* pbyCount,INOUT BYTE* pbyFromIndex);
extern WORD TFCASTB_GetEmailHead(ULONG dwEmailID,OUT STFCAEmailHead* pEmailHead);
extern WORD TFCASTB_GetEmailContent(ULONG dwEmailID,OUT STFCAEmailContent* pEmailContent);
/*++
说明 :
删除某一封邮件的方法在TFCASTB_GetEmailHeads使用介绍中已经介绍
下面介绍删除所有邮件的方法
说明:
在TFCASTB_FormatBuffer使用介绍中,也提供一种删除所有邮件的方法。
最好使用TFCASTB_DelEmail来删除所有邮件,效率和TFCASTB_FormatBuffer
是一样的,但是TFCASTB_DelEmail是管理邮件的接口,用它删除邮件比较统一
例子:
TFCASTB_DelEmail(0);
--*/
extern void TFCASTB_DelEmail(ULONG dwEmailID);
/*++
说明 :
获得信箱使用的情况
例子:
BYTE byEmailNum;
BYTE byEmptyNum;
if(TFCASTB_GetEmailSpaceInfo(&byEmailNum,&byEmptyNum) == TFCAS_OK)
{
printf("信箱中有邮件 = %d个\n",byEmailNum);
printf("信箱还可容纳邮件 = %d个\n",byEmptyNum);
}
--*/
extern WORD TFCASTB_GetEmailSpaceInfo(OUT BYTE* pByEmailNum,OUT BYTE* pByEmptyNum);
extern void TFCASTB_EnterMailManager(void);
extern void TFCASTB_LeaveMailManager(void);
#endif
/*------------------------以上接口是CAS提供给STB----------------------------------------*/
/*------------------------以下接口是STB提供给CAS----------------------------------------*/
/*++
说明 :
获取falsh的开始地址和长度,其中开始地址在CA模块不会修改
调用的例子:
ULONG g_STBMemBeginAdd = 0,g_STBMemLen = 0;
TFSTBCA_GetBuffer(&g_STBMemBeginAdd,&g_STBMemLen);
if(g_STBMemLen<64*1024){
TFSTBCA_Printf(0,"flash is small\r\n");
}
机顶盒实现的例子:
ULONG dwCaFlashBeginAddress = 0x80000000;
TFSTBCA_GetBuffer( OUT ULONG* pdwStartAddr,OUT ULONG* pdwSize){
*pdwStartAddr = dwCaFlashBeginAddress;
*pdwSize = 64*1024;
.
.
.
}
--*/
extern void TFSTBCA_GetBuffer( OUT ULONG* pdwStartAddr,OUT ULONG* pdwSize);
/*++
说明 :
CA模块只在启动的时候读取一次falsh
调用的例子:
BYTE temp[1000];
ULONG dwreadLen = 1000;
TFSTBCA_ReadBuffer(g_STBMemBeginAdd,temp,&dwreadLen);
if(dwReadLen != 1000){
TFSTBCA_Printf(0,"TFSTBCA_ReadBuffer is fail");
}
--*/
extern void TFSTBCA_ReadBuffer(ULONG pdwStartAddr,OUT BYTE* pbyData,INOUT ULONG* pdwLen);
/*++
说明 :
CA运行的过程中会多次写flash,每次的地址和长度都是一样的
调用的例子:
BYTE temp[1000];
ULONG dwreadLen = 1000;
TFSTBCA_WriteBuffer(g_STBMemBeginAdd,temp,dwreadLen);
--*/
extern void TFSTBCA_WriteBuffer(ULONG pdwStartAddr,IN BYTE* pbyData,ULONG dwLen);
extern void TFSTBCA_Sleep(WORD wMilliSeconds );
/*++
说明 :
调用的例子:
char test[]="ABCDEFGHABCDEFGH";
char* pTmp = (char*)TFSTBCA_Malloc(TFSTBCA_Strlen(test)+1);
if(pTmp==NULL) return;
TFSTBCA_Memset(pTmp,0,TFSTBCA_Strlen(test)+1);
TFSTBCA_Memcpy(pTmp,test,TFSTBCA_Strlen(test));
TFSTBCA_Free(pTmp);
--*/
extern void* TFSTBCA_Malloc(BYTE byBufSize);
extern void TFSTBCA_Free(void* pBuf);
extern void TFSTBCA_Memset(void* pDestBuf,BYTE c,WORD wSize);
extern void TFSTBCA_Memcpy(void* pDestBuf,void* pSrcBuf,WORD wSize);
extern WORD TFSTBCA_Strlen(char* pString);
/*++
说明 :
对信号量进行初始化
调用的例子:
TFCA_Semaphore Semaphore1;
TFSTBCA_SemaphoreInit(&Semaphore1,true);
TFCA_Semaphore Semaphore2;
TFSTBCA_SemaphoreInit(&Semaphore2,false);
结果 Semaphore1有信号
Semaphore2没有信号
--*/
extern void TFSTBCA_SemaphoreInit(OUT TFCA_Semaphore* pSemaphore ,bool bInitVal);
extern void TFSTBCA_SemaphoreSignal(INOUT TFCA_Semaphore* pSemaphore );
extern void TFSTBCA_SemaphoreWait(INOUT TFCA_Semaphore* pSemaphore );
extern bool TFSTBCA_SCReset(void);
extern bool TFSTBCA_RegisterTask(IN const char* szName, BYTE byPriority,IN void* pTaskFun,IN void* pParam, WORD nStackSize);
/*++
//注意 具体的EMMPID 由CAT中分析出来
BYTE byFilter[8]={0,1,2,3,4,5,6,7};
BYTE byMask[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
if(TFSTBCA_GetPrivateData(2,byFilter,byMask,8, 0x211, 2))
{
//CA内部更改保存的过滤器状态
}
else
{
// 设置失败将重新设置
}
-*/
extern bool TFSTBCA_GetPrivateData(BYTE byReqID,IN const BYTE* pbyFilter,IN const BYTE* pbyMask,BYTE byLen, WORD wPid, BYTE byWaitSeconds);
extern void TFSTBCA_ScrSetCW(WORD wEcmPID,IN const BYTE* pbyOddKey,IN const BYTE* pbyEvenKey,BYTE byKeyLen,bool bTaingEnabled);
/*++
在这里我举一个实现的模型 具体怎么做由机顶盒决定
TFSTBCA_SCPBRun(IN const BYTE* pbyCommand, WORD wCommandLen, OUT BYTE* pbyReply, OUT WORD* pwReplyLen)
{
命令字节送卡
if(不成功)
return false;
获取卡返回的数据放到pbyReply //指针指向的空间由CA分配管理 t0协议中返回数据长度不会大于256个字节
if(不成功)
return false;
*pwReplyLen等于返回的数据长度
pbyReply[*pwReplyLen] = 过程字节1
pbyReply[(*pwReplyLen)+1] = 过程字节2
*pwReplyLen+=2;
return true;
}
-*/
extern bool TFSTBCA_SCPBRun(IN const BYTE* pbyCommand, WORD wCommandLen, OUT BYTE* pbyReply, OUT WORD* pwReplyLen);
extern void TFSTBCA_ShowBuyMessage(WORD wEcmPID,BYTE byMessageType);
extern void TFSTBCA_ShowFingerMessage(WORD wEcmPID,ULONG dwCardID);
extern void TFSTBCA_Printf(BYTE byLevel,IN const char* pbyMesssage);
#if INCLUDE_LOCK_SERVICE
extern void TFSTBCA_LockService(WORD wServiceID, WORD wTSID);
#endif
#if INCLUDE_ADDRESSING_APP
extern void TFSTBCA_ShowOSDMessage(BYTE byStyle,IN char * szMesage);
extern void TFSTBCA_HideOSDMessage(BYTE byStyle);
/*++
当byShow=Email_New && dwEmailID!=0 的时候dwEmailID是一封新邮件的ID
这个时候可以调用 TFCASTB_GetEmailHead
TFCASTB_GetEmailContent 获取这封邮件的标题和内容
如果邮箱内有多封新邮件,这个ID是其中的某一封邮件的ID
机顶盒也可以不关心这个ID,因为TFCASTB_GetEmailHeads会返回邮箱内所有的邮件的标题信息内容的
--*/
extern void TFSTBCA_EmailNotifyIcon(BYTE byShow,ULONG dwEmailID);
#endif
#if INCLUDE_IPPV_APP
extern void TFSTBCA_HideCurrentDlg(WORD wEcmPid);
extern void TFSTBCA_StartIppvBuyDlg(BYTE byMessageType,WORD wEcmPid,IN STFCAIppvBuyInfo *pIppvProgram);
#endif
/*---------------------------以上接口是STB提供给CAS-------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -