Thu Jan 29 01:56:02 2015 UTC ()
add wsmouse support to wscons driver


(jmcneill)
diff -r1.67 -r1.68 pkgsrc/devel/SDL/distinfo
diff -r1.5 -r1.6 pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsevents.c
diff -r1.3 -r1.4 pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsvideo.c

cvs diff -r1.67 -r1.68 pkgsrc/devel/SDL/distinfo (expand / switch to unified diff)

--- pkgsrc/devel/SDL/distinfo 2015/01/28 17:14:47 1.67
+++ pkgsrc/devel/SDL/distinfo 2015/01/29 01:56:02 1.68
@@ -1,13 +1,15 @@ @@ -1,13 +1,15 @@
1$NetBSD: distinfo,v 1.67 2015/01/28 17:14:47 jmcneill Exp $ 1$NetBSD: distinfo,v 1.68 2015/01/29 01:56:02 jmcneill Exp $
2 2
3SHA1 (SDL-1.2.15.tar.gz) = 0c5f193ced810b0d7ce3ab06d808cbb5eef03a2c 3SHA1 (SDL-1.2.15.tar.gz) = 0c5f193ced810b0d7ce3ab06d808cbb5eef03a2c
4RMD160 (SDL-1.2.15.tar.gz) = d4802a090cb4a24eeb0c8ce5690802f596d394c3 4RMD160 (SDL-1.2.15.tar.gz) = d4802a090cb4a24eeb0c8ce5690802f596d394c3
5Size (SDL-1.2.15.tar.gz) = 3920622 bytes 5Size (SDL-1.2.15.tar.gz) = 3920622 bytes
6SHA1 (patch-aa) = 00fb7a85caf8fc9f08298d0a07a4587757fdffb0 6SHA1 (patch-aa) = 00fb7a85caf8fc9f08298d0a07a4587757fdffb0
7SHA1 (patch-ac) = 8b2dddff9ad449b19b35ef364e2d960e46284563 7SHA1 (patch-ac) = 8b2dddff9ad449b19b35ef364e2d960e46284563
8SHA1 (patch-src_audio_sun_SDL__sunaudio.c) = 4b492b40d39e6444037dfda55766e4a149cc6c30 8SHA1 (patch-src_audio_sun_SDL__sunaudio.c) = 4b492b40d39e6444037dfda55766e4a149cc6c30
9SHA1 (patch-src_joystick_bsd_SDL__sysjoystick.c) = 4ea0136f231729129b82e5f7ee4b9eaf68a13876 9SHA1 (patch-src_joystick_bsd_SDL__sysjoystick.c) = 4ea0136f231729129b82e5f7ee4b9eaf68a13876
10SHA1 (patch-src_video_quartz_SDL__QuartzVideo.h) = 19d952bade06dbd646e94f42139c38436969b1a8 10SHA1 (patch-src_video_quartz_SDL__QuartzVideo.h) = 19d952bade06dbd646e94f42139c38436969b1a8
11SHA1 (patch-src_video_wscons_SDL__wsconsevents.c) = 6ae894622078c2cc2a0add0b496944567d38f797 11SHA1 (patch-src_video_wscons_SDL__wsconsevents.c) = f7519864e9c13ad69eae9a42df22a944586ab93b
12SHA1 (patch-src_video_wscons_SDL__wsconsvideo.c) = 356a8817cc41dde5e24cb23f032215931f85a84b 12SHA1 (patch-src_video_wscons_SDL__wsconsevents__c.h) = 97206e2aca0b620005217d9d07ad1177516cac92
 13SHA1 (patch-src_video_wscons_SDL__wsconsvideo.c) = 17e048ccb201ae961e820ab880d5a588b2db2639
 14SHA1 (patch-src_video_wscons_SDL__wsconsvideo.h) = 82028df57cf3de95152278924ffe3134fe32f85a
13SHA1 (patch-src_video_x11_SDL_x11video.c) = 624fbb7e701d6de6ec93096beea7c085125934aa 15SHA1 (patch-src_video_x11_SDL_x11video.c) = 624fbb7e701d6de6ec93096beea7c085125934aa

cvs diff -r1.5 -r1.6 pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsevents.c (expand / switch to unified diff)

--- pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsevents.c 2015/01/28 17:14:47 1.5
+++ pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsevents.c 2015/01/29 01:56:02 1.6
@@ -1,34 +1,146 @@ @@ -1,34 +1,146 @@
1$NetBSD: patch-src_video_wscons_SDL__wsconsevents.c,v 1.5 2015/01/28 17:14:47 jmcneill Exp $ 1$NetBSD: patch-src_video_wscons_SDL__wsconsevents.c,v 1.6 2015/01/29 01:56:02 jmcneill Exp $
2 
3Add support for USB keyboards on NetBSD. 
4 2
5--- src/video/wscons/SDL_wsconsevents.c.orig 2012-01-19 06:30:06.000000000 +0000 3--- src/video/wscons/SDL_wsconsevents.c.orig 2012-01-19 06:30:06.000000000 +0000
6+++ src/video/wscons/SDL_wsconsevents.c 4+++ src/video/wscons/SDL_wsconsevents.c
7@@ -47,6 +47,13 @@ int WSCONS_InitKeyboard(_THIS) 5@@ -47,6 +47,13 @@ int WSCONS_InitKeyboard(_THIS)
8 return -1; 6 return -1;
9 } 7 }
10  8
11+#if defined(__NetBSD__) 9+#if defined(__NetBSD__)
12+ if (private->kbdType == 0) { 10+ if (private->kbdType == 0) {
13+ /* wsmux with no keyboard attached, assumed USB */ 11+ /* wsmux with no keyboard attached, assumed USB */
14+ private->kbdType = WSKBD_TYPE_USB; 12+ private->kbdType = WSKBD_TYPE_USB;
15+ } 13+ }
16+#endif 14+#endif
17+ 15+
18 if (tcgetattr(private->fd, &private->saved_tty) == -1) { 16 if (tcgetattr(private->fd, &private->saved_tty) == -1) {
19 WSCONS_ReportError("cannot get terminal attributes: %s", strerror(errno)); 17 WSCONS_ReportError("cannot get terminal attributes: %s", strerror(errno));
20 return -1; 18 return -1;
21@@ -146,7 +153,72 @@ void WSCONS_InitOSKeymap(_THIS) 19@@ -65,6 +72,7 @@ int WSCONS_InitKeyboard(_THIS)
 20 WSCONS_ReportError("cannot set terminal attributes: %s", strerror(errno));
 21 return -1;
 22 }
 23+
 24 if (ioctl(private->fd, KDSKBMODE, K_RAW) == -1) {
 25 WSCONS_ReportError("cannot set raw keyboard mode: %s", strerror(errno));
 26 return -1;
 27@@ -89,8 +97,57 @@ void WSCONS_ReleaseKeyboard(_THIS)
 28 }
 29 }
 30
 31-static void updateMouse()
 32+int WSCONS_InitMouse(_THIS)
 33+{
 34+ if (private->mouseFd != -1) {
 35+#if defined(WSMOUSEIO_SETVERSION)
 36+ int version = WSMOUSE_EVENT_VERSION;
 37+ if (ioctl(private->mouseFd, WSMOUSEIO_SETVERSION, &version) == -1) {
 38+ WSCONS_ReportError("cannot set mouse API version: %s", strerror(errno));
 39+ return -1;
 40+ }
 41+#endif
 42+ }
 43+ return 0;
 44+}
 45+
 46+void WSCONS_ReleaseMouse(_THIS)
 47+{
 48+}
 49+
 50+#define NUMEVENTS 64
 51+
 52+static void updateMouse(_THIS)
 53 {
 54+ struct wscons_event evlist[NUMEVENTS];
 55+ struct wscons_event *ev = evlist;
 56+ int nev, i;
 57+ ssize_t len;
 58+
 59+ len = read(private->mouseFd, evlist, sizeof(evlist));
 60+ if (len == -1) {
 61+ WSCONS_ReportError("Failed to read wsmouse event: %s", strerror(errno));
 62+ return;
 63+ }
 64+
 65+ nev = len / sizeof(*ev);
 66+
 67+ for (i = 0; i < nev; i++, ev++) {
 68+ switch (ev->type) {
 69+ case WSCONS_EVENT_MOUSE_UP:
 70+ posted += SDL_PrivateMouseButton(SDL_RELEASED, ev->value+1, 0, 0);
 71+ break;
 72+ case WSCONS_EVENT_MOUSE_DOWN:
 73+ posted += SDL_PrivateMouseButton(SDL_PRESSED, ev->value+1, 0, 0);
 74+ break;
 75+ case WSCONS_EVENT_MOUSE_DELTA_X:
 76+ posted += SDL_PrivateMouseMotion(0, 1, ev->value, 0);
 77+ break;
 78+ case WSCONS_EVENT_MOUSE_DELTA_Y:
 79+ posted += SDL_PrivateMouseMotion(0, 1, 0, -ev->value);
 80+ break;
 81+ }
 82+ }
 83 }
 84
 85 static SDLKey keymap[128];
 86@@ -120,19 +177,42 @@ static void updateKeyboard(_THIS)
 87 for (i = 0; i < n; i++) {
 88 unsigned char c = buf[i] & 0x7f;
 89 if (c == 224) // special key prefix -- what should we do with it?
 90- continue;
 91+ continue;
 92 posted += SDL_PrivateKeyboard((buf[i] & 0x80) ? SDL_RELEASED : SDL_PRESSED,
 93- TranslateKey(c, &keysym));
 94+ TranslateKey(c, &keysym));
 95 }
 96 }
 97 }
 98
 99 void WSCONS_PumpEvents(_THIS)
 100 {
 101+ static struct timeval zero;
 102+ int maxfd = 0;
 103+
 104+ if (private->fd > maxfd)
 105+ maxfd = private->fd;
 106+ if (private->mouseFd > maxfd)
 107+ maxfd = private->mouseFd;
 108+
 109 do {
 110+ fd_set fds;
 111+
 112 posted = 0;
 113- updateMouse();
 114- updateKeyboard(this);
 115+
 116+ FD_ZERO(&fds);
 117+ if (private->fd != -1)
 118+ FD_SET(private->fd, &fds);
 119+ if (private->mouseFd != -1)
 120+ FD_SET(private->mouseFd, &fds);
 121+
 122+ if (select(maxfd+1, &fds, NULL, NULL, &zero) > 0) {
 123+ if (private->mouseFd != -1 && FD_ISSET(private->mouseFd, &fds)) {
 124+ updateMouse(this);
 125+ }
 126+ if (private->fd != -1 && FD_ISSET(private->fd, &fds)) {
 127+ updateKeyboard(this);
 128+ }
 129+ }
 130 } while (posted);
 131 }
 132
 133@@ -146,7 +226,72 @@ void WSCONS_InitOSKeymap(_THIS)
22 } 134 }
23  135
24 switch (private->kbdType) { 136 switch (private->kbdType) {
25-#ifdef WSKBD_TYPE_ZAURUS 137-#ifdef WSKBD_TYPE_ZAURUS
26+ case WSKBD_TYPE_USB: 138+ case WSKBD_TYPE_USB:
27+ for (i=4; i <= 29; i++) { 139+ for (i=4; i <= 29; i++) {
28+ keymap[i] = SDLK_a + (i-4); 140+ keymap[i] = SDLK_a + (i-4);
29+ } 141+ }
30+ for (i=30; i <= 38; i++) { 142+ for (i=30; i <= 38; i++) {
31+ keymap[i] = SDLK_1 + (i-30); 143+ keymap[i] = SDLK_1 + (i-30);
32+ } 144+ }
33+ keymap[39] = SDLK_0; 145+ keymap[39] = SDLK_0;
34+ keymap[40] = SDLK_RETURN; 146+ keymap[40] = SDLK_RETURN;
@@ -82,22 +194,22 @@ Add support for USB keyboards on NetBSD. @@ -82,22 +194,22 @@ Add support for USB keyboards on NetBSD.
82+ keymap[103] = SDLK_KP_EQUALS; 194+ keymap[103] = SDLK_KP_EQUALS;
83+ keymap[104] = SDLK_F13; 195+ keymap[104] = SDLK_F13;
84+ keymap[105] = SDLK_F14; 196+ keymap[105] = SDLK_F14;
85+ keymap[106] = SDLK_F15; 197+ keymap[106] = SDLK_F15;
86+ keymap[109] = SDLK_POWER; 198+ keymap[109] = SDLK_POWER;
87+ keymap[117] = SDLK_HELP; 199+ keymap[117] = SDLK_HELP;
88+ 200+
89+ break; 201+ break;
90+ 202+
91+#if defined(WSKBD_TYPE_ZAURUS) 203+#if defined(WSKBD_TYPE_ZAURUS)
92 case WSKBD_TYPE_ZAURUS: 204 case WSKBD_TYPE_ZAURUS:
93 /* top row */ 205 /* top row */
94 keymap[2] = SDLK_1; 206 keymap[2] = SDLK_1;
95@@ -220,7 +292,7 @@ void WSCONS_InitOSKeymap(_THIS) 207@@ -220,7 +365,7 @@ void WSCONS_InitOSKeymap(_THIS)
96 keymap[77] = SDLK_RIGHT; 208 keymap[77] = SDLK_RIGHT;
97 keymap[80] = SDLK_DOWN; 209 keymap[80] = SDLK_DOWN;
98 break; 210 break;
99-#endif /* WSKBD_TYPE_ZAURUS */ 211-#endif /* WSKBD_TYPE_ZAURUS */
100+#endif 212+#endif
101  213
102 default: 214 default:
103 WSCONS_ReportError("Unable to map keys for keyboard type %u",  215 WSCONS_ReportError("Unable to map keys for keyboard type %u",

cvs diff -r1.3 -r1.4 pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsvideo.c (expand / switch to unified diff)

--- pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsvideo.c 2012/01/24 15:17:05 1.3
+++ pkgsrc/devel/SDL/patches/patch-src_video_wscons_SDL__wsconsvideo.c 2015/01/29 01:56:02 1.4
@@ -1,40 +1,91 @@ @@ -1,40 +1,91 @@
1$NetBSD: patch-src_video_wscons_SDL__wsconsvideo.c,v 1.3 2012/01/24 15:17:05 wiz Exp $ 1$NetBSD: patch-src_video_wscons_SDL__wsconsvideo.c,v 1.4 2015/01/29 01:56:02 jmcneill Exp $
2 2
3Fix tty device and color patterns for wscons driver on NetBSD. 3--- src/video/wscons/SDL_wsconsvideo.c.orig 2012-01-19 06:30:06.000000000 +0000
4 
5--- src/video/wscons/SDL_wsconsvideo.c.orig 2009-10-12 23:07:14.000000000 +0000 
6+++ src/video/wscons/SDL_wsconsvideo.c 4+++ src/video/wscons/SDL_wsconsvideo.c
7@@ -141,7 +141,13 @@ VideoBootStrap WSCONS_bootstrap = { 5@@ -141,12 +141,18 @@ VideoBootStrap WSCONS_bootstrap = {
8 WSCONS_CreateDevice 6 WSCONS_CreateDevice
9 }; 7 };
10  8
11+#ifdef __NetBSD__ 9+#ifdef __NetBSD__
12+#define WSCONSDEV_FORMAT "/dev/ttyE%01x" 10+#define WSCONSDEV_FORMAT "/dev/ttyE%01x"
13+#endif 11+#endif
14+ 12+
15+#ifdef __OpenBSD__ 13+#ifdef __OpenBSD__
16 #define WSCONSDEV_FORMAT "/dev/ttyC%01x" 14 #define WSCONSDEV_FORMAT "/dev/ttyC%01x"
17+#endif 15+#endif
18  16
19 int WSCONS_VideoInit(_THIS, SDL_PixelFormat *vformat) 17 int WSCONS_VideoInit(_THIS, SDL_PixelFormat *vformat)
20 { 18 {
21@@ -184,6 +190,11 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor 19 char devnamebuf[30];
 20- char *devname;
 21+ char *devname, *mouse_devname;
 22 char *rotation;
 23 int wstype;
 24 int wsmode = WSDISPLAYIO_MODE_DUMBFB;
 25@@ -166,11 +172,23 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor
 26 devname = devnamebuf;
 27 }
 28
 29+ mouse_devname = SDL_getenv("SDL_WSMOUSEDEV");
 30+ if (mouse_devname == NULL) {
 31+ mouse_devname = "/dev/wsmouse";
 32+ }
 33+
 34 private->fd = open(devname, O_RDWR | O_NONBLOCK, 0);
 35 if (private->fd == -1) {
 36 WSCONS_ReportError("open %s: %s", devname, strerror(errno));
 37 return -1;
 38 }
 39+
 40+ private->mouseFd = open(mouse_devname, O_RDWR | O_NONBLOCK, 0);
 41+ if (private->mouseFd == -1) {
 42+ WSCONS_ReportError("open %s: %s", mouse_devname, strerror(errno));
 43+ return -1;
 44+ }
 45+
 46 if (ioctl(private->fd, WSDISPLAYIO_GINFO, &private->info) == -1) {
 47 WSCONS_ReportError("ioctl WSDISPLAY_GINFO: %s", strerror(errno));
 48 return -1;
 49@@ -184,6 +202,11 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor
22 return -1; 50 return -1;
23 } 51 }
24 if (private->info.depth > 8) { 52 if (private->info.depth > 8) {
25+#ifdef __NetBSD__ 53+#ifdef __NetBSD__
26+ private->greenMask = 0x00ff00; 54+ private->greenMask = 0x00ff00;
27+ private->blueMask = 0x0000ff; 55+ private->blueMask = 0x0000ff;
28+ private->redMask = 0xff0000; 56+ private->redMask = 0xff0000;
29+#else 57+#else
30 if (wstype == WSDISPLAY_TYPE_SUN24 || 58 if (wstype == WSDISPLAY_TYPE_SUN24 ||
31 wstype == WSDISPLAY_TYPE_SUNCG12 || 59 wstype == WSDISPLAY_TYPE_SUNCG12 ||
32 wstype == WSDISPLAY_TYPE_SUNCG14 || 60 wstype == WSDISPLAY_TYPE_SUNCG14 ||
33@@ -202,6 +213,7 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor 61@@ -202,6 +225,7 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor
34 WSCONS_ReportError("Unknown video hardware"); 62 WSCONS_ReportError("Unknown video hardware");
35 return -1; 63 return -1;
36 } 64 }
37+#endif 65+#endif
38 } else { 66 } else {
39 WSCONS_ReportError("Displays with 8 bpp or less are not supported"); 67 WSCONS_ReportError("Displays with 8 bpp or less are not supported");
40 return -1; 68 return -1;
 69@@ -326,6 +350,9 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFor
 70 if (WSCONS_InitKeyboard(this) == -1) {
 71 return -1;
 72 }
 73+ if (WSCONS_InitMouse(this) == -1) {
 74+ return -1;
 75+ }
 76
 77 return 0;
 78 }
 79@@ -601,7 +628,12 @@ void WSCONS_VideoQuit(_THIS)
 80 }
 81
 82 WSCONS_ReleaseKeyboard(this);
 83+ WSCONS_ReleaseMouse(this);
 84
 85+ if (private->mouseFd != -1) {
 86+ close(private->mouseFd);
 87+ private->mouseFd = -1;
 88+ }
 89 if (private->fd != -1) {
 90 close(private->fd);
 91 private->fd = -1;