// The second version for VGA8X4 including default set , new connect of LCD and back light
#include "reg51.h"
#include "I2C.H"
#include "TW2835.H"
#include "MAX9675.H"
#include "ACTIVE_AUDIO.H"
#include "POTENTIOMETER.H"
#include "SLAVE_CON.H"
//#include "TVP5146.H"
#include "RS232_2.H"
#include "TW2835cfg.H"
//#include "cmn.h"
#define bool bit
#define FALSE 0
#define TRUE 1
#define LOW 0
#define HIGH 1
#define U8 unsigned char
#define U16 unsigned int
#define MASTER 0
#define SLAVE1 1
#define SLAVE2 2
#define SLAVE3 3
#define PAGE0 0
#define PAGE1 1
#define PAGE2 2
#define VIDEOLED_OFF 0
#define VIDEOLED_ON 1
#define AUDIOLED_OFF 2
#define AUDIOLED_ON 3
#define COMLED_ON 4
#define COMLED_OFF 5
#define VIDEOLED 0x10
#define AUDIOLED 0x20
#define STATUSLED 0x10
#define HDDLED 0x08
#define SAVELED 0x02
#define LANLED 0x01
#define COMLED 0x04
#define LOOPCOUNT 50
#define LEDLOOP 60
#define LOCAL_VIDEO_ADDR0 4
#define LOCAL_VIDEO_ADDR1 5
#define LOCAL_VIDEO_ADDR2 6
#define LOCAL_VIDEO_ADDR3 7
#define LOCAL_VIDEO_ADDR4 8
#define RECORD_INPUT 0x21
#define LOCAL_AUDIO_ADDR0 9
#define LOCAL_AUDIO_ADDR1 10
#define LOCAL_AUDIO_ADDR2 11
#define LOCAL_AUDIO_ADDR3 12
#define NET_AUDIO_ADDR 14
#define VGA_INPUT_ADDR 13
#define ACT_DETIME_ADDR 0x22
#define DVDR_CON_ADDR 0x25
#define LOCAL_VIDEO_OUT0 15
#define LOCAL_VIDEO_OUT1 14
#define LOCAL_VIDEO_OUT2 13
#define LOCAL_VIDEO_OUT3 12
#define VIDEO2VGA 11
#define RECORD_VIDEO_IN 9
#define LCD_VIDEO_IN 8
#define TW2835_VIDEO_INX 14
#define VGA2VIDEO_IN 8
#define YUV2VIDEO_IN 9
#define OSDOUTPUT 15
//#define OSDOUTPUT 10
#define LOCAL_AUDIO_OUT0 15
#define LOCAL_AUDIO_OUT1 14
#define LOCAL_AUDIO_OUT2 13
#define LOCAL_AUDIO_OUT3 12
#define NET_AUDIO_OUT 11
#define ADD_AUDIO_IN1 12
#define ADD_AUDIO_IN2 13
#define ADD_AUDIO_IN3 14
#define ADD_AUDIO_IN 15
#define MOUSE_X_ORI 88
#define MOUSE_Y_ORI 72
#define CENTER_X 8
#define CENTER_Y 6
#define MOTION_MAX_POINT_NOISE 100 //if detection result is larger, discard it
#define MOTION_MIN_SCALE 0
#define MOTION_MAX_SCALE 10
#define MOTION_COUNT_NUM 2 //the number of the same result so that do action
#define MOTION_COUNT_INTERVAL 10 //wait for some time to read
#define Rec_Det_Reg 0x26 //address of Record status
// sfr P4 = 0xE8;
//************* TW2835 CONTROL INTERFACE **********
sfr MDATA= 0x80;
sbit M_IRQ= 0x90; //P1_0
sbit HWRB= 0x91; //P1_1
sbit HRDB= 0xCA; //P5_2
sbit HALE= 0x94; //P1_4
sbit M_HCSB0= 0xA0;//P2_0//
sbit M_HCSB1= 0xA1;//P2_1//
sbit S1_HCSB0= 0xA2;//P2_2//
sbit S1_HCSB1= 0xA3;//P2_3//
sbit RX_MCU1= 0x92; //P1_2
sbit TX_MCU1= 0x93; //P1_3
sbit VDIN= 0x96; //P1_6
sbit VCLK= 0x95; //P1_5
// sbit DEFAULT= 0x97;//P1_7//
sbit S_VIDEO1= 0xA4;//P2_4//
sbit S_VIDEO0= 0xA5;//P2_5//
sbit CAT_SCK= 0xA6;//P2_6//
sbit CAT_SI= 0xA7;//P2_7//
sbit ACONIN0= 0xC1;//P4_1
sbit ACONIN1= 0xC2;//P4_2
//************* MUC & HI3510 INTERFACE **********
sbit RxD = 0xB0; //P3_0
sbit TxD = 0xB1; //P3_1
sbit VIDEO_LOCK= 0x97;//P1_7
sbit AUDIO_LOCK= 0xC3;//P4_3
sbit LED_LOCK= 0xB2;//P3_2//
sbit AUDIO_ACTIVE = 0xB3;//P3_3 //the signal of valid audio activiation action
sbit I2CR = 0xB4;//P3_4
sbit I2COK = 0xB5;//P3_5 //24C64 I2C connect select signal
//0: MCU control 1: 3510 control
sbit SDA = 0xB6;//P3_6
sbit SCL = 0xB7;//P3_7
//********** AD8113 CONTROL INTERFACE ***************
// sbit AV_LOCK= 0xB2;//P3_2
#define VCE 0x10
#define VMODE 0x20
#define VUPDATE 0x40
#define D_KEY_STOP 0x01
#define D_KEY_REC 0x02
#define D_KEY_SEL 0x04
#define D_KEY_FUN 0x08
#define D_KEY_PAUSE 0x10
#define D_KEY_EJECT 0x20
//********* OTHER *********
sbit RSTN= 0xC0;//P4_0
sfr P4SW= 0xBB;
sbit DVD_CON= 0xC4;//P4_4
// sbit VIRT_REMOT= 0xC5;//P4_5
// sbit ACDET= 0xC8;//P5_0
sbit REC_DET= 0xC9;//P5_1 //read the status of recorder
sbit DVDCON2= 0xCB;//P5_3
sbit S0 = 0xA0;
sbit S1 = 0xA1;
sbit S2 = 0xA2;
sbit S3 = 0xA3;
sbit S4 = 0xA4;
sbit S5 = 0xA5;
sbit S6 = 0xA6;
sbit S7 = 0xA7; //The data bus
//U8 RSDATA[7];
xdata U8 RS232SEND,RS232RECEIVE[50],RS232RECEIVE2[36],PosMode;
xdata U8 RS232_Receive_Count=0,RS232_Receive_Count2=0;
bit RS232FLAG,RS232FLAG2,CAMCONFLAG,NETOPFLAG;
bit KEYFLAG,ONOFF,FORBIDFLAG,VIDEOFLAG,I2CFLAG;
bit INI_COMFLAG,BOUNDFLAG,WHOLE_SIZE_FLAG,INI_LED_FLAG;
bit SELE_CH;
xdata MMCC mmcc = {0};
//*******I2C Input2Chan*********
extern U8 code PICMODE1[2]= {0x00,0x00};
extern U8 code PICMODE4[5]= {0x01,0x00,0x01,0x02,0x03};
extern U8 code PICMODE9[10]= {0x02,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
extern U8 code PICMODE16[17]= {0x03,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
//xdata U8 I2Cdata1[20];
bool bVideoLed,bAudioLed,bComLed;
xdata U8 uchLedCount,uchVideoCount,uchAudioCount,uchComCount;
//bool bAUTO_ACT_FLAG,bMANUAL_ACT_FLAG;
U8 PICMODE = 0;
bool pic12FLAG;
xdata U8 temp1 = 1,temp2;
xdata U8 uchMotionData[24];
xdata U8 uchLastData;
xdata int Camera_Pos_X,Camera_Pos_Y;
bool bitLastFlag;
xdata int uiCountMotion;
typedef struct
{
U8 uchVFirst;
U8 uchVNumber;
U8 uchHFirst;
U8 uchHNumber;
U8 uchHData[24];
}MOTIONCON;
xdata MOTIONCON MotionData[2] = {0};
xdata U8 MD_Max_point_Count,CurrentPosCount;
xdata U8 CurrentXData,CurrentYData;
xdata U8 Rec_Det_Status = 0;
xdata unsigned int DELAYCOUNT;
bool DelayFlag = 0;
bool bitHFlag; //Motion detected line Flag
bool bitVFlag; //Motion detected field Flag
bool RemoteTimeFlag; // Virtual Remote Control for DVD
bool bitMulti_disFlag0; //when choose the full display in multi-display mode,change to direct output
bool bitMulti_disFlag1; //when choose the full display in multi-display mode,change to direct output
bool bitMulti_disFlag2; //when choose the full display in multi-display mode,change to direct output
bool bitMulti_disFlag3; //when choose the full display in multi-display mode,change to direct output
bool bitMulti_disFlag4; //when choose the full display in multi-display mode,change to direct output
void SendSBUF(U8 data1);
void SendS2BUF(U8 data1);
void SendActToArm();
void I2control();
U8 code TVP_VGA_REG1[] = {0x00,0x04,0x08,0x0E,0x33,0x34,0x36
};
U8 code TVP_VGA_DATA1[]= {0x84,0x3F,0x00,0x04,0x40,0x11,0xFF
};
U8 code TVP_CVBS_REG1[] = {0x00,0x08,0x0E,0x34
};
U8 code TVP_CVBS_DATA1[]= {0x00,0x00,0x04,0x11
};
//**********************************************Program****************************
void delay_a(U16 num)
{
U16 i,j;
// DelayFlag = TRUE;
// DELAYCOUNT = 0;
// while(DELAYCOUNT <= (num*2));
// DelayFlag = FALSE;
for(i=0;i<250;i++)
for(j=0;j<num;j++);
}
void LEDA(U8 SelLED)
{
// U16 i,j;
MDATA = 0xF7;
switch (SelLED)
{
case (VIDEOLED_OFF):
AUDIO_LOCK = HIGH;
MDATA |= VIDEOLED;
AUDIO_LOCK = LOW;
bVideoLed = FALSE;
break;
case (VIDEOLED_ON):
AUDIO_LOCK = HIGH;
MDATA &= ~VIDEOLED;
AUDIO_LOCK = LOW;
bVideoLed = TRUE;
uchVideoCount = 0;
break;
case (AUDIOLED_OFF):
AUDIO_LOCK = HIGH;
MDATA |= AUDIOLED;
AUDIO_LOCK = LOW;
bAudioLed = FALSE;
break;
case (AUDIOLED_ON):
AUDIO_LOCK = HIGH;
MDATA