add wsmouse support to wscons driverdiff -r1.67 -r1.68 pkgsrc/devel/SDL/distinfo
(jmcneill)
@@ -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 | |||
3 | SHA1 (SDL-1.2.15.tar.gz) = 0c5f193ced810b0d7ce3ab06d808cbb5eef03a2c | 3 | SHA1 (SDL-1.2.15.tar.gz) = 0c5f193ced810b0d7ce3ab06d808cbb5eef03a2c | |
4 | RMD160 (SDL-1.2.15.tar.gz) = d4802a090cb4a24eeb0c8ce5690802f596d394c3 | 4 | RMD160 (SDL-1.2.15.tar.gz) = d4802a090cb4a24eeb0c8ce5690802f596d394c3 | |
5 | Size (SDL-1.2.15.tar.gz) = 3920622 bytes | 5 | Size (SDL-1.2.15.tar.gz) = 3920622 bytes | |
6 | SHA1 (patch-aa) = 00fb7a85caf8fc9f08298d0a07a4587757fdffb0 | 6 | SHA1 (patch-aa) = 00fb7a85caf8fc9f08298d0a07a4587757fdffb0 | |
7 | SHA1 (patch-ac) = 8b2dddff9ad449b19b35ef364e2d960e46284563 | 7 | SHA1 (patch-ac) = 8b2dddff9ad449b19b35ef364e2d960e46284563 | |
8 | SHA1 (patch-src_audio_sun_SDL__sunaudio.c) = 4b492b40d39e6444037dfda55766e4a149cc6c30 | 8 | SHA1 (patch-src_audio_sun_SDL__sunaudio.c) = 4b492b40d39e6444037dfda55766e4a149cc6c30 | |
9 | SHA1 (patch-src_joystick_bsd_SDL__sysjoystick.c) = 4ea0136f231729129b82e5f7ee4b9eaf68a13876 | 9 | SHA1 (patch-src_joystick_bsd_SDL__sysjoystick.c) = 4ea0136f231729129b82e5f7ee4b9eaf68a13876 | |
10 | SHA1 (patch-src_video_quartz_SDL__QuartzVideo.h) = 19d952bade06dbd646e94f42139c38436969b1a8 | 10 | SHA1 (patch-src_video_quartz_SDL__QuartzVideo.h) = 19d952bade06dbd646e94f42139c38436969b1a8 | |
11 | SHA1 (patch-src_video_wscons_SDL__wsconsevents.c) = 6ae894622078c2cc2a0add0b496944567d38f797 | 11 | SHA1 (patch-src_video_wscons_SDL__wsconsevents.c) = f7519864e9c13ad69eae9a42df22a944586ab93b | |
12 | SHA1 (patch-src_video_wscons_SDL__wsconsvideo.c) = 356a8817cc41dde5e24cb23f032215931f85a84b | 12 | SHA1 (patch-src_video_wscons_SDL__wsconsevents__c.h) = 97206e2aca0b620005217d9d07ad1177516cac92 | |
13 | SHA1 (patch-src_video_wscons_SDL__wsconsvideo.c) = 17e048ccb201ae961e820ab880d5a588b2db2639 | |||
14 | SHA1 (patch-src_video_wscons_SDL__wsconsvideo.h) = 82028df57cf3de95152278924ffe3134fe32f85a | |||
13 | SHA1 (patch-src_video_x11_SDL_x11video.c) = 624fbb7e701d6de6ec93096beea7c085125934aa | 15 | SHA1 (patch-src_video_x11_SDL_x11video.c) = 624fbb7e701d6de6ec93096beea7c085125934aa |
@@ -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 | ||||
3 | Add 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", |
@@ -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 | |||
3 | Fix 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; |