2025-05-21 11:31:07 +08:00

405 lines
12 KiB
C
Raw Permalink Blame History

/*
* 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;
}