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

📄 bytestream_hw.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*******************************************************************************
 * Filename:
 * ---------
 *	 bytestream_hw.c
 *
 * Project:
 * --------
 *  MAUI
 *
 * Description:
 * ------------
 *  Abstract file and memory data source.
 *
 * Author:
 * -------
 * -------
 *
 *==============================================================================
 * 				HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *==============================================================================
 *******************************************************************************/
#include "kal_release.h" 
#include "fat_fs.h"				/* for access file system */
#include "drm_gprot.h"
#include "bytestream_hw.h"
/* Function pointer table */

hw_bytestream_dcb_struct hw_bytestream_dcb[HW_BYTESTREAM_OWNER_NUM];

/**************************************************************

	FUNCTION NAME		: hw_bytestream_free

  	PURPOSE				: free a bytestream

	INPUT PARAMETERS	: void
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: hw_RESULT

	REMARKS				: nil

***************************************************************/
void hw_bytestream_free(kal_uint32 owner)
{
	/*
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];
	
	if(p->hw_bytestream_source_type == HW_BYTESTREAM_TYPE_FILE)
	{
		(void)DRM_close_file(p->file.p->type.file.file_handle);
	}
	else
	{
		ASSERT(p->hw_bytestream_source_type == HW_BYTESTREAM_TYPE_MEM);
	}
	*/

}



/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_byte_mem

  	PURPOSE				: get a byte from memory

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_get_byte_mem(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint8 v = (kal_uint8)p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	
	if(p->type.mem.buffer_offset <= p->type.mem.buffer_size)
	{
		return v;
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
	}
	return 0;
}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_byte_mem

  	PURPOSE				: peek a byte from memory

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_peek_byte_mem(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];
	
	if(p->type.mem.buffer_offset+1 <= p->type.mem.buffer_size)
	{
		return (kal_uint8)p->type.mem.buffer_ptr[p->type.mem.buffer_offset];
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
	}
	return 0;
}

/**************************************************************

	FUNCTION NAME		: hw_bytestream_peek_byte_n_mem

  	PURPOSE				: peek one byte after n bytes

	INPUT PARAMETERS	: int index
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_peek_byte_n_mem(kal_uint32 owner, kal_uint32 index) 
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint32 offset = p->type.mem.buffer_offset+index;
	
	if(offset+1 <= p->type.mem.buffer_size)
	{
		return (kal_uint8)p->type.mem.buffer_ptr[offset];
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
		return 0; /* Unreached */
	}
}



/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_word_mem

  	PURPOSE				: peek a word from memory

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint16

	REMARKS				: nil

***************************************************************/
kal_uint16 hw_bytestream_get_word_mem(kal_uint32 owner,hw_bytestream_endian_enum endian)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint32 byte0;
	kal_uint32 byte1;
	
	byte0 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte1 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];

	if(p->type.mem.buffer_offset <= p->type.mem.buffer_size)
	{
		if(endian == LITTLE_ENDIAN)
			return ((kal_uint16)((byte1<<8)|byte0));
		else
			return ((kal_uint16)((byte0<<8)|byte1));
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
		return 0; // Unreached
	}
}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_word_mem

  	PURPOSE				: peek a word from memory

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint16

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_3bytes_mem(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];		
	kal_uint32 byte0;
	kal_uint32 byte1;
	kal_uint32 byte2;

	byte0 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte1 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte2 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];

	if(p->type.mem.buffer_offset <= p->type.mem.buffer_size)
	{
		return ((kal_uint32)((byte2<<16)|(byte1<<8)|byte0));
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
		return 0; // Unreached
	}
}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_dword_mem

  	PURPOSE				: peek a dword from memory

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint32

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_dword_mem(kal_uint32 owner,hw_bytestream_endian_enum endian)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];		
	kal_uint32 byte0;
	kal_uint32 byte1;
	kal_uint32 byte2;
	kal_uint32 byte3;
	
	byte0 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte1 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte2 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];
	byte3 = p->type.mem.buffer_ptr[p->type.mem.buffer_offset++];	
	if(p->type.mem.buffer_offset <= p->type.mem.buffer_size)
	{
		if(endian == LITTLE_ENDIAN)
			return  ((kal_uint32)(byte3<<24))|((kal_uint32)(byte2<<16))|((kal_uint32)(byte1<<8))|(kal_uint32)(byte0);
		else
			return  ((kal_uint32)(byte0<<24))|((kal_uint32)(byte1<<16))|((kal_uint32)(byte2<<8))|(kal_uint32)(byte3);			
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
		return 0; // Unreached code
	}
}
void hw_bytestream_get_array_mem(kal_uint32 owner, kal_uint8 * array,kal_uint32 size)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	if( p->type.mem.buffer_offset + size <= p->type.mem.buffer_size)
	{
		memcpy(array,p->type.mem.buffer_ptr+p->type.mem.buffer_offset,size);
		p->type.mem.buffer_offset += size;
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
		return; // Unreached code
	}
}

/**************************************************************

	FUNCTION NAME		: hw_bytestream_is_eof_mem

  	PURPOSE				: chcek if is eof

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_bool

	REMARKS				: nil

***************************************************************/
kal_bool hw_bytestream_is_eof_mem(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	return  (kal_bool)(p->type.mem.buffer_offset >= p->type.mem.buffer_size);
}

/**************************************************************

	FUNCTION NAME		: hw_bytestream_flush_mem 

  	PURPOSE				: flush memory

	INPUT PARAMETERS	: kal_uint32 count
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: void

	REMARKS				: nil

***************************************************************/
void hw_bytestream_flush_mem(kal_uint32 owner, kal_uint32 count)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	// It allows to stop at the end of stream plus one byte
	if( (p->type.mem.buffer_offset += count) > p->type.mem.buffer_size)
		BYTESTREAM_RAISE(owner,1);
	}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_seek_mem 

  	PURPOSE				: seek memory

	INPUT PARAMETERS	: kal_int32 offset
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: void

	REMARKS				: nil

***************************************************************/
void hw_bytestream_seek_mem(kal_uint32 owner, kal_int32 offset)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	// It allows to stop at the end of stream plus one byte
	if (offset <= (kal_int32)p->type.mem.buffer_size)
	{
		p->type.mem.buffer_offset = offset;
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
	}
}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_tell_mem 

  	PURPOSE				: tell memory

	INPUT PARAMETERS	: kal_int32 offset
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_int32

	REMARKS				: nil

***************************************************************/
kal_int32 hw_bytestream_tell_mem(kal_uint32 owner, hw_bytestream_dcb_struct **info)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	

	if(info != NULL)
		*info = p;
	return p->type.mem.buffer_offset;
}


/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_size_mem 

  	PURPOSE				: get size of memory

	INPUT PARAMETERS	: kal_int32 offset
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint32

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_size_mem(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	return p->type.mem.buffer_size;
}
/**************************************************************

	FUNCTION NAME		: hw_bytestream_refill_file 

  	PURPOSE				: refill the buffer with valid data
	INPUT PARAMETERS	: void
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: nil

	REMARKS				: nil

***************************************************************/
void hw_bytestream_refill_mem(kal_uint32 owner)
{
}


//--------------------------------------------------------------//
// bytestream of file type start here
//--------------------------------------------------------------//
void hw_bytestream_buffer_load_file(kal_uint32 owner, int at_least)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	int offset;
	
	offset = p->type.file.buffer_content_size; 
	if(offset)
		memcpy(p->type.file.buffer_ptr,p->type.file.buffer_reader,offset);
	
	if((DRM_read_file(p->type.file.file_handle,
				p->type.file.buffer_ptr+offset,p->type.file.buffer_size-offset,
				(UINT*)&p->type.file.buffer_content_size) == FS_NO_ERROR)
	&& p->type.file.buffer_content_size>0)
	{
		p->type.file.buffer_reader = p->type.file.buffer_ptr;
		p->type.file.buffer_content_size += offset;

		if(p->type.file.buffer_content_size >= at_least)
			return;
	}
	else
	{
		BYTESTREAM_RAISE(owner,1);
	}
}

kal_bool hw_bytestream_buffer_load_file_widthout_exception(kal_uint32 owner, int at_least)

⌨️ 快捷键说明

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