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

📄 osdcp_readbin.c

📁 mstar 776 开发的车载dvd
💻 C
字号:
#define OSDCP_READBIN_C
///////////////////////////////////////////////////////////////////////////////
//
//  File name: OSDcp_readbin.c
//  Version:
//  Date:
//
//  Author:
//  Company: MStarSemi Inc.
//
//  Description:
//
///////////////////////////////////////////////////////////////////////////////

/******************************************************************************/
/*      		      Header Files      			      */
/* ****************************************************************************/
#include "OSDcp_readbin.h"

#include "drvflash.h"
#include "msAPI_MIU.h"
#include "Debug.h"

#define ENCODING_UTF16                 0
#define ENCODING_UTF8                  1
#define ENCODING_FLAG_FOR_ONE_OR_TWO   2

/********************************************************************************/
/*      			   Macro					*/
/* ******************************************************************************/
/********************************************************************************/
/*      			   Local					*/
/* ******************************************************************************/
//static U32  osdcp_output_addr;
//static U32  osdcp_bmp_info_addr;
typedef struct
{
    U32 magicNumber;
    U32 headerSize;
    U32 bodySize;
    U32 binaryType;
    U16 bodyCompressMethod;
    U32 bodyDecompressedSize;
    U16 bodyEncodingMethod;
}StringBinaryInfo;



static U32  osdcp_text_addr;
static StringBinaryInfo info;

/********************************************************************************/
/*                   Functions     												*/
/********************************************************************************/

//*************************************************************************
//Function name:
//Passing parameter:
//Return parameter:
//Description:
//*************************************************************************
void OSDcp_readbin_info_init(void)
{

    BINFORMAT BinInfo;

    BinInfo.B_ID = BIN_ID_OSDCP_TEXT;
    if (msAPI_MIU_Get_BinInfo(&BinInfo) == PASS)
    {
	      osdcp_text_addr = BinInfo.B_FAddr;
    }

    MDrv_Flash_Read(osdcp_text_addr,sizeof(info),(U8 *)&info);

}


static U32 readbin_language_addr(U8 language)
{
      U32 language_addr;
      U32 language_id_addr;

      language_id_addr = sizeof(U32)+language*sizeof(language_addr);

      MDrv_Flash_Read(osdcp_text_addr+INFO_SIZE+language_id_addr, sizeof(language_addr), (U8 *)&language_addr);

     return language_addr;
}


static OSDcp_string_info_table readbin_string_info(U32 language_addr, U16 id)
{
      OSDcp_string_info_table struct_string_info;

      U32 startaddr;
      U32 staraddr_next;
      U32 string_id_info_addr;

      string_id_info_addr = language_addr+sizeof(U32)/*string count*/+id*sizeof(startaddr);

      MDrv_Flash_Read(osdcp_text_addr+string_id_info_addr, sizeof(startaddr), (U8 *)&startaddr);
      MDrv_Flash_Read(osdcp_text_addr+string_id_info_addr+sizeof(startaddr), sizeof(startaddr), (U8 *)&staraddr_next);

      struct_string_info.startaddr =startaddr;
      struct_string_info.length = (U16)(staraddr_next-startaddr);

      return struct_string_info;
}


U16 readbin_string_length(U8 language, U16 id)
{

      U32 startaddr;
      U32 staraddr_next;
      U32 string_id_info_addr;
      U32 language_addr;

      language_addr = readbin_language_addr(language);

      string_id_info_addr = language_addr+sizeof(U32)/*string count*/+id*sizeof(startaddr);

      MDrv_Flash_Read(osdcp_text_addr+string_id_info_addr, sizeof(startaddr), (U8 *)&startaddr);
      MDrv_Flash_Read(osdcp_text_addr+string_id_info_addr+sizeof(startaddr), sizeof(startaddr), (U8 *)&staraddr_next);

     return  (U16)(staraddr_next-startaddr);

}

void OSDcp_readbin_string_ptr(U8 language, U16 id, U16 *pu16stringbuffer)
{
    U32 language_addr;
    OSDcp_string_info_table struct_string_info;

    language_addr = readbin_language_addr(language);
    struct_string_info = readbin_string_info(language_addr, id);

    if (info.bodyEncodingMethod == ENCODING_UTF8)
    {
        #if 0//not support in ATSC now
        //printf("A=%lu,%lu,%u\n",(U32)info.headerSize,(U32)struct_string_info.startaddr,(U16)struct_string_info.length);
        MDrv_Flash_Read(osdcp_text_addr+info.headerSize+struct_string_info.startaddr, struct_string_info.length, CHAR_BUFFER2);
        MApp_CharTable_MappinUTF8ToUCS2(CHAR_BUFFER2, pu16stringbuffer, struct_string_info.length, STRBUFF_LENGTH);
        #endif
        __ASSERT(0);
    }
    else if (info.bodyEncodingMethod == ENCODING_FLAG_FOR_ONE_OR_TWO)
    {
        #if 0 //not support in ATSC now
        U8 i = 0, bUseOneOrTwoByte;

        //printf("A=%lu,%lu,%u\n",(U32)info.headerSize,(U32)struct_string_info.startaddr,(U16)struct_string_info.length);
        MDrv_Flash_Read(osdcp_text_addr+info.headerSize+struct_string_info.startaddr, struct_string_info.length, CHAR_BUFFER2);

        bUseOneOrTwoByte = CHAR_BUFFER2[0];
        if (bUseOneOrTwoByte == 1)
        {
            for (i=1; i<struct_string_info.length; i++)
            {
                pu16stringbuffer[i-1] = (U16) CHAR_BUFFER2[i];
            }
        }
        else if (bUseOneOrTwoByte == 2)
        {
            memcpy((U8*)pu16stringbuffer, CHAR_BUFFER2+1, struct_string_info.length-1);
        }
        #endif
        __ASSERT(0);
    }
    else
    {
        //printf("A=%lu,%lu,%u\n",(U32)info.headerSize,(U32)struct_string_info.startaddr,(U16)struct_string_info.length);
        MDrv_Flash_Read(osdcp_text_addr+info.headerSize+struct_string_info.startaddr, struct_string_info.length, (U8*)pu16stringbuffer);
    }
}

#undef OSDCP_READBIN_C

⌨️ 快捷键说明

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