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

📄 cprm_test.c

📁 GM8120 linux driver.
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************** Copyright  Faraday Technology Corp 2002-2003.  All rights reserved.      **--------------------------------------------------------------------------** Name:CPRM_test.c                                                         ** Description: CPRM test program                                           ** Author: W.D.Shih                                                         *****************************************************************************/#include <stdlib.h>#include <stdio.h>#include <time.h>#include "fLib.h"#include "filectrl.h"#include "command.h"#include "DMA.h"#include "sd.h"#include "cprm.h"#include "audio.h"SDCardStruct fLib_SDCard;SDCardStruct fLib_ProtectAreaCard;CPRMFileStruct fLib_CPRMAudio;BOOL CPRM_Order_Change;extern UINT32 *Buf;extern INT8 SecretConstant[256];UINT32 DirCmd(CommandTableStruct_T *CmdTable);UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable);UINT32 DeleteCmd(CommandTableStruct_T *CmdTable);UINT32 ProtectAreaTestCmd(CommandTableStruct_T *CmdTable);UINT32 TstDeviceMKBCmd(CommandTableStruct_T *CmdTable);UINT32 TstSimpleMKBCmd(CommandTableStruct_T *CmdTable);UINT32 TstAlgorithmCmd(CommandTableStruct_T *CmdTable);UINT32 EncryptFileCmd(CommandTableStruct_T *CmdTable);UINT32 DecryptFileCmd(CommandTableStruct_T *CmdTable);UINT32 TstPLMCmd(CommandTableStruct_T *CmdTable);UINT32 TstTKMCmd(CommandTableStruct_T *CmdTable);CommandTableStruct_T SD_CmdTable[] ={	{{"dir", NULL,}, "dir [directory/file]\n",		0, 0, 1, 0, 0, 0, DirCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[directory/file] - directory or file\n"}, 		},	},	{{"cd", NULL,}, "cd [directory]\n",		0, 0, 1, 1, 0, 0, ChangeDirCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[directory] - directory\n"}, 		},	},		{{"remove", "del", NULL,}, "remove/del [name] [-d]\n",		0, 0, 1, 1, 1, 0, DeleteCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[name] - file or directory name\n"}, 		},		{			{"-d", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-d] - [name] is directory\n"}, 		},	},		{{"rwtest", NULL,}, "rwtest \n",		0, 0, 1, 0, 0, 0, ProtectAreaTestCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Protect Area Read/Write MultiBlock Test\n"}, 		},	},		{{"tstdev", NULL,}, "tstdev \n",		0, 0, 1, 0, 0, 0, TstDeviceMKBCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Test 4C device-test patterns\n"}, 		},	},		{{"tstsim", NULL,}, "tstsim \n",		0, 0, 1, 0, 0, 0, TstSimpleMKBCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Test 4C simple-test patterns\n"}, 		},	},		{{"tste", NULL,}, "tste \n",		0, 0, 1, 0, 0, 0, TstAlgorithmCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Test CPRM Algorithm\n"}, 		},	},		{{"en", "encrypt", NULL,}, "en/encrypt [name]\n",		0, 0, 1, 1, 0, 0, EncryptFileCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[name] - file\n"}, 		},	},			{{"de", "decrypt", NULL,}, "de/decrypt [name]\n",		0, 0, 1, 1, 0, 0, DecryptFileCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "[name] - file\n"}, 		},	},			{{"tstplm", NULL,}, "tstplm \n",		0, 0, 1, 0, 0, 0, TstPLMCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Parsing PLM file\n"}, 		},	},		{{"tsttkm", NULL,}, "tsttkm \n",		0, 0, 1, 0, 0, 0, TstTKMCmd, 0, 0, 		{			{IS_STR, NULL, 0, FALSE, "Parsing TKM file\n"}, 		},	},		{NULL,	},};#define SD_DMA_CHANNEL		2int main(int argc, int *argv[]){    char InputBuf[80];	fLib_CloseInt(IRQ_SDC);   	if (!fLib_ConnectInt(IRQ_SDC, fLib_SDCntrInterruptHandler))		return FALSE;  	fLib_SetIntTrig(IRQ_SDC,LEVEL,H_ACTIVE);		fLib_EnableInt(IRQ_SDC);	 	fLib_InitDMA(FALSE, FALSE, 1 << SD_DMA_CHANNEL);	#ifdef Debug_CPRM_Message		printf("Init User Area Disk C!!!\n");#endif	#ifndef AUTO_CBC_DMAmode	if(!fLib_SDHostInterfaceInit(&fLib_SDCard, CPE_SD_BASE, FALSE, SD_DMA_CHANNEL, 'C', SYS_CLK/2))#else		if(!fLib_SDHostInterfaceInit(&fLib_SDCard, CPE_SD_BASE, TRUE, SD_DMA_CHANNEL, 'C', SYS_CLK/2))#endif		{		printf("Can not found SD or MMC card!!!\n");		return FALSE;	}		#ifndef license_4C_Test		if(!fLib_CPRMInit(&fLib_SDCard))	{		printf("Can not init CPRM!!!\n");		return FALSE;	}				#else		#ifdef Debug_CPRM_Message		printf("Init User Area Disk D!!!\n");		#endif		if(!fLib_ProtectedAreaInit(&fLib_SDCard, &fLib_ProtectAreaCard, 'D'))	{		printf("Can not found SD CPRM Protected Area!!!\n");		return FALSE;	}		if(!fLib_ReadTKMG(&fLib_ProtectAreaCard, &fLib_CPRMAudio))	{		printf("Can not found SD CPRM Protected Area!!!\n");		return FALSE;	}		// Change to Disk C	fLib_ChangeDirectory("C:");	#endif		fLib_InsertCommand(SD_CmdTable);	fLib_InitUserSymbol(NULL);		while(1)	{		printf("SD>>>\n");		gets(InputBuf);				fLib_ExecuteCommand(InputBuf);	}	    return TRUE;}UINT32 DirCmd(CommandTableStruct_T *CmdTable){	UINT32 MsgStr;		MsgStr = malloc(0x1000);	if(!fLib_DirDirectory((CmdTable->Argu[0].IsSet ? CmdTable->Argu[0].Str : NULL), MsgStr))	{		free(MsgStr);		return ERROR_COMMAND;	}	printf(MsgStr);	free(MsgStr);	return OK_COMMAND;}UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable){	if(fLib_ChangeDirectory(CmdTable->Argu[0].Str))	{		printf("Change to %s directory OK!!!\n", CmdTable->Argu[0].Str);		return OK_COMMAND;	}	else	{		printf("Change to %s directory error!!!\n", CmdTable->Argu[0].Str);	}	return ERROR_COMMAND;}UINT32 DeleteCmd(CommandTableStruct_T *CmdTable){	if (CmdTable->Opt[0].IsSet) {		if (fLib_DeleteDirectory(CmdTable->Argu[0].Str)) {			printf("Del %s directory OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}	else {		if ( fLib_DeleteFile(CmdTable->Argu[0].Str, sizeof(CmdTable->Argu[0].Str)) != -1) {					printf("Del %s file OK!!!\n", CmdTable->Argu[0].Str);			return OK_COMMAND;		}	}		printf("Del %s directory or file error!!!\n", CmdTable->Argu[0].Str);	return ERROR_COMMAND;}UINT32 ProtectAreaTestCmd(CommandTableStruct_T *CmdTable){	UINT32 *ABuf, *BBuf, *CBuf;	UINT32 StartBlk, BlkCount, Sector_Length, i;	BOOL flag = TRUE;		StartBlk = 4;	BlkCount = 1;	Sector_Length = 512;			//Backup Buffer Data	ABuf = malloc(BlkCount * Sector_Length);	CBuf = malloc(BlkCount * Sector_Length);	   	for (i = 0; i < BlkCount * Sector_Length / 4; i++)    		*(CBuf + i) = *(ABuf + i); 		// ABuf will be changed when we call it.	if(!fLib_CPRMWriteProtectArea(&fLib_ProtectAreaCard, StartBlk, BlkCount, Sector_Length, ABuf))	{		free(ABuf);		free(CBuf);		return ERROR_COMMAND;	}			BBuf = malloc(BlkCount * Sector_Length);		if(!fLib_CPRMReadProtectArea(&fLib_ProtectAreaCard, StartBlk, BlkCount, Sector_Length, BBuf))	{		free(ABuf);		free(BBuf);			free(CBuf);		return ERROR_COMMAND;	}		   	for (i = 0; i < BlkCount * Sector_Length / 4; i++)    	{                	   		if(*(CBuf + i) != *(BBuf + i))    		{      		printf("Compare Fail!, Addr = %0.3x, C = %0.8x, F = %0.8x\n",i*4, *(CBuf + i), *(BBuf + i));       		flag = FALSE;   		}	 	                	  	}  	  	if(!flag)	  		printf("Protected Area Read/Write Multi Block Verification fail!\n");	  	else  		printf("Protected Area Read/Write Multi Block Verification Pass!\n");	  		free(ABuf);	free(BBuf);	free(CBuf);	return OK_COMMAND;}UINT32 TstDeviceMKBCmd(CommandTableStruct_T *CmdTable){	FILE *stream;	INT32 nbytes;	int length, Tmp;	UINT32 mediaKey[2];	UINT8 *BufPtr, *TmpBuf;		TmpBuf = malloc(0x10000);	//Device Test	if((stream = fopen( "c:\\device-test-mkb.bin", "rb" )) != NULL )		{		BufPtr = TmpBuf;		while(1)		{			nbytes = fread(BufPtr, 1, 4, stream);			if (nbytes > 0)			{				Tmp = *(BufPtr+1);				length = Tmp << 16;				Tmp = *(BufPtr+2);				length = length | (Tmp << 8);				Tmp = *(BufPtr+3);				length |= Tmp;	//Record Length				BufPtr += 4;				nbytes = fread(BufPtr, 1, length - 4, stream);												if (nbytes <= 0)					printf("Read File Error\n");									BufPtr = BufPtr + length - 4;		    }		    else		    	break;		    }		   					fclose( stream );     	}    else    {      	printf("File could not be opened\n" );	      	return FALSE;    }	CPRM_Process_MKB(TmpBuf, &mediaKey);	//printf("mediakey = %0.8x%0.8x\n",*(UINT32 *)mediaKey,*(UINT32 *)(mediaKey + 1));	//MKB Extension data	if((stream = fopen( "c:\\device-test-mkb-extension.bin", "rb" )) != NULL )	{		BufPtr = TmpBuf;		while(1)		{			nbytes = fread(BufPtr, 1, 4, stream);			if (nbytes > 0)			{				Tmp = *(BufPtr+1);				length = Tmp << 16;				Tmp = *(BufPtr+2);				length = length | (Tmp << 8);				Tmp = *(BufPtr+3);				length |= Tmp;	//Record Length				BufPtr += 4;				nbytes = fread(BufPtr, 1, length - 4, stream);												if (nbytes <= 0)					printf("Read File Error\n");									BufPtr = BufPtr + length - 4;		    }		    else		    	break;		    }		   					fclose( stream );		        	}    else      	printf("File could not be opened\n" );	      	      	        	CPRM_Process_MKB(TmpBuf, &mediaKey);	printf("mediakey = %0.8x%0.8x\n",*(UINT32 *)mediaKey,*(UINT32 *)(mediaKey + 1));	free(TmpBuf);		return OK_COMMAND;}UINT32 TstSimpleMKBCmd(CommandTableStruct_T *CmdTable){	FILE *stream;	INT32 nbytes;	int length, Tmp;	UINT64 mediaKey;	UINT8 *BufPtr, *TmpBuf;		TmpBuf = malloc(0x10000);	//Simple Test#if 1		if((stream = fopen( "c:\\simple-test-2b-mkb.bin", "rb" )) != NULL )#else		if((stream = fopen( "c:\\simple-test-3b-mkb.bin", "rb" )) != NULL )#endif		{		BufPtr = TmpBuf;		while(1)		{			nbytes = fread(BufPtr, 1, 4, stream);			if (nbytes > 0)			{				Tmp = *(BufPtr+1);				length = Tmp << 16;				Tmp = *(BufPtr+2);				length = length | (Tmp << 8);				Tmp = *(BufPtr+3);				length |= Tmp;	//Record Length				BufPtr += 4;				nbytes = fread(BufPtr, 1, length - 4, stream);												if (nbytes <= 0)					printf("Read File Error\n");

⌨️ 快捷键说明

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