📄 drm_arch.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 + -