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

📄 mou_mt.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
字号:
/* *  MicroTouch touch panel driver for MicroTouch capacitive and resistive *  controllers at RS232 port. * *  We expect the Microtouch Controller configured to 9600 Baud, 8 data bits, *  1 stop bit, no parity * *  Written by Holger Waechtler <hwaechtler@users.sourceforge.net> */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <termios.h>#include "device.h"static int  	MT_Open(MOUSEDEVICE *pmd);static void 	MT_Close(void);static int  	MT_GetButtonInfo(void);static void	MT_GetDefaultAccel(int *pscale,int *pthresh);static int  	MT_Read(MWCOORD *dx, MWCOORD *dy, MWCOORD *dz, int *bp);MOUSEDEVICE mousedev = {	MT_Open,	MT_Close,	MT_GetButtonInfo,	MT_GetDefaultAccel,	MT_Read,	NULL};static int mt_fd;#define CMD(fd,x) \   do { \      write (fd, "\001" x "\r", strlen(x) + 2); \      tcdrain(fd); \   } while (0)/* * Open up the mouse device. */static intMT_Open(MOUSEDEVICE *pmd){   char *devname = "/dev/ttyS0";   struct termios termios;   if ((mt_fd = open (devname, O_RDWR | O_NONBLOCK)) < 0) {      fprintf (stderr, "error opening '%s'\n", devname);      exit (-1);   }   tcgetattr (mt_fd, &termios);   cfsetispeed (&termios, B9600);   cfsetospeed (&termios, B9600);   cfmakeraw (&termios);   termios.c_cflag &= ~CBAUD;   termios.c_cflag = B9600;   termios.c_cflag |= CS8 | CREAD;   termios.c_oflag = 0;   termios.c_oflag &= ~(OCRNL | ONLRET);   tcsetattr (mt_fd, TCSAFLUSH, &termios);   CMD(mt_fd,"R");   CMD(mt_fd,"AD");   CMD(mt_fd,"PN812");   CMD(mt_fd,"FT");   CMD(mt_fd,"MS");   CMD(mt_fd,"PL");  /*   *  This is a sort of hack, but our embedded PPC was to slow to read all   *  responses from the Microtouch controller. To get out of this we simply   *  discard them ...   */   usleep (250000);   tcflush (mt_fd, TCIOFLUSH);   return 0;}/* * Close the mouse device. */static voidMT_Close(void){   if (mt_fd > 0)      close (mt_fd);   mt_fd = 0;}/* * Get mouse buttons supported */static intMT_GetButtonInfo(void){   return MWBUTTON_L;}/* * doesn't makes sense for a touch panel ... */static voidMT_GetDefaultAccel(int *pscale,int *pthresh){   *pscale = 3;   *pthresh = 5;}char buf [5];int bytes_in_buf = 0;/* * Attempt to read bytes from the mouse and interpret them. * Returns -1 on error, 0 if either no bytes were read or not enough * was read for a complete state, or 1 if the new state was read. * When a new state is read, the current buttons and x and y deltas * are returned.  This routine does not block. */static intMT_Read(MWCOORD *dx, MWCOORD *dy, MWCOORD *dz, int *bp){   if (bytes_in_buf == 5) {      bytes_in_buf = 0;      *dx = ((buf[1] & 0x7f) | ((buf[2] & 0x7f) << 7));      *dy = ((buf[3] & 0x7f) | ((buf[4] & 0x7f) << 7));      *dx = (*dx * scrdev.xvirtres) >> 14;      *dy = scrdev.yvirtres - ((*dy * scrdev.yvirtres) >> 14);      *dz = 1;      if (!(buf[0] & (1 << 6)))         *bp = 0;      else         *bp = MWBUTTON_L;      return 2;   }   if (read (mt_fd, buf + bytes_in_buf, 1) == 1)      bytes_in_buf++;   if ((buf[bytes_in_buf-1] & 0x80) != 0) {      buf [0] = buf [bytes_in_buf-1];      bytes_in_buf = 1;   }          return 0;}

⌨️ 快捷键说明

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