📄 rmcon.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 + -