From owner-freebsd-bluetooth@FreeBSD.ORG Sat Oct 12 08:31:27 2013 Return-Path: Delivered-To: bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4F0A0131 for ; Sat, 12 Oct 2013 08:31:27 +0000 (UTC) (envelope-from danfe@regency.nsu.ru) Received: from mx.nsu.ru (mx.nsu.ru [84.237.50.39]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id F20DA20FB for ; Sat, 12 Oct 2013 08:31:26 +0000 (UTC) Received: from regency.nsu.ru ([193.124.210.26]) by mx.nsu.ru with esmtp (Exim 4.69) (envelope-from ) id 1VUubV-0003Aq-Mv for bluetooth@freebsd.org; Sat, 12 Oct 2013 15:31:22 +0700 Received: from regency.nsu.ru (localhost [127.0.0.1]) by regency.nsu.ru (8.14.2/8.14.2) with ESMTP id r9C8VcJX026354 for ; Sat, 12 Oct 2013 15:31:48 +0700 (NOVT) (envelope-from danfe@regency.nsu.ru) Received: (from danfe@localhost) by regency.nsu.ru (8.14.2/8.14.2/Submit) id r9C8VXwr026283 for bluetooth@freebsd.org; Sat, 12 Oct 2013 15:31:33 +0700 (NOVT) (envelope-from danfe) Date: Sat, 12 Oct 2013 15:31:33 +0700 From: Alexey Dokuchaev To: bluetooth@freebsd.org Subject: Apple's "magic" bluetooth mouse Message-ID: <20131012083133.GA22060@regency.nsu.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Oct 2013 08:31:27 -0000 Hi there, I've been happily using Logitech V470 bluetooth mouse with my laptop for quite a while, and everything worked fine (including mouse wheel scroll and tilt). Today I got a chance to play with this glamorous rat from Apple, and was curious how it gets along with FreeBSD. Well, it worked, but only as a pointer. Even simplest features like vertical scrolling did not work. xev(1) reported of no events coming from when I touch the stupid mouse. It looks like they are not being proxied as virtual buttons clicks, but implemented somehow differently. I've also found that in Linux, they kinda use a special driver to make it work [1]. Any clues how to investigate this issue? I probably won't be able to make use of all fancy multi-touch features of the mouse, but I'd like to at least "export" some of the common gestures, like mouse wheel scroll, as a legacy button clicks (so they can be propagated up to the X.org). I guess I could study how we ourselves handle Synaptics touchpads, but given this mouse is bluetooth, I figured I better ask here first. ./danfe [1] https://wiki.ubuntu.com/Multitouch/AppleMagicMouse From owner-freebsd-bluetooth@FreeBSD.ORG Sat Oct 12 21:38:45 2013 Return-Path: Delivered-To: bluetooth@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6CC84B32 for ; Sat, 12 Oct 2013 21:38:45 +0000 (UTC) (envelope-from plunky@ogmig.net) Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [IPv6:2001:4b98:c:538::197]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E4DEB220F for ; Sat, 12 Oct 2013 21:38:44 +0000 (UTC) Received: from mfilter14-d.gandi.net (mfilter14-d.gandi.net [217.70.178.142]) by relay5-d.mail.gandi.net (Postfix) with ESMTP id 883F141C061; Sat, 12 Oct 2013 23:38:42 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mfilter14-d.gandi.net Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by mfilter14-d.gandi.net (mfilter14-d.gandi.net [10.0.15.180]) (amavisd-new, port 10024) with ESMTP id onWwLWNR6tqX; Sat, 12 Oct 2013 23:38:40 +0200 (CEST) X-Originating-IP: 31.69.66.131 Received: from galant.ogmig.net (unknown [31.69.66.131]) (Authenticated sender: plunky@ogmig.net) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 10C4C41C04B; Sat, 12 Oct 2013 23:38:38 +0200 (CEST) Received: by galant.ogmig.net (Postfix, from userid 1000) id E89962600AB; Sat, 12 Oct 2013 22:38:51 +0100 (BST) Date: Sat, 12 Oct 2013 22:38:51 +0100 (BST) From: Iain Hibbert To: Alexey Dokuchaev Subject: Re: Apple's "magic" bluetooth mouse In-Reply-To: <20131012083133.GA22060@regency.nsu.ru> Message-ID: References: <20131012083133.GA22060@regency.nsu.ru> User-Agent: Alpine 2.00 (NEB 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1971321511-1381613931=:523" Cc: bluetooth@freebsd.org X-BeenThere: freebsd-bluetooth@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Using Bluetooth in FreeBSD environments List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Oct 2013 21:38:45 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --0-1971321511-1381613931=:523 Content-Type: TEXT/PLAIN; charset=US-ASCII On Sat, 12 Oct 2013, Alexey Dokuchaev wrote: > Today I got a chance to play with this glamorous rat from Apple, and was > curious how it gets along with FreeBSD. Well, it worked, but only as a > pointer. Even simplest features like vertical scrolling did not work. > xev(1) reported of no events coming from when I touch the stupid mouse. > It looks like they are not being proxied as virtual buttons clicks, but > implemented somehow differently. I've also found that in Linux, they > kinda use a special driver to make it work [1]. yes, also I wrote one for NetBSD[1] the mouse itself provides a HID profile but the descriptor does not properly describe the actions of the mouse, and the extra reports are enabled by setting a feature. it should work as a basic mouse with x & y and two buttons though.. although the driver is long, mostly the only bits you need to care about are the input routines and the btmagic_enable() function. You can probably add this stuff to bthidd(8) I don't know how easy that would be > Any clues how to investigate this issue? I probably won't be able to > make use of all fancy multi-touch features of the mouse, but I'd like to > at least "export" some of the common gestures, like mouse wheel scroll, > as a legacy button clicks (so they can be propagated up to the X.org). I don't know why it doesn't work but I thought legacy button clicks were built into the normal mouse (did you push? it is not just touch..) middle button and scrolling will not work without a driver though, that is all handled in software.. the mouse itself just reports up to five finger positions, which are stored and compared for each report. after a threshold then scrolling is activated. > I guess I could study how we ourselves handle Synaptics touchpads, but > given this mouse is bluetooth, I figured I better ask here first. I have a tool i wrote to parse the input via a hci sniffer (attached for interest) and another tool which I used to send something to the mouse (i don't remember how that worked, if I had a special driver during development) regards, iain [1] http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/bluetooth/btmagic.c --0-1971321511-1381613931=:523 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=magic.c Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: parse magic mouse data Content-Disposition: attachment; filename=magic.c I2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KDQojaW5jbHVkZSA8Ymx1ZXRvb3Ro Lmg+DQojaW5jbHVkZSA8ZXJyLmg+DQojaW5jbHVkZSA8c3RkYm9vbC5oPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2lu Y2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHVzYmhpZC5oPg0KDQojaW5j bHVkZSA8YnRoaWQuaD4NCg0KLyoNCiAqIHByb3ZpZGUgY29uc3QgbG9jYXRv cnMgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZGVzY3JpcHRvci4NCiAqLw0K DQpzdGF0aWMgY29uc3Qgc3RydWN0IHsNCgloaWRfaXRlbV90IGJ1dHRvbjE7 DQoJaGlkX2l0ZW1fdCBidXR0b24yOw0KCWhpZF9pdGVtX3QgcGFkZGluZzsN CgloaWRfaXRlbV90IGRYOw0KCWhpZF9pdGVtX3QgZFk7DQp9IGJhc2ljID0g ew0KCS5idXR0b24xID0geyAucG9zID0gMCwgLnJlcG9ydF9zaXplID0gMSB9 LA0KCS5idXR0b24yID0geyAucG9zID0gMSwgLnJlcG9ydF9zaXplID0gMSB9 LA0KCS5wYWRkaW5nID0geyAucG9zID0gMiwgLnJlcG9ydF9zaXplID0gNiB9 LA0KCS5kWCA9IHsgLnBvcyA9ICA4LCAucmVwb3J0X3NpemUgPSAxNiwgLmxv Z2ljYWxfbWluaW11bSA9IC01MTEgfSwNCgkuZFkgPSB7IC5wb3MgPSAyNCwg LnJlcG9ydF9zaXplID0gMTYsIC5sb2dpY2FsX21pbmltdW0gPSAtNTExIH0s DQp9Ow0KDQpzdGF0aWMgY29uc3Qgc3RydWN0IHsNCgkvKiA0MC1iaXQgaGVh ZGVyICovDQoJaGlkX2l0ZW1fdCBkWGw7DQoJaGlkX2l0ZW1fdCBkWWw7DQoJ aGlkX2l0ZW1fdCBidXR0b24xOw0KCWhpZF9pdGVtX3QgYnV0dG9uMjsNCglo aWRfaXRlbV90IGRYbTsNCgloaWRfaXRlbV90IGRZbTsNCgloaWRfaXRlbV90 IHRpbWVzdGFtcDsNCg0KCS8qIDY0LWJpdCB0b3VjaCByZXBvcnQgKi8NCglo aWRfaXRlbV90IGFXOw0KCWhpZF9pdGVtX3QgYVo7DQoJaGlkX2l0ZW1fdCBt YWpvcjsNCgloaWRfaXRlbV90IG1pbm9yOw0KCWhpZF9pdGVtX3QgcHJlc3N1 cmU7DQoJaGlkX2l0ZW1fdCBpZDsNCgloaWRfaXRlbV90IGFuZ2xlOw0KCWhp ZF9pdGVtX3QgdW5rbm93bjsNCgloaWRfaXRlbV90IHBoYXNlOw0KfSBtb3Vz ZSA9IHsNCgkvKiBoZWFkZXIgKi8NCgkuZFhsID0geyAucG9zID0gMCwgLnJl cG9ydF9zaXplID0gOCB9LA0KCS5kWWwgPSB7IC5wb3MgPSA4LCAucmVwb3J0 X3NpemUgPSA4IH0sDQoJLmJ1dHRvbjEgPSB7IC5wb3MgPSAxNiwgLnJlcG9y dF9zaXplID0gMSB9LA0KCS5idXR0b24yID0geyAucG9zID0gMTcsIC5yZXBv cnRfc2l6ZSA9IDEgfSwNCgkuZFhtID0geyAucG9zID0gMTgsIC5yZXBvcnRf c2l6ZSA9IDIsIC5sb2dpY2FsX21pbmltdW0gPSAtMiB9LA0KCS5kWW0gPSB7 IC5wb3MgPSAyMCwgLnJlcG9ydF9zaXplID0gMiwgLmxvZ2ljYWxfbWluaW11 bSA9IC0yIH0sDQoJLnRpbWVzdGFtcCA9IHsgLnBvcyA9IDIyLCAucmVwb3J0 X3NpemUgPSAxOCB9LA0KDQoJLyogcGVyIHRvdWNoICovDQoJLmFXID0geyAu cG9zID0gMCwgLnJlcG9ydF9zaXplID0gMTIsIC5sb2dpY2FsX21pbmltdW0g PSAtMTQ0MCB9LA0KCS5hWiA9IHsgLnBvcyA9IDEyLCAucmVwb3J0X3NpemUg PSAxMiwgLmxvZ2ljYWxfbWluaW11bSA9IC0yMDQ4IH0sDQoJLm1ham9yID0g eyAucG9zID0gMjQsIC5yZXBvcnRfc2l6ZSA9IDggfSwNCgkubWlub3IgPSB7 IC5wb3MgPSAzMiwgLnJlcG9ydF9zaXplID0gOCB9LA0KCS5wcmVzc3VyZSA9 IHsgLnBvcyA9IDQwLCAucmVwb3J0X3NpemUgPSA2IH0sDQoJLmlkID0geyAu cG9zID0gNDYsIC5yZXBvcnRfc2l6ZSA9IDQgfSwNCgkuYW5nbGUgPSB7IC5w b3MgPSA1MCwgLnJlcG9ydF9zaXplID0gNiB9LA0KCS51bmtub3duID0geyAu cG9zID0gNTYsIC5yZXBvcnRfc2l6ZSA9IDQgfSwNCgkucGhhc2UgPSB7IC5w b3MgPSA2MCwgLnJlcG9ydF9zaXplID0gNCB9LA0KfTsNCg0Kc3RhdGljIGNv bnN0IHN0cnVjdCB7DQoJLyogMzItYml0IGhlYWRlciAqLw0KCWhpZF9pdGVt X3QgY2xpY2tzOw0KCWhpZF9pdGVtX3QgdW5rbm93bjE7DQoJaGlkX2l0ZW1f dCB0aW1lc3RhbXA7DQoNCgkvKiA3Mi1iaXQgdG91Y2ggcmVwb3J0ICovDQoJ aGlkX2l0ZW1fdCBhWDsNCgloaWRfaXRlbV90IGFZOw0KCWhpZF9pdGVtX3Qg dW5rbm93bjI7DQoJaGlkX2l0ZW1fdCBtYWpvcjsNCgloaWRfaXRlbV90IG1p bm9yOw0KCWhpZF9pdGVtX3QgcHJlc3N1cmU7DQoJaGlkX2l0ZW1fdCBpZDsN CgloaWRfaXRlbV90IGFuZ2xlOw0KCWhpZF9pdGVtX3QgdW5rbm93bjM7DQoJ aGlkX2l0ZW1fdCBwaGFzZTsNCn0gdHJhY2sgPSB7DQoJLyogaGVhZGVyICov DQoJLmNsaWNrcyA9IHsgLnBvcyA9IDAsIC5yZXBvcnRfc2l6ZSA9IDggfSwN CgkudW5rbm93bjEgPSB7IC5wb3MgPSA4LCAucmVwb3J0X3NpemUgPSA2IH0s DQoJLnRpbWVzdGFtcCA9IHsgLnBvcyA9IDE0LCAucmVwb3J0X3NpemUgPSAx OCB9LA0KDQoJLyogcGVyIHRvdWNoICovDQoJLmFYID0geyAucG9zID0gMCwg LnJlcG9ydF9zaXplID0gMTMgfSwNCgkuYVkgPSB7IC5wb3MgPSAxMywgLnJl cG9ydF9zaXplID0gMTMgfSwNCgkudW5rbm93bjIgPSB7IC5wb3MgPSAyNiwg LnJlcG9ydF9zaXplID0gNiB9LA0KCS5tYWpvciA9IHsgLnBvcyA9IDMyLCAu cmVwb3J0X3NpemUgPSA4IH0sDQoJLm1pbm9yID0geyAucG9zID0gNDAsIC5y ZXBvcnRfc2l6ZSA9IDggfSwNCgkucHJlc3N1cmUgPSB7IC5wb3MgPSA0OCwg LnJlcG9ydF9zaXplID0gNiB9LA0KCS5pZCA9IHsgLnBvcyA9IDU0LCAucmVw b3J0X3NpemUgPSA4IH0sDQoJLmFuZ2xlID0geyAucG9zID0gNjIsIC5yZXBv cnRfc2l6ZSA9IDIgfSwNCgkudW5rbm93bjMgPSB7IC5wb3MgPSA2NCwgLnJl cG9ydF9zaXplID0gNCB9LA0KCS5waGFzZSA9IHsgLnBvcyA9IDY4LCAucmVw b3J0X3NpemUgPSA0IH0sDQp9Ow0KDQpzdGF0aWMgdm9pZCByZWFkX2ZpbGUo Y2hhciAqKTsNCnN0YXRpYyB2b2lkIHJlYWRfZGV2aWNlKGNoYXIgKik7DQoN CnN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOw0Kc3RhdGljIHZvaWQgZHVtcChj b25zdCBjaGFyICosIHVpbnQ4X3QgKiwgc2l6ZV90KTsNCnN0YXRpYyB2b2lk IHByaW50Yihjb25zdCBjaGFyICosIHVpbnQ4X3QgKiwgY29uc3QgaGlkX2l0 ZW1fdCAqKTsNCg0Kc3RhdGljIGludCBoY2lfYWNsKGludCwgdWludDhfdCAq LCBzaXplX3QpOw0Kc3RhdGljIGludCBoY2lfZXZlbnQoaW50LCB1aW50OF90 ICosIHNpemVfdCk7DQpzdGF0aWMgaW50IGwyY2FwX3JlY3YodWludDhfdCAq LCBzaXplX3QpOw0Kc3RhdGljIGludCBoaWRfcmVjdih1aW50OF90ICosIHNp emVfdCk7DQpzdGF0aWMgaW50IGJhc2ljX2lucHV0KHVpbnQ4X3QgKiwgc2l6 ZV90KTsNCnN0YXRpYyBpbnQgdHJhY2tfaW5wdXQodWludDhfdCAqLCBzaXpl X3QpOw0Kc3RhdGljIGludCBtb3VzZV9pbnB1dCh1aW50OF90ICosIHNpemVf dCk7DQoNCmludA0KbWFpbihpbnQgYWMsIGNoYXIgKmF2W10pDQp7DQoJY2hh ciAqZGV2aWNlLCAqcGF0aDsNCglpbnQgY2g7DQoNCglkZXZpY2UgPSBOVUxM Ow0KCXBhdGggPSBOVUxMOw0KDQoJd2hpbGUgKChjaCA9IGdldG9wdChhYywg YXYsICJkOnI6IikpICE9IC0xKSB7DQoJCXN3aXRjaCAoY2gpIHsNCgkJY2Fz ZSAnZCc6IC8qIGxvY2FsIGRldmljZSAqLw0KCQkJZGV2aWNlID0gb3B0YXJn Ow0KCQkJYnJlYWs7DQoNCgkJY2FzZSAncic6IC8qIHJlYWQgZmlsZSAqLw0K CQkJcGF0aCA9IG9wdGFyZzsNCgkJCWJyZWFrOw0KDQoJCWRlZmF1bHQ6DQoJ CQl1c2FnZSgpOw0KCQkJLyogTk9UIFJFQUNIRUQgKi8NCgkJfQ0KCX0NCg0K CWlmIChkZXZpY2UgIT0gTlVMTCAmJiBwYXRoICE9IE5VTEwpDQoJCXVzYWdl KCk7DQoNCglpZiAocGF0aCAhPSBOVUxMKQ0KCQlyZWFkX2ZpbGUocGF0aCk7 DQoJZWxzZQ0KCQlyZWFkX2RldmljZShkZXZpY2UpOw0KDQoJcmV0dXJuIDA7 DQp9DQoNCnN0YXRpYyB2b2lkDQpyZWFkX2ZpbGUoY2hhciAqcGF0aCkNCnsN Cn0NCg0Kc3RhdGljIHZvaWQNCnJlYWRfZGV2aWNlKGNoYXIgKmRldmljZSkN CnsNCglzdHJ1Y3QgYnRfZGV2ZmlsdGVyIGY7DQoJdWludDhfdCBidWZbMTAy NF07DQoJc3NpemVfdCBucjsNCglpbnQgZmQsIGhhbmRsZTsNCg0KCWZkID0g YnRfZGV2b3BlbihkZXZpY2UsIDApOw0KCWlmIChmZCA9PSAtMSkNCgkJZXJy KEVYSVRfRkFJTFVSRSwgImJ0X2Rldm9wZW4iKTsNCgkNCgltZW1zZXQoJmYs IDAsIHNpemVvZihmKSk7DQoJYnRfZGV2ZmlsdGVyX3BrdF9zZXQoJmYsIEhD SV9BQ0xfREFUQV9QS1QpOw0KCWJ0X2RldmZpbHRlcl9wa3Rfc2V0KCZmLCBI Q0lfRVZFTlRfUEtUKTsNCglidF9kZXZmaWx0ZXJfZXZ0X3NldCgmZiwgSENJ X0VWRU5UX0RJU0NPTl9DT01QTCk7DQoJaWYgKGJ0X2RldmZpbHRlcihmZCwg JmYsIE5VTEwpID09IC0xKQ0KCQllcnIoRVhJVF9GQUlMVVJFLCAiYnRfZGV2 ZmlsdGVyIik7DQoNCgloYW5kbGUgPSAwOw0KDQoJZm9yICg7Oykgew0KCQlu ciA9IGJ0X2RldnJlY3YoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIC0xKTsNCgkJ aWYgKG5yIDwgMCkNCgkJCWVycihFWElUX0ZBSUxVUkUsICJidF9kZXZyZWN2 Iik7DQoNCgkJaWYgKG5yID09IDApDQoJCQlicmVhazsNCg0KCQlzd2l0Y2gg KGJ1ZlswXSkgew0KCQljYXNlIEhDSV9BQ0xfREFUQV9QS1Q6DQoJCQloYW5k bGUgPSBoY2lfYWNsKGhhbmRsZSwgYnVmLCAoc2l6ZV90KW5yKTsNCgkJCWJy ZWFrOw0KDQoJCWNhc2UgSENJX0VWRU5UX1BLVDoNCgkJCWhhbmRsZSA9IGhj aV9ldmVudChoYW5kbGUsIGJ1ZiwgKHNpemVfdClucik7DQoJCQlicmVhazsN Cg0KCQlkZWZhdWx0Og0KCQkJYnJlYWs7DQoJCX0NCgl9DQoNCgljbG9zZShm ZCk7DQp9DQoNCnN0YXRpYyB2b2lkDQp1c2FnZSh2b2lkKQ0Kew0KDQoJZnBy aW50ZihzdGRlcnIsICJVc2FnZTogJXMgeyBbLWQgZGV2aWNlXSB8IC1yIHBh dGggfVxuIiwNCgkgICAgZ2V0cHJvZ25hbWUoKSk7DQoNCglleGl0KDApOw0K fQ0KDQovKg0KICogZHVtcCBidWZmZXIgYXMgaGV4IGJ5dGVzDQogKi8NCnN0 YXRpYyB2b2lkDQpkdW1wKGNvbnN0IGNoYXIgKnN0ciwgdWludDhfdCAqYnVm LCBzaXplX3QgbGVuKQ0Kew0KDQoJcHJpbnRmKCIlczoiLCBzdHIpOw0KCXdo aWxlIChsZW4tLSA+IDApDQoJCXByaW50ZigiIDB4JTAyeCIsICpidWYrKyk7 DQoNCglwcmludGYoIlxuIik7DQp9DQoNCi8qDQogKiBwcmludCBoaWQgaXRl bSBhcyBiaW5hcnkNCiAqLw0Kc3RhdGljIHZvaWQNCnByaW50Yihjb25zdCBj aGFyICpzdHIsIHVpbnQ4X3QgKmJ1ZiwgY29uc3QgaGlkX2l0ZW1fdCAqaXRl bSkNCnsNCglpbnQgbnVtID0gaXRlbS0+cmVwb3J0X3NpemU7DQoJdW5zaWdu ZWQgaW50IHZhbHVlID0gaGlkX2dldF9kYXRhKGJ1ZiwgaXRlbSk7DQoNCglw cmludGYoIiVzIiwgc3RyKTsNCg0KCXdoaWxlIChudW0tLSA+IDApDQoJCXBy aW50ZigiJWMiLCAodmFsdWUgJiBfX0JJVChudW0pKSA/ICcxJyA6ICcwJyk7 DQp9DQoNCnN0YXRpYyBpbnQNCmhjaV9hY2woaW50IGhhbmRsZSwgdWludDhf dCAqYnVmLCBzaXplX3QgbGVuKQ0Kew0KCXN0YXRpYyB1aW50OF90IHhidWZb MTAyNF07DQoJc3RhdGljIHNpemVfdCB4bGVuOw0KCWludCBoOw0KDQoJLy9k dW1wKCJhY2wiLCBidWYsIGxlbik7DQoJaWYgKGxlbiA8IDUgfHwgbGVuICE9 IChzaXplX3QpKGxlMTZkZWMoYnVmICsgMykgKyA1KSkNCgkJcmV0dXJuIGhh bmRsZTsNCg0KCWggPSBsZTE2ZGVjKGJ1ZiArIDEpOw0KDQoJaWYgKEhDSV9Q Ql9GTEFHKGgpID09IEhDSV9QQUNLRVRfU1RBUlQpDQoJCXhsZW4gPSAwOw0K CW1lbWNweSh4YnVmICsgeGxlbiwgYnVmICsgNSwgbGVuIC0gNSk7DQoJeGxl biArPSBsZW4gLSA1Ow0KCWlmICh4bGVuIDwgbGUxNmRlYyh4YnVmKSkNCgkJ cmV0dXJuIGhhbmRsZTsJLyogdG8gYmUgY29udGludWVkLi4uICovDQoNCglp ZiAoaGFuZGxlID09IDApIHsNCgkJaGFuZGxlID0gSENJX0NPTl9IQU5ETEUo aCk7DQoJCXByaW50ZigidHJ5aW5nIGhhbmRsZSAlZFxuIiwgaGFuZGxlKTsN Cgl9DQoJaWYgKGhhbmRsZSA9PSBIQ0lfQ09OX0hBTkRMRShoKSkgew0KCQlp ZiAobDJjYXBfcmVjdih4YnVmLCB4bGVuKSA9PSAwKSB7DQoJCQlwcmludGYo ImFiYW5kb24gaGFuZGxlICVkXG4iLCBoYW5kbGUpOw0KCQkJaGFuZGxlID0g MDsNCgkJfQ0KCX0NCglyZXR1cm4gaGFuZGxlOw0KfQ0KDQpzdGF0aWMgaW50 DQpoY2lfZXZlbnQoaW50IGhhbmRsZSwgdWludDhfdCAqYnVmLCBzaXplX3Qg bGVuKQ0Kew0KDQoJLy9kdW1wKCJldmVudCIsIGJ1ZiwgbGVuKTsNCglpZiAo bGVuIDwgMyB8fCBsZW4gIT0gKHNpemVfdCkoYnVmWzJdICsgMykpDQoJCXJl dHVybiBoYW5kbGU7DQoNCglzd2l0Y2ggKGJ1ZlsxXSkgew0KCWNhc2UgSENJ X0VWRU5UX0RJU0NPTl9DT01QTDoNCgkJaWYgKGxlbiAhPSA3IHx8IGJ1Zlsz XSAhPSAweDAwIHx8IGxlMTZkZWMoYnVmICsgNCkgIT0gaGFuZGxlKQ0KCQkJ YnJlYWs7DQoNCgkJcHJpbnRmKCJoYW5kbGUgJWQgZGlzY29ubmVjdGVkIChy ZWFzb24gMHglMDJ4KVxuIiwgaGFuZGxlLCBidWZbNl0pOw0KCQloYW5kbGUg PSAwOw0KCQlicmVhazsNCg0KCWRlZmF1bHQ6DQoJCWJyZWFrOw0KCX0NCg0K CXJldHVybiBoYW5kbGU7DQp9DQoNCnN0YXRpYyBpbnQNCmwyY2FwX3JlY3Yo dWludDhfdCAqYnVmLCBzaXplX3QgbGVuKQ0Kew0KCWludCBkY2lkOw0KDQoJ Ly9kdW1wKCJsMmNhcCIsIGJ1ZiwgbGVuKTsNCglpZiAobGVuIDwgNCB8fCBs ZW4gIT0gKHNpemVfdCkobGUxNmRlYyhidWYpICsgNCkpDQoJCXJldHVybiAw Ow0KDQoJZGNpZCA9IGxlMTZkZWMoYnVmICsgMik7DQoJaWYgKGRjaWQgPCBM MkNBUF9GSVJTVF9DSUQpDQoJCS8qIGlnbm9yZSBzaWduYWxzICovOw0KCWVs c2UgaWYgKGhpZF9yZWN2KGJ1ZiArIDQsIGxlbiAtIDQpKQ0KCQlyZXR1cm4g MTsNCg0KCXJldHVybiAwOw0KfQ0KDQojZGVmaW5lIERBVEEodHlwZSwgaWQp CSAoKCgoQlRISURfREFUQSA8PCA0KSB8IEJUSElEX0RBVEFfIyN0eXBlKSA8 PCA4KSB8IGlkKQ0KDQpzdGF0aWMgaW50DQpoaWRfcmVjdih1aW50OF90ICpi dWYsIHNpemVfdCBsZW4pDQp7DQoNCgkvL2R1bXAoImhpZCIsIGJ1ZiwgbGVu KTsNCglpZiAobGVuIDwgMSkNCgkJcmV0dXJuIDA7DQoNCglzd2l0Y2ggKEJU SElEX1RZUEUoYnVmWzBdKSkgew0KCWNhc2UgQlRISURfSEFORFNIQUtFOg0K CQlpZiAobGVuICE9IDEpIHJldHVybiAwOw0KCQlwcmludGYoImhhbmRzaGFr ZTogMHgleFxuIiwgQlRISURfSEFORFNIQUtFX1BBUkFNKGJ1ZlswXSkpOw0K CQlicmVhazsNCg0KCWNhc2UgQlRISURfREFUQToNCgkJaWYgKGxlbiA8IDIp IHJldHVybiAwOw0KCQlzd2l0Y2ggKGJlMTZkZWMoYnVmKSkgew0KCQljYXNl IERBVEEoSU5QVVQsIDB4MTApOiAvKiBCYXNpYyByZXBvcnQgKi8NCgkJCWlm ICghYmFzaWNfaW5wdXQoYnVmICsgMiwgbGVuIC0gMikpDQoJCQkJcmV0dXJu IDA7DQoJCQlicmVhazsNCg0KCQljYXNlIERBVEEoSU5QVVQsIDB4MjgpOgkv KiBUcmFjayByZXBvcnQgKi8NCgkJCWlmICghdHJhY2tfaW5wdXQoYnVmICsg MiwgbGVuIC0gMikpDQoJCQkJcmV0dXJuIDA7DQoJCQlicmVhazsNCg0KCQlj YXNlIERBVEEoSU5QVVQsIDB4MjkpOiAvKiBNb3VzZSByZXBvcnQgKi8NCgkJ CWlmICghbW91c2VfaW5wdXQoYnVmICsgMiwgbGVuIC0gMikpDQoJCQkJcmV0 dXJuIDA7DQoJCQlicmVhazsNCg0KCQljYXNlIERBVEEoSU5QVVQsIDB4MmEp OiAvKiBCYXR0ZXJ5IHdhcm5pbmcgKi8NCgkJCWlmIChsZW4gIT0gMykgcmV0 dXJuIDA7DQoJCQlwcmludGYoImJhdHRlcnkgJXNcbiIsIGJ1ZlsyXSA+IDEg PyAiY3JpdGljYWwiIDogIndhcm5pbmciKTsNCgkJCWJyZWFrOw0KDQoJCWNh c2UgREFUQShJTlBVVCwgMHg2MSk6IC8qIFN1cmZhY2UgZGV0ZWN0aW9uICov DQoJCQlpZiAobGVuICE9IDMpIHJldHVybiAwOw0KCQkJcHJpbnRmKCJtb3Vz ZSAlc1xuIiwgYnVmWzJdID4gMCA/ICJyYWlzZWQiIDogImxvd2VyZWQiKTsN CgkJCWJyZWFrOw0KDQoJCWNhc2UgREFUQShGRUFUVVJFLCAweDQ3KTogLyog QmF0dGVyeSBzdGF0dXMgKi8NCgkJCWlmIChsZW4gIT0gMikgcmV0dXJuIDA7 DQoJCQlwcmludGYoImJhdHRlcnkgJWQlJVxuIiwgYnVmWzJdKTsNCgkJCWJy ZWFrOw0KDQoJCWNhc2UgREFUQShGRUFUVVJFLCAweGQ3KTogLyogVG91Y2gg cmVwb3J0cyAqLw0KCQkJaWYgKGxlbiAhPSAzKSByZXR1cm4gMDsNCgkJCXBy aW50ZigidG91Y2ggcmVwb3J0cyAlc2FibGVkXG4iLCBidWZbMl0gPyAiZW4i IDogImRpcyIpOw0KCQkJYnJlYWs7DQoNCgkJY2FzZSBEQVRBKElOUFVULCAw eDMwKToNCgkJY2FzZSBEQVRBKElOUFVULCAweDYwKToNCgkJY2FzZSBEQVRB KElOUFVULCAweGY3KToNCgkJCWR1bXAoImlucHV0IiwgYnVmLCBsZW4pOw0K CQkJYnJlYWs7DQoNCgkJY2FzZSBEQVRBKEZFQVRVUkUsIDB4ZjApOg0KCQlj YXNlIERBVEEoRkVBVFVSRSwgMHhmMSk6DQoJCQlkdW1wKCJmZWF0dXJlIiwg YnVmLCBsZW4pOw0KCQkJYnJlYWs7DQoJCQkNCgkJZGVmYXVsdDoNCgkJCWR1 bXAoImRhdGEiLCBidWYsIGxlbik7DQoJCQlyZXR1cm4gMDsNCgkJfQ0KCQli cmVhazsNCg0KCWNhc2UgQlRISURfR0VUX1JFUE9SVDoNCgkJZHVtcCgiZ2V0 IHJlcG9ydCIsIGJ1ZiwgbGVuKTsNCgkJYnJlYWs7DQoNCgljYXNlIEJUSElE X1NFVF9SRVBPUlQ6DQoJCWR1bXAoInNldCByZXBvcnQiLCBidWYsIGxlbik7 DQoJCWJyZWFrOw0KDQoJY2FzZSBCVEhJRF9DT05UUk9MOg0KCWNhc2UgQlRI SURfR0VUX1BST1RPQ09MOg0KCWNhc2UgQlRISURfU0VUX1BST1RPQ09MOg0K CWNhc2UgQlRISURfR0VUX0lETEU6DQoJY2FzZSBCVEhJRF9TRVRfSURMRToN CgljYXNlIEJUSElEX0RBVEM6DQoJZGVmYXVsdDoNCgkJZHVtcCgiaGlkIiwg YnVmLCBsZW4pOw0KCQlyZXR1cm4gMDsNCgl9DQoNCglyZXR1cm4gMTsNCn0N Cg0Kc3RhdGljIGludA0KYmFzaWNfaW5wdXQodWludDhfdCAqYnVmLCBzaXpl X3QgbGVuKQ0Kew0KCQ0KCWlmIChsZW4gIT0gNSkNCgkJcmV0dXJuIDA7DQoN CglwcmludGYoImJhc2ljIGR4JTRkLCBkeSU0ZCwgbWIgJWQlZCIsDQoJICAg IGhpZF9nZXRfZGF0YShidWYsICZiYXNpYy5kWCksDQoJICAgIGhpZF9nZXRf ZGF0YShidWYsICZiYXNpYy5kWSksDQoJICAgIGhpZF9nZXRfZGF0YShidWYs ICZiYXNpYy5idXR0b24xKSA/IDEgOiAwLA0KCSAgICBoaWRfZ2V0X2RhdGEo YnVmLCAmYmFzaWMuYnV0dG9uMikgPyAxIDogMCk7DQoNCglwcmludGYoIlxu Iik7DQoJcmV0dXJuIDE7DQp9DQoNCnN0YXRpYyBpbnQNCnRyYWNrX2lucHV0 KHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikNCnsNCglpZiAoKChsZW4gLSA0 KSAlIDkpICE9IDApDQoJCXJldHVybiAwOw0KDQoJcHJpbnRmKCJ0cmFjayBj bGlja3MlNGQsIHRzIDB4JTA1eCIsDQoJICAgIGhpZF9nZXRfZGF0YShidWYs ICZ0cmFjay5jbGlja3MpLA0KCSAgICBoaWRfZ2V0X2RhdGEoYnVmLCAmdHJh Y2sudGltZXN0YW1wKSk7DQoJcHJpbnRiKCIsICIsIGJ1ZiwgJnRyYWNrLnVu a25vd24xKTsNCg0KCWZvciAoYnVmICs9IDQsIGxlbiAtPSA0OyBsZW4gPiAw OyBsZW4gLT0gOSwgYnVmICs9IDkpIHsNCgkJcHJpbnRmKCIgaWQgJXggeyAl ZDolZCglZCksICVkLiVkLyVkIiwNCgkJICAgIGhpZF9nZXRfZGF0YShidWYs ICZ0cmFjay5pZCksDQoJCSAgICBoaWRfZ2V0X2RhdGEoYnVmLCAmdHJhY2su YVgpLA0KCQkgICAgaGlkX2dldF9kYXRhKGJ1ZiwgJnRyYWNrLmFZKSwNCgkJ ICAgIGhpZF9nZXRfZGF0YShidWYsICZ0cmFjay5wcmVzc3VyZSksDQoJCSAg ICBoaWRfZ2V0X2RhdGEoYnVmLCAmdHJhY2subWFqb3IpLA0KCQkgICAgaGlk X2dldF9kYXRhKGJ1ZiwgJnRyYWNrLm1pbm9yKSwNCgkJICAgIGhpZF9nZXRf ZGF0YShidWYsICZ0cmFjay5hbmdsZSkpOw0KCQlwcmludGIoIiwgIiwgYnVm LCAmdHJhY2sudW5rbm93bjIpOw0KCQlwcmludGIoIiwgIiwgYnVmLCAmdHJh Y2sudW5rbm93bjMpOw0KCQlwcmludGIoIiwgIiwgYnVmLCAmdHJhY2sucGhh c2UpOw0KCQlwcmludGYoIn0iKTsNCgl9DQoNCglwcmludGYoIlxuIik7DQoJ cmV0dXJuIDE7DQp9DQoNCnN0YXRpYyBpbnQNCm1vdXNlX2lucHV0KHVpbnQ4 X3QgKmJ1Ziwgc2l6ZV90IGxlbikNCnsNCg0KCWlmICgoKGxlbiAtIDUpICUg OCkgIT0gMCkNCgkJcmV0dXJuIDA7DQoNCglwcmludGYoIm1vdXNlIGR4JTRk LCBkeSU0ZCwgbWIgJWQlZCwgdHMgMHglMDV4IiwNCgkgICAgKGhpZF9nZXRf ZGF0YShidWYsICZtb3VzZS5kWG0pIDw8IDgpIHwgKGhpZF9nZXRfZGF0YShi dWYsICZtb3VzZS5kWGwpICYgMHhmZiksDQoJICAgIChoaWRfZ2V0X2RhdGEo YnVmLCAmbW91c2UuZFltKSA8PCA4KSB8IChoaWRfZ2V0X2RhdGEoYnVmLCAm bW91c2UuZFlsKSAmIDB4ZmYpLA0KCSAgICBoaWRfZ2V0X2RhdGEoYnVmLCAm bW91c2UuYnV0dG9uMSkgPyAxIDogMCwNCgkgICAgaGlkX2dldF9kYXRhKGJ1 ZiwgJm1vdXNlLmJ1dHRvbjIpID8gMSA6IDAsDQoJICAgIGhpZF9nZXRfZGF0 YShidWYsICZtb3VzZS50aW1lc3RhbXApKTsNCg0KCWZvciAoYnVmICs9IDUs IGxlbiAtPSA1OyBsZW4gPiAwOyBsZW4gLT0gOCwgYnVmICs9IDgpIHsNCgkJ cHJpbnRmKCIsIGlkICV4IHslZDolZCglZCksICVkLiVkLyVkIiwNCgkJICAg IGhpZF9nZXRfZGF0YShidWYsICZtb3VzZS5pZCksDQoJCSAgICBoaWRfZ2V0 X2RhdGEoYnVmLCAmbW91c2UuYVcpLA0KCQkgICAgaGlkX2dldF9kYXRhKGJ1 ZiwgJm1vdXNlLmFaKSwNCgkJICAgIGhpZF9nZXRfZGF0YShidWYsICZtb3Vz ZS5wcmVzc3VyZSksDQoJCSAgICBoaWRfZ2V0X2RhdGEoYnVmLCAmbW91c2Uu bWFqb3IpLA0KCQkgICAgaGlkX2dldF9kYXRhKGJ1ZiwgJm1vdXNlLm1pbm9y KSwNCgkJICAgIGhpZF9nZXRfZGF0YShidWYsICZtb3VzZS5hbmdsZSkpOw0K CQlwcmludGIoIiwgIiwgYnVmLCAmbW91c2UudW5rbm93bik7DQoJCXByaW50 YigiLCAiLCBidWYsICZtb3VzZS5waGFzZSk7DQoJCXByaW50ZigifSIpOw0K CX0NCg0KCXByaW50ZigiXG4iKTsNCglyZXR1cm4gMTsNCn0NCg== --0-1971321511-1381613931=:523 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=send.c Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: send data to mouse Content-Disposition: attachment; filename=send.c I2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5cy9pb2N0bC5o Pg0KDQojaW5jbHVkZSA8ZXJyLmg+DQojaW5jbHVkZSA8ZmNudGwuaD4NCiNp bmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1 ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQojaW5jbHVk ZSA8YnRoaWQuaD4NCg0Kc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7DQoNCmNv bnN0IGNoYXIgKmRldmljZSA9ICIvZGV2L3dzbW91c2UiOw0KDQpzdHJ1Y3Qg YnRtYWdpY19pbyB7DQoJc2l6ZV90CWxlbjsNCgl1aW50OF90CWJ1ZlsyNTZd Ow0KfTsNCg0KaW50DQptYWluKGludCBhYywgY2hhciAqYXZbXSkNCnsNCglz dHJ1Y3QgYnRtYWdpY19pbyBiOw0KCWludCBjaCwgZmQ7DQoNCgl3aGlsZSAo KGNoID0gZ2V0b3B0KGFjLCBhdiwgImQ6IikpICE9IC0xKSB7DQoJCXN3aXRj aCAoY2gpIHsNCgkJY2FzZSAnZCc6DQoJCQlkZXZpY2UgPSBvcHRhcmc7DQoJ CQlicmVhazsNCg0KCQlkZWZhdWx0Og0KCQkJdXNhZ2UoKTsNCgkJCS8qIE5P VCBSRUFDSEVEICovDQoJCX0NCgl9DQoNCglhYyAtPSBvcHRpbmQ7DQoJYXYg Kz0gb3B0aW5kOw0KDQoJaWYgKGFjID09IDApDQoJCXVzYWdlKCk7DQoNCglt ZW1zZXQoJmIsIDAsIHNpemVvZihiKSk7DQoJd2hpbGUgKGFjLS0gPiAwKQ0K CQliLmJ1ZltiLmxlbisrXSA9ICh1aW50OF90KXN0cnRvdWwoKmF2KyssIE5V TEwsIDApOw0KDQoJZmQgPSBvcGVuKGRldmljZSwgT19XUk9OTFksIDApOw0K CWlmIChmZCA9PSAtMSkNCgkJZmQgPSBvcGVuKGRldmljZSwgT19SRE9OTFks IDApOw0KCWlmIChmZCA9PSAtMSkNCgkJZXJyKEVYSVRfRkFJTFVSRSwgIiVz IiwgZGV2aWNlKTsNCg0KCWlmIChpb2N0bChmZCwgX0lPVygnYicsIDB4ZmYs IHN0cnVjdCBidG1hZ2ljX2lvKSwgJmIpID09IC0xKQ0KCQllcnIoRVhJVF9G QUlMVVJFLCAiYnRtYWdpY19zZW5kIik7DQoNCgljbG9zZShmZCk7DQoJcmV0 dXJuIDA7DQp9DQoNCnN0YXRpYyB2b2lkDQp1c2FnZSh2b2lkKQ0Kew0KCWZw cmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFstZCBkZXZpY2VdIC4uLlxuIiwN CgkgICAgZ2V0cHJvZ25hbWUoKSk7DQoNCglleGl0KDApOw0KfQ0K --0-1971321511-1381613931=:523--