⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvb_cadb.c

📁 我国有线电视条件接受标准目前还没有统一
💻 C
📖 第 1 页 / 共 2 页
字号:
			return CA_DB_UNKNOW_CMD;	}		return CA_DB_SUCCESS;}int DVB_CADB_Set(EN_CA_DB_CMD enCmd, UINT32 uiValue){	#if defined(SDT_CA_40)	int iRepeatTimes;	UINT32 uiTempValue = 0xFFFF;	#endif	switch(enCmd)	{		case CA_DB_CMD_DATE:			if(g_stCaDb.usDate == uiValue)				break;			#if defined(SDT_CA_40)			uiTempValue = 0xFFFF;			for(iRepeatTimes = 0; iRepeatTimes < DATE_REPEAT_TIMES; iRepeatTimes++)			{				DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET + iRepeatTimes * sizeof(UINT16), (BYTE *)(&uiTempValue), sizeof(UINT16));				if(uiTempValue == 0xFFFF)					break;				}			if(iRepeatTimes == 0)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET, (BYTE *)(&uiValue), sizeof(UINT16));			else if((g_stCaDb.usDate & uiValue) == uiValue)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET + (iRepeatTimes - 1) * sizeof(UINT16), (BYTE *)(&uiValue), sizeof(UINT16));			else if(iRepeatTimes < DATE_REPEAT_TIMES)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET + iRepeatTimes  * sizeof(UINT16), (BYTE *)(&uiValue), sizeof(UINT16));			else				g_iRefresh = 1;			#endif			g_stCaDb.usDate = uiValue;			break;		case CA_DB_CMD_TIME:			if(g_stCaDb.usTime == uiValue)				break;			#if defined(SDT_CA_40)			uiTempValue = 0xFFFF;			for(iRepeatTimes = 0; iRepeatTimes < TIME_REPEAT_TIMES; iRepeatTimes++)			{				DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET + iRepeatTimes * sizeof(UINT16), (BYTE *)(&uiTempValue), sizeof(UINT16));				if(uiTempValue == 0xFFFF)					break;				}			if(iRepeatTimes == 0)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET, (BYTE *)(&uiValue), sizeof(UINT16));			else if((g_stCaDb.usTime & uiValue) == uiValue)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET + (iRepeatTimes - 1) * sizeof(UINT16), (BYTE *)(&uiValue), sizeof(UINT16));			else if(iRepeatTimes < TIME_REPEAT_TIMES)				DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET + iRepeatTimes  * sizeof(UINT16), (BYTE *)(&uiValue), sizeof(UINT16));			else				g_iRefresh = 1;			#endif			g_stCaDb.usTime = uiValue;			break;		default:			return CA_DB_UNKNOW_CMD;	}		return CA_DB_SUCCESS;}static void DVB_CADB_Save(void){	int iRepeatTimes;	int iPos = 0;	DVB_CADB_FlashEarse(DVB_CADB_ADDRESS, DVB_CADB_FLASH_SIZE);ca_printf("DVB_CADB_Save\n");	DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_HEAD_OFFSET, (BYTE *)(&g_stCaDb.uiMagic), DVB_CADB_HEAD_SIZE);	#if defined(SDT_CA_40)	DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET, (BYTE *)(&g_stCaDb.usDate), sizeof(UINT16));	DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET, (BYTE *)(&g_stCaDb.usTime), sizeof(UINT16));	DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_MSG_ID_OFFSET, (BYTE *)((g_stCaDb.ausMsgID)), sizeof(UINT16) * g_stCaDb.usMsgNum);		#elif defined(SDT_CA_50)		iPos = 0;	for(iRepeatTimes = 0; iRepeatTimes < MSG_ID_REPEAT_TIMES; iRepeatTimes++)	{		if(g_stCaDb.astMsg[iRepeatTimes].usUsedFlag != 0x00 && g_stCaDb.astMsg[iRepeatTimes].usUsedFlag == 0xFF)		{			DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_MSG_OFFSET + iPos * sizeof(ST_CA_MSG),				(BYTE *)(&(g_stCaDb.astMsg[iRepeatTimes])), sizeof(ST_CA_MSG));			iPos++;		}	}	DVB_CADB_LoadMsg();	iPos = 0;	for(iRepeatTimes = 0; iRepeatTimes < MSG_ID_REPEAT_TIMES*2; iRepeatTimes++)	{		if(g_stCaDb.ausDelMsgID[iRepeatTimes] != 0xFFFF)		{			DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DELMSG_OFFSET + iPos * sizeof(UINT16),				(BYTE *)(&(g_stCaDb.ausDelMsgID[iRepeatTimes])), sizeof(UINT16));			iPos++;		}	}	DVB_CADB_LoadDelMsgID();	#endif		iPos = 0;	for(iRepeatTimes = 0; iRepeatTimes < MAIL_REPEAT_TIMES; iRepeatTimes++)	{		if(g_stCaDb.astMail[iRepeatTimes].usUsedFlag == 0x03 || g_stCaDb.astMail[iRepeatTimes].usUsedFlag == 0x01)		{			DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_MAIL_OFFSET + iPos * sizeof(ST_CA_MAIL),				(BYTE *)(&(g_stCaDb.astMail[iRepeatTimes])), sizeof(ST_CA_MAIL));			iPos++;		}	}	DVB_CADB_LoadMail();	iPos = 0;	for(iRepeatTimes = 0; iRepeatTimes < MAIL_REPEAT_TIMES*2; iRepeatTimes++)	{		if(g_stCaDb.ausDelMailID[iRepeatTimes] != 0xFFFF)		{			DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DELMAIL_OFFSET + iPos * sizeof(UINT16),				(BYTE *)(&(g_stCaDb.ausDelMailID[iRepeatTimes])), sizeof(UINT16));			iPos++;		}	}	DVB_CADB_LoadDelMailID();	g_iRefresh = 0;}static int DVB_CADB_AddDelMailID(UINT16 usMailID){	int iRepeatTimes;	for(iRepeatTimes = 0; iRepeatTimes < MAIL_REPEAT_TIMES * 2; iRepeatTimes++)	{		if(g_stCaDb.ausDelMailID[iRepeatTimes] == 0xFFFF)			break;			}	if(iRepeatTimes == MAIL_REPEAT_TIMES* 2)	{		return CA_DB_FULL;	}	else	{		g_stCaDb.ausDelMailID[iRepeatTimes] = usMailID;		DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_DELMAIL_OFFSET + iRepeatTimes * sizeof(UINT16), (BYTE *)(&usMailID), sizeof(UINT16));		return CA_DB_SUCCESS;	}}static int DVB_CADB_Load(void){	int iResult = CA_DB_SUCCESS;	int iReturn;		memset((UINT8 *)(&g_stCaDb), 0x0, sizeof(ST_CA_DB));	//read magic code	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_HEAD_OFFSET, (BYTE *)(&g_stCaDb.uiMagic), DVB_CADB_HEAD_SIZE);	//magic code is error	if(g_stCaDb.uiMagic != DVB_CA_MAIGC_CODE)	{		ca_printf("Magic code ERRO!\n");		DVB_CADB_FlashEarse(DVB_CADB_ADDRESS, DVB_CADB_FLASH_SIZE);		g_stCaDb.uiMagic = DVB_CA_MAIGC_CODE;		DVB_CADB_FlashWrite(DVB_CADB_ADDRESS + DVB_CADB_HEAD_OFFSET, (BYTE *)(&g_stCaDb.uiMagic), DVB_CADB_HEAD_SIZE);	}	#if defined(SDT_CA_40)		iReturn = DVB_CADB_LoadDate();	ca_printf("DVB_CADB_LoadDate:%d:%x\n",iReturn,g_stCaDb.usDate);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;	iReturn = DVB_CADB_LoadTime();	ca_printf("DVB_CADB_LoadTime:%d:%x\n",iReturn,g_stCaDb.usTime);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;		iReturn = DVB_CADB_LoadMsgID();	ca_printf("DVB_CADB_LoadMsgID:%d:%x\n",iReturn,g_stCaDb.usMsgNum);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;			#elif defined(SDT_CA_50)		iReturn = DVB_CADB_LoadMsg();	ca_printf("DVB_CADB_LoadMsg:%d:%x\n",iReturn,g_stCaDb.usMsgNum);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;		iReturn = DVB_CADB_LoadDelMsgID();	ca_printf("DVB_CADB_LoadDelMsgID:%d:%x\n",iReturn,g_stCaDb.usDelMsgNum);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;		#endif		iReturn = DVB_CADB_LoadMail();	ca_printf("DVB_CADB_LoadMail:%d:%x\n",iReturn,g_stCaDb.usMailNum);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;	iReturn = DVB_CADB_LoadDelMailID();	ca_printf("DVB_CADB_LoadDelMailID:%d:%x\n",iReturn,g_stCaDb.usDelMailNum);	if(iReturn != CA_DB_SUCCESS)		iResult = iReturn;	return iResult;}static int DVB_CADB_LoadDelMailID(void){	int iRepeatTimes;	int iEndPos = -1;	int iResult = CA_DB_SUCCESS;		memset((UINT8 *)(g_stCaDb.ausDelMailID), 0xFF, MAIL_REPEAT_TIMES*2* sizeof(UINT16));	g_stCaDb.usDelMailNum = 0;	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_DELMAIL_OFFSET, 		(BYTE *)((g_stCaDb.ausDelMailID)), sizeof(UINT16) * MAIL_REPEAT_TIMES * 2);	for(iRepeatTimes = (MAIL_REPEAT_TIMES*2 - 1); iRepeatTimes >= 0; iRepeatTimes--)	{		if(g_stCaDb.ausDelMailID[iRepeatTimes] != 0xFFFF)		{			if(iEndPos == -1)				iEndPos = iRepeatTimes;			if(g_stCaDb.usDelMailNum < MAIL_REPEAT_TIMES)				g_stCaDb.usDelMailNum++;			else			{				g_stCaDb.ausDelMailID[iRepeatTimes] = 0xFFFF;				iResult = CA_DB_REFRESH;			}		}	}	if(iEndPos >= 0 && iEndPos > (((MAIL_REPEAT_TIMES) >> 1) + MAIL_REPEAT_TIMES))		iResult = CA_DB_REFRESH;	return iResult;}static int DVB_CADB_LoadMail(void){	int iRepeatTimes;	int iEndPos = -1;	int iResult = CA_DB_SUCCESS;		memset((UINT8 *)(g_stCaDb.astMail), 0xFF, MAIL_REPEAT_TIMES * sizeof(ST_CA_MAIL));	g_stCaDb.usMailNum = 0;	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_MAIL_OFFSET , 			(BYTE *)(&(g_stCaDb.astMail)), sizeof(ST_CA_MAIL) * MAIL_REPEAT_TIMES);	for(iRepeatTimes = MAIL_REPEAT_TIMES - 1; iRepeatTimes >= 0; iRepeatTimes--)	{		if(g_stCaDb.astMail[iRepeatTimes].usMailID != 0xFFFF && g_stCaDb.astMail[iRepeatTimes].usUsedFlag)		{			if(iEndPos == -1)				iEndPos = iRepeatTimes;			if(g_stCaDb.usMailNum < MAX_MAIL)				g_stCaDb.usMailNum++;			else			{				g_stCaDb.astMail[iRepeatTimes].usUsedFlag = 0;				iResult = CA_DB_REFRESH;			}		}	}	if(iEndPos >= 0 && iEndPos > (((MAIL_REPEAT_TIMES - MAX_MAIL) >> 1) + MAX_MAIL))		iResult = CA_DB_REFRESH;	return iResult;}#if defined(SDT_CA_40)static int DVB_CADB_LoadMsgID(void){	int iRepeatTimes;	int iResult = CA_DB_SUCCESS;		memset((UINT8 *)(g_stCaDb.ausMsgID), 0xFF, MAX_MSG_ID * sizeof(UINT16));	for(iRepeatTimes = (MSG_ID_REPEAT_TIMES - 1); iRepeatTimes >= (MSG_ID_REPEAT_TIMES - MAX_MSG_ID); iRepeatTimes--)	{		UINT16 usMsgID = 0xFFFF;		DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_MSG_ID_OFFSET+ iRepeatTimes * sizeof(UINT16), (BYTE *)(&usMsgID), sizeof(UINT16));		if(usMsgID != 0xFFFF)			break;			}	if(iRepeatTimes > (((MSG_ID_REPEAT_TIMES - MAX_MSG_ID) >> 1) + MAX_MSG_ID))		iResult = CA_DB_REFRESH;	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_MSG_ID_OFFSET+ (iRepeatTimes + 1 - MAX_MSG_ID)* sizeof(UINT16), 		(BYTE *)((g_stCaDb.ausMsgID)), sizeof(UINT16) * MAX_MSG_ID);	g_stCaDb.usMsgNum = 0;	for(iRepeatTimes = 0; iRepeatTimes < MAX_MSG_ID; iRepeatTimes++)	{		if(g_stCaDb.ausMsgID[iRepeatTimes] == 0xFFFF)			break;		g_stCaDb.usMsgNum++;	}	return iResult;}static int DVB_CADB_LoadTime(void){	int iRepeatTimes;	int iResult = CA_DB_SUCCESS;		g_stCaDb.usTime = 0xFFFF;	for(iRepeatTimes = 0; iRepeatTimes < TIME_REPEAT_TIMES; iRepeatTimes++)	{		UINT16 usTime = 0xFFFF;		DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_TIME_OFFSET+ iRepeatTimes * sizeof(UINT16), (BYTE *)(&usTime), sizeof(UINT16));		if(usTime == 0xFFFF)			break;		g_stCaDb.usTime = usTime;				}	if(iRepeatTimes > (TIME_REPEAT_TIMES >> 1))		iResult = CA_DB_REFRESH;	return iResult;}static int DVB_CADB_LoadDate(void){	int iRepeatTimes;	int iResult = CA_DB_SUCCESS;		g_stCaDb.usDate = 0xFFFF;	for(iRepeatTimes = 0; iRepeatTimes < DATE_REPEAT_TIMES; iRepeatTimes++)	{		UINT16 usDate = 0xFFFF;		DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_DATE_OFFSET + iRepeatTimes * sizeof(UINT16), (BYTE *)(&usDate), sizeof(UINT16));		if(usDate == 0xFFFF)			break;		g_stCaDb.usDate = usDate;				}			if(iRepeatTimes > (DATE_REPEAT_TIMES >> 1))		iResult = CA_DB_REFRESH;		return iResult;}#elif defined(SDT_CA_50)static int DVB_CADB_LoadMsg(void){	int iRepeatTimes;	int iEndPos = -1;	int iResult = CA_DB_SUCCESS;		memset((UINT8 *)(g_stCaDb.astMsg), 0xFF, MSG_ID_REPEAT_TIMES * sizeof(ST_CA_MSG));	g_stCaDb.usMsgNum = 0;	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_MSG_OFFSET , 			(BYTE *)(&(g_stCaDb.astMsg)), sizeof(ST_CA_MSG) * MSG_ID_REPEAT_TIMES);	for(iRepeatTimes = MSG_ID_REPEAT_TIMES - 1; iRepeatTimes >= 0; iRepeatTimes--)	{		if(g_stCaDb.astMsg[iRepeatTimes].usMsgID != 0xFFFF && g_stCaDb.astMsg[iRepeatTimes].usUsedFlag)		{			if(iEndPos == -1)				iEndPos = iRepeatTimes;			if(g_stCaDb.usMsgNum < MAX_MSG_ID)				g_stCaDb.usMsgNum++;			else			{				g_stCaDb.astMsg[iRepeatTimes].usUsedFlag = 0;				iResult = CA_DB_REFRESH;			}		}	}	if(iEndPos >= 0 && iEndPos > (((MSG_ID_REPEAT_TIMES - MAX_MSG_ID) >> 1) + MAX_MSG_ID))		iResult = CA_DB_REFRESH;	return iResult;}static int DVB_CADB_LoadDelMsgID(void){	int iRepeatTimes;	int iEndPos = -1;	int iResult = CA_DB_SUCCESS;		memset((UINT8 *)(g_stCaDb.ausDelMsgID), 0xFF, MSG_ID_REPEAT_TIMES*2* sizeof(UINT16));	g_stCaDb.usDelMsgNum = 0;	DVB_CADB_FlashRead(DVB_CADB_ADDRESS + DVB_CADB_DELMSG_OFFSET, 		(BYTE *)((g_stCaDb.ausDelMsgID)), sizeof(UINT16) * MSG_ID_REPEAT_TIMES * 2);	for(iRepeatTimes = (MSG_ID_REPEAT_TIMES*2 - 1); iRepeatTimes >= 0; iRepeatTimes--)	{		if(g_stCaDb.ausDelMsgID[iRepeatTimes] != 0xFFFF)		{			if(iEndPos == -1)				iEndPos = iRepeatTimes;			if(g_stCaDb.usDelMsgNum < MSG_ID_REPEAT_TIMES)				g_stCaDb.usDelMsgNum++;			else			{				g_stCaDb.ausDelMsgID[iRepeatTimes] = 0xFFFF;				iResult = CA_DB_REFRESH;			}		}	}	if(iEndPos >= 0 && iEndPos > (((MAIL_REPEAT_TIMES) >> 1) + MAIL_REPEAT_TIMES))		iResult = CA_DB_REFRESH;	return iResult;}#endifstatic int DVB_CADB_FlashEarse(UINT32 uiStartAdd, UINT32 iLen){	int iResult = 0;	#ifndef EEPROM_FLASH_STORE_INFO		memset((UINT8 *)(g_ucTempFlash + uiStartAdd - DVB_CADB_ADDRESS), 0xFF, iLen);	#else		iResult = FlashEraseSecRange(uiStartAdd, iLen);	#endif	return iResult;}static int DVB_CADB_FlashWrite(UINT32 iStartAddr, BYTE *pBuf, UINT32 iLen){	int iResult = 0;	#ifndef EEPROM_FLASH_STORE_INFO		memcpy((UINT8 *)(g_ucTempFlash + iStartAddr - DVB_CADB_ADDRESS), pBuf, iLen);	#else		iResult = FlashWrite(iStartAddr, pBuf,iLen);	#endif	return iResult;}static int DVB_CADB_FlashRead(UINT32 iStartAddr, BYTE *pBuf, UINT32 iLen){	int iResult = 0;	#ifndef EEPROM_FLASH_STORE_INFO		memcpy(pBuf, (UINT8 *)(g_ucTempFlash + iStartAddr - DVB_CADB_ADDRESS), iLen);	#else		iResult = FlashRead(iStartAddr, pBuf,iLen);	#endif	return iResult;}unsigned short DVB_CADB_GetDate(void){	return g_stCaDb.usDate;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -