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