405 lines
12 KiB
C
405 lines
12 KiB
C
/*
|
||
* fml_TFT.c
|
||
*
|
||
* Created on: 2025骞<35>4鏈<34>10鏃<30>
|
||
* Author: 22332
|
||
*/
|
||
#include <stdio.h>
|
||
#include "cola_init.h"
|
||
#include "cola_device.h"
|
||
#include "bsp_register_map.h"
|
||
#include "shell.h"
|
||
|
||
static cola_device_t *g_pDev_tft_iic = NULL;
|
||
static uint8_t transmitBuffer[7U][5U] = {{0x50,0x00,0x00,0x60,0x08},
|
||
{0x50,0x00,0x21,0x88,0x08},
|
||
{0x50,0x00,0x21,0x8C,0x08},
|
||
{0x50,0x00,0x22,0x5C,0x08},
|
||
{0x50,0x00,0x22,0x68,0x08},
|
||
{0x50,0x00,0x22,0x64,0x08},
|
||
{0x50,0x00,0x22,0x58,0x08},
|
||
};
|
||
|
||
static uint8_t First_Buffer[6] = {0xC8,0x00,0x58,0xA8,0X18,0X23};
|
||
static uint8_t Sec_Buffer[3] = {0x00,0x00,0x07};
|
||
static uint8_t Third_Buffer[3] = {0xFD,0x00,0xAA};
|
||
static uint8_t Forth_Buffer[3] = {0x49,0x00,0x80};
|
||
|
||
void fml_tft_init(void)
|
||
{
|
||
g_pDev_tft_iic = cola_device_find("TFT_IIC");
|
||
}
|
||
|
||
uint8_t fml_tft_read_page_reg(uint8_t page,uint8_t reg)
|
||
{
|
||
uint8_t pStartCmdSet[] = {0xC8,0x00,0x58,0xA8,0x18,0x01};
|
||
uint8_t pPageSel[] = {0x00,0x00,page};
|
||
uint8_t pPassWord[] = {0xFD,0x00,0xAA};
|
||
uint16_t u16RegAddress = (reg<<8);
|
||
uint8_t readValue = 0x00;
|
||
cola_device_write(g_pDev_tft_iic,pStartCmdSet[0],pStartCmdSet+1,sizeof(pStartCmdSet)-1);
|
||
cola_device_write(g_pDev_tft_iic,pPageSel[0],pPageSel+1,sizeof(pPageSel)-1);
|
||
cola_device_write(g_pDev_tft_iic,pPassWord[0],pPassWord+1,sizeof(pPassWord)-1);
|
||
cola_device_read(g_pDev_tft_iic,u16RegAddress,&readValue,1);
|
||
logWrite("readValue=0x%02X\r\n",readValue);
|
||
return readValue;
|
||
}
|
||
|
||
void fml_tft_write_page_reg(uint8_t page,uint8_t reg)
|
||
{
|
||
}
|
||
|
||
|
||
void fml_tft_BIST_clear(void)
|
||
{
|
||
cola_device_write(g_pDev_tft_iic,First_Buffer[0],First_Buffer+1,5);
|
||
cola_device_write(g_pDev_tft_iic,Sec_Buffer[0],Sec_Buffer+1,2);
|
||
cola_device_write(g_pDev_tft_iic,Third_Buffer[0],Third_Buffer+1,2);
|
||
Forth_Buffer[0] = 0x49;
|
||
Forth_Buffer[2] = 0x07;
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
Forth_Buffer[0] = 0x4A;
|
||
Forth_Buffer[2] = 0x03;
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x00;
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x00;
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
Forth_Buffer[0] = 0x60;
|
||
Forth_Buffer[2] = 0x07;
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
|
||
}
|
||
void fml_tft_write_BIST_mode(uint8_t mode)
|
||
{
|
||
switch(mode)
|
||
{
|
||
case PTGN_RED://red
|
||
Forth_Buffer[0] = 0x49;
|
||
Forth_Buffer[2] = 0x87;
|
||
break;
|
||
case PTGN_WHITE://white
|
||
Forth_Buffer[0] = 0x49;
|
||
Forth_Buffer[2] = 0x47;
|
||
break;
|
||
case PTGN_BLACK://black
|
||
Forth_Buffer[0] = 0x49;
|
||
Forth_Buffer[2] = 0x27;
|
||
break;
|
||
case PTGN_CBAR_A://color bar pattern with 8-level-gray
|
||
Forth_Buffer[0] = 0x4A;
|
||
Forth_Buffer[2] = 0x83;
|
||
break;
|
||
case PTGN_BLUE://blue
|
||
Forth_Buffer[0] = 0x4A;
|
||
Forth_Buffer[2] = 0x43;
|
||
break;
|
||
case PTGN_GREEN://green
|
||
Forth_Buffer[0] = 0x4A;
|
||
Forth_Buffer[2] = 0x23;
|
||
break;
|
||
case PTGN_FLICKER://flicker
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x80;
|
||
break;
|
||
case PTGN_CROSS_B://Enable crosstalk pattern with gray code 0 (inside) and 186 (outside)
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x40;
|
||
break;
|
||
case PTGN_CROSS_A://Enable crosstalk pattern with gray code 255 (inside) and 186 (outside)
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x20;
|
||
break;
|
||
case PTGN_CHESS_B://chess-board pattern with 32x32 pixels
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x10;
|
||
break;
|
||
case PTGN_CHESS_A://64-block chess-board pattern
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x08;
|
||
break;
|
||
case PTGN_H_GRAY_B://256-level horizontal gray pattern
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x04;
|
||
break;
|
||
case PTGN_H_GRAY_A://16-level horizontal gray pattern
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x02;
|
||
break;
|
||
case PTGN_CBAR_B://8-color bar and 8-gray scale pattern
|
||
Forth_Buffer[0] = 0x4B;
|
||
Forth_Buffer[2] = 0x01;
|
||
break;
|
||
case PTGN_SPONOFF://sub-pixel on/off pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x80;
|
||
break;
|
||
case PTGN_PONOFF://pixel on/off pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x40;
|
||
break;
|
||
case PTGN_WFRAME_B://black ground and white frame pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x20;
|
||
break;
|
||
case PTGN_WFRAME_A://black ground and white frame pattern with + symbo
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x10;
|
||
break;
|
||
case PTGN_GLEVEL://gray-level pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x08;
|
||
break;
|
||
case PTGN_RGBW://RGBW pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x04;
|
||
break;
|
||
case PTGN_V_GRAY_B://256-level vertical gray pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x02;
|
||
break;
|
||
case PTGN_V_GRAY_A://16-level vertical gray pattern
|
||
Forth_Buffer[0] = 0x4C;
|
||
Forth_Buffer[2] = 0x01;
|
||
break;
|
||
case PTGN_H_BW_B://16-level vertical gray pattern
|
||
Forth_Buffer[0] = 0x60;
|
||
Forth_Buffer[2] = 0x87;
|
||
break;
|
||
case PTGN_H_BW_A://16-level vertical gray pattern
|
||
Forth_Buffer[0] = 0x60;
|
||
Forth_Buffer[2] = 0x47;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
cola_device_write(g_pDev_tft_iic,First_Buffer[0],First_Buffer+1,5);
|
||
cola_device_write(g_pDev_tft_iic,Sec_Buffer[0],Sec_Buffer+1,2);
|
||
cola_device_write(g_pDev_tft_iic,Third_Buffer[0],Third_Buffer+1,2);
|
||
cola_device_write(g_pDev_tft_iic,Forth_Buffer[0],Forth_Buffer+1,2);
|
||
}
|
||
int* fml_tft_check_one_round(int event)
|
||
{
|
||
// uint64_t troubleCode = 0;
|
||
static uint8_t status ,err_status= 0;
|
||
|
||
int buffer[32];
|
||
int *result = buffer;
|
||
// char *pTroubleCode = (char *)&troubleCode;
|
||
if (g_pDev_tft_iic != NULL) {
|
||
|
||
status = cola_device_write(g_pDev_tft_iic,0,transmitBuffer[event],0);
|
||
if (status == 0x00)
|
||
{
|
||
err_status = cola_device_read(g_pDev_tft_iic,0,buffer,sizeof(buffer));
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
uint8_t fml_tft_report_err_status(void)
|
||
{
|
||
for (int i = 0; i < 7; i++)
|
||
{
|
||
int *result = fml_tft_check_one_round(i);
|
||
switch (i)
|
||
{
|
||
case EVENT_TP:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case TP_WDT_ERROR:
|
||
/* code */
|
||
break;
|
||
case TP_Configuration_CRC_Error:
|
||
/* code */
|
||
break;
|
||
case TP_Sensor_open_short_test:
|
||
/* code */
|
||
break;
|
||
case TP_Flash_load_CRC_Error:
|
||
/* code */
|
||
break;
|
||
case TP_Flash_data_load_CRC_Error:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_DCLK:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case DCLK_Detection_Port1:
|
||
/* code */
|
||
break;
|
||
case DCLK_Detection_Port2:
|
||
/* code */
|
||
break;
|
||
case DE_Detection:
|
||
/* code */
|
||
break;
|
||
case Float_Detection_in_LVDS:
|
||
|
||
return 18;
|
||
|
||
/* code */
|
||
break;
|
||
case SDNOFB_Feedback_STH_Detection:
|
||
/* code */
|
||
break;
|
||
case GDNOFB_Feedback_STV_Detection:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_HS:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case HS_Detection:
|
||
/* code */
|
||
break;
|
||
case VS_Stop_Detection:
|
||
/* code */
|
||
break;
|
||
case Data_CRC:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_LOCK:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case LOCK_Detection_in_LVDS:
|
||
/* code */
|
||
break;
|
||
case OEV_Stop_Detection:
|
||
/* code */
|
||
break;
|
||
case POL_Stop_Detection:
|
||
/* code */
|
||
break;
|
||
case GOA_ASIL_GOA_Detection_Feedback:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_SD:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case EDT_PA_OVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_PA_UVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_NA_OVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_NA_UVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VGH_OVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VGH_UVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VGL_OVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VGL_UVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VCOM_OVP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VCOM_UVP_FLAG:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_POWER:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case STV_Detection:
|
||
/* code */
|
||
break;
|
||
case CKV_Detection:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case EVENT_VDPA:
|
||
for (int i = 0; i < 32; i++)
|
||
{
|
||
switch (*(result+i))
|
||
{
|
||
case VDPA_VDNA_Fail_Ext:
|
||
/* code */
|
||
break;
|
||
case VDPA_VDNA_Fail_Int:
|
||
/* code */
|
||
break;
|
||
case EDT_VDNA_OCP_FLAG:
|
||
/* code */
|
||
break;
|
||
case EDT_VDPA_OCP_FLAG:
|
||
/* code */
|
||
break;
|
||
case Flash_Checksum_Detection:
|
||
/* code */
|
||
break;
|
||
case Register_Checksum_Detection:
|
||
/* code */
|
||
break;
|
||
case Thermal_Ultra_High_Detection:
|
||
/* code */
|
||
break;
|
||
case XON_Detection:
|
||
/* code */
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|