MSTAR NAOS TV


1、通道

  MApp_ZUI_ACTinputsource.c

  MApp_InputSource.c->MApp_InputSource_SwitchSource()

  MApp_InputSource_ChangeAudioSource()

  MApi_XC_HPD_Task()       MApi_XC_HDMI_SetHotPlug()  Hotplug

#if (HDCP_KEY_TYPE==HDCP_KEY_IN_CODE||HDCP_KEY_TYPE==HDCP_KEY_IN_DB)
MS_U8 _u8HdcpKey[HDCP_KEY_SIZE]=
{
    0x89,0x38,0xAE,0x0D,0xED,0x40,0xE6,0xBB,0xFA,0x4E,0xDE,0x51,0xFB,0x8E,0xD9,0xAA,    
    0x34,0xA8,0xC4,0xEA,0xD8,0x6C,0xDC,0x5C,0x91,0x5C,0xB1,0xA6,0x13,0x2B,0x8B,0x8B,   
    0xF7,0x46,0xCC,0x1C,0x88,0x20,0xA3,0x27,0x0E,0xE1,0x28,0x84,0x89,0x39,0xA3,0xE2,    
    0x36,0x86,0xCE,0x67,0xEB,0xA0,0xF2,0x35,0x6B,0x86,0xF5,0x21,0x71,0x95,0x8A,0x77,    
    0xA1,0x28,0x77,0x97,0xD3,0x7B,0xEF,0x5C,0x15,0x48,0xAA,0x9E,0x97,0x39,0xCD,0x98,    
    0x40,0x5E,0x68,0x56,0x66,0xEF,0xC1,0x3C,0xE1,0x8F,0x2A,0x82,0xDE,0x8F,0x52,0xCC,    
    0xA8,0x1F,0x37,0xD9,0xD4,0xC6,0x24,0x16,0x7E,0x42,0xFF,0x57,0xCD,0x6B,0xE0,0x86,    
    0x00,0x1A,0xF1,0x19,0x5A,0xAF,0x37,0x97,0x86,0xBA,0x83,0x29,0xFE,0x41,0xA8,0xD5,    
    0xF4,0x73,0x43,0x03,0x23,0x22,0xC5,0x28,0x96,0x9E,0x35,0x0D,0x67,0xA8,0x8B,0xDD,    
    0x7A,0x89,0x38,0xE0,0x94,0xF0,0xFF,0xF5,0x8F,0xF3,0x4E,0x5C,0x82,0x09,0xF3,0x97,    
    0xEB,0x01,0x52,0xEC,0xD8,0x98,0x5C,0x4F,0x43,0x2E,0xE7,0x9F,0xF5,0x85,0x6D,0x15,    
    0xB1,0x83,0x20,0xF8,0x5E,0xD0,0x33,0x4F,0xF0,0xC1,0x8F,0x65,0x77,0x3D,0x31,0xB2,    
    0xFB,0xA1,0x6E,0xCA,0xA6,0xD3,0xA2,0x35,0x1D,0x16,0x41,0xC3,0x89,0x86,0x98,0x78,    
    0x8E,0x3E,0xC1,0x64,0x01,0x79,0x05,0x21,0x47,0xAF,0x6A,0x6F,0x5B,0xE1,0x4D,0x2B,    
    0x2F,0xCC,0x18,0x8E,0x42,0xDC,0x9A,0xF8,0x3C,0xD0,0xD0,0x57,0x04,0xFB,0x14,0x42,    
    0x8C,0x54,0x9D,0xA9,0x06,0xEB,0xE7,0x48,0xE2,0x29,0xEF,0x7E,0xFD,0xF6,0x45,0x12,    
    0xAC,0xE4,0xBC,0x45,0x67,0xA3,0x9B,0x65,0xA1,0x0E,0xED,0x1A,0x84,0xAD,0x49,0x87,    
    0xA2,0x77,0x3F,0x11,0xA7,0x1B,0xD1,0x7F,0x25,0x36,0x6c,0x6f,0xd3,0xdf,0x25,0xd0,    
    0xFB,
};
#endif

 2、HASH KEY

MApp_Customer_Info.h

//Customer ID (Example:0009 = 0x0009) (Example: 20= 0x0014)
#define INPUT_CUSTOMER_ID_LOW_BYTE  0x53
#define INPUT_CUSTOMER_ID_HIGH_BYTE 0x03
//Model ID (Example:0001 = 0x0001)
#define INPUT_MODEL_ID_LOW_BYTE     0x11
#define INPUT_MODEL_ID_HIGH_BYTE    0x80
//Chip ID (Example:000B = 0x000B)
#define INPUT_CHIP_ID_LOW_BYTE      0xB3
#define INPUT_CHIP_ID_HIGH_BYTE     0x00
#define INPUT_SW_PROJECT            0x04
#define INPUT_SW_GENERATION         0x01
#define INPUT_PRODUCT_TYPE          0x01
#define INPUT_TV_SYSTEM             0x02
//Label (Example:00000456 = 0x0001C8)
#define INPUT_LABEL_LOW_BYTE        0x08
#define INPUT_LABEL_MIDDLE_BYTE     0x00
#define INPUT_LABEL_HIGH_BYTE       0x00
//CL(Change-List) (Example:00101234 = 0x18B72)
#define INPUT_CL_LOW_BYTE           0x10
#define INPUT_CL_MIDDLE_BYTE        0x4C
#define INPUT_CL_HIGH_BYTE          0x02
#define DRM_MODEL_ID  0x3130
//  SW Quality
//  01-BOOTLEG
//  02-Demo
//  03-Pre-Alpha
//  04-Alpha
//  05-Beta
//  06-RC
//  07-RTM
//  Quality flag can be modified by release engineer only
#define INPUT_RELEASE_QUALITY       0x01
//CPU TYPE
//01-MIPS
//02-AEON
#if (defined(MIPS_CHAKRA) || defined(ARM_CHAKRA))
#define  INPUT_CPU_TYPE 0x01
#else
#define  INPUT_CPU_TYPE 0x02
#endif
//Customer IP
unsigned char code IP_Cntrol_Mapping_1[8] = "00000000"; //Customer IP Control-1
unsigned char code IP_Cntrol_Mapping_2[8] = "08002840"; //Customer IP Control-2
unsigned char code IP_Cntrol_Mapping_3[8] = "20000104"; //Customer IP Control-3
unsigned char code IP_Cntrol_Mapping_4[8] = "08F80000"; //Customer IP Control-4
unsigned char code Customer_hash[] = {0x59,0xf9,0x0a,0x1e,0x85,0x27,0x61,0xea,0xb4,0xad,0x0a,0x4a,0x91,0xf2,0xd7,0xba};

U16 u16DRMModelID=DRM_MODEL_ID;
//**************************************************************************
//**************************************************************************
//**************************************************************************
unsigned char code CID_Buf[32] =  {
//Fix Value: Do not Modify
        'M', 'S', 'I', 'F',         // (Do not modify)Mstar Information:MSIF
        '0', '1',                   // (Do not modifyCustomer Info Class: 01
//Customer Info area
        INPUT_CUSTOMER_ID_LOW_BYTE,
        INPUT_CUSTOMER_ID_HIGH_BYTE,
        INPUT_MODEL_ID_LOW_BYTE,
        INPUT_MODEL_ID_HIGH_BYTE,
        INPUT_CHIP_ID_LOW_BYTE,
        INPUT_CHIP_ID_HIGH_BYTE,
        INPUT_SW_PROJECT,
        INPUT_SW_GENERATION,
        INPUT_PRODUCT_TYPE,
        INPUT_TV_SYSTEM,
        INPUT_LABEL_LOW_BYTE,
        INPUT_LABEL_MIDDLE_BYTE,
        INPUT_LABEL_HIGH_BYTE,
        INPUT_CL_LOW_BYTE,
        INPUT_CL_MIDDLE_BYTE,
        INPUT_CL_HIGH_BYTE,
        INPUT_RELEASE_QUALITY,
        INPUT_CPU_TYPE,
//Reserve
        '0', '0', '0', '0', '0', '0', '0', '0'   // Reserve
        };

3、DEBUG

uartdebug.c

void TestCmdKitking(void)
{
    switch(g_UartCommand.Buffer[_UART_CMD_INDEX2_])
    {
        case 0x00:
            if(g_UartCommand.Buffer[_UART_CMD_INDEX3_])
                Adj_Volume_On();
            else
                Adj_Volume_Off();
            break;

        case 0x01:
            g_uiAudio = (MS_U8)g_UartCommand.Buffer[_UART_CMD_INDEX3_];
            MApp_Audio_AdjustMainVolume(50);
            break;
        default:
            break;
    }
}

BOOL Cus_UART_ExecTestCommand(void)
{
    BOOL bRtn = TRUE;
    U8 u8XCBank;
    U8 ucPara1;
    U8 ucPara2;
    U8 ucPara3;

    ucPara1 = g_UartCommand.Buffer[_UART_CMD_INDEX2_];
    ucPara2 = g_UartCommand.Buffer[_UART_CMD_INDEX3_];
    ucPara3 = g_UartCommand.Buffer[_UART_CMD_INDEX4_];

    u8XCBank = MDrv_ReadByte(XC_RIU_BASE);

    switch( g_UartCommand.Buffer[_UART_CMD_INDEX1_] )
    {
        case 0x20:
            TestCmdKitking();
            break; 
        case 0x00:
            printf("\nTest Command List:\n");
    }
}

4、MHL

  一般情況下需要一個檢測PIN(MHL_CABLE_DET) & 一個開關(VBUS)

當MHL手機插入時,MHL_CABLE_DET 為GPIO_INPUT,DET PIN為HIGH。系統檢測到為HIGH時,VBUS置位,開啟SGM2588C MHL CHIP。

但目前流行的做法為,DET&VBUS合並一個,即檢測到DET PIN為高時,同時開啟MHL CHIP,省去VBUS的控制。

下圖:紅色為同一網絡,藍色為同一網絡,黃色電阻不裝NC,即不使用VBUS

 5、開板

  VIDEO通道映射,回調函數:_MApi_XC_Sys_InputSource_InputPort_Mapping()

  每次切換通道:MApp_InputSource_SwitchSource(),都會執行通道進行VIDEO_PATH映射。

    //Init Mux
    MApi_XC_Mux_Init(_MApi_XC_Sys_InputSource_InputPort_Mapping);  //回調

DBUG流程:利用每次切通道都會執行回調,可以在uartdebug.c->TestCmdKitking()中,全局變量的方式g_uiVideoPath,代入VIDEO_PATH回調,迭代所有可能的VIDEO_PATH。

void TestCmdKitking(void)
{
    switch(g_UartCommand.Buffer[_UART_CMD_INDEX2_])
    {
        case 0x00:
            if(g_UartCommand.Buffer[_UART_CMD_INDEX3_])
                Adj_Volume_On();
            else
                Adj_Volume_Off();
            break;

        case 0x01:
            g_uiVideoPath = (MS_U8)g_UartCommand.Buffer[_UART_CMD_INDEX3_];
            MApp_InputSource_SwitchSource(UI_INPUT_SOURCE_COMPONENT, MAIN_WINDOW );   //測試YUV VIDEO_PATH,使用g_uiVideoPath代入_MApi_XC_Sys_InputSource_InputPort_Mapping()
            break;
        default:
            break;
    }
}

//_MApi_XC_Sys_InputSource_InputPort_Mapping
static void _MApi_XC_Sys_InputSource_InputPort_Mapping(INPUT_SOURCE_TYPE_t src_ids , E_MUX_INPUTPORT* port_ids , MS_U8* u8port_count )
{
    // prog input soruce
    switch (src_ids)
    {
        default:
            *u8port_count = 0;
            port_ids[0] = INPUT_PORT_NONE_PORT;
            return;

        case INPUT_SOURCE_VGA:
            *u8port_count = 2;
            port_ids[0] = INPUT_VGA_MUX;
            port_ids[1] = INPUT_VGA_SYNC_MUX;
            break;

        case INPUT_SOURCE_YPBPR:
            *u8port_count = 1;
            port_ids[0] = INPUT_YPBPR_MUX;
            break;
    }
    if(g_uiVideoPath)
        port_ids[0] = (E_MUX_INPUTPORT)g_uiVideoPath; //修改VIDEO_PATH
    printf("\n------>app : port 0 : %d  port 1 : %d \n",  port_ids[0]  , port_ids[1]);
}

 6、第二路UART

1、 如果要使用PIN_107/108作為串口,請確保這兩根PIN不會用作其他用途。
2#define PADS_UART4_MODE             UART4_MODE(1)
3、 打開ENABLE_UART2
4、 在 drvUartDebug.c 對 MDrv_UART2_DebugInit() 配置進行修改。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM