📄 serial.c
字号:
#include "serial.h"
#include <reg51.h>
#include "mascot.h"
#include <intrins.h>
#include "osd.h"
#define SERIAL_BUF_LEN 13
extern unsigned char idata buff[];
bit bit_serial_ok;
typedef struct { unsigned int x; unsigned int y; unsigned int Y; } MODE_XYY;
unsigned char code gszRemoteOn[] = { "F1;" };
unsigned char code gszRemoteOff[] = { "F0;" };
unsigned char code gszHoldOn[] = { "H1;" };
unsigned char code gszHoldOff[] = { "H0;" };
unsigned char code gszTransferOn[] = { "T1;" };
unsigned char code gszTransferOff[] = { "T0;" };
unsigned char code gszCh9300K[] = { "C5;" };
unsigned char code gszCh6550K[] = { "C6;" };
unsigned char code gszCh5800K[] = { "C7;" };
unsigned char code gszGetMemory[] = { "K;" };
unsigned char code gszSetMode0[] = { "M0;" };
extern bit bit_fac6550;
extern bit bit_fac9300;
extern bit bit_fac5800;
unsigned char serial_id;
unsigned char serial_skip;
MODE_XYY idata cm;
MODE_XYY idata sm;
void AutoColor(void)
{
bit fL_ok, fx_ok, fy_ok;
unsigned char tmp;
fL_ok = fx_ok = fy_ok = 0;
bit_serial_ok = 0;
serial_id = 0;
serial_skip = 0;
// g_red = g_green = g_blue = 30;
/*DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);*/
chroma_init();
while(1)
{
TI = 0;
if(!serial_getmem()) return;
Str2Tmp(&sm);//sm
if(sm.x >= 100 && sm.y >= 100) break;
miscDelay(10);
}
serial_send(gszTransferOn); //T1
serial_send(gszHoldOff); //H0
DisplaySerialData(OSD_SM_x_xpos,OSD_SM_x_ypos,sm.x);
DisplaySerialData(OSD_SM_y_xpos,OSD_SM_y_ypos,sm.y);
DisplaySerialData(OSD_SM_Y_xpos,OSD_SM_Y_ypos,sm.Y);
if(!serial_getmem()) return;
while(1)
{
if(!serial_getmem()) return;
//if(!serial_getmem()) return;
Str2Tmp(&cm);//cm
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,cm.x);
DisplaySerialData(OSD_CM_y_xpos,OSD_CM_y_ypos,cm.y);
DisplaySerialData(OSD_CM_Y_xpos,OSD_CM_Y_ypos,cm.Y);
//serial_gettmp();
DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);
}//while
/*while(1)
{
if(!serial_gettmp()) break;
Str2Tmp(&cm);//cm
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,cm.x);
DisplaySerialData(OSD_CM_y_xpos,OSD_CM_y_ypos,cm.y);
DisplaySerialData(OSD_CM_Y_xpos,OSD_CM_Y_ypos,cm.Y);
if (bit_fac6550)
{
DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);
}
else
{
DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorNeutralR);
DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorNeutralG);
DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorNeutralB);
}
if(sm.Y > cm.Y)
{
if(sm.Y - cm.Y < 5) fL_ok = 1; else fL_ok = 0;
}
else
{
if(cm.Y - sm.Y < 5) fL_ok = 1; else
{
fL_ok = 0;
if(cm.Y - sm.Y > 100)
{
//g_red = g_green = g_blue = 30;
if (bit_fac6550)
{
setGammaR(eepData.colorCoolR);
setGammaG(eepData.colorCoolG);
setGammaB(eepData.colorCoolB);
}
else
{
setGammaR(eepData.colorNeutralR);
setGammaG(eepData.colorNeutralG);
setGammaB(eepData.colorNeutralB);
}
continue;
}
}
}
if(fx_ok && fy_ok && fL_ok) break;
if(sm.x > cm.x)
{
if (bit_fac6550)
{
tmp = ((sm.x-cm.x+1)>>1) + eepData.colorCoolR;
if(eepData.colorCoolR > tmp) eepData.colorCoolR = 100; else eepData.colorCoolR = tmp;
}
else
{
tmp = ((sm.x-cm.x+1)>>1) + eepData.colorNeutralR;
if(eepData.colorNeutralR > tmp) eepData.colorNeutralR= 100; else eepData.colorNeutralR = tmp;
}
if(sm.x - cm.x < 3) fx_ok = 1; else fx_ok = 0;
}
else
{
if (bit_fac6550)
{
tmp = ((cm.x-sm.x+1)>>1);
if(eepData.colorCoolR > tmp) eepData.colorCoolR -= tmp; else eepData.colorCoolR = 0;
}
else
{
tmp = ((cm.x-sm.x+1)>>1);
if(eepData.colorNeutralR > tmp) eepData.colorNeutralR -= tmp; else eepData.colorNeutralR = 0;
}
if(cm.x - sm.x < 3) fx_ok = 1; else fx_ok = 0;
}
if (bit_fac6550)
{
setGammaR(eepData.colorCoolR);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolR);
}
else
{
setGammaR(eepData.colorNeutralR);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralR);
}
if(sm.y > cm.y)
{
if (bit_fac6550)
{
tmp = ((sm.y-cm.y+1)>>1) + eepData.colorCoolG;
if(eepData.colorCoolG > tmp) eepData.colorCoolG = 100; else eepData.colorCoolG = tmp;
}
else
{
tmp = ((sm.y-cm.y+1)>>1) + eepData.colorNeutralG;
if(eepData.colorNeutralG > tmp) eepData.colorNeutralG = 100; else eepData.colorNeutralG = tmp;
}
if(sm.y - cm.y < 3) fy_ok = 1; else fy_ok = 0;
}
else
{
if (bit_fac6550)
{
tmp = ((cm.y-sm.y+1)>>1);
if(eepData.colorCoolG > tmp) eepData.colorCoolG -= tmp; else eepData.colorCoolG = 0;
}
else
{
tmp = ((cm.y-sm.y+1)>>1);
if(eepData.colorNeutralG > tmp) eepData.colorNeutralG -= tmp; else eepData.colorNeutralG = 0;
}
if(cm.y - sm.y < 3) fy_ok = 1; else fy_ok = 0;
}
if (bit_fac6550)
{
setGammaG(eepData.colorCoolG);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolG);
}
else
{
setGammaG(eepData.colorNeutralG);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralG);
}
if((!fx_ok) || (!fy_ok)) continue;
if(!fL_ok)
{
if(sm.Y > cm.Y)
{
if (bit_fac6550)
{
tmp = ((sm.Y-cm.Y+7)>>3) + eepData.colorCoolB;
if(eepData.colorCoolB > tmp) eepData.colorCoolB = 100; else eepData.colorCoolB = tmp;
}
else
{
tmp = ((sm.Y-cm.Y+7)>>3) + eepData.colorNeutralB;
if(eepData.colorNeutralB > tmp) eepData.colorNeutralB = 100; else eepData.colorNeutralB = tmp;
}
}
else
{
if (bit_fac6550)
{
tmp = ((cm.Y-sm.Y+3)>>2);
if(eepData.colorCoolB > tmp) eepData.colorCoolB -= tmp; else eepData.colorCoolB = 0;
}
else
{
tmp = ((cm.Y-sm.Y+3)>>2);
if(eepData.colorNeutralB > tmp) eepData.colorNeutralB -= tmp; else eepData.colorNeutralB = 0;
}
}
}
if (bit_fac6550)
{
setGammaB(eepData.colorCoolB);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolB);
}
else
{
setGammaB(eepData.colorNeutralB);
DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralB);
}
}
serial_send(gszRemoteOff);*/
}
void chroma_init()
{
serial_send(gszRemoteOn); //F1
serial_send(gszTransferOff); //T0
serial_send(gszHoldOn); //H1
serial_send(gszSetMode0); //M0
if(bit_fac6550)
serial_send(gszCh6550K);
else if (bit_fac9300)
serial_send(gszCh9300K);
else
serial_send(gszCh5800K);
}
void serial_send(unsigned char *buf)
{
while(*buf)
{
SBUF = *buf;
while(!TI); TI = 0;
buf++;
miscDelay(10);
}
}
/****************************************************************************/
// serial_getmem
//
// Mark Lee 2000.9
/****************************************************************************/
bit serial_getmem(void)
{
serial_send(gszGetMemory);
//18old;39new
serial_skip =39;
serial_id = 0;
bit_serial_ok = 0;
return wait_serial();
}
/****************************************************************************/
// Str2Tmp
//
// Mark Lee 1999.5
/****************************************************************************/
void Str2Tmp(MODE_XYY *mx)
{
unsigned char i;
unsigned char *buf = buff;
mx->x = 0;
mx->y = 0;
mx->Y = 0;
if(*buf < '0' || *buf > '9') buf++;
for(i=0; i<4; i++)
{
if(*buf < '0' || *buf > '9') { buf++; break; }
mx->x = mx->x * 10 + (*buf++ - '0');
}
for(i=0; i<4; i++)
{
if(*buf < '0' || *buf > '9') { buf++; break; }
mx->y = mx->y * 10 + (*buf++ - '0');
}
for(i=0; i<3; i++)
{
if(*buf < '0' || *buf > '9') { buf++; break; }
mx->Y = mx->Y * 10 + (*buf++ - '0');
}
if(*buf >= '0' && *buf <= '9') mx->Y = mx->Y * 10 + (*buf - '0');
}
/****************************************************************************/
// wait_serial
//
// Mark Lee 2000.9
/****************************************************************************/
bit wait_serial()
{
while(1)
{
if(bit_serial_ok) break;
if(!POWER_BUT_PIN) { while(!POWER_BUT_PIN); return 0; }
}
bit_serial_ok = 0;
return 1;
}
/****************************************************************************/
// serial_int -- Serial port interrupt function
//
// Mark Lee 1999.5
/****************************************************************************/
void serial_int(void) interrupt 4
{
if(RI)
{
buff[serial_id] = SBUF;
RI = 0;
if(serial_skip) serial_skip--;
else
{
if(buff[serial_id] == 0x0d)
{
bit_serial_ok = 1;
buff[serial_id] = 0;
serial_id = 0;
}
else if(++serial_id >= SERIAL_BUF_LEN) serial_id = 0;
}
}
}
#undef sm_x
#undef sm_y
#undef sm_Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -