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

📄 drm_arch.c

📁 SAMSUNG 5009的源代码
💻 C
字号:
/******************************************************************************
 *   Filename    : DRM_Arch.c
 *   Start       : 2006.04.20
 *   By          : HeeSangPark/Hojune Byun
 *   Contact     : 
 *   Description : 
 ******************************************************************************
 */ 
 
/******************************************************************************
 *   Description                                                                *
 *****************************************************************************/
/*
// $Header: /Mux_Demux_SDK/libDrmDecrypt/src/DrmLocal.c 6     8/15/03 4:13p Wiley $
// Copyright (c) DivXNetworks, Inc. http://www.divxnetworks.com
// All rights reserved.
//
// This software is the confidential and proprietary information of DivXNetworks
// Inc. ("Confidential Information").  You shall not disclose such Confidential
// Information and shall use it only in accordance with the terms of the license
// agreement you entered into with DivXNetworks, Inc.
*/

#include <string.h>  /* strcmp */
#include <time.h>    /* clock */
#include "Basic_typedefs.h"
#include "CUSTOM/Custom_option.h"
#include "OS/OS_abstract.h"
#include "API/SH_types.h"
#include "API/SH_api.h"
#include "API/SH_iAD_api.h"
#include "API/SH_BM_api.h"

#include "API/HAPI/SH_capability.h"

#include "DRIVER/I2C/I2C_api.h"
#include "DRIVER/FLASH/Flash_api.h"

#if _APP_CAP_FUNC_DIVX_DRM //azureming@060627

/******************************************************************************
 * extern variables  
 *****************************************************************************/
#if	_APP_CAP_PERI_EEPROM_BUF_MEM
extern volatile UCHAR gEeprom_dump[EEPROM_SIZE];
#endif
extern SysSema_t	gSema_eeprom;


UCHAR	Drm_GetRandomValue(void)
{
	UCHAR	result;
	
	result = (UCHAR)(((*(volatile UINT *) (0x3C700034)) * 0x53) & 0x000000FF);	
	
	return		result;
}


/******************************************************************************
 *  Function name 	: SaveDrmInformation
 *  Arguments     	: DrmPackedMemory - 48 bytes char array
 *  Return        	: void
 *  By            	: Sung Hwa Kang
 *  Description   	: DRM eeprom writing API
 ******************************************************************************/
VOID _DRM_SaveDrmInformation (char * memoryPacked, int size )
{
#if (!_APP_CAP_PERI_DRM_USE_FLASH_ONLY)
	UINT	i;
#endif	

	if (memoryPacked == NULL)
		return;
#if _APP_CAP_PERI_DRM_USE_FLASH_ONLY
	/* Copy to gEeprom_dump. size is 48 bytes */
	memcpy ((BYTE1*)&gEeprom_dump[EEPROM_DUMP_ADDR_DRM+4], 
		(BYTE1 *)memoryPacked, EEPROM_DUMP_NUM_DRM*0x10);

	SysGetSema( &gSema_eeprom, SYS_WAIT, 0 );

	gEeprom_dump[EEPROM_DUMP_ADDR_DRM] = 0x5A;
	gEeprom_dump[EEPROM_DUMP_ADDR_DRM+1] = 0x5A;
	gEeprom_dump[EEPROM_DUMP_ADDR_DRM+2] = 0x5A;
	gEeprom_dump[EEPROM_DUMP_ADDR_DRM+3] = 0x5A;	
	FLASH_writeEepromImage((UINT *)&gEeprom_dump[EEPROM_DUMP_ADDR_DRM], size+4);
	SysReleaseSema( &gSema_eeprom, 0 );	
#else //_APP_CAP_PERI_DRM_USE_FLASH_ONLY
#if (_APP_CAP_PERI_EEPROM_BUF_MEM)
	/* Copy to gEeprom_dump. size is 48 bytes */
	memcpy ((BYTE1*)&gEeprom_dump[EEPROM_DUMP_ADDR_DRM], 
		(BYTE1 *)memoryPacked, EEPROM_DUMP_NUM_DRM*0x10);

	//SH_writeEepromFromBuffer();

	for( i = 0; i < EEPROM_DUMP_NUM_DRM*0x10; i++ )
	{
		SH_writeDrmEepromByte(ROM_ADDR_DIVX_DRM+i, gEeprom_dump[EEPROM_DUMP_ADDR_DRM + i]);
	}
	
	SysPrintf("\n>> Saving DRM information is completed");
#else
	for( i = 0; i < EEPROM_DUMP_NUM_DRM*0x10; i++ )
	{
		SH_writeEepromByte(ROM_ADDR_DIVX_DRM+i, memoryPacked[i]);
	}
#endif
#endif //_APP_CAP_PERI_DRM_USE_FLASH_ONLY
}

/******************************************************************************
 *  Function name 	: LoadDrmInformation
 *  Arguments     	: DrmPackedMemory - 48 bytes char array pointer
 *  Return        	: void
 *  By            	: Sung Hwa Kang
 *  Description   	: DRM eeprom Reading API
 ******************************************************************************/
VOID _DRM_LoadDrmInformation(char *memoryPacked,int size )
{
#if ((_APP_CAP_PERI_DRM_USE_FLASH_ONLY) || (!_APP_CAP_PERI_EEPROM_BUF_MEM))
	UINT	i;
#endif	

	if (memoryPacked == NULL)
		return;
#if _APP_CAP_PERI_DRM_USE_FLASH_ONLY

	SysGetSema( &gSema_eeprom, SYS_WAIT, 0 );

	if( FLASH_readEepromImage((UCHAR *)&gEeprom_dump[EEPROM_DUMP_ADDR_DRM], size+4) == FALSE )
	{
		FLASH_eraseOneSector((USHORT *)FLASH_ADDR_EEPROM_1);
		/*FLASH_ADDR_EEPROM_0 is used for capture logo,wanglin 20060616*/
		//FLASH_eraseOneSector((USHORT *)FLASH_ADDR_EEPROM_0);	
	}

	SysReleaseSema( &gSema_eeprom, 0 );

	for( i = 0; i < EEPROM_DUMP_NUM_DRM*0x10; i++ )
	{
		memoryPacked[i] = gEeprom_dump[ROM_ADDR_DIVX_DRM+4+i];
	}
	
#else //_APP_CAP_PERI_DRM_USE_FLASH_ONLY
#if (_APP_CAP_PERI_EEPROM_BUF_MEM)
	/* Copy to local variable. size is 48 bytes */
	memcpy (memoryPacked, (BYTE1*)&gEeprom_dump[EEPROM_DUMP_ADDR_DRM]
		,EEPROM_DUMP_NUM_DRM*0x10);
#else
	for( i = 0; i < EEPROM_DUMP_NUM_DRM*0x10; i++ )
	{
		memoryPacked[i] =SH_readEepromByte(ROM_ADDR_DIVX_DRM+i);
	}
#endif
#endif //_APP_CAP_PERI_DRM_USE_FLASH_ONLY
}
/* >>> @: 5010.joe.kang 051028 */

#endif //#if _APP_CAP_FUNC_DIVX_DRM //azureming@060627

⌨️ 快捷键说明

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