📄 zte_ca.h
字号:
#ifndef _ZTE_CA_H#define _ZTE_CA_H#ifndef _WIN32#define EXPRORT_API extern "C"#else#define EXPRORT_API __declspec(dllexport)#endif#ifdef __cplusplusextern "C" {#endif/********************** 常数定义 **********************/#define CMMB_TITLE_SIZE 64/********************** 参数说明 **********************/#define IN#define OUT#define INOUTtypedef unsigned char byte;/********************** Structures **********************/typedef enum { CA_OK, // No Error CA_OOM, // Out of Memory CA_HW_FAILURE, // Hardware Failure CA_TIMEOUT, // Operation Timeout CA_INVALID_PARAMETER, // Invalid Operation CA_PURCHASE_REQUIRED, // Purchase operation required CA_UNKNOWN_ERROR, // Unknown Error} CA_RETURN;typedef struct { void *internal; // Internal Data Structure for CA module} CA_DATA;typedef struct { int id; // Internal Use int version[3]; char name[CMMB_TITLE_SIZE]; char vendor[CMMB_TITLE_SIZE];} CA_MODULE_INFO;typedef struct { byte uuid[8]; // Unique ID for the machine byte seriesid[8]; // Unique ID for the machine type byte manuid[8]; // Unique ID for the manufacturer byte reserved[8]; // } CA_TERMINAL_INFO;typedef struct { unsigned short service_id; // service id of scrambled sub-frame} CONDITIONAL_ACCESS;typedef enum { CA_STATUS_IDLE, // 没有被初始化前或者被卸载后的状态,在init后将到CA_MODULE_INITIALIZED CA_STATUS_INITIALIZED, // 已经初始化,shutdown后到CA_MODULE_IDLE CA_STATUS_ERROR, // 无法恢复的错误,需要shutdown} CA_MODULE_STATUS;/*********************** Function Definition *******************/typedef struct { /* * 检查CA硬件是否存在 */ CA_RETURN (*ca_detect_module)(void); /* * 获取本CA的相关信息 * * Parameter: * module_info: CA Module information as return */ CA_RETURN (*ca_get_module_information)(OUT CA_MODULE_INFO *module_info); /* * 初始化本CA,并选择本CA作为解扰CA * * Parameter: * ca_data : 用于存放CA内部数据结构,在进行其他操作时作为参数传入 * terminal_info : 终端信息 */ CA_RETURN (*ca_init_module)(OUT CA_DATA *ca_data, IN const CA_TERMINAL_INFO* terminal_info); /* * 卸载本CA * * Parameter: * ca_data : CA内部数据结构 */ CA_RETURN (*ca_shutdown_module)(IN CA_DATA *ca_data); /* * 传入EADT(加密授权描述表) * * Parameter: * ca_data : CA内部数据结构 * buffer : EADT * size : buffer长度 */ CA_RETURN (*ca_send_EADT)(IN CA_DATA *ca_data, IN byte *buffer, IN int size); /* * 传入ESGBDT(ESG基本描述表) * * Parameter: * ca_data : CA内部数据结构 * buffer : ESGBDT * size : buffer长度 */ CA_RETURN (*ca_send_ESGBDT)(IN CA_DATA *ca_data, IN byte *buffer, IN int size); /* * 传入ESG,如果ESG包括在有已加扰音视频的子帧中,则通过ca_descramble接口进行传输 * * Parameter: * ca_data : CA内部数据结构 * buffer : ESG * size : buffer长度 */ CA_RETURN (*ca_send_ESG)(IN CA_DATA *ca_data, IN byte *buffer, IN int size); /* * 传入EMM(授权管理信息) * * Parameter: * ca_data : CA内部数据结构 * buffer : EMM复用子帧 * size : buffer长度 */ CA_RETURN (*ca_send_EMM)(IN CA_DATA *ca_data, IN byte *buffer, IN int size); /* * 传入ECM(授权控制信息),如果ECM包含在有已加扰音视频的子帧中,则通过ca_descramble接口进行传输 * * Parameter: * ca_data : CA内部数据结构 * buffer : ECM * size : buffer长度 */ CA_RETURN (*ca_send_ECM)(IN CA_DATA *ca_data, IN byte *buffer, IN int size); /* * 解扰子帧,会改变单元长度和单元内容及对应crc,如果子帧数据段包括ECM/ESG等数据,则不改变原有数据段,只从中获取需要的信息 * * Parameter: * ca_data : CA内部数据结构 * ca : 解扰子帧相关数据 * ibuffer : 加扰的子帧 * isize : ibuffer长度 * obuffer : 解扰后子帧buffer,长度为2*isize * osize : 解扰后子帧实际长度 */ CA_RETURN (*ca_descramble)(IN CA_DATA *ca_data, IN CONDITIONAL_ACCESS *ca, IN byte *ibuffer, IN int isize, OUT byte *obuffer, OUT int *osize); /* * 获取CA状态 * * Parameter: * status : CA当前状态,可以在其他调用后使用,来查询CA状态 */ CA_RETURN (*ca_get_status)(OUT CA_MODULE_STATUS *status);} CA_MODULE_OPERATIONS;/** 获取CA_MODULE_OPERATIONS** Parameter:* CA_MODULE_OPERATIONS : CA操作列表,如果某个函数指针为NULL,则表示不支持该操作*/EXPRORT_API void ca_module(OUT CA_MODULE_OPERATIONS *module);#ifdef __cplusplus}#endif#endif // _ZTE_CA_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -