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

📄 rmcon.c

📁 dvr
💻 C
字号:
//==========================================================
//
// Filename: RMCON.C
//
// Description: For receiving the remote control input values
//              through the UART 0
//
//==========================================================

#include "types.h"
#include "8052reg.h"
#include <stdio.h>
#include "sio.h"
#include "rmcon.h"
#include "eprom.h"
#include "gosd.h"
#include "gio.h"
#include "lib.h"


/*
	 X_FFAST	0x00 @
	 X_CH1 		0x01 A
	 X_CH2 		0x02 B
	 X_CH3 		0x03 C
	 X_CH4 		0x04 D
	 X_CHALL 	0x05 E
	 X_REC  	0x06 F
	 X_RFAST	0x07 G
	 X_STOP 	0x08 H
	 X_PAUSE 	0x09 I
	 X_REZ01	0x0a J
	 X_PLAY 	0x0b K
	 X_MENU 	0x0c L
	 X_UPRT 	0x0d M
	 X_DNLT 	0x0e N
	 X_SELECT  	0x0f O
*/

#ifdef DISPLAY_IP_ADDRESS
///////////  RX & display  //////////
xdata u8 gv_rm_IPC_RX_flag  = 0;//0:no act, 1:RX start,send response 2:wait recieve
xdata u8 gv_rm_IPC_RX_cnt   = 0;// 0:IP Address, 1:SumMask, 2:Gateway, 3:DNS
xdata u8 gv_rm_IPC_flag     = 0;
xdata u8 gv_rm_IPC_cnt      = 0;
///////////  TX  ////////////////////
xdata u8 gv_IPC_TX_flag     = 0;//0:no act,
                                //1:send start char,wait response,
                                //2:TX start,
                                //3:TX ok,wait gs501 response,
                                //XX4:check sum,wait response.
xdata u8 gv_IPC_TX_cnt      = 0;
xdata u8 gv_IPC_TX_cnt01    = 0;
xdata u8 gv_IPC_TX_cnt02    = 0;
//xdata u8 gv_IPC_TX_checksum = 0;
/////////////////////////////////////
xdata u8 gv_IPC_Change_flag = 0;

extern xdata u8 gv_depth_3_menu;

#endif

#ifdef RE_CON
xdata u8 gv_rm_key = 0x00;
xdata u8 gv_rm_key_flag = 0x00;

//===========================================================
//
//===========================================================
void rmcon_process(void)
{
	xdata u8 size;
	xdata u8 ch = 0;
#ifdef DISPLAY_IP_ADDRESS
	xdata u8 strbuf[10];
#endif

	size = sio_rbuflen();
	if(size!=0)
	{
		ch = sio_getchar();
		if((ch & 0xF0)==0xE0) // remote control key value
		{
			rmcon_sendkey( ch );
		}
#ifdef DISPLAY_IP_ADDRESS
		else if((ch & 0xF0)==0xD0 && gv_rm_IPC_RX_flag == 1) // remote control IP protocal value
		{//recieve address
			if(gv_rm_IPC_flag % 2)
			{
				switch(gv_rm_IPC_RX_cnt)
        	                {
        	                	case 0:
        	                	      Val_EPROM_rm_IP[gv_rm_IPC_cnt]= (ch<<4) & 0xF0 ;
        	                	      break;
        	                	case 1:
        	                	      Val_EPROM_rm_SumMask[gv_rm_IPC_cnt]= (ch<<4) & 0xF0 ;
        	                	      break;
        	                	case 2:
        	                	      Val_EPROM_rm_Gateway[gv_rm_IPC_cnt]= (ch<<4) & 0xF0 ;
        	                	      break;
        	                	case 3:
        	                	      Val_EPROM_rm_DNS[gv_rm_IPC_cnt]= (ch<<4) & 0xF0 ;
        	                	      break;
        	                }
			}
			else
			{
				switch(gv_rm_IPC_RX_cnt)
        	                {
        	                	case 0:
        	                	      Val_EPROM_rm_IP[gv_rm_IPC_cnt] |= (ch & 0x0F);
        	                	      break;
        	                	case 1:
        	                	      Val_EPROM_rm_SumMask[gv_rm_IPC_cnt] |= (ch & 0x0F);
        	                	      break;
        	                	case 2:
        	                	      Val_EPROM_rm_Gateway[gv_rm_IPC_cnt] |= (ch & 0x0F);
        	                	      break;
        	                	case 3:
        	                	      Val_EPROM_rm_DNS[gv_rm_IPC_cnt] |= (ch & 0x0F);
        	                	      break;
        	                }
			        gv_rm_IPC_cnt++;
			}
			gv_rm_IPC_flag++;
			if(gv_rm_IPC_flag == 9)
			{
				gv_rm_IPC_RX_cnt++;
				gv_rm_IPC_flag = 1;
				gv_rm_IPC_cnt = 0;
				if(gv_rm_IPC_RX_cnt == 4)//recieve lan address ok,then wait 0xcb
				{
					gv_rm_IPC_RX_flag = 2;
				}
			}
		}
		else if(ch == 0xCB && gv_rm_IPC_RX_flag == 2)//recieve finished
		{
			r_timeout = 0;
			sio_putchar( 0xBC );//send to gs501 for response recieve ok
                        gv_rm_IPC_RX_cnt = 0;// 0:IP Address, 1:SumMask, 2:Gateway, 3:DNS
                        gv_rm_IPC_RX_flag = 0;//0:no act, 1:RX start,send response 2:wait recieve
                        EPROM_Write_IP_Address();
                        gv_IPC_Change_flag |= 0x10;//LAN IP changed
                        Val_gv_show_rm_IP |= 0x80;//refresh ip address in monitor
	        }
	        else if(ch == 0xFA && gv_rm_IPC_RX_flag == 0)//Prepare recieve LAN address
	        {
	        	gv_rm_IPC_RX_flag = 1;//start recieve
	                gv_rm_IPC_flag = 1;
			gv_rm_IPC_cnt = 0;
			gv_rm_IPC_RX_cnt = 0;// 0:IP Address, 1:SumMask, 2:Gateway, 3:DNS
			sio_putchar( 0xFB );//send response
			r_timeout = 1;//time out counter
	        }
	        else if(ch == 0xBC && gv_IPC_TX_flag == 3)//check transfer ok with gs501
		{
                        gv_IPC_TX_flag = 0;
                        t_timeout = 0;
                        EPROM_Write_IP_Address();
                        gv_IPC_Change_flag |= 0x10;//LAN IP changed
                        Val_gv_show_rm_IP |= 0x80;//refresh ip address in monitor
                        if(gv_depth_3_menu == 64)
                        {                                              //12345678901234567890123456789012
                        	osd_printf(16, osdgv_menu_base + 5, 27, "                           ");
                        	osd_printf(14, osdgv_menu_base + 7, 29, "TRANSFER LAN ADDRESS FINISHED");
                        	osd_printf(10, osdgv_menu_base + 9, 32, "PLEASE PRESS MENU BUTTON TO EXIT");
                        	gv_depth_3_menu = 66;
                        }
	        }
#endif //#ifdef DISPLAY_IP_ADDRESS
        }
#ifdef DISPLAY_IP_ADDRESS
        if(gv_rm_IPC_RX_flag == 1 || gv_rm_IPC_RX_flag == 2)
        {
        	if(r_timeout >= 500)//recieve 30sec time out
		{
		     gv_rm_IPC_RX_flag = 0;
		     EPROM_Read_IP_Address();
		     r_timeout = 0;
		     gv_IPC_Change_flag |= 0x10;//LAN IP changed
                     Val_gv_show_rm_IP |= 0x80;//refresh ip address in monitor
		}
        }
        if(gv_IPC_TX_flag == 1)//wait gs501 response for TX
	{
		if(ch == 0xFB)//start transfer LAN address
	        {
	        	gv_IPC_TX_cnt = 0;
	                gv_IPC_TX_flag = 2;//start transfer
	                t_timeout = 0;//time out counter
	                gv_IPC_TX_cnt02 = 1;
		        gv_IPC_TX_cnt01 = 0;
	        }
		else if(t_timeout >= 500 && gv_depth_3_menu == 64)//wait gs501 response 10s time out
		{
                 	gv_IPC_TX_flag = 3;//time out
                 	t_timeout = 500;
                }
                else if(t_timeout >= 500)//start up time out
		{
                 	gv_IPC_TX_flag = 0;//time out
                 	t_timeout = 0;
		        gv_IPC_Change_flag |= 0x10;//LAN IP changed
                        Val_gv_show_rm_IP |= 0x80;//refresh ip address in monitor
                }
	}
        else if(gv_IPC_TX_flag == 2 && TI == 0)//start transfer LAN address
        {
        	for(size=0;size<10;size++) strbuf[size] = (gv_IPC_TX_cnt02 >= size)?'.':' ';
        	center_line(osdgv_menu_base + 7,strbuf,10);
        	switch(gv_IPC_TX_cnt)
        	{
        		case 0:
        		      ch = Val_EPROM_rm_IP[gv_IPC_TX_cnt01];
        		      break;
        		case 1:
        		      ch = Val_EPROM_rm_SumMask[gv_IPC_TX_cnt01];
        		      break;
        		case 2:
        		      ch = Val_EPROM_rm_Gateway[gv_IPC_TX_cnt01];
        		      break;
        		case 3:
        		      ch = Val_EPROM_rm_DNS[gv_IPC_TX_cnt01];
        		      break;
        	}
        	
        	if(gv_IPC_TX_cnt02 % 2)
		{
			//ch = (ch >> 4) & 0x0F) | 0xD0;
			sio_putchar( ((ch >> 4) & 0x0F) | 0xD0 );//0xDx
			//gv_IPC_TX_checksum = ch;
		}
		else
		{
			//ch = (ch & 0x0F) | 0xD0;
			sio_putchar( (ch & 0x0F) | 0xD0 );//0xDx
		        gv_IPC_TX_cnt01++;
		        //gv_IPC_TX_checksum += ch;
		        //sio_putchar( gv_IPC_TX_checksum );//0xDx
		}
		//delay_time(350, 5); // 5m sec
		delay_time(1000, 5); // 5m sec
		gv_IPC_TX_cnt02++;
		if(gv_IPC_TX_cnt02 == 9)
		{
			gv_IPC_TX_cnt01 = 0;
			gv_IPC_TX_cnt++;
			gv_IPC_TX_cnt02 = 1;
			if(gv_IPC_TX_cnt == 4)//transfer finished
			{
				sio_putchar( 0xCB );
				gv_IPC_TX_flag = 3;
				t_timeout = 1;
			}
		}
        }
        else if(gv_IPC_TX_flag == 3)//transfer ok,check response time out
        {
        	if(t_timeout >= 500 && gv_depth_3_menu == 64)//wait gs501 response 10s time out
		{                                              //12345678901234567890123456789012
                        osd_printf(16, osdgv_menu_base + 5, 27, "                           ");
        		osd_printf(16, osdgv_menu_base + 7, 26, "TRANSFER FAILURE(TIMEOUT) ");
               	        osd_printf(10, osdgv_menu_base + 9, 32, "PLEASE PRESS MENU BUTTON TO EXIT");
                }
                else if(t_timeout >= 500)//start up transfer time out
                {
                	gv_IPC_TX_flag = 0;//time out
                 	t_timeout = 0;
		        gv_IPC_Change_flag |= 0x10;//LAN IP changed
                        Val_gv_show_rm_IP |= 0x80;//refresh ip address in monitor
                }
        }
#endif //#ifdef DISPLAY_IP_ADDRESS
}

//===========================================================
//
//===========================================================
void rmcon_sendkey(u8 key)
{
	gv_rm_key = key & 0x0F;
	gv_rm_key_flag = 1;
}

#endif

⌨️ 快捷键说明

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