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

📄 bytestream_hw.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	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,p->type.file.buffer_content_size);
	
	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 KAL_TRUE;
	}
	return KAL_FALSE;
}
/**************************************************************

	FUNCTION NAME		: hw_bytestream_get_byte_file 

  	PURPOSE				: get a byte from file 

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_get_byte_file(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	if(!(p->type.file.buffer_content_size))
		hw_bytestream_buffer_load_file(owner, 1);

	p->type.file.buffer_content_size--;

	p->type.file.file_offset++;

	return *p->type.file.buffer_reader++;
}

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

	FUNCTION NAME		: hw_bytestream_get_byte_file 

  	PURPOSE				: peek a byte from file 

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_peek_byte_file(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	if(!p->type.file.buffer_content_size)
		hw_bytestream_buffer_load_file(owner, 1);

	return *p->type.file.buffer_reader;
}
/**************************************************************

	FUNCTION NAME		: hw_bytestream_peek_byte_n_file 

  	PURPOSE				: peek n byte from file 

	INPUT PARAMETERS	: int index
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint8

	REMARKS				: nil

***************************************************************/
kal_uint8	hw_bytestream_peek_byte_n_file(kal_uint32 owner, kal_uint32 index)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	
	if(p->type.file.buffer_content_size<index)
		hw_bytestream_buffer_load_file(owner, index);
	
	return p->type.file.buffer_reader[index];
}


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

	FUNCTION NAME		: hw_bytestream_get_word_file 

  	PURPOSE				: peek a word from file (16 bit)

	INPUT PARAMETERS	: void 
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint16

	REMARKS				: nil

***************************************************************/
kal_uint16 hw_bytestream_get_word_file(kal_uint32 owner,hw_bytestream_endian_enum endian)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint16 result;
	
	if(p->type.file.buffer_content_size<2)
		hw_bytestream_buffer_load_file(owner, 2);
	
	p->type.file.buffer_content_size-=2;
	p->type.file.file_offset+=2;

	if(endian == LITTLE_ENDIAN)
	{
		result = *p->type.file.buffer_reader++;
		result |= (*p->type.file.buffer_reader++) << 8;
	}
	else
	{
		result = *p->type.file.buffer_reader++ << 8;
		result |= (*p->type.file.buffer_reader++);
	}
	return result;
}




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

	FUNCTION NAME		: hw_bytestream_get_word_file 

  	PURPOSE				: peek a word from file (16 bit)

	INPUT PARAMETERS	: void 
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint16

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_3bytes_file(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint32 result;
	
	if(p->type.file.buffer_content_size<3)
		hw_bytestream_buffer_load_file(owner, 3);
	
	p->type.file.buffer_content_size-=3;
	p->type.file.file_offset+=3;

	result = *p->type.file.buffer_reader++;
	result |= (*p->type.file.buffer_reader++) << 8;
	result |= (*p->type.file.buffer_reader++) << 16;
	return result;
}


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

	FUNCTION NAME		: hw_bytestream_get_dword_file 

  	PURPOSE				: get a dword from file (32 bit)

	INPUT PARAMETERS	: int index
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint32

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_dword_file(kal_uint32 owner, hw_bytestream_endian_enum endian)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	kal_uint32 result;
	
	if(p->type.file.buffer_content_size<4)
		hw_bytestream_buffer_load_file(owner, 4);

	p->type.file.buffer_content_size-=4;
	p->type.file.file_offset+=4;	

	if(endian == LITTLE_ENDIAN)
	{
		result = *p->type.file.buffer_reader++;
		result |= (*p->type.file.buffer_reader++) << 8;
		result |= (*p->type.file.buffer_reader++) << 16;
		result |= (*p->type.file.buffer_reader++) << 24;
	}
	else
	{
		result  = (*p->type.file.buffer_reader++) << 24;
		result |= (*p->type.file.buffer_reader++) << 16;
		result |= (*p->type.file.buffer_reader++) << 8;
		result |= (*p->type.file.buffer_reader++);
		
	}
	return result;
}

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

	FUNCTION NAME		: hw_bytestream_get_array_file 

  	PURPOSE				: get a dword from file (32 bit)

	INPUT PARAMETERS	: int index
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint32

	REMARKS				: nil

***************************************************************/
void hw_bytestream_get_array_file(kal_uint32 owner, kal_uint8 * array,kal_uint32 size)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	while(size>0)
	{
		int n;
		if(p->type.file.buffer_content_size == 0)
			hw_bytestream_buffer_load_file(owner, 1);
		
		n= MIN(size,p->type.file.buffer_content_size);
		memcpy(array,p->type.file.buffer_reader,n);
		array+=n;
		p->type.file.buffer_content_size -=n;
		size -= n;
		p->type.file.file_offset+=n;
		p->type.file.buffer_reader+=n;
	}
}

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

	FUNCTION NAME		: hw_bytestream_is_eof_file 

  	PURPOSE				: check is eof 

	INPUT PARAMETERS	: nil
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_bool

	REMARKS				: nil

***************************************************************/
kal_bool hw_bytestream_is_eof_file(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	if(p->type.file.buffer_content_size)
		return KAL_FALSE;

	if(hw_bytestream_buffer_load_file_widthout_exception(owner, 1))
		return KAL_FALSE;
	
	return KAL_TRUE;
}


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

	FUNCTION NAME		: hw_bytestream_seek_file 

  	PURPOSE				: seek file bytestream 

	INPUT PARAMETERS	: kal_int32 offset
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: void

	REMARKS				: nil

***************************************************************/
void hw_bytestream_seek_file(kal_uint32 owner, kal_int32 offset)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	int ret;
	
	ret = DRM_seek_file(p->type.file.file_handle,offset,FS_FILE_BEGIN);
	p->type.file.buffer_content_size = 0;
	p->type.file.file_offset = offset;

	if ((ret<0) || (ret!=(int)offset))
	{
		BYTESTREAM_RAISE(owner,1);
	}
}

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

	FUNCTION NAME		: hw_bytestream_flush_file 

  	PURPOSE				: flush file bytestream 

	INPUT PARAMETERS	: kal_uint32 count
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: void

	REMARKS				: nil

***************************************************************/
/* Note: FSAL does not check the availability of data until issuing read/write operations */
void hw_bytestream_flush_file(kal_uint32 owner, kal_uint32 count)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	p->type.file.file_offset+=count;
	if(count >= p->type.file.buffer_size)
	{
		hw_bytestream_seek_file(owner, p->type.file.file_offset);
		return;
	}
	while(count)
	{
		if(p->type.file.buffer_content_size < (int)count)
		{
			count -= p->type.file.buffer_content_size;
			p->type.file.buffer_content_size=0;
			hw_bytestream_buffer_load_file(owner, 1);
		}
		else
		{
			p->type.file.buffer_content_size-=count;
			p->type.file.buffer_reader +=count;
			count=0;
		}
	}
}





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

	FUNCTION NAME		: hw_bytestream_tell_file 

  	PURPOSE				: tell file bytestream 

	INPUT PARAMETERS	: void
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_int32

	REMARKS				: nil

***************************************************************/
kal_int32 hw_bytestream_tell_file(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.file.file_offset;
}


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

	FUNCTION NAME		: hw_bytestream_get_size_file 

  	PURPOSE				: get size of file bytestream 

	INPUT PARAMETERS	: void
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: kal_uint32

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_get_size_file(kal_uint32 owner)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	
	return p->type.file.file_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_file(kal_uint32 owner)
{
	hw_bytestream_buffer_load_file(owner,1);
}

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

	FUNCTION NAME		: hw_bytestream_create

  	PURPOSE				: create a memory bytestream

	INPUT PARAMETERS	: kal_uint8 *buf_ptr
							  kal_uint32 buf_size
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: hw_RESULT

	REMARKS				: nil

***************************************************************/
void hw_bytestream_create(kal_uint32 owner, kal_uint8 *buf_ptr, kal_uint32 buf_size)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	

	p->t = HW_BYTESTREAM_TYPE_MEM;
	p->type.mem.buffer_size		= buf_size;
	p->type.mem.buffer_offset		= 0;
	p->type.mem.buffer_ptr	= buf_ptr;
}

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

	FUNCTION NAME		: hw_bytestream_create_file

  	PURPOSE				: create a file bytestream

	INPUT PARAMETERS	: const S8 *file_name
						  
	OUTPUT PARAMETERS	: nil

	RETURNS				: hw_RESULT

	REMARKS				: nil

***************************************************************/
kal_uint32 hw_bytestream_create_file(kal_uint32 owner, FS_HANDLE handle, kal_uint8* buf, kal_uint32 buf_size)
{
	hw_bytestream_dcb_struct *p = &hw_bytestream_dcb[owner];	

	p->t = HW_BYTESTREAM_TYPE_FILE;
	p->type.file.file_handle = handle;
	p->type.file.buffer_ptr = buf;
	p->type.file.buffer_size = buf_size;
	p->type.file.buffer_reader = p->type.file.buffer_ptr;
	p->type.file.buffer_content_size = 0;
	p->type.file.file_offset = 0;
	DRM_seek_file((FS_HANDLE) p->type.file.file_handle, 0, FS_FILE_BEGIN);
	if(DRM_file_size(p->type.file.file_handle, (kal_uint32*)&p->type.file.file_size)<0)
		p->type.file.file_size = 0;	

	return p->type.file.file_size;
}

hw_bytestream_func_struct hw_bytestream_func[HW_BYTESTREAM_TYPE_NUM]=
{
	{
		hw_bytestream_get_byte_mem ,
		//hw_bytestream_peek_byte_mem,
		hw_bytestream_peek_byte_n_mem,
		hw_bytestream_get_word_mem,
		//hw_bytestream_get_3bytes_mem,
		hw_bytestream_get_dword_mem, 
		hw_bytestream_get_array_mem,
		hw_bytestream_flush_mem,
		hw_bytestream_seek_mem,
		hw_bytestream_tell_mem,
		//hw_bytestream_get_size_mem,		
		hw_bytestream_is_eof_mem,		
		hw_bytestream_refill_mem
	},
	{
		hw_bytestream_get_byte_file ,
		//hw_bytestream_peek_byte_file,
		hw_bytestream_peek_byte_n_file,
		hw_bytestream_get_word_file,
		//hw_bytestream_get_3bytes_file,
		hw_bytestream_get_dword_file, 
		hw_bytestream_get_array_file,
		hw_bytestream_flush_file,
		hw_bytestream_seek_file,
		hw_bytestream_tell_file,
		//hw_bytestream_get_size_file,
		hw_bytestream_is_eof_file,		
		hw_bytestream_refill_file,	
	}
};

⌨️ 快捷键说明

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