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

📄 ipaq.c

📁 minigui 串口输入驱动输入引擎 数据通过串口打包发送而来 直接向平台发送消息
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -