Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Dec 2004 14:47:02 +0100
From:      "Norbert Koch" <NKoch@demig.de>
To:        <freebsd-hackers@freebsd.org>
Subject:   A program to automatically switch keyboards for syscons
Message-ID:  <000001c4e43e$e32b7d80$4801a8c0@ws-ew-3.W2KDEMIG>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

------=_NextPart_000_0001_01C4E447.44EFE580
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello.

For an embedded system I need FreeBSD to accept
input from two keyboards at the same time.
As syscons cannot do that and it is obviously
not trivial to change that, I wrote the enclosed
program.

After switching syscons to the first keyboard
available, it calls select for the other keyboard(s).
If there is any input available the active keyboard
for syscons is changed.

This works, more or less. (I am using FreeBSD 4.10)
The problem is that after switching, the first
key pressed on the new keyboard is lost.

Does anyone have an idea about that? Am I doing
something wrong? Any other - possibly better - idea
to have more than one keyboard at the same time?

You may notice, that I flush the old keyboard
after detaching and before re-attaching the new
one. I do that because I saw an endless switching
(kbd1->kbd0->kbd1->kbd0->...) when not doing that.
I do not understand, why select should return
anything from a keyboard where I do not press
any key. May be, I am missing something.

Any help appreciated.

Thanks,
Norbert

P.S.: If there is any interest, I could
 make a port out of that program.
------=_NextPart_000_0001_01C4E447.44EFE580
Content-Type: application/octet-stream;
	name="kbautosw.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="kbautosw.c"

LyogJEhlYWRlcjogL3Vzci9sb2NhbC9jdnMva2JhdXRvc3cva2JhdXRvc3cuYyx2IDEuMyAyMDA0
LzEyLzE3IDEzOjI0OjM1IG5rIEV4cCAkICovCgoKI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzeXMvdGltZS5o
PgojaW5jbHVkZSA8bWFjaGluZS9jb25zb2xlLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1
ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5j
bHVkZSA8ZXJybm8uaD4KCgojZGVmaW5lIE1BWF9ERVZJQ0VTICAgICA1CgojZGVmaW5lIFNUUih4
KSAgI3gKI2RlZmluZSBYU1RSKHgpIFNUUiAoeCkKCgpzdGF0aWMgc3RydWN0IGRldmljZXMKewog
IGNoYXIgKiBuYW1lOwogIGludCBmZDsKfQpkZXZpY2VzW01BWF9ERVZJQ0VTXTsKCnN0YXRpYyBp
bnQgbm9fZGV2aWNlcyA9IDA7CnN0YXRpYyBpbnQgZGVidWcgICAgICA9IDA7CnN0YXRpYyBpbnQg
Y29uZmQgICAgICA9IC0xOwoKCnN0YXRpYyB2b2lkIHVzYWdlICh2b2lkKQp7CiAgZnByaW50ZiAo
c3RkZXJyLCAKICAgICAgICAgICAidXNhZ2U6IGF1dG9zdyBbIC1EIF0gIFsgLWQgXSAgWyAtMSBd
IFsgWyAtZiA8ZGV2aWNlPl0gLi4uIF1cbiIKICAgICAgICAgICAiICAtRCA6IGRvIG5vdCBkZXRh
Y2hcbiIKICAgICAgICAgICAiICAtZCA6IGVuYWJsZSBkZWJ1ZyBvdXRwdXRcbiIKICAgICAgICAg
ICAiICAtMSA6IHNlbGVjdCBmaXJzdCBhY3RpdmUga2V5Ym9hcmRcbiIKICAgICAgICAgICAiICAt
ZiA6IHNwZWNpZnkga2V5Ym9hcmQgZGV2aWNlICh1cCB0byAiIFhTVFIgKE1BWF9ERVZJQ0VTKSAi
KVxuIgogICAgICAgICAgICIgICAgICAgaWYgbm8ga2V5Ym9hcmQgZGV2aWNlcyBzcGVjaWZpZWRc
biIKICAgICAgICAgICAiICAgICAgIC9kZXYva2JkMCBhbmQgL2Rldi9rYmQxIGFyZSBwb2xsZWRc
biIpOwogIGV4aXQgKDEpOwp9CgoKc3RhdGljIHZvaWQgZGV0YWNoX2tleWJvYXJkICh2b2lkKQp7
CiAgaWYgKGlvY3RsIChjb25mZCwgQ09OU19SRUxLQkQsIDApID09IC0xKQogIHsKICAgIGZwcmlu
dGYgKHN0ZGVyciwgImNvdWxkIG5vdCBpb2N0bChDT05TX1JFTEtCRClcbiIpOwogIH0KfQoKCnN0
YXRpYyBpbnQgc2V0X2tleWJvYXJkX2ZkIChpbnQgZmQpCnsKICBrZXlib2FyZF9pbmZvX3QgaW5m
bzsKCiAgaWYgKGlvY3RsIChmZCwgS0RHS0JJTkZPLCAmIGluZm8pID09IC0xKSAKICB7CiAgICBp
ZiAoZGVidWcpCiAgICB7CiAgICAgIGZwcmludGYgKHN0ZGVyciwgImNvdWxkIG5vdCBpb2N0bChL
REJLQklORk8pIGZkPSV1XG4iLCBmZCk7CiAgICB9OwogICAgY2xvc2UgKGZkKTsKICAgIHJldHVy
biAtMTsKICB9OwojaWYgMAogIC8qCiAgICogZnJvbSBrYmRjb250cm9sCiAgICovCiAgaW9jdGwg
KGZkLCBDT05TX1JFTEtCRCwgMCk7CiNlbmRpZgogIGNsb3NlIChmZCk7CiAgaWYgKGlvY3RsIChj
b25mZCwgQ09OU19TRVRLQkQsIGluZm8ua2JfaW5kZXgpID09IC0xKQogIHsKICAgIGlmIChkZWJ1
ZykKICAgIHsKICAgICAgZnByaW50ZiAoc3RkZXJyLCAiY291bGQgbm90IGlvY3RsKENPTlNfU0VU
S0JEKSBrYl9pbmRleD0ldVxuIiwgCiAgICAgICAgICAgICAgIGluZm8ua2JfaW5kZXgpOwogICAg
fTsKICAgIHJldHVybiAtMTsKICB9OwogIHJldHVybiAwOwp9CgoKc3RhdGljIGludCBzZXRfa2V5
Ym9hcmQgKGNoYXIgKiBkZXZpY2UpCnsKICBpbnQgZmQ7CgogIGZkID0gb3BlbiAoZGV2aWNlLCBP
X1JET05MWSk7CiAgaWYgKGZkIDwgMCkgCiAgewogICAgaWYgKGRlYnVnKQogICAgewogICAgICBm
cHJpbnRmIChzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwgZGV2aWNlKTsKICAgIH07CiAg
ICByZXR1cm4gLTE7CiAgfTsKICByZXR1cm4gc2V0X2tleWJvYXJkX2ZkIChmZCk7Cn0KCgpzdGF0
aWMgdm9pZCBhZGRfZGV2aWNlIChjb25zdCBjaGFyICogbmFtZSkKewogIGlmIChub19kZXZpY2Vz
ID49IE1BWF9ERVZJQ0VTKQogIHsKICAgIGZwcmludGYgKHN0ZGVyciwgInRvbyBtYW55IGRldmlj
ZXNcbiIpOwogICAgZXhpdCAoMSk7CiAgfTsKICBkZXZpY2VzW25vX2RldmljZXNdLm5hbWUgICA9
IHN0cmR1cCAobmFtZSk7CiAgZGV2aWNlc1tub19kZXZpY2VzXS5mZCAgICAgPSAtMTsKICBpZiAo
ZGVidWcgPj0gMikKICB7CiAgICBmcHJpbnRmIChzdGRlcnIsICJhZGRpbmcgZGV2aWNlICVzXG4i
LCBuYW1lKTsKICB9OwogICsrIG5vX2RldmljZXM7Cn0KCgppbnQgbWFpbiAoaW50IGFyZ2MsIGNo
YXIgKiogYXJndikKewogIGZkX3NldCBmZHM7CiAgaW50IGNoLCBpLCBtYXhmZCwgZGV0YWNoID0g
MSwgZGV0YWNoZWQgPSAwLCBmaXJzdCA9IDAsIGFjdGl2ZSA9IC0xOwogIHN0cnVjdCBzdGF0IHNi
OwogIGNoYXIgZHVtbXlbMjBdOwoKICB3aGlsZSAoKGNoID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAi
RGRmOmgiKSkgIT0gLTEpCiAgewogICAgc3dpdGNoIChjaCkKICAgIHsKICAgICAgY2FzZSAnRCc6
CiAgICAgICAgZGV0YWNoID0gMDsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgJ2QnOgogICAg
ICAgICsrIGRlYnVnOwogICAgICAgIGJyZWFrOwogICAgICAgIAogICAgICBjYXNlICcxJzoKICAg
ICAgICBmaXJzdCA9IDE7CiAgICAgICAgYnJlYWs7CiAgICAgICAgCiAgICAgIGNhc2UgJ2YnOgog
ICAgICAgIGlmIChzdGF0IChvcHRhcmcsICYgc2IpIDwgMCkKICAgICAgICB7CiAgICAgICAgICBm
cHJpbnRmIChzdGRlcnIsICJjYW5ub3Qgc3RhdCAlczogJXNcbiIsIG9wdGFyZywgc3RyZXJyb3Ig
KGVycm5vKSk7CiAgICAgICAgICBleGl0ICgxKTsKICAgICAgICB9OwogICAgICAgIGlmICgoc2Iu
c3RfbW9kZSAmIFNfSUZDSFIpID09IDApCiAgICAgICAgewogICAgICAgICAgZnByaW50ZiAoc3Rk
ZXJyLCAibm90IGEgY2hhcmFjdGVyIGRldmljZTogJXNcbiIsIG9wdGFyZyk7CiAgICAgICAgICBl
eGl0ICgxKTsKICAgICAgICB9OwogICAgICAgIGFkZF9kZXZpY2UgKG9wdGFyZyk7CiAgICAgICAg
Y29udGludWU7CgogICAgICBjYXNlICdoJzoKICAgICAgY2FzZSAnPyc6CiAgICAgIGRlZmF1bHQ6
CiAgICAgICAgdXNhZ2UgKCk7CiAgICB9CiAgfTsKCiAgY29uZmQgPSBvcGVuICgiL2Rldi9jb25z
b2xlIiwgT19SRE9OTFl8T19OT05CTE9DSyk7CiAgaWYgKGNvbmZkID09IC0xKQogIHsKICAgIGZw
cmludGYgKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIC9kZXYvY29uc29sZVxuIik7CiAgICBleGl0
ICgxKTsKICB9OwoKICAvKgogICAqIG5vIGRldmljZXMgc3BlY2lmaWVkLCB1c2UgZGVmYXVsdAog
ICAqLwogIGlmIChub19kZXZpY2VzID09IDApCiAgewogICAgaWYgKGRlYnVnKQogICAgewogICAg
ICBmcHJpbnRmIChzdGRlcnIsICJ1c2luZyBkZWZhdWx0IGRldmljZXNcbiIpOwogICAgfTsKICAg
IGFkZF9kZXZpY2UgKCIvZGV2L2tiZDAiKTsKICAgIGFkZF9kZXZpY2UgKCIvZGV2L2tiZDEiKTsK
ICB9OwoKICAvKgogICAqIHN3aXRjaCBzeXNjb25zIHRvIGZpcnN0IGtleWJvYXJkCiAgICovCiAg
Zm9yIChpID0gLTE7ICsrIGkgPCBub19kZXZpY2VzOykKICB7CiAgICBpZiAoc2V0X2tleWJvYXJk
IChkZXZpY2VzW2ldLm5hbWUpID09IDApCiAgICB7CiAgICAgIGlmIChkZWJ1ZykKICAgICAgewog
ICAgICAgIGZwcmludGYgKHN0ZGVyciwgInNlbGVjdGluZyBrZXlib2FyZCAlc1xuIiwgZGV2aWNl
c1tpXS5uYW1lKTsKICAgICAgfTsKICAgICAgYWN0aXZlID0gaTsKICAgICAgYnJlYWs7CiAgICB9
CiAgfTsKICAKICBpZiAoYWN0aXZlID09IC0xKQogIHsKICAgIGZwcmludGYgKHN0ZGVyciwgImNv
dWxkIG5vdCBzZWxlY3QgYW55IGtleWJvYXJkXG4iKTsKICAgIGV4aXQgKDEpOwogIH07CiAgCiAg
Zm9yICg7OykKICB7CiAgICAvKgogICAgICogdHJ5IHRvIG9wZW4gYWxsIGluYWN0aXZlIGtleWJv
YXJkcyBmb3Igc2VsZWN0CiAgICAgKi8KICAgIEZEX1pFUk8gKCYgZmRzKTsKICAgIGZvciAoaSA9
IG1heGZkID0gLTE7ICsrIGkgPCBub19kZXZpY2VzOykKICAgIHsKICAgICAgaWYgKGkgIT0gYWN0
aXZlKQogICAgICB7CiAgICAgICAgZGV2aWNlc1tpXS5mZCA9IG9wZW4gKGRldmljZXNbaV0ubmFt
ZSwgT19SRE9OTFl8T19OT05CTE9DSyk7CiAgICAgICAgaWYgKGRldmljZXNbaV0uZmQgIT0gLTEp
CiAgICAgICAgewogICAgICAgICAgaWYgKGRlYnVnKQogICAgICAgICAgewogICAgICAgICAgICBm
cHJpbnRmIChzdGRlcnIsICJwb2xsaW5nICVzXG4iLCBkZXZpY2VzW2ldLm5hbWUpOwogICAgICAg
ICAgfTsKICAgICAgICAgIEZEX1NFVCAoZGV2aWNlc1tpXS5mZCwgJiBmZHMpOwogICAgICAgICAg
aWYgKGRldmljZXNbaV0uZmQgPiBtYXhmZCkKICAgICAgICAgIHsKICAgICAgICAgICAgbWF4ZmQg
PSBkZXZpY2VzW2ldLmZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgaWYgKGRlYnVnKQogICAgICAgICAgewogICAgICAgICAgICBmcHJpbnRm
IChzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwgZGV2aWNlc1tpXS5uYW1lKTsKICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICAKICAgIGlmIChtYXhmZCA8IDApCiAg
ICB7CiAgICAgIGZwcmludGYgKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGFueSBkZXZpY2VcbiIp
OwogICAgICBleGl0ICgxKTsKICAgIH07CiAgICAKICAgIGlmIChkZXRhY2ggJiYgISBkZXRhY2hl
ZCAmJiAhIGRlYnVnKQogICAgewogICAgICBkYWVtb24gKDAsIDApOwogICAgICBkZXRhY2hlZCA9
IDE7CiAgICB9OwogICAgCiAgICBpZiAoZGVidWcgPj0gMikKICAgIHsKICAgICAgZnByaW50ZiAo
c3RkZXJyLCAicG9sbGluZyBtYXhmZD0ldVxuIiwgbWF4ZmQpOwogICAgfTsKICAgIGlmIChzZWxl
Y3QgKG1heGZkICsgMSwgJiBmZHMsIE5VTEwsIE5VTEwsIE5VTEwpID09IC0xKQogICAgewogICAg
ICBleGl0ICg5KTsKICAgIH07CiAgICBpZiAoZGVidWcpCiAgICB7CiAgICAgIGZwcmludGYgKHN0
ZGVyciwgInBvbGxlZCBzdWNjZXNzZnVsbHlcbiIpOwogICAgfTsKCiAgICBkZXRhY2hfa2V5Ym9h
cmQgKCk7CiAgICBkZXZpY2VzW2FjdGl2ZV0uZmQgPSBvcGVuIChkZXZpY2VzW2FjdGl2ZV0ubmFt
ZSwgT19SRE9OTFl8T19OT05CTE9DSyk7CiAgICBpZiAoZGV2aWNlc1thY3RpdmVdLmZkID09IC0x
KQogICAgewogICAgICBmcHJpbnRmIChzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiBwcmV2aW91cyBr
ZXlib2FyZCAlc1xuIiwgCiAgICAgICAgICAgICAgIGRldmljZXNbYWN0aXZlXS5uYW1lKTsKICAg
ICAgZXhpdCAoMSk7CiAgICB9OwogICAgLyoKICAgICAqIGZsdXNoIGtleWJvYXJkCiAgICAgKi8K
ICAgIHdoaWxlIChyZWFkIChkZXZpY2VzW2FjdGl2ZV0uZmQsICYgZHVtbXksIDEpID4gMCkKICAg
IHsKICAgIH07CiAgICBjbG9zZSAoZGV2aWNlc1thY3RpdmVdLmZkKTsKICAgIGRldmljZXNbYWN0
aXZlXS5mZCA9IC0xOwoKICAgIC8qIAogICAgICogZmluZCBrZXlib2FyZCB3aGVyZSBzZWxlY3Qg
cmV0dXJuZWQgc29tZSBhY3Rpdml0eQogICAgICovCiAgICBmb3IgKGkgPSAtMTsgKysgaSA8IG5v
X2RldmljZXM7KQogICAgewogICAgICBpZiAoZGV2aWNlc1tpXS5mZCAhPSAtMSAKICAgICAgICAg
ICYmCiAgICAgICAgICBGRF9JU1NFVCAoZGV2aWNlc1tpXS5mZCwgJiBmZHMpKQogICAgICB7CiAg
ICAgICAgaWYgKGRlYnVnKQogICAgICAgIHsKICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgInN3
aXRjaGluZyB0byBrZXlib2FyZCAlc1xuXG4iLCBkZXZpY2VzW2ldLm5hbWUpOwogICAgICAgIH07
CiAgICAgICAgLyoKICAgICAgICAgKiBzd2l0Y2ggdG8ga2V5Ym9hcmQgd2l0aCBhY3Rpdml0eQog
ICAgICAgICAqLwogICAgICAgIHNldF9rZXlib2FyZF9mZCAoZGV2aWNlc1tpXS5mZCk7CiAgICAg
ICAgYWN0aXZlID0gaTsKICAgICAgICAvKgogICAgICAgICAqIGRvbid0IGNoZWNrIG90aGVyIGtl
eWJvYXJkcyBhbnltb3JlCiAgICAgICAgICovCiAgICAgICAgaWYgKGZpcnN0KQogICAgICAgIHsK
ICAgICAgICAgIEZEX1pFUk8gKCYgZmRzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSAK
ICAgICAgewogICAgICAgIGlmIChkZXZpY2VzW2ldLmZkICE9IC0xKQogICAgICAgIHsKICAgICAg
ICAgIGlmIChkZWJ1ZyA+PSAyKQogICAgICAgICAgewogICAgICAgICAgICBmcHJpbnRmIChzdGRl
cnIsICJjbG9zaW5nICVzIiwgZGV2aWNlc1tpXS5uYW1lKTsKICAgICAgICAgIH07CiAgICAgICAg
ICBjbG9zZSAoZGV2aWNlc1tpXS5mZCk7CiAgICAgICAgfTsKICAgICAgfTsKICAgICAgZGV2aWNl
c1tpXS5mZCA9IC0xOwogICAgfQogIH0KfQo=

------=_NextPart_000_0001_01C4E447.44EFE580--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?000001c4e43e$e32b7d80$4801a8c0>