From owner-freebsd-hackers@FreeBSD.ORG Fri Dec 17 13:48:27 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2D2AE16A4CE for ; Fri, 17 Dec 2004 13:48:27 +0000 (GMT) Received: from pop.absolute-media.de (server.absolute-media.de [213.239.231.9]) by mx1.FreeBSD.org (Postfix) with ESMTP id 06D6443D3F for ; Fri, 17 Dec 2004 13:48:26 +0000 (GMT) (envelope-from NKoch@demig.de) Received: from localhost (unknown [127.0.0.1]) by pop.absolute-media.de (Postfix) with ESMTP id 7DE982D0FF for ; Fri, 17 Dec 2004 14:44:20 +0100 (CET) Received: from pop.absolute-media.de ([127.0.0.1]) by localhost (server [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 17673-05 for ; Fri, 17 Dec 2004 14:44:18 +0100 (CET) Received: from mailhost.demig (p50929ACB.dip0.t-ipconnect.de [80.146.154.203]) by pop.absolute-media.de (Postfix) with ESMTP id 8760127E5F for ; Fri, 17 Dec 2004 14:44:18 +0100 (CET) Received: from ws-ew-3 (ws-ew-3 [192.168.1.72]) by mailhost.demig (8.13.1/8.12.11) with SMTP id iBHDl29u078434 for ; Fri, 17 Dec 2004 14:47:02 +0100 (CET) (envelope-from NKoch@demig.de) From: "Norbert Koch" To: Date: Fri, 17 Dec 2004 14:47:02 +0100 Message-ID: <000001c4e43e$e32b7d80$4801a8c0@ws-ew-3.W2KDEMIG> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0001_01C4E447.44EFE580" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2120.0 X-Virus-Scanned: by amavisd-new at absolute-media.de Subject: A program to automatically switch keyboards for syscons X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Dec 2004 13:48:27 -0000 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--