extern CDCA_BOOL CDSTBCA_GetPrivateData(CDCA_U8 byReqID, const CDCA_U8* pbyFilter, const CDCA_U8* pbyMask, CDCA_U8 byLen, CDCA_U16 wPid, CDCA_U8 byWaitSeconds) { UINT8 i; UINT8 value[MAX_SEC_MASK_LEN]; UINT8 mask[MAX_SEC_MASK_LEN]; CAS_DMX_PRINTF("STBCA_GetPrivateData:PID: %04x, req_id:%02x\n", wPid, byReqID); #if 0 //CAS_DMX_PRINTF("STBCA_GetPrivateData:req_id:%02x, timeout:%02x\n", byReqID, byWaitSeconds); CAS_DMX_PRINTF("pid:%04x, MVlen:%02x\n", wPid, byLen); CAS_DMX_PRINTF("Value: "); CAS_DMX_DUMP(pbyFilter, 8); CAS_DMX_PRINTF("Mask: "); CAS_DMX_DUMP(pbyMask, 8); #endif MEMSET(value, 0, sizeof(value)); MEMSET(mask, 0, sizeof(mask)); value[0] = pbyFilter[0]; mask[0] = pbyMask[0]; for(i=1; i<byLen-2; i++) { value[i+2] = pbyFilter[i]; mask[i+2] = pbyMask[i]; } return cas_demux_request(byReqID, value, mask, byLen, wPid, byWaitSeconds); }
/*------------------------------------------------------------------------------- Description: Allocate Filters to filter private ca data, such as ECM, EMM. Paramenters: byReqID: 请求收表的请求号。机顶盒应该保存该数据, 接收到CAS私有数据后调用DVTCASTB_StreamGuardDataGot()时应该 将该数据返回。 wEcmPID: 需要过滤的流的PID。 szFilter: 过滤器的值,为一个8个字节的数组,相当于8*8的过滤器。 szMask: 过滤器的掩码,为一个8个字节的数组, 与8*8的过滤器对应,当szMask的某一bit位为0时表示要过滤的表对应的 bit位不需要与szFilter里对应的bit位相同,当szMask某一位为1时表示 要过滤的表对应的bit位一定要与szFilter里对应的bit位相同。 byLen: 过滤器的长度,为8。 nWaitSeconds: 收此表最长的等待时间,如果为0则无限等待,单位秒。 Return: 0 Stand for success, otherwise, fail. -------------------------------------------------------------------------------*/ HRESULT DVTSTBCA_SetStreamGuardFilter(BYTE byReqID, WORD wPID, const BYTE * szFilter, const BYTE * szMask, BYTE byLen, int nWaitSeconds) { int i; DEBUG_DVTCA("DVTSTBCA_SetStreamGuardFilter byReqID = %d,wPID= 0x%x, tableid = %x, szMask = %x,byLen = %d, nWaitSeconds = %d\n",byReqID,wPID, szFilter[0], szMask[0],byLen, nWaitSeconds); for (i = 0; i < byLen; i++) DEBUG_DVTCA ("0x%x ", szFilter[i]); DEBUG_DVTCA("\n"); return cas_demux_request(byReqID, szFilter, szMask, byLen, wPID, nWaitSeconds); }