📄 ipaq.c
字号:
printf("open /dev/rs485 fail");
return FALSE;
}
input->update_mouse =mouse_update;
input->get_mouse_xy = mouse_getxy;
input->set_mouse_xy = NULL;
input->get_mouse_button = mouse_getbutton;
input->set_mouse_range = NULL;
input->suspend_mouse= NULL;
input->resume_mouse = NULL;
input->update_keyboard = keyboard_update;
input->get_keyboard_state = keyboard_getstate;
input->suspend_keyboard = NULL;
input->resume_keyboard = NULL;
input->set_leds = NULL;
input->wait_event = wait_event;
mouse_x =0;
mouse_x =0;
CurLPort=0x10;
printf("ps2_recv_buff over!!");
return TRUE;
}
void TermIPAQInput (void)
{
if (FD_2114 >= 0)
close (FD_2114);
if (fd_RS485 >= 0)
close (fd_RS485);
}
//如果有扫描键,返回1..127 否则返回0xff
static unsigned char keycode_to_scancode (unsigned short keycode)
{
if (( keycode>=0x0030) && (keycode<=0x39))
{
return keycode - 0x30 +1; //0..9
}
if (( keycode>=0xffbe) && (keycode<=0xffc9))
{
return keycode - 0xffbe + SCANCODE_F1; //f1..f12
}
switch(keycode)
{
case 'a':
case 'A':
return SCANCODE_A;
case 'b':
case 'B':
return SCANCODE_B;
case 'c':
case 'C':
return SCANCODE_C;
case 'd':
case 'D':
return SCANCODE_D;
case 'e':
case 'E':
return SCANCODE_E;
case 'f':
case 'F':
return SCANCODE_F;
case 'g':
case 'G':
return SCANCODE_G;
case 'h':
case 'H':
return SCANCODE_H;
case 'i':
case 'I':
return SCANCODE_I;
case 'j':
case 'J':
return SCANCODE_J;
case 'k':
case 'K':
return SCANCODE_K;
case 'l':
case 'L':
return SCANCODE_L;
case 'm':
case 'M':
return SCANCODE_M;
case 'n':
case 'N':
return SCANCODE_N;
case 'o':
case 'O':
return SCANCODE_O;
case 'p':
case 'P':
return SCANCODE_P;
case 'q':
case 'Q':
return SCANCODE_Q;
case 'r':
case 'R':
return SCANCODE_R;
case 's':
case 'S':
return SCANCODE_S;
case 't':
case 'T':
return SCANCODE_T;
case 'u':
case 'U':
return SCANCODE_U;
case 'v':
case 'V':
return SCANCODE_V;
case 'w':
case 'W':
return SCANCODE_W;
case 'x':
case 'X':
return SCANCODE_X;
case 'y':
case 'Y':
return SCANCODE_Y;
case 'z':
case 'Z':
return SCANCODE_Z;
case 0xffe3: // left right ctrl
case 0xffe4:
return SCANCODE_LEFTCONTROL; //53
case 0xffe9:
case 0xffea:
return SCANCODE_LEFTALT; //63
case 0xffe1:
case 0xffe2:
return SCANCODE_LEFTSHIFT; //69
case 0x20:
return SCANCODE_SPACE; //空格
case 0xfe58 :
return SCANCODE_CAPSLOCK; //大写锁定
case 0xff09:
return SCANCODE_TAB; //TAB
case 0x27:
return SCANCODE_GRAVE; //`
case 0xff1b:
case 0x1b:
return SCANCODE_ESCAPE; //ESC
case 0xff63:
return SCANCODE_INSERT; //insert
case 0xFFFF:
return SCANCODE_REMOVE; //DEL ??
case 0x3F:
case 0x2f:
return SCANCODE_SLASH; // ?/
case 0x2C:
case 0x3C:
return SCANCODE_COMMA; //,<
case 0x2E:
case 0x3E:
return SCANCODE_PERIOD; //.>
case 0x3A:
case 0x3B:
return SCANCODE_SEMICOLON; //:;
case 0x22:
case 0x60:
return SCANCODE_APOSTROPHE; //"'
case 0x5b:
case 0x7b:
return SCANCODE_BRACKET_LEFT; //{[
case 0x5D:
case 0x7D:
return SCANCODE_BRACKET_RIGHT; //}]
case 0x5C:
case 0x7C:
return SCANCODE_BACKSLASH; // |
case 0x3D:
case 0x2B:
return SCANCODE_EQUAL; //=+
case 0x0D:
return SCANCODE_ENTER; //ENTER
case 0xFF08:
return SCANCODE_BACKSPACE; //BKSP
case 0xFFF05:
return SCANCODE_HOME; //HOME
case 0xFF57:
return SCANCODE_END; //END
case 0xFFF55:
return SCANCODE_PAGEUP; //PGUP
case 0xFFF56:
return SCANCODE_PAGEDOWN; //PGDN
case 0xFFF51:
return SCANCODE_CURSORBLOCKLEFT; //LEFT
case 0xFFF52:
return SCANCODE_CURSORBLOCKUP; //UP
case 0xFFF53:
return SCANCODE_CURSORBLOCKRIGHT; //RIGHT
case 0xFFF54:
return SCANCODE_CURSORBLOCKDOWN; //DOWN
default:
return 0xff;
}
}
//***** 本地切换到主机**********
//0-15 host 16 menu
void SwitchLToHost(uchar id)
{
int fd_fpga;
printf("\n SwitchLToHost(%d) ",id);
if (id>16)
{
printf("error:SwitchLToHost hostid:%d",id);
return;
}
if ((fd_fpga = open("/dev/FPGA", O_RDWR )) == -1)
{
printf("open FPGA file fail");
close(fd_fpga);
return;
}
//通知ps驱动
if (id==16)
CurLPort = (CurLPort &0x0f) | 0x10;
else
CurLPort = id & 0X0F;
//线路切换
ioctl(fd_fpga,FPGA_IO_LSW,id);
close(fd_fpga);
return ;
}
void SwitchLToOrgPort(void)
{
SwitchLToHost(CurLPort & 0x0f);
return;
}
void RS485Pack(uchar *ps2_recv_buff,uint bufflen,uchar *pack,uint *packlen )
{
uchar crc=0;
uchar *ppack=pack;
uchar *pbuff=ps2_recv_buff;
//head
*ppack=0x02;ppack++; //Pack head
//数据
while(pbuff<(ps2_recv_buff+bufflen))
{
crc^=*pbuff; //校验仅针对有效数据
if (*pbuff<=ESCCHAR)
{
*ppack=ESCCHAR;ppack++;
*ppack = *pbuff + ESCCHAR;
}
else
{
*ppack = *pbuff ;
}
pbuff++; ppack++;
}
//校验位
if (crc<=ESCCHAR) //send crc
{
*ppack=ESCCHAR;ppack++;
*ppack = crc + ESCCHAR; ppack++;
}
else
{
*ppack = crc ; ppack++;
}
//tail
*ppack = 0x03 ; ppack++;
*packlen =(uint) ppack - (uint)pack;
}
int RS485SendInPack(uchar portid,uchar *SendBuff,uint SendLen )
{
uint SendPackLen;
int ioret,wlen;
uchar SendPack[60];
RS485Pack(SendBuff,SendLen,SendPack,&SendPackLen);
ioret = ioctl(fd_RS485,RS485_LOCK_SEND,portid);
wlen = write(fd_RS485,SendPack,SendPackLen);
return 0 ;
}
//以缓冲区的方式发送
int RS485SendInBuff(uchar portid,uchar *SendBuff,int sendlen )
{
int ioret,wlen;
ioret = ioctl(fd_RS485,RS485_LOCK_SEND,portid);
wlen = write(fd_RS485,SendBuff,sendlen);
return wlen ;
}
void StreamTo485(uchar *ps2_recv_buff,uchar Port)
{
if (ps2_recv_buff[0]==0x05)
{
ps2_recv_buff[0]='K';
RS485SendInPack(Port,ps2_recv_buff,4);
}
if (ps2_recv_buff[0]==0x04)
{
RS485SendInBuff(Port,ps2_recv_buff,4);
}
}
#endif /* _IPAQ_IAL */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -