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

📄 drvuart.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:

        default:
            printf("Unsupport Test Command: 0x%x\n", (U16)g_UartCommand.Buffer[_UART_CMD_INDEX1_] );
            break;
    }
}

/******************************************************************************/
/// Decode the Command gets from UART port for extra device(like tunner/demodulator).
/// Command Buffer [0]:
///  -bit7~bit5 :111b
///  -bit4~bit0 :extra UART command
/// Command Buffer [1~8]:
///  -Extra Control data buffer.
/******************************************************************************/

void MDrv_UART_DecodeExtCommand(void)
{
    U8 u8addressCount, u8dataCount;
    U8 u8Result, i;


    switch( UART_EXT_DEV )
    {
    #if (ENABLE_DLC_TEST_BY_MSTVTOOL)
        case uartExtDev_MstDlcTest:
        {
            switch(UART_EXT_CMD)
            {
                case URCMD_MST_DLC_TEST_FORCE_PAUSE:
                    g_bDebugProgStopFlag = 1; // pause the program
                    UARTMSG(printf("<Pause>"));
                    break;

                case URCMD_MST_DLC_TEST_FORCE_RUN:
                    g_bDebugProgStopFlag = 0;
                    UARTMSG(printf("<Run>"));
                    break;

                case URCMD_MST_DLC_TEST_READ:
                    {
                        U8 i;
                        for (i=0; i<16; i+=2)
                        {
                            putchar(0xF3);
                            putchar(g_ucLumaCurve[i]);
                            putchar(g_ucLumaCurve[i+1]);
                            MDrv_Timer_Delayms(50);
                            UARTMSG(printf(" %d %d", (U16)g_ucLumaCurve[i], (U16)g_ucLumaCurve[i+1]));
                        }
                    }
                    break;

                case URCMD_MST_DLC_TEST_WRITE_1:
                    {
                        U8 i;
                        i = (UART_CMD_EXT_LENGTH-4);
                        for (i=0; i<(UART_CMD_EXT_LENGTH-4); i++)
                            g_ucLumaCurve[i] = g_UartCommand.Buffer[_UART_CMD_INDEX4_ + i];
                    }
                    break;

                case URCMD_MST_DLC_TEST_WRITE_2:
                    {
                        U8 i;
                        i = (UART_CMD_EXT_LENGTH-4);
                        for (i=0; i<(UART_CMD_EXT_LENGTH-4); i++)
                            g_ucLumaCurve[8 + i] = g_UartCommand.Buffer[_UART_CMD_INDEX4_ + i];
                    }
                    break;

                case URCMD_MST_DLC_TEST_REINIT:
                    MDrv_DLC_Init( devPanel_WIDTH(), devPanel_HEIGHT(), &g_ucLumaCurve[0] );
                    MDrv_DLC_SetOnOff(ENABLE);
                    break;

                case URCMD_MST_DLC_TEST_BOUNDARY_READ:
                    putchar( 0xF2 );
                    if( UART_EXT_CMD_MS_DAT1 == 0x04 )
                    {
                        putchar(  (g_u8_L_L_U << 4) | (g_u8_L_L_D &0x0F) );
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x06 )
                    {
                        putchar(  (g_u8_L_H_U << 4) | (g_u8_L_H_D &0x0F) );
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x08 )
                    {
                        putchar( g_u8_S_L_U );
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x09 )
                    {
                        putchar( g_u8_S_L_D );
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x0C )
                    {
                        putchar( g_u8_S_H_U );
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x0D )
                    {
                        putchar( g_u8_S_H_D );
                    }

                    break;
                case URCMD_MST_DLC_TEST_BOUNDARY_WRITE:
                    if( UART_EXT_CMD_MS_DAT1 == 0x04 )
                    {
                        g_u8_L_L_U = UART_EXT_CMD_MS_DAT2 >> 4;
                        g_u8_L_L_D = UART_EXT_CMD_MS_DAT2 & 0x0F;
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x06 )
                    {
                        g_u8_L_H_U = UART_EXT_CMD_MS_DAT2 >> 4;
                        g_u8_L_H_D = UART_EXT_CMD_MS_DAT2 & 0x0F;
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x08 )
                    {
                        g_u8_S_L_U = UART_EXT_CMD_MS_DAT2;
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x09 )
                    {
                        g_u8_S_L_D = UART_EXT_CMD_MS_DAT2;
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x0C )
                    {
                        g_u8_S_H_U = UART_EXT_CMD_MS_DAT2;
                    }
                    else if( UART_EXT_CMD_MS_DAT1 == 0x0D )
                    {
                        g_u8_S_H_D = UART_EXT_CMD_MS_DAT2;
                    }
                    break;
            } // End of switch(dev_cmd)
            break;
        }
    #endif //ENABLE_DLC_TEST_BY_MSTVTOOL

        case uartExtDev_I2C_DEVICE:
             u8addressCount = (UART_EXT_CMD_MS_DAT1 & 0xF0) >> 4;
             u8dataCount    = (UART_EXT_CMD_MS_DAT1 & 0x0F);
             if( u8addressCount + u8dataCount > 12 ) //UART_EXT_CMD_MS_DAT2...UART_EXT_CMD_MS_DAT13
                 UARTMSG(printf("I2C error!"));
             if( UART_EXT_CMD & 0x01 ) // I2C read
                 u8Result = MDrv_IIC_ReadBytes( UART_EXT_CMD,
                                                u8addressCount,
                                                &UART_EXT_CMD_MS_DAT2,
                                                u8dataCount,
                                                (&UART_EXT_CMD_MS_DAT2)+u8addressCount);
             else                      // I2C write
                 u8Result = MDrv_IIC_WriteBytes( UART_EXT_CMD,
                                                u8addressCount,
                                                &UART_EXT_CMD_MS_DAT2,
                                                u8dataCount,
                                                (&UART_EXT_CMD_MS_DAT2)+u8addressCount);

             if( u8Result )
             {
                 i = _UART_CMD_INDEX5_;
                 UARTMSG(printf("0x%02X ", (U16)UART_EXT_CMD ));
                 while( u8addressCount > 0 )
                 {
                     UARTMSG(printf("W0x%02X ", (U16)g_UartCommand.Buffer[i]));
                     --u8addressCount;
                     ++i;
                 }
                 while( u8dataCount > 0 )
                 {
                     if( UART_EXT_CMD & 0x01 )
                         UARTMSG(printf("R0x%02X ", (U16)g_UartCommand.Buffer[i]));
                     else
                         UARTMSG(printf("W0x%02X ", (U16)g_UartCommand.Buffer[i]));
                     --u8dataCount;
                     ++i;
                 }
                 UARTMSG(printf("\r\n"));
             }
             else
                 UARTMSG(printf("0x%02X doesn't exist!\r\n", (U16)UART_EXT_CMD));
             break;

        case uartExtDev_SAMSUNG_S5H1409_DEMODE:
             i = 0;
             while( 1 )
             {
                 if( MDrv_IIC_ReadBytes( UART_EXT_CMD|0x01 , 1, &i, 2, &UART_EXT_CMD_MS_DAT12) )
                     UARTMSG(printf("Reg 0x%02X = 0x%02X 0x%02X\n", (U16)i, (U16)UART_EXT_CMD_MS_DAT12, (U16)UART_EXT_CMD_MS_DAT13));
                 else
                 {
                     UARTMSG(printf("0x%02X doesn't exist!\r\n", (U16)UART_EXT_CMD));
                     break;
                 }
                 if( i == 0xFF )
                    break;
                 ++i;
             }
             break;

#if 0//((CHANNEL_SCAN_AUTO_TEST == 1) || (SFU_AUTO_TEST == 1))
        case uartExtDev_I2C_DEVICE_NEW:
			MDrv_UART_I2C_Device();
			break;
    	case uartExtDev_SCAN_TUNER:
			MDrv_UART_Scan_Tuner();
			break;
#endif

#if 0//(CHANNEL_SCAN_AUTO_TEST == 1)
        case uartExtDev_AUDIO_DEBUG:
             switch(UART_EXT_CMD)
            {
             case UART_AUDIODBG_CMD_SET_BK9:
			 	g_ScanAutoTestAU.u8RegStartAddr = UART_AUDIO_DATA1;
				g_ScanAutoTestAU.u8WriteData = UART_AUDIO_DATA2;
				g_ScanAutoTestAU.u8ReadBytes = UART_AUDIO_DATA3;
                g_u8ScanAutoTestCmd |= AUDIO_DEBUG_CMD_RWREG;
                break;
             }
            break;
#endif

         default:

             UARTMSG(printf("Unsupport ExtDev %d\n", (U16)UART_EXT_DEV));
             break;
    }
}

#else
static U8 code u8Dummy;
#endif /* ENABLE_MSTV_UART_DEBUG */

#undef _DRVUART_C_

⌨️ 快捷键说明

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