📄 dvb_ca.c
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <cyg/io/io.h>#include <cyg/hal/types.h>#include <cyg/infra/diag.h>#include <cyg/kernel/kapi.h>#include "custom.h"#include "kinf.h"#include "dvb_ca.h"#include "DVB_CAEcm.h"#include "DVB_CAEmm.h"#include "DVB_CADb.h"#include "DVB_CALogo.h"#include "DVB_CAService.h"#include "message_id.h"#include "mbuf_ext_data.h"#include "LogicEncryptCard.h"static UINT8 g_ucCaThreadState = CA_IDLE;static cyg_handle_t ca_thread;static cyg_thread ca_thrdObject;static UINT8 g_ucCaStack[4096];static cyg_mutex_t g_CaLock;static void DVB_CAThread(cyg_addrword_t data);void DVB_CACardParse(void);void DVB_CAInit(void){ memset(g_ucCaStack,0x0,4096); cyg_mutex_init(&g_CaLock); g_ucCaThreadState = CA_POLLING; DVB_CADB_Init(); DVB_CAService_Init(); DVB_CAECM_Init(); DVB_CAEMM_Init(); DVB_CALogo_Init(); SIEMENS_LogicEncryptCard_Init(); cyg_thread_create(4, DVB_CAThread, (cyg_addrword_t)0, "CAThread", (void *)g_ucCaStack, 4096, &ca_thread, &ca_thrdObject); cyg_thread_resume(ca_thread); }void DVB_CASetState(UINT8 ucState){ cyg_mutex_lock(&g_CaLock); g_ucCaThreadState = ucState; cyg_mutex_unlock(&g_CaLock);}static void DVB_CAThread(cyg_addrword_t data){ while(1) { cyg_mutex_lock(&g_CaLock); switch(g_ucCaThreadState) { case CA_POLLING: DVB_CAECM_Polling(); DVB_CAEMM_Polling(); break; case CA_IDLE: default: break; } DVB_CACardParse(); cyg_mutex_unlock(&g_CaLock); cyg_thread_delay(1); }}static INT8 gs_cardInsert = -1; static UINT32 g_uiTimes = 0;static UINT8 g_ucCardInit = 0;#if (SMART_CARD == SLE4442) #define DEFAULT_RESET_DATA 0x911013A2#elif(SMART_CARD == SLE4428) #define DEFAULT_RESET_DATA 0x91102392#endifUINT8 DVB_CACardGetState(void){ return g_ucCardInit;}void DVB_CACardParse(void){ UINT8 ucCardState = 0; UINT32 u32Data = 0; g_uiTimes++; if(g_uiTimes % 50 != 0) return; ucCardState = SIEMENS_LogicEncryptCard_State(); if(ucCardState != gs_cardInsert) { if(ucCardState) { SIEMENS_LogicEncryptCard_SetVccb(0); SIEMENS_LogicEncryptCard_Reset((unsigned char*)&u32Data); if(DEFAULT_RESET_DATA == u32Data) g_ucCardInit = 1; else g_ucCardInit = 0; ecos_printf("ucCardState:%01x\n",ucCardState); ecos_printf("u32Data:%08x\n",u32Data); ecos_printf("g_ucCardInit:%01x\n",g_ucCardInit); main_prog_msg_t stMsg; UINT8 ucMessage = CA_CARD_PRESS; stMsg.u8MsgID = DVB_MODULE_ID; stMsg.u8SubModID = CA_UI_ID; stMsg.u16FuncID = CA_MESSAGE; stMsg.pData = (void *)&ucMessage; DVB_SendBackMsg(&stMsg, 1); } else { SIEMENS_LogicEncryptCard_SetVccb(1); g_ucCardInit = 0; } gs_cardInsert = ucCardState; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -