mirror of
https://github.com/flatcar/scripts.git
synced 2025-11-29 06:21:46 +01:00
chore(net-wireless/*): remove everything
Lets not worry about having coreos support wireless for now :)
This commit is contained in:
parent
bfdc8d5058
commit
745715959d
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Atheros AR300x firmware
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.atheros.com/
|
|
||||||
IUSE=cros_workon_tree_a214d22b4c8a8f3cf46dd4a8b80451231eedb9dc
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=Atheros
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=a3a37e110138b1fcd95df0e84c7f0057
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Atheros AR300x firmware
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.atheros.com/
|
|
||||||
IUSE=cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=Atheros
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=5b5af88ceed54dc45fbfc34b10b1af18
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Atheros AR600x firmware
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.atheros.com/
|
|
||||||
IUSE=cros_workon_tree_a214d22b4c8a8f3cf46dd4a8b80451231eedb9dc
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=Atheros
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=d345e8d2a69d715eac64c2b9abddec61
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Atheros AR600x firmware
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.atheros.com/
|
|
||||||
IUSE=cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=Atheros
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=5ab3772defa767362c8df9cd80f5f1bf
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure install postinst prepare
|
|
||||||
DEPEND=sys-devel/flex >=dev-util/pkgconfig-0.20 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) gstreamer? ( >=media-libs/gstreamer-0.10 >=media-libs/gst-plugins-base-0.10 ) usb? ( dev-libs/libusb ) cups? ( net-print/cups ) sys-fs/udev dev-libs/glib sys-apps/dbus media-libs/libsndfile >=dev-libs/libnl-1.1 !net-wireless/bluez-libs !net-wireless/bluez-utils || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool
|
|
||||||
DESCRIPTION=Bluetooth Tools and System Daemons for Linux
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://bluez.sourceforge.net/
|
|
||||||
IUSE=alsa caps +consolekit cups debug gstreamer old-daemons pcmcia test-programs usb
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=GPL-2 LGPL-2.1
|
|
||||||
RDEPEND=alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) gstreamer? ( >=media-libs/gstreamer-0.10 >=media-libs/gst-plugins-base-0.10 ) usb? ( dev-libs/libusb ) cups? ( net-print/cups ) sys-fs/udev dev-libs/glib sys-apps/dbus media-libs/libsndfile >=dev-libs/libnl-1.1 !net-wireless/bluez-libs !net-wireless/bluez-utils consolekit? ( sys-auth/pambase[consolekit] ) test-programs? ( dev-python/dbus-python dev-python/pygobject )
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=mirror://kernel/linux/bluetooth/bluez-4.62.tar.gz
|
|
||||||
_eclasses_=autotools addbdf6cce5024ac93ad2084ad5e1d2d binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a libtool 0fd90d183673bf1107465ec45849d1ea multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=fbe76b1f95a29c416cd2ba8b36211e87
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure install postinst prepare
|
|
||||||
DEPEND=sys-devel/flex >=dev-util/pkgconfig-0.20 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) gstreamer? ( >=media-libs/gstreamer-0.10 >=media-libs/gst-plugins-base-0.10 ) usb? ( dev-libs/libusb ) cups? ( net-print/cups ) sys-fs/udev dev-libs/glib sys-apps/dbus media-libs/libsndfile >=dev-libs/libnl-1.1 !net-wireless/bluez-libs !net-wireless/bluez-utils || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool
|
|
||||||
DESCRIPTION=Bluetooth Tools and System Daemons for Linux
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://bluez.sourceforge.net/
|
|
||||||
IUSE=alsa caps +consolekit cups debug gstreamer old-daemons pcmcia test-programs usb
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=GPL-2 LGPL-2.1
|
|
||||||
RDEPEND=alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) gstreamer? ( >=media-libs/gstreamer-0.10 >=media-libs/gst-plugins-base-0.10 ) usb? ( dev-libs/libusb ) cups? ( net-print/cups ) sys-fs/udev dev-libs/glib sys-apps/dbus media-libs/libsndfile >=dev-libs/libnl-1.1 !net-wireless/bluez-libs !net-wireless/bluez-utils consolekit? ( sys-auth/pambase[consolekit] ) test-programs? ( dev-python/dbus-python dev-python/pygobject )
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=mirror://kernel/linux/bluetooth/bluez-4.62.tar.gz
|
|
||||||
_eclasses_=autotools addbdf6cce5024ac93ad2084ad5e1d2d binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a libtool 0fd90d183673bf1107465ec45849d1ea multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=fbe76b1f95a29c416cd2ba8b36211e87
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
DEFINED_PHASES=configure install postinst prepare setup
|
|
||||||
DEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( dev-libs/libusb:1 ) >=dev-util/pkgconfig-0.20 >=dev-libs/check-0.9.8 sys-devel/flex || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
DESCRIPTION=Bluetooth Tools and System Daemons for Linux
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://www.bluez.org/
|
|
||||||
IUSE=alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb
|
|
||||||
KEYWORDS=amd64 arm ~hppa ~ppc ~ppc64 x86
|
|
||||||
LICENSE=GPL-2 LGPL-2.1
|
|
||||||
RDEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( dev-libs/libusb:1 ) !net-wireless/bluez-libs !net-wireless/bluez-utils consolekit? ( || ( sys-auth/consolekit >=sys-apps/systemd-37 ) ) test-programs? ( dev-python/dbus-python dev-python/pygobject:2 ) >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=mirror://kernel/linux/bluetooth/bluez-4.97.tar.xz http://dev.gentoo.org/~pacho/bluez/oui-20111231.txt.xz
|
|
||||||
_eclasses_=autotools addbdf6cce5024ac93ad2084ad5e1d2d binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a libtool 0fd90d183673bf1107465ec45849d1ea multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c python 6bbd984910e27780e5d0ea543d83ef84 systemd b5da52630b2559da43198bfb56ccacba toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=76d206097cc342c22ff9c9cf742c01d9
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
DEFINED_PHASES=configure install postinst prepare setup
|
|
||||||
DEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( virtual/libusb:0 ) readline? ( sys-libs/readline ) >=dev-util/pkgconfig-0.20 sys-devel/flex test-programs? ( >=dev-libs/check-0.9.8 ) || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
DESCRIPTION=Bluetooth Tools and System Daemons for Linux
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://www.bluez.org/
|
|
||||||
IUSE=alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb readline
|
|
||||||
KEYWORDS=amd64 arm hppa ~ppc ~ppc64 x86
|
|
||||||
LICENSE=GPL-2 LGPL-2.1
|
|
||||||
RDEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( virtual/libusb:0 ) readline? ( sys-libs/readline ) !net-wireless/bluez-libs !net-wireless/bluez-utils consolekit? ( || ( sys-auth/consolekit >=sys-apps/systemd-37 ) ) test-programs? ( dev-python/dbus-python dev-python/pygobject:2 ) >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=mirror://kernel/linux/bluetooth/bluez-4.99.tar.xz http://dev.gentoo.org/~pacho/bluez/oui-20120308.txt.xz
|
|
||||||
_eclasses_=autotools addbdf6cce5024ac93ad2084ad5e1d2d binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a libtool 0fd90d183673bf1107465ec45849d1ea multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c python 6bbd984910e27780e5d0ea543d83ef84 systemd b5da52630b2559da43198bfb56ccacba toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=c562317850a05d586686e6d2921ca2a6
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
DEFINED_PHASES=configure install prepare setup
|
|
||||||
DEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( virtual/libusb:0 ) readline? ( sys-libs/readline ) >=dev-util/pkgconfig-0.20 sys-devel/flex test-programs? ( >=dev-libs/check-0.9.8 ) || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
DESCRIPTION=Bluetooth Tools and System Daemons for Linux
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://www.bluez.org/
|
|
||||||
IUSE=alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb readline
|
|
||||||
KEYWORDS=amd64 arm hppa ~ppc ~ppc64 x86
|
|
||||||
LICENSE=GPL-2 LGPL-2.1
|
|
||||||
RDEPEND=>=dev-libs/glib-2.14:2 sys-apps/dbus >=sys-fs/udev-169 alsa? ( media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)] media-libs/libsndfile ) caps? ( >=sys-libs/libcap-ng-0.6.2 ) cups? ( net-print/cups ) gstreamer? ( >=media-libs/gstreamer-0.10:0.10 >=media-libs/gst-plugins-base-0.10:0.10 ) usb? ( virtual/libusb:0 ) readline? ( sys-libs/readline ) !net-wireless/bluez-libs !net-wireless/bluez-utils consolekit? ( || ( sys-auth/consolekit >=sys-apps/systemd-37 ) ) test-programs? ( dev-python/dbus-python dev-python/pygobject:2 ) >=app-admin/eselect-python-20091230 test-programs? ( =dev-lang/python-2* )
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=mirror://kernel/linux/bluetooth/bluez-4.99.tar.xz http://dev.gentoo.org/~pacho/bluez/oui-20120308.txt.xz
|
|
||||||
_eclasses_=autotools addbdf6cce5024ac93ad2084ad5e1d2d binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a libtool 0fd90d183673bf1107465ec45849d1ea multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c python 6bbd984910e27780e5d0ea543d83ef84 systemd b5da52630b2559da43198bfb56ccacba toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=91598d2fbb104318e06beffe96196ce6
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install prepare
|
|
||||||
DEPEND=dev-libs/libgcrypt dev-libs/libnl:0 net-wireless/wireless-regdb dev-python/m2crypto
|
|
||||||
DESCRIPTION=Central Regulatory Domain Agent for wireless networks.
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/developers/Regulatory
|
|
||||||
KEYWORDS=amd64 arm ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=dev-libs/libgcrypt dev-libs/libnl:0 net-wireless/wireless-regdb
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://wireless.kernel.org/download/crda/crda-1.1.1.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 multilib 5f4ad6cf85e365e8f0c6050ddd21659e toolchain-funcs 64fc271a237429f84f36b91c9f4b9912
|
|
||||||
_md5_=921c24d7b09fc5013de407a426097604
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
DEFINED_PHASES=compile info install prepare setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=GCT GDM7205 WiMAX SDK
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://www.gctsemi.com/
|
|
||||||
IUSE=cros_workon_tree_3dc85a711e8560caa66ff457623c985d8256abe2
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=BSD
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=66eeda10c80441104df126346ff2cec7
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
DEFINED_PHASES=compile info install prepare setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=GCT GDM7205 WiMAX SDK
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://www.gctsemi.com/
|
|
||||||
IUSE=cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=BSD
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=fd30ce250542cfe65f62e37a5086b503
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure info install postinst prepare setup unpack
|
|
||||||
DEPEND=ssl? ( dev-libs/openssl ) dev-libs/libnl:0 madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) dev-vcs/git
|
|
||||||
DESCRIPTION=IEEE 802.11 wireless LAN Host AP daemon
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://hostap.epitest.fi
|
|
||||||
IUSE=ipv6 logwatch madwifi +ssl +wps cros_workon_tree_6fa69fc25b9ed779d0e60b293e3b7c40edc95bb5
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=|| ( GPL-2 BSD )
|
|
||||||
RDEPEND=ssl? ( dev-libs/openssl ) dev-libs/libnl:0 madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) )
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=59dfe3483da54fa0518a9440223d2bb9
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure info install postinst prepare setup unpack
|
|
||||||
DEPEND=ssl? ( dev-libs/openssl ) dev-libs/libnl:0 madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) dev-vcs/git
|
|
||||||
DESCRIPTION=IEEE 802.11 wireless LAN Host AP daemon
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://hostap.epitest.fi
|
|
||||||
IUSE=ipv6 logwatch madwifi +ssl +wps cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=|| ( GPL-2 BSD )
|
|
||||||
RDEPEND=ssl? ( dev-libs/openssl ) dev-libs/libnl:0 madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) )
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=86b8f0be48951a5d4adf7ca08d18aa56
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
DEFINED_PHASES=install
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://wireless.kernel.org/download/iw/iw-0.9.22.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 multilib 5f4ad6cf85e365e8f0c6050ddd21659e toolchain-funcs 64fc271a237429f84f36b91c9f4b9912
|
|
||||||
_md5_=fcd477bbda16843500d4d84b2bbc0a6b
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
DEFINED_PHASES=install
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://wireless.kernel.org/download/iw/iw-3.0.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 multilib 5f4ad6cf85e365e8f0c6050ddd21659e toolchain-funcs 64fc271a237429f84f36b91c9f4b9912
|
|
||||||
_md5_=fcd477bbda16843500d4d84b2bbc0a6b
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=install prepare
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ~ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://linuxwireless.org/download/iw/iw-3.1.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=d053798fd4fa8bc5001c0256b5d3209b
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=install prepare
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ~ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://linuxwireless.org/download/iw/iw-3.1.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=d053798fd4fa8bc5001c0256b5d3209b
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=install prepare
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ~ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://linuxwireless.org/download/iw/iw-3.6.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=79426318c8c8a335c358b84cb0d65481
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=install prepare
|
|
||||||
DEPEND=>=dev-libs/libnl-1.1 dev-util/pkgconfig
|
|
||||||
DESCRIPTION=nl80211-based configuration utility for wireless devices using the mac80211 kernel stack
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/users/Documentation/iw
|
|
||||||
KEYWORDS=amd64 arm ~ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
RDEPEND=>=dev-libs/libnl-1.1
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://linuxwireless.org/download/iw/iw-3.6.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 eutils 33ef77a15337022e05342d2c772a7a5a multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=79426318c8c8a335c358b84cb0d65481
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Centrino Wireless-N 2200 ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-2000-ucode-18.168.6.1.tgz
|
|
||||||
_md5_=c2571b8bea43fa79175916fdc4a35ba4
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) PRO/Wireless 3945ABG/BG Network Connection
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-3945-ucode-15.32.2.9.tgz
|
|
||||||
_md5_=fe623ff8b21dc78c96c5823960bbe6d4
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Wireless WiFi 4965AGN ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-4965-ucode-228.61.2.24.tgz
|
|
||||||
_md5_=3f69a332a1d5b1d6ae170cb235e8931d
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Wireless WiFi Advanced N 6000 ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6000-ucode-9.221.4.1.tgz
|
|
||||||
_md5_=a8f6bbecc5cd2eecf6c8e2d487533b26
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Wireless WiFi Advanced N 6000 ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6000g2a-ucode-17.168.5.2.tgz
|
|
||||||
_md5_=3bd9e9f81c495ccb9544cd064fe1f61b
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Wireless WiFi Advanced N 6000 ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6000g2b-ucode-18.168.6.1.tgz
|
|
||||||
_md5_=6600761dac378f14fc8007a8217b84f1
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DEPEND=|| ( >=sys-fs/udev-096 >=sys-apps/hotplug-20040923 )
|
|
||||||
DESCRIPTION=Intel (R) Wireless WiFi Advanced N 6000 ucode
|
|
||||||
HOMEPAGE=http://intellinuxwireless.org/?p=iwlwifi
|
|
||||||
KEYWORDS=amd64 x86
|
|
||||||
LICENSE=ipw3945
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-6050-ucode-41.28.5.1.tgz
|
|
||||||
_md5_=fcc3c261c789028a951a984d2a0be433
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Marvell SD8787 firmware image
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.marvell.com/
|
|
||||||
IUSE=cros_workon_tree_e678d0d27c25cba5abe0581e078ede22b87ba6ab
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=Marvell International Ltd.
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=e70e379a7b45a9cbb807c3aa00bc4beb
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=info install setup unpack
|
|
||||||
DEPEND=dev-vcs/git
|
|
||||||
DESCRIPTION=Marvell SD8787 firmware image
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://www.marvell.com/
|
|
||||||
IUSE=cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=Marvell International Ltd.
|
|
||||||
RESTRICT=binchecks strip test
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29
|
|
||||||
_md5_=0db79cbcf6f71483db023375b3484466
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
DEFINED_PHASES=install
|
|
||||||
DESCRIPTION=Ebuild that installs Realtek 2800 USB firmware.
|
|
||||||
EAPI=4
|
|
||||||
HOMEPAGE=http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git
|
|
||||||
KEYWORDS=x86 arm amd64
|
|
||||||
LICENSE=ralink-firmware
|
|
||||||
SLOT=0
|
|
||||||
_md5_=c58aae91758bbf956e8fcb7307c0fa54
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
DEFINED_PHASES=compile install
|
|
||||||
DESCRIPTION=Binary regulatory database for CRDA
|
|
||||||
HOMEPAGE=http://wireless.kernel.org/en/developers/Regulatory
|
|
||||||
KEYWORDS=amd64 arm ppc x86 ~amd64-linux ~x86-linux
|
|
||||||
LICENSE=as-is
|
|
||||||
SLOT=0
|
|
||||||
SRC_URI=http://wireless.kernel.org/download/wireless-regdb/wireless-regdb-2010.11.24.tar.bz2
|
|
||||||
_eclasses_=binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 multilib 5f4ad6cf85e365e8f0c6050ddd21659e toolchain-funcs 64fc271a237429f84f36b91c9f4b9912
|
|
||||||
_md5_=67ed208f197385a2f392006d4e39cfb8
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure info install postinst prepare setup unpack
|
|
||||||
DEPEND=dev-libs/libnl:0 dbus? ( sys-apps/dbus ) kernel_linux? ( eap-sim? ( sys-apps/pcsc-lite ) madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) ) !kernel_linux? ( net-libs/libpcap ) qt4? ( x11-libs/qt-gui:4 x11-libs/qt-svg:4 ) !qt4? ( qt3? ( x11-libs/qt:3 ) ) readline? ( sys-libs/ncurses sys-libs/readline ) ssl? ( dev-libs/openssl chromeos-base/chaps dev-libs/engine_pkcs11 ) !ssl? ( gnutls? ( net-libs/gnutls ) ) !ssl? ( !gnutls? ( dev-libs/libtommath ) ) dev-vcs/git
|
|
||||||
DESCRIPTION=IEEE 802.1X/WPA supplicant for secure wireless transfers
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://hostap.epitest.fi/wpa_supplicant/
|
|
||||||
IUSE=dbus debug gnutls eap-sim madwifi ps3 qt3 qt4 readline ssl wps kernel_linux kernel_FreeBSD cros_workon_tree_6fa69fc25b9ed779d0e60b293e3b7c40edc95bb5
|
|
||||||
KEYWORDS=amd64 arm x86
|
|
||||||
LICENSE=|| ( GPL-2 BSD )
|
|
||||||
RDEPEND=dev-libs/libnl:0 dbus? ( sys-apps/dbus ) kernel_linux? ( eap-sim? ( sys-apps/pcsc-lite ) madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) ) !kernel_linux? ( net-libs/libpcap ) qt4? ( x11-libs/qt-gui:4 x11-libs/qt-svg:4 ) !qt4? ( qt3? ( x11-libs/qt:3 ) ) readline? ( sys-libs/ncurses sys-libs/readline ) ssl? ( dev-libs/openssl chromeos-base/chaps dev-libs/engine_pkcs11 ) !ssl? ( gnutls? ( net-libs/gnutls ) ) !ssl? ( !gnutls? ( dev-libs/libtommath ) )
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=base fc89786f3f7e7bcf03334359bd5b639b binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c qt3 823f11abd98cfc43cf92b8622e420f1f qt4 83eabd1192f3f2c5a649ba2422a14d00 toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29 versionator 865bc8b2fc9fcfb6d520bdf5a110f5ed
|
|
||||||
_md5_=a57426a6ed0a168b7009db585a6a5548
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
DEFINED_PHASES=compile configure info install postinst prepare setup unpack
|
|
||||||
DEPEND=dev-libs/libnl:0 dbus? ( sys-apps/dbus ) kernel_linux? ( eap-sim? ( sys-apps/pcsc-lite ) madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) ) !kernel_linux? ( net-libs/libpcap ) qt4? ( x11-libs/qt-gui:4 x11-libs/qt-svg:4 ) !qt4? ( qt3? ( x11-libs/qt:3 ) ) readline? ( sys-libs/ncurses sys-libs/readline ) ssl? ( dev-libs/openssl chromeos-base/chaps dev-libs/engine_pkcs11 ) !ssl? ( gnutls? ( net-libs/gnutls ) ) !ssl? ( !gnutls? ( dev-libs/libtommath ) ) dev-vcs/git
|
|
||||||
DESCRIPTION=IEEE 802.1X/WPA supplicant for secure wireless transfers
|
|
||||||
EAPI=2
|
|
||||||
HOMEPAGE=http://hostap.epitest.fi/wpa_supplicant/
|
|
||||||
IUSE=dbus debug gnutls eap-sim madwifi ps3 qt3 qt4 readline ssl wps kernel_linux kernel_FreeBSD cros_workon_tree_
|
|
||||||
KEYWORDS=~amd64 ~arm ~x86
|
|
||||||
LICENSE=|| ( GPL-2 BSD )
|
|
||||||
RDEPEND=dev-libs/libnl:0 dbus? ( sys-apps/dbus ) kernel_linux? ( eap-sim? ( sys-apps/pcsc-lite ) madwifi? ( || ( >net-wireless/madwifi-ng-tools-0.9.3 net-wireless/madwifi-old ) ) ) !kernel_linux? ( net-libs/libpcap ) qt4? ( x11-libs/qt-gui:4 x11-libs/qt-svg:4 ) !qt4? ( qt3? ( x11-libs/qt:3 ) ) readline? ( sys-libs/ncurses sys-libs/readline ) ssl? ( dev-libs/openssl chromeos-base/chaps dev-libs/engine_pkcs11 ) !ssl? ( gnutls? ( net-libs/gnutls ) ) !ssl? ( !gnutls? ( dev-libs/libtommath ) )
|
|
||||||
SLOT=0
|
|
||||||
_eclasses_=base fc89786f3f7e7bcf03334359bd5b639b binutils-funcs 73669d0b20960c1cc54cf381a4b89e77 cros-workon 5f2f8a42fa8e9e59f25015d9167f93a4 eutils 33ef77a15337022e05342d2c772a7a5a flag-o-matic 01a8b1eb019305bc4b4a8bd0b04e4cd8 git-2 da60d6e85fa94cef4d510cab24e01e36 multilib 5f4ad6cf85e365e8f0c6050ddd21659e portability 0be430f759a631e692678ed796e09f5c qt3 823f11abd98cfc43cf92b8622e420f1f qt4 83eabd1192f3f2c5a649ba2422a14d00 toolchain-funcs 64fc271a237429f84f36b91c9f4b9912 user 9e552f935106ff0bc92af16da64b4b29 versionator 865bc8b2fc9fcfb6d520bdf5a110f5ed
|
|
||||||
_md5_=34dc590d42c1fb333c869cc69f5fe7de
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
# Copyright 1999-2010 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI="2"
|
|
||||||
CROS_WORKON_COMMIT="52a5bdaa8930c14ee42518354de3e5ec09911c6b"
|
|
||||||
CROS_WORKON_TREE="a214d22b4c8a8f3cf46dd4a8b80451231eedb9dc"
|
|
||||||
CROS_WORKON_PROJECT="chromiumos/third_party/atheros"
|
|
||||||
|
|
||||||
inherit cros-workon
|
|
||||||
|
|
||||||
DESCRIPTION="Atheros AR300x firmware"
|
|
||||||
HOMEPAGE="http://www.atheros.com/"
|
|
||||||
LICENSE="Atheros"
|
|
||||||
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm x86"
|
|
||||||
IUSE=""
|
|
||||||
|
|
||||||
RESTRICT="binchecks strip test"
|
|
||||||
CROS_WORKON_LOCALNAME="atheros"
|
|
||||||
DEPEND=""
|
|
||||||
RDEPEND=""
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
src_dir="${S}"/ath3k/files/firmware
|
|
||||||
dodir /lib/firmware || die
|
|
||||||
insinto /lib/firmware
|
|
||||||
doins -r ${src_dir}/* || die \
|
|
||||||
"failed installing from ${src_dir} to ${D}/lib/firmware"
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
# Copyright 1999-2010 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI="2"
|
|
||||||
CROS_WORKON_PROJECT="chromiumos/third_party/atheros"
|
|
||||||
|
|
||||||
inherit cros-workon
|
|
||||||
|
|
||||||
DESCRIPTION="Atheros AR300x firmware"
|
|
||||||
HOMEPAGE="http://www.atheros.com/"
|
|
||||||
LICENSE="Atheros"
|
|
||||||
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="~amd64 ~arm ~x86"
|
|
||||||
IUSE=""
|
|
||||||
|
|
||||||
RESTRICT="binchecks strip test"
|
|
||||||
CROS_WORKON_LOCALNAME="atheros"
|
|
||||||
DEPEND=""
|
|
||||||
RDEPEND=""
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
src_dir="${S}"/ath3k/files/firmware
|
|
||||||
dodir /lib/firmware || die
|
|
||||||
insinto /lib/firmware
|
|
||||||
doins -r ${src_dir}/* || die \
|
|
||||||
"failed installing from ${src_dir} to ${D}/lib/firmware"
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
# Copyright 1999-2009 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI="2"
|
|
||||||
CROS_WORKON_COMMIT="52a5bdaa8930c14ee42518354de3e5ec09911c6b"
|
|
||||||
CROS_WORKON_TREE="a214d22b4c8a8f3cf46dd4a8b80451231eedb9dc"
|
|
||||||
CROS_WORKON_PROJECT="chromiumos/third_party/atheros"
|
|
||||||
|
|
||||||
inherit cros-workon
|
|
||||||
|
|
||||||
DESCRIPTION="Atheros AR600x firmware"
|
|
||||||
HOMEPAGE="http://www.atheros.com/"
|
|
||||||
LICENSE="Atheros"
|
|
||||||
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm x86"
|
|
||||||
IUSE=""
|
|
||||||
|
|
||||||
RESTRICT="binchecks strip test"
|
|
||||||
CROS_WORKON_LOCALNAME="atheros"
|
|
||||||
DEPEND=""
|
|
||||||
RDEPEND=""
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
src_dir="${S}"/ath6k/files/firmware
|
|
||||||
dodir /lib/firmware || die
|
|
||||||
insinto /lib/firmware
|
|
||||||
doins -r ${src_dir}/* || die \
|
|
||||||
"failed installing from ${src_dir} to ${D}/lib/firmware"
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
# Copyright 1999-2009 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
EAPI="2"
|
|
||||||
CROS_WORKON_PROJECT="chromiumos/third_party/atheros"
|
|
||||||
|
|
||||||
inherit cros-workon
|
|
||||||
|
|
||||||
DESCRIPTION="Atheros AR600x firmware"
|
|
||||||
HOMEPAGE="http://www.atheros.com/"
|
|
||||||
LICENSE="Atheros"
|
|
||||||
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="~amd64 ~arm ~x86"
|
|
||||||
IUSE=""
|
|
||||||
|
|
||||||
RESTRICT="binchecks strip test"
|
|
||||||
CROS_WORKON_LOCALNAME="atheros"
|
|
||||||
DEPEND=""
|
|
||||||
RDEPEND=""
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
src_dir="${S}"/ath6k/files/firmware
|
|
||||||
dodir /lib/firmware || die
|
|
||||||
insinto /lib/firmware
|
|
||||||
doins -r ${src_dir}/* || die \
|
|
||||||
"failed installing from ${src_dir} to ${D}/lib/firmware"
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
DIST bluez-4.99.tar.xz 859756 SHA256 41889a91a5516eec26c4e59095ceea076de158b1ac38fd0ede9034596f511d3b SHA512 79e36a65ff9ff9c3311a8ef4819692503bb02f048a3c42dd0b9512749fb8e4d810eb832f211fb7dfebc7b6b5bf82a9363edd15741d62595f36d782804bb39ac3 WHIRLPOOL 32b8e3f67c846a17e7335395021008c181a2645fdb08b4ebe36bf4ad5221eef00f86ec7ef0d1de19c64741c884376666677ca9e129868dcaa18a5d4c0737c894
|
|
||||||
DIST oui-20120308.txt.xz 546720 SHA256 4256ba96a522333a41fd058e1880a04f77566c9ad0a62d3c0d7ac422bf8b9086 SHA512 f749b3ce9b6173760319849f1e4699f02d4f8628de78d0bc39c08b01331567b60a9bd3303a84982ad23bc6cbe7b6d9f27e2e26f699a818dac0e0e8fa6ddb44fa WHIRLPOOL 0797457e3bb54d49b295547a47894258c2c5a9954ca87c44948bdb57781e11c84d2d1be9cf6d3deb0d062e4a98b0b1fb406a1f0fbeb9d0a294da624c2e90f9ee
|
|
||||||
@ -1,165 +0,0 @@
|
|||||||
# Copyright 1999-2012 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/bluez-4.99.ebuild,v 1.7 2012/04/15 16:53:41 maekke Exp $
|
|
||||||
|
|
||||||
EAPI="4"
|
|
||||||
PYTHON_DEPEND="test-programs? 2"
|
|
||||||
|
|
||||||
inherit autotools multilib eutils systemd python
|
|
||||||
|
|
||||||
DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
|
|
||||||
HOMEPAGE="http://www.bluez.org/"
|
|
||||||
|
|
||||||
# Because of oui.txt changing from time to time without noticement, we need to supply it
|
|
||||||
# ourselves instead of using http://standards.ieee.org/regauth/oui/oui.txt directly.
|
|
||||||
# See bugs #345263 and #349473 for reference.
|
|
||||||
OUIDATE="20120308"
|
|
||||||
SRC_URI="mirror://kernel/linux/bluetooth/bluez-${PV}.tar.xz
|
|
||||||
http://dev.gentoo.org/~pacho/bluez/oui-${OUIDATE}.txt.xz"
|
|
||||||
S="${WORKDIR}/bluez-${PV}"
|
|
||||||
|
|
||||||
LICENSE="GPL-2 LGPL-2.1"
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm hppa ~ppc ~ppc64 x86"
|
|
||||||
IUSE="alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb readline"
|
|
||||||
|
|
||||||
CDEPEND="
|
|
||||||
>=dev-libs/glib-2.14:2
|
|
||||||
sys-apps/dbus
|
|
||||||
>=sys-fs/udev-169
|
|
||||||
alsa? (
|
|
||||||
media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)]
|
|
||||||
media-libs/libsndfile
|
|
||||||
)
|
|
||||||
caps? ( >=sys-libs/libcap-ng-0.6.2 )
|
|
||||||
cups? ( net-print/cups )
|
|
||||||
gstreamer? (
|
|
||||||
>=media-libs/gstreamer-0.10:0.10
|
|
||||||
>=media-libs/gst-plugins-base-0.10:0.10
|
|
||||||
)
|
|
||||||
usb? ( virtual/libusb:0 )
|
|
||||||
readline? ( sys-libs/readline )
|
|
||||||
"
|
|
||||||
DEPEND="${CDEPEND}
|
|
||||||
>=dev-util/pkgconfig-0.20
|
|
||||||
sys-devel/flex
|
|
||||||
test-programs? ( >=dev-libs/check-0.9.8 )
|
|
||||||
"
|
|
||||||
RDEPEND="${CDEPEND}
|
|
||||||
!net-wireless/bluez-libs
|
|
||||||
!net-wireless/bluez-utils
|
|
||||||
consolekit? (
|
|
||||||
|| ( sys-auth/consolekit
|
|
||||||
>=sys-apps/systemd-37 )
|
|
||||||
)
|
|
||||||
test-programs? (
|
|
||||||
dev-python/dbus-python
|
|
||||||
dev-python/pygobject:2
|
|
||||||
)
|
|
||||||
"
|
|
||||||
|
|
||||||
DOCS=( AUTHORS ChangeLog README )
|
|
||||||
|
|
||||||
pkg_setup() {
|
|
||||||
if use test-programs; then
|
|
||||||
python_pkg_setup
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_prepare() {
|
|
||||||
# Change the default D-Bus configuration; the daemon is run as
|
|
||||||
# bluetooth, not root; we don't use the lp user, and we use the
|
|
||||||
# chronos user instead of at_console
|
|
||||||
epatch "${FILESDIR}/${PN}-dbus.patch"
|
|
||||||
|
|
||||||
# Change the default SDP Server socket path to a sub-directory
|
|
||||||
# under /var/run, since /var/run is not writeable by the bluetooth
|
|
||||||
# user.
|
|
||||||
epatch "${FILESDIR}/${PN}-sdp-path.patch"
|
|
||||||
|
|
||||||
# Disable initial radio power for new adapters
|
|
||||||
epatch "${FILESDIR}/${PN}-initially-powered.patch"
|
|
||||||
|
|
||||||
# Automatic pairing support, including keyboard pairing support.
|
|
||||||
# (accepted upstream, can be dropped for next release)
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0001-Rename-AUTH_TYPE_NOTIFY-to-AUTH_TYPE_NOTIFY_PASSKEY.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0002-Pass-passkey-by-pointer-rather-than-by-value.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0003-agent-add-DisplayPinCode-method.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0004-Add-AUTH_TYPE_NOTIFY_PASSKEY-to-device_request_authe.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0005-Add-display-parameter-to-plugin-pincode-callback.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0006-Display-PIN-generated-by-plugin.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0007-doc-document-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0008-simple-agent-add-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0009-Add-support-for-retrying-a-bonding.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0010-plugin-Add-bonding-callback-support-for-plugins.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0011-bonding-retry-if-callback-returns-TRUE.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0012-bonding-call-plugin-callback-on-cancellation.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0013-autopair-Add-autopair-plugin.patch"
|
|
||||||
|
|
||||||
# Automatic pairing of dumb devices. Not yet submitted upstream
|
|
||||||
# so kept as a separate patch on top of the above series.
|
|
||||||
epatch "${FILESDIR}/${PN}-autopair.patch"
|
|
||||||
|
|
||||||
eautoreconf
|
|
||||||
|
|
||||||
if use cups; then
|
|
||||||
sed -i \
|
|
||||||
-e "s:cupsdir = \$(libdir)/cups:cupsdir = `cups-config --serverbin`:" \
|
|
||||||
Makefile.tools Makefile.in || die
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_configure() {
|
|
||||||
use readline || export ac_cv_header_readline_readline_h=no
|
|
||||||
|
|
||||||
econf \
|
|
||||||
--enable-hid2hci \
|
|
||||||
--enable-audio \
|
|
||||||
--enable-bccmd \
|
|
||||||
--enable-datafiles \
|
|
||||||
--enable-dfutool \
|
|
||||||
--enable-input \
|
|
||||||
--enable-network \
|
|
||||||
--enable-serial \
|
|
||||||
--enable-service \
|
|
||||||
--enable-tools \
|
|
||||||
--disable-hal \
|
|
||||||
--localstatedir=/var \
|
|
||||||
--with-systemdunitdir="$(systemd_get_unitdir)" \
|
|
||||||
--with-ouifile=/usr/share/misc/oui.txt \
|
|
||||||
$(use_enable alsa) \
|
|
||||||
$(use_enable caps capng) \
|
|
||||||
$(use_enable cups) \
|
|
||||||
$(use_enable debug) \
|
|
||||||
$(use_enable gstreamer) \
|
|
||||||
$(use_enable pcmcia) \
|
|
||||||
$(use_enable test-programs test) \
|
|
||||||
$(use_enable usb) \
|
|
||||||
--enable-health \
|
|
||||||
--enable-wiimote \
|
|
||||||
--enable-dbusoob \
|
|
||||||
--enable-autopair
|
|
||||||
}
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
if use test-programs ; then
|
|
||||||
cd "${S}/test"
|
|
||||||
dobin simple-agent simple-endpoint simple-service
|
|
||||||
dobin monitor-bluetooth
|
|
||||||
dobin avtest gaptest hsmicro hsplay hstest ipctest l2test
|
|
||||||
dobin lmptest rctest scotest sdptest
|
|
||||||
newbin list-devices list-bluetooth-devices
|
|
||||||
rm test-textfile.{c,o} || die # bug #356529
|
|
||||||
for b in apitest test-* ; do
|
|
||||||
newbin "${b}" "bluez-${b}"
|
|
||||||
done
|
|
||||||
insinto /usr/share/doc/${PF}/test-services
|
|
||||||
doins service-*
|
|
||||||
|
|
||||||
dobin "${FILESDIR}/bluetooth-unpair"
|
|
||||||
dobin "${FILESDIR}/bluetooth-unpair-all"
|
|
||||||
|
|
||||||
python_convert_shebangs -r 2 "${ED}"
|
|
||||||
cd "${S}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
|
|
||||||
import dbus
|
|
||||||
import sys
|
|
||||||
|
|
||||||
bus = dbus.SystemBus()
|
|
||||||
|
|
||||||
bluez = bus.get_object('org.bluez', '/')
|
|
||||||
|
|
||||||
adapter_path = bluez.DefaultAdapter(dbus_interface='org.bluez.Manager')
|
|
||||||
adapter = bus.get_object('org.bluez', adapter_path)
|
|
||||||
|
|
||||||
device_path = adapter.FindDevice(sys.argv[1],
|
|
||||||
dbus_interface='org.bluez.Adapter')
|
|
||||||
device = bus.get_object('org.bluez', device_path)
|
|
||||||
|
|
||||||
adapter.RemoveDevice(device, dbus_interface='org.bluez.Adapter')
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
import dbus
|
|
||||||
import sys
|
|
||||||
|
|
||||||
bus = dbus.SystemBus()
|
|
||||||
|
|
||||||
bluez = bus.get_object('org.bluez', '/')
|
|
||||||
|
|
||||||
adapter_path = bluez.DefaultAdapter(dbus_interface='org.bluez.Manager')
|
|
||||||
adapter = bus.get_object('org.bluez', adapter_path)
|
|
||||||
|
|
||||||
all_the_things = """\
|
|
||||||
.
|
|
||||||
, = ,
|
|
||||||
,, .,,
|
|
||||||
,,. , .. ,, .,,,
|
|
||||||
,,,, ,. ,, ,,.:,,,.
|
|
||||||
,,,,, ,,.,, .,,,,i,,,
|
|
||||||
,,,,,,,YtY,,,+,,R,,
|
|
||||||
, ,,,,,,V.. tY# =,I,.
|
|
||||||
,,. ,,,,,,,V W R,;,
|
|
||||||
.,,. ,,,,: Y R=YW +,,
|
|
||||||
I; ,,,,,,,,: Y:#### =,
|
|
||||||
i.., ,,,,,,,,iX#####, , ., ,,
|
|
||||||
....t ,,,,,,,,,: :####X V,,, ,,,
|
|
||||||
i.... ,,,,,,,,,t I###+ X,,..,,,.
|
|
||||||
I.., ,,,,,,,,V =##Y, YR,,,,,
|
|
||||||
Xt .,,,,,,+,,R , BYV,,,,
|
|
||||||
,X:,,,,,,=,,,,R. ,RYYY,,,
|
|
||||||
,. :X,,,,V,,,,,,RYYYYYYY,,,,,,,,.
|
|
||||||
,,,,tX,t,,,,,,,,,YYYYYYYX,,,,,,,,,.
|
|
||||||
,,,,BB,,,,,,,,,,YYYYYYYV,,,,,,,
|
|
||||||
,,,,,BB,,,,,,,,,XYYYYYYY,,,.
|
|
||||||
,,,,,XI,,,,,,,,YYYYYYYY,,
|
|
||||||
,,,,,X:,,,,,,,YYYYYYYY,,. """
|
|
||||||
print all_the_things
|
|
||||||
|
|
||||||
for device_path in adapter.ListDevices(dbus_interface='org.bluez.Adapter'):
|
|
||||||
device = bus.get_object('org.bluez', device_path)
|
|
||||||
|
|
||||||
adapter.RemoveDevice(device, dbus_interface='org.bluez.Adapter')
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
From be1631d70689cfde701e9a1642a5afad11252af7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:40:25 -0800
|
|
||||||
Subject: [PATCH 01/13] Rename AUTH_TYPE_NOTIFY to AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
|
|
||||||
This makes room for additional notification types to be added.
|
|
||||||
---
|
|
||||||
src/device.c | 8 ++++----
|
|
||||||
src/device.h | 2 +-
|
|
||||||
src/event.c | 4 ++--
|
|
||||||
3 files changed, 7 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index dfc8e59..92c13f5 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2453,7 +2453,7 @@ void device_simple_pairing_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth = device->authr;
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY && auth->agent)
|
|
||||||
+ if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2470,7 +2470,7 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY && auth->agent)
|
|
||||||
+ if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
@@ -2724,7 +2724,7 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
err = agent_request_confirmation(agent, device, passkey,
|
|
||||||
confirm_cb, auth, NULL);
|
|
||||||
break;
|
|
||||||
- case AUTH_TYPE_NOTIFY:
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
err = agent_display_passkey(agent, device, passkey);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
@@ -2764,7 +2764,7 @@ static void cancel_authentication(struct authentication_req *auth)
|
|
||||||
case AUTH_TYPE_PASSKEY:
|
|
||||||
((agent_passkey_cb) auth->cb)(agent, &err, 0, device);
|
|
||||||
break;
|
|
||||||
- case AUTH_TYPE_NOTIFY:
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
/* User Notify doesn't require any reply */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 7cb9bb2..aa7f2f1 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -30,7 +30,7 @@ typedef enum {
|
|
||||||
AUTH_TYPE_PINCODE,
|
|
||||||
AUTH_TYPE_PASSKEY,
|
|
||||||
AUTH_TYPE_CONFIRM,
|
|
||||||
- AUTH_TYPE_NOTIFY,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
} auth_type_t;
|
|
||||||
|
|
||||||
struct btd_device *device_create(DBusConnection *conn,
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 113a2b6..95cdbdb 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -202,8 +202,8 @@ int btd_event_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_NOTIFY, passkey,
|
|
||||||
- FALSE, NULL);
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
+ passkey, FALSE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void btd_event_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,107 +0,0 @@
|
|||||||
From 888f24266b8ff06d7007afb5e6a38ba621750451 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:43:48 -0800
|
|
||||||
Subject: [PATCH 02/13] Pass passkey by pointer rather than by value
|
|
||||||
|
|
||||||
This allows alternate data of a different type to be passed to
|
|
||||||
device_request_authentication() for other notification types such
|
|
||||||
as those that require a PIN.
|
|
||||||
---
|
|
||||||
src/device.c | 9 +++++----
|
|
||||||
src/device.h | 2 +-
|
|
||||||
src/event.c | 8 ++++----
|
|
||||||
3 files changed, 10 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 92c13f5..8a2ae9d 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2681,7 +2681,7 @@ done:
|
|
||||||
}
|
|
||||||
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
- uint32_t passkey, gboolean secure, void *cb)
|
|
||||||
+ void *data, gboolean secure, void *cb)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth;
|
|
||||||
struct agent *agent;
|
|
||||||
@@ -2707,7 +2707,6 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth->device = device;
|
|
||||||
auth->cb = cb;
|
|
||||||
auth->type = type;
|
|
||||||
- auth->passkey = passkey;
|
|
||||||
auth->secure = secure;
|
|
||||||
device->authr = auth;
|
|
||||||
|
|
||||||
@@ -2721,11 +2720,13 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth, NULL);
|
|
||||||
break;
|
|
||||||
case AUTH_TYPE_CONFIRM:
|
|
||||||
- err = agent_request_confirmation(agent, device, passkey,
|
|
||||||
+ auth->passkey = *(uint32_t *)data;
|
|
||||||
+ err = agent_request_confirmation(agent, device, auth->passkey,
|
|
||||||
confirm_cb, auth, NULL);
|
|
||||||
break;
|
|
||||||
case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
- err = agent_display_passkey(agent, device, passkey);
|
|
||||||
+ auth->passkey = *(uint32_t *)data;
|
|
||||||
+ err = agent_display_passkey(agent, device, auth->passkey);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
err = -EINVAL;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index aa7f2f1..998aee7 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -83,7 +83,7 @@ gboolean device_is_creating(struct btd_device *device, const char *sender);
|
|
||||||
gboolean device_is_bonding(struct btd_device *device, const char *sender);
|
|
||||||
void device_cancel_bonding(struct btd_device *device, uint8_t status);
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
- uint32_t passkey, gboolean secure, void *cb);
|
|
||||||
+ void *data, gboolean secure, void *cb);
|
|
||||||
void device_cancel_authentication(struct btd_device *device, gboolean aborted);
|
|
||||||
gboolean device_is_authenticating(struct btd_device *device);
|
|
||||||
gboolean device_is_authorizing(struct btd_device *device);
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 95cdbdb..7d66b6d 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -130,7 +130,7 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_PINCODE, 0,
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_PINCODE, NULL,
|
|
||||||
secure, pincode_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ int btd_event_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
return device_request_authentication(device, AUTH_TYPE_CONFIRM,
|
|
||||||
- passkey, FALSE, confirm_cb);
|
|
||||||
+ &passkey, FALSE, confirm_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
int btd_event_user_passkey(bdaddr_t *sba, bdaddr_t *dba)
|
|
||||||
@@ -190,7 +190,7 @@ int btd_event_user_passkey(bdaddr_t *sba, bdaddr_t *dba)
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_PASSKEY, 0,
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_PASSKEY, NULL,
|
|
||||||
FALSE, passkey_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ int btd_event_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
return device_request_authentication(device, AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
- passkey, FALSE, NULL);
|
|
||||||
+ &passkey, FALSE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void btd_event_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,161 +0,0 @@
|
|||||||
From e84af9f6ba447c540512d56ccc7326af621749bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:56:56 -0800
|
|
||||||
Subject: [PATCH 03/13] agent: add DisplayPinCode method
|
|
||||||
|
|
||||||
In constrast to DisplayPasskey, this sends a UTF-8 string PIN code
|
|
||||||
to the agent; also we support a callback for the case where the
|
|
||||||
Agent doesn't implement this new method so we can fallback.
|
|
||||||
---
|
|
||||||
src/agent.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/agent.h | 4 ++
|
|
||||||
2 files changed, 115 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/agent.c b/src/agent.c
|
|
||||||
index 9b942e8..23e3b43 100644
|
|
||||||
--- a/src/agent.c
|
|
||||||
+++ b/src/agent.c
|
|
||||||
@@ -52,7 +52,8 @@ typedef enum {
|
|
||||||
AGENT_REQUEST_CONFIRMATION,
|
|
||||||
AGENT_REQUEST_PINCODE,
|
|
||||||
AGENT_REQUEST_AUTHORIZE,
|
|
||||||
- AGENT_REQUEST_CONFIRM_MODE
|
|
||||||
+ AGENT_REQUEST_CONFIRM_MODE,
|
|
||||||
+ AGENT_REQUEST_DISPLAY_PINCODE,
|
|
||||||
} agent_request_type_t;
|
|
||||||
|
|
||||||
struct agent {
|
|
||||||
@@ -699,6 +700,115 @@ int agent_display_passkey(struct agent *agent, struct btd_device *device,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void display_pincode_reply(DBusPendingCall *call, void *user_data)
|
|
||||||
+{
|
|
||||||
+ struct agent_request *req = user_data;
|
|
||||||
+ struct agent *agent = req->agent;
|
|
||||||
+ DBusMessage *message;
|
|
||||||
+ DBusError err;
|
|
||||||
+ agent_cb cb = req->cb;
|
|
||||||
+
|
|
||||||
+ /* clear agent->request early; our callback will likely try
|
|
||||||
+ * another request */
|
|
||||||
+ agent->request = NULL;
|
|
||||||
+
|
|
||||||
+ /* steal_reply will always return non-NULL since the callback
|
|
||||||
+ * is only called after a reply has been received */
|
|
||||||
+ message = dbus_pending_call_steal_reply(call);
|
|
||||||
+
|
|
||||||
+ dbus_error_init(&err);
|
|
||||||
+ if (dbus_set_error_from_message(&err, message)) {
|
|
||||||
+ error("Agent replied with an error: %s, %s",
|
|
||||||
+ err.name, err.message);
|
|
||||||
+
|
|
||||||
+ cb(agent, &err, req->user_data);
|
|
||||||
+
|
|
||||||
+ if (dbus_error_has_name(&err, DBUS_ERROR_NO_REPLY)) {
|
|
||||||
+ agent_cancel(agent);
|
|
||||||
+ dbus_message_unref(message);
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ goto done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_error_init(&err);
|
|
||||||
+ if (!dbus_message_get_args(message, &err, DBUS_TYPE_INVALID)) {
|
|
||||||
+ error("Wrong reply signature: %s", err.message);
|
|
||||||
+ cb(agent, &err, req->user_data);
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ goto done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ cb(agent, NULL, req->user_data);
|
|
||||||
+done:
|
|
||||||
+ dbus_message_unref(message);
|
|
||||||
+
|
|
||||||
+ agent_request_free(req, TRUE);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int display_pincode_request_new(struct agent_request *req,
|
|
||||||
+ const char *device_path,
|
|
||||||
+ const char *pincode)
|
|
||||||
+{
|
|
||||||
+ struct agent *agent = req->agent;
|
|
||||||
+
|
|
||||||
+ req->msg = dbus_message_new_method_call(agent->name, agent->path,
|
|
||||||
+ "org.bluez.Agent", "DisplayPinCode");
|
|
||||||
+ if (req->msg == NULL) {
|
|
||||||
+ error("Couldn't allocate D-Bus message");
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_message_append_args(req->msg,
|
|
||||||
+ DBUS_TYPE_OBJECT_PATH, &device_path,
|
|
||||||
+ DBUS_TYPE_STRING, &pincode,
|
|
||||||
+ DBUS_TYPE_INVALID);
|
|
||||||
+
|
|
||||||
+ if (dbus_connection_send_with_reply(connection, req->msg,
|
|
||||||
+ &req->call, REQUEST_TIMEOUT) == FALSE) {
|
|
||||||
+ error("D-Bus send failed");
|
|
||||||
+ return -EIO;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_pending_call_set_notify(req->call, display_pincode_reply,
|
|
||||||
+ req, NULL);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int agent_display_pincode(struct agent *agent, struct btd_device *device,
|
|
||||||
+ const char *pincode, agent_cb cb,
|
|
||||||
+ void *user_data, GDestroyNotify destroy)
|
|
||||||
+{
|
|
||||||
+ struct agent_request *req;
|
|
||||||
+ const gchar *dev_path = device_get_path(device);
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (agent->request)
|
|
||||||
+ return -EBUSY;
|
|
||||||
+
|
|
||||||
+ DBG("Calling Agent.DisplayPinCode: name=%s, path=%s, pincode=%s",
|
|
||||||
+ agent->name, agent->path, pincode);
|
|
||||||
+
|
|
||||||
+ req = agent_request_new(agent, AGENT_REQUEST_DISPLAY_PINCODE, cb,
|
|
||||||
+ user_data, destroy);
|
|
||||||
+
|
|
||||||
+ err = display_pincode_request_new(req, dev_path, pincode);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ goto failed;
|
|
||||||
+
|
|
||||||
+ agent->request = req;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+failed:
|
|
||||||
+ agent_request_free(req, FALSE);
|
|
||||||
+ return err;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
uint8_t agent_get_io_capability(struct agent *agent)
|
|
||||||
{
|
|
||||||
return agent->capability;
|
|
||||||
diff --git a/src/agent.h b/src/agent.h
|
|
||||||
index f62bf3b..69ad42b 100644
|
|
||||||
--- a/src/agent.h
|
|
||||||
+++ b/src/agent.h
|
|
||||||
@@ -64,6 +64,10 @@ int agent_request_confirmation(struct agent *agent, struct btd_device *device,
|
|
||||||
int agent_display_passkey(struct agent *agent, struct btd_device *device,
|
|
||||||
uint32_t passkey);
|
|
||||||
|
|
||||||
+int agent_display_pincode(struct agent *agent, struct btd_device *device,
|
|
||||||
+ const char *pincode, agent_cb cb,
|
|
||||||
+ void *user_data, GDestroyNotify destroy);
|
|
||||||
+
|
|
||||||
int agent_cancel(struct agent *agent);
|
|
||||||
|
|
||||||
gboolean agent_is_busy(struct agent *agent, void *user_data);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,151 +0,0 @@
|
|||||||
From 16583671c03b871003430e433ddf197833ea0086 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:16:40 -0800
|
|
||||||
Subject: [PATCH 04/13] Add AUTH_TYPE_NOTIFY_PASSKEY to
|
|
||||||
device_request_authentication
|
|
||||||
|
|
||||||
This new authentication type accepts a pincode and calls the
|
|
||||||
DisplayPinCode agent method, a fallback is provided so that if the
|
|
||||||
method is not implemented the older RequestPinCode method is used
|
|
||||||
instead.
|
|
||||||
|
|
||||||
Due to this fallback, the agent_pincode_cb is used and calling
|
|
||||||
functions should send the pincode passed to the callback to the
|
|
||||||
adapter, which may differ from that generated.
|
|
||||||
---
|
|
||||||
src/device.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/device.h | 1 +
|
|
||||||
2 files changed, 58 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 8a2ae9d..f32666e 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -93,6 +93,7 @@ struct authentication_req {
|
|
||||||
struct agent *agent;
|
|
||||||
struct btd_device *device;
|
|
||||||
uint32_t passkey;
|
|
||||||
+ char *pincode;
|
|
||||||
gboolean secure;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -277,6 +278,8 @@ static void device_free(gpointer user_data)
|
|
||||||
|
|
||||||
DBG("%p", device);
|
|
||||||
|
|
||||||
+ if (device->authr)
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
g_free(device->authr);
|
|
||||||
g_free(device->path);
|
|
||||||
g_free(device->alias);
|
|
||||||
@@ -2453,12 +2456,15 @@ void device_simple_pairing_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth = device->authr;
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
+ if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
+ || auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void device_auth_req_free(struct btd_device *device)
|
|
||||||
{
|
|
||||||
+ if (device->authr)
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
g_free(device->authr);
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
@@ -2470,7 +2476,8 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
+ if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
+ || auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
@@ -2680,6 +2687,46 @@ done:
|
|
||||||
device->authr->agent = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void display_pincode_cb(struct agent *agent, DBusError *err, void *data)
|
|
||||||
+{
|
|
||||||
+ struct authentication_req *auth = data;
|
|
||||||
+ struct btd_device *device = auth->device;
|
|
||||||
+ struct btd_adapter *adapter = device_get_adapter(device);
|
|
||||||
+ struct agent *adapter_agent = adapter_get_agent(adapter);
|
|
||||||
+
|
|
||||||
+ if (err && (g_str_equal(DBUS_ERROR_UNKNOWN_METHOD, err->name) ||
|
|
||||||
+ g_str_equal(DBUS_ERROR_NO_REPLY, err->name))) {
|
|
||||||
+
|
|
||||||
+ /* Request a pincode if we fail to display one */
|
|
||||||
+ if (auth->agent == adapter_agent || adapter_agent == NULL) {
|
|
||||||
+ if (agent_request_pincode(agent, device, pincode_cb,
|
|
||||||
+ auth->secure, auth, NULL) < 0)
|
|
||||||
+ goto done;
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (agent_display_pincode(adapter_agent, device, auth->pincode,
|
|
||||||
+ display_pincode_cb, auth, NULL) < 0)
|
|
||||||
+ goto done;
|
|
||||||
+
|
|
||||||
+ auth->agent = adapter_agent;
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+done:
|
|
||||||
+ /* No need to reply anything if the authentication already failed */
|
|
||||||
+ if (auth->cb == NULL)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ ((agent_pincode_cb) auth->cb)(agent, err, auth->pincode, device);
|
|
||||||
+
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
+ device->authr->pincode = NULL;
|
|
||||||
+ device->authr->cb = NULL;
|
|
||||||
+ device->authr->agent = NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
void *data, gboolean secure, void *cb)
|
|
||||||
{
|
|
||||||
@@ -2728,6 +2775,11 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth->passkey = *(uint32_t *)data;
|
|
||||||
err = agent_display_passkey(agent, device, auth->passkey);
|
|
||||||
break;
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PINCODE:
|
|
||||||
+ auth->pincode = g_strdup((const char *)data);
|
|
||||||
+ err = agent_display_pincode(agent, device, auth->pincode,
|
|
||||||
+ display_pincode_cb, auth, NULL);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
err = -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -2768,6 +2820,9 @@ static void cancel_authentication(struct authentication_req *auth)
|
|
||||||
case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
/* User Notify doesn't require any reply */
|
|
||||||
break;
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PINCODE:
|
|
||||||
+ ((agent_pincode_cb) auth->cb)(agent, &err, NULL, device);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dbus_error_free(&err);
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 998aee7..561865c 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -31,6 +31,7 @@ typedef enum {
|
|
||||||
AUTH_TYPE_PASSKEY,
|
|
||||||
AUTH_TYPE_CONFIRM,
|
|
||||||
AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PINCODE,
|
|
||||||
} auth_type_t;
|
|
||||||
|
|
||||||
struct btd_device *device_create(DBusConnection *conn,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
From 1630cbe326460a89d5c342847b658a499484ced0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 29 Mar 2012 14:04:14 -0700
|
|
||||||
Subject: [PATCH 05/13] Add display parameter to plugin pincode callback
|
|
||||||
|
|
||||||
Pass a display parameter to the plugin pincode callback, a plugin
|
|
||||||
may set this to TRUE to indicate the PIN it generates should be
|
|
||||||
displayed on the screen for entry into the remote device.
|
|
||||||
---
|
|
||||||
plugins/wiimote.c | 2 +-
|
|
||||||
src/adapter.c | 4 ++--
|
|
||||||
src/adapter.h | 4 ++--
|
|
||||||
src/event.c | 3 ++-
|
|
||||||
4 files changed, 7 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/wiimote.c b/plugins/wiimote.c
|
|
||||||
index 1ae638b..43b6de3 100644
|
|
||||||
--- a/plugins/wiimote.c
|
|
||||||
+++ b/plugins/wiimote.c
|
|
||||||
@@ -56,7 +56,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
|
|
||||||
- char *pinbuf)
|
|
||||||
+ char *pinbuf, gboolean *display)
|
|
||||||
{
|
|
||||||
uint16_t vendor, product;
|
|
||||||
bdaddr_t sba, dba;
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index acb845e..ccf7991 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -3330,7 +3330,7 @@ void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
- char *pin_buf)
|
|
||||||
+ char *pin_buf, gboolean *display)
|
|
||||||
{
|
|
||||||
GSList *l;
|
|
||||||
btd_adapter_pin_cb_t cb;
|
|
||||||
@@ -3339,7 +3339,7 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
|
|
||||||
for (l = adapter->pin_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
cb = l->data;
|
|
||||||
- ret = cb(adapter, dev, pin_buf);
|
|
||||||
+ ret = cb(adapter, dev, pin_buf, display);
|
|
||||||
if (ret > 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
diff --git a/src/adapter.h b/src/adapter.h
|
|
||||||
index ceebb97..aa66070 100644
|
|
||||||
--- a/src/adapter.h
|
|
||||||
+++ b/src/adapter.h
|
|
||||||
@@ -172,13 +172,13 @@ int btd_adapter_switch_offline(struct btd_adapter *adapter);
|
|
||||||
void btd_adapter_enable_auto_connect(struct btd_adapter *adapter);
|
|
||||||
|
|
||||||
typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
|
|
||||||
- struct btd_device *dev, char *out);
|
|
||||||
+ struct btd_device *dev, char *out, gboolean *display);
|
|
||||||
void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
|
|
||||||
btd_adapter_pin_cb_t cb);
|
|
||||||
void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
|
|
||||||
btd_adapter_pin_cb_t cb);
|
|
||||||
ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
- char *pin_buf);
|
|
||||||
+ char *pin_buf, gboolean *display);
|
|
||||||
|
|
||||||
typedef void (*bt_hci_result_t) (uint8_t status, gpointer user_data);
|
|
||||||
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 7d66b6d..d87b6a4 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -119,12 +119,13 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
struct btd_device *device;
|
|
||||||
char pin[17];
|
|
||||||
ssize_t pinlen;
|
|
||||||
+ gboolean display = FALSE;
|
|
||||||
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
memset(pin, 0, sizeof(pin));
|
|
||||||
- pinlen = btd_adapter_get_pin(adapter, device, pin);
|
|
||||||
+ pinlen = btd_adapter_get_pin(adapter, device, pin, &display);
|
|
||||||
if (pinlen > 0 && (!secure || pinlen == 16)) {
|
|
||||||
btd_adapter_pincode_reply(adapter, dba, pin, pinlen);
|
|
||||||
return 0;
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From 2a902f071ec21572094ce9cdf54099ad275e7904 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 29 Mar 2012 14:07:13 -0700
|
|
||||||
Subject: [PATCH 06/13] Display PIN generated by plugin
|
|
||||||
|
|
||||||
If a plugin pincode callback sets the display parameter to TRUE, send
|
|
||||||
the generated PIN to the agent for display using the new DisplayPinCode
|
|
||||||
agent method, including its fallback to RequestPinCode.
|
|
||||||
---
|
|
||||||
src/event.c | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index d87b6a4..5b60fb3 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -127,6 +127,11 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
memset(pin, 0, sizeof(pin));
|
|
||||||
pinlen = btd_adapter_get_pin(adapter, device, pin, &display);
|
|
||||||
if (pinlen > 0 && (!secure || pinlen == 16)) {
|
|
||||||
+ if (display && device_is_bonding(device, NULL))
|
|
||||||
+ return device_request_authentication(device,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PINCODE, pin,
|
|
||||||
+ secure, pincode_cb);
|
|
||||||
+
|
|
||||||
btd_adapter_pincode_reply(adapter, dba, pin, pinlen);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
From 8a9347822f86059d015ae3893387aa971fa41ab7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:25:39 -0800
|
|
||||||
Subject: [PATCH 07/13] doc: document DisplayPinCode
|
|
||||||
|
|
||||||
---
|
|
||||||
doc/agent-api.txt | 24 ++++++++++++++++++++++++
|
|
||||||
1 files changed, 24 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/doc/agent-api.txt b/doc/agent-api.txt
|
|
||||||
index 9ab2063..5c8d4d2 100644
|
|
||||||
--- a/doc/agent-api.txt
|
|
||||||
+++ b/doc/agent-api.txt
|
|
||||||
@@ -61,6 +61,30 @@ Methods void Release()
|
|
||||||
so the display should be zero-padded at the start if
|
|
||||||
the value contains less than 6 digits.
|
|
||||||
|
|
||||||
+ void DisplayPinCode(object device, string pincode)
|
|
||||||
+
|
|
||||||
+ This method gets called when the service daemon
|
|
||||||
+ needs to display a pincode for an authentication.
|
|
||||||
+
|
|
||||||
+ An empty reply should be returned. When the pincode
|
|
||||||
+ needs no longer to be displayed, the Cancel method
|
|
||||||
+ of the agent will be called.
|
|
||||||
+
|
|
||||||
+ If this method is not implemented the RequestPinCode
|
|
||||||
+ method will be used instead.
|
|
||||||
+
|
|
||||||
+ This is used during the pairing process of keyboards
|
|
||||||
+ that don't support Bluetooth 2.1 Secure Simple Pairing,
|
|
||||||
+ in contrast to DisplayPasskey which is used for those
|
|
||||||
+ that do.
|
|
||||||
+
|
|
||||||
+ This method will only ever be called once since
|
|
||||||
+ older keyboards do not support typing notification.
|
|
||||||
+
|
|
||||||
+ Note that the PIN will always be a 6-digit number,
|
|
||||||
+ zero-padded to 6 digits. This is for harmony with
|
|
||||||
+ the later specification.
|
|
||||||
+
|
|
||||||
void RequestConfirmation(object device, uint32 passkey)
|
|
||||||
|
|
||||||
This method gets called when the service daemon
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
From 4f2f55231bad4d5da2505cb674375e9bf8ac029d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:25:56 -0800
|
|
||||||
Subject: [PATCH 08/13] simple-agent: add DisplayPinCode
|
|
||||||
|
|
||||||
---
|
|
||||||
test/simple-agent | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/simple-agent b/test/simple-agent
|
|
||||||
index af84815..38d0235 100755
|
|
||||||
--- a/test/simple-agent
|
|
||||||
+++ b/test/simple-agent
|
|
||||||
@@ -52,6 +52,11 @@ class Agent(dbus.service.Object):
|
|
||||||
print "DisplayPasskey (%s, %06d)" % (device, passkey)
|
|
||||||
|
|
||||||
@dbus.service.method("org.bluez.Agent",
|
|
||||||
+ in_signature="os", out_signature="")
|
|
||||||
+ def DisplayPinCode(self, device, pincode):
|
|
||||||
+ print "DisplayPinCode (%s, %s)" % (device, pincode)
|
|
||||||
+
|
|
||||||
+ @dbus.service.method("org.bluez.Agent",
|
|
||||||
in_signature="ou", out_signature="")
|
|
||||||
def RequestConfirmation(self, device, passkey):
|
|
||||||
print "RequestConfirmation (%s, %06d)" % (device, passkey)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
From 0cd8c8427019cfd7e1c69fb6a5b4261863716d56 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:34:01 -0800
|
|
||||||
Subject: [PATCH 09/13] Add support for retrying a bonding
|
|
||||||
|
|
||||||
In order to retry a bonding we need a timer that will perform the
|
|
||||||
retry, we need to stash the status and capability of the bonding
|
|
||||||
request so it can use them again, and in the case of a retrying
|
|
||||||
bonding attempt we need to not tear down the temporary D-Bus device
|
|
||||||
object on the adapter.
|
|
||||||
---
|
|
||||||
src/adapter.c | 2 +-
|
|
||||||
src/device.c | 14 ++++++++++++++
|
|
||||||
src/device.h | 1 +
|
|
||||||
3 files changed, 16 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index ccf7991..f065a5d 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -2989,7 +2989,7 @@ void adapter_remove_connection(struct btd_adapter *adapter,
|
|
||||||
if (device_is_authenticating(device))
|
|
||||||
device_cancel_authentication(device, TRUE);
|
|
||||||
|
|
||||||
- if (device_is_temporary(device)) {
|
|
||||||
+ if (device_is_temporary(device) && !device_is_retrying(device)) {
|
|
||||||
const char *path = device_get_path(device);
|
|
||||||
|
|
||||||
DBG("Removing temporary device %s", path);
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index f32666e..9d4517f 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -85,6 +85,9 @@ struct bonding_req {
|
|
||||||
DBusMessage *msg;
|
|
||||||
guint listener_id;
|
|
||||||
struct btd_device *device;
|
|
||||||
+ uint8_t capability;
|
|
||||||
+ uint8_t status;
|
|
||||||
+ guint retry_timer;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct authentication_req {
|
|
||||||
@@ -2295,6 +2298,9 @@ static void bonding_request_free(struct bonding_req *bonding)
|
|
||||||
if (bonding->conn)
|
|
||||||
dbus_connection_unref(bonding->conn);
|
|
||||||
|
|
||||||
+ if (bonding->retry_timer)
|
|
||||||
+ g_source_remove(bonding->retry_timer);
|
|
||||||
+
|
|
||||||
device = bonding->device;
|
|
||||||
g_free(bonding);
|
|
||||||
|
|
||||||
@@ -2367,6 +2373,7 @@ proceed:
|
|
||||||
|
|
||||||
bonding->conn = dbus_connection_ref(conn);
|
|
||||||
bonding->msg = dbus_message_ref(msg);
|
|
||||||
+ bonding->capability = capability;
|
|
||||||
|
|
||||||
return bonding;
|
|
||||||
}
|
|
||||||
@@ -2469,6 +2476,13 @@ static void device_auth_req_free(struct btd_device *device)
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ struct bonding_req *bonding = device->bonding;
|
|
||||||
+
|
|
||||||
+ return bonding && bonding->retry_timer != 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 561865c..b957ad6 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -75,6 +75,7 @@ void device_set_temporary(struct btd_device *device, gboolean temporary);
|
|
||||||
void device_set_bonded(struct btd_device *device, gboolean bonded);
|
|
||||||
void device_set_auto_connect(struct btd_device *device, gboolean enable);
|
|
||||||
gboolean device_is_connected(struct btd_device *device);
|
|
||||||
+gboolean device_is_retrying(struct btd_device *device);
|
|
||||||
DBusMessage *device_create_bonding(struct btd_device *device,
|
|
||||||
DBusConnection *conn, DBusMessage *msg,
|
|
||||||
const char *agent_path, uint8_t capability);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,81 +0,0 @@
|
|||||||
From 83c36231418f9deff7ba16ceb0ead5d63e177a04 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:30:53 -0800
|
|
||||||
Subject: [PATCH 10/13] plugin: Add bonding callback support for plugins
|
|
||||||
|
|
||||||
Allow plugins to register a bonding callback on a device, this will be
|
|
||||||
called on completion or cancellation of a bonding attempt on that
|
|
||||||
device and allow retrying of the bonding attempt.
|
|
||||||
|
|
||||||
These callbacks will only be called once, in the case of retrying the
|
|
||||||
callback must be registered again separately from another callback
|
|
||||||
(e.g. the pincode callback).
|
|
||||||
---
|
|
||||||
src/device.c | 17 +++++++++++++++++
|
|
||||||
src/device.h | 8 ++++++++
|
|
||||||
2 files changed, 25 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 9d4517f..9a62eef 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -144,6 +144,7 @@ struct btd_device {
|
|
||||||
GSList *primaries; /* List of primary services */
|
|
||||||
GSList *drivers; /* List of device drivers */
|
|
||||||
GSList *watches; /* List of disconnect_data */
|
|
||||||
+ GSList *bonding_callbacks; /* List of bonding callbacks */
|
|
||||||
gboolean temporary;
|
|
||||||
struct agent *agent;
|
|
||||||
guint disconn_timer;
|
|
||||||
@@ -264,6 +265,8 @@ static void device_free(gpointer user_data)
|
|
||||||
g_slist_free_full(device->attios, g_free);
|
|
||||||
g_slist_free_full(device->attios_offline, g_free);
|
|
||||||
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+
|
|
||||||
att_cleanup(device);
|
|
||||||
|
|
||||||
if (device->tmp_records)
|
|
||||||
@@ -2476,6 +2479,20 @@ static void device_auth_req_free(struct btd_device *device)
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void btd_device_register_bonding_cb(struct btd_device *device,
|
|
||||||
+ btd_device_bonding_cb_t cb)
|
|
||||||
+{
|
|
||||||
+ device->bonding_callbacks = g_slist_prepend(
|
|
||||||
+ device->bonding_callbacks, cb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void btd_device_unregister_bonding_cb(struct btd_device *device,
|
|
||||||
+ btd_device_bonding_cb_t cb)
|
|
||||||
+{
|
|
||||||
+ device->bonding_callbacks = g_slist_remove(
|
|
||||||
+ device->bonding_callbacks, cb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index b957ad6..ce8675b 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -103,6 +103,14 @@ guint device_add_disconnect_watch(struct btd_device *device,
|
|
||||||
void device_remove_disconnect_watch(struct btd_device *device, guint id);
|
|
||||||
void device_set_class(struct btd_device *device, uint32_t value);
|
|
||||||
|
|
||||||
+typedef gboolean (*btd_device_bonding_cb_t) (struct btd_device *device,
|
|
||||||
+ gboolean complete, uint8_t status);
|
|
||||||
+
|
|
||||||
+void btd_device_register_bonding_cb(struct btd_device *dev,
|
|
||||||
+ btd_device_bonding_cb_t cb);
|
|
||||||
+void btd_device_unregister_bonding_cb(struct btd_device *dev,
|
|
||||||
+ btd_device_bonding_cb_t cb);
|
|
||||||
+
|
|
||||||
#define BTD_UUIDS(args...) ((const char *[]) { args, NULL } )
|
|
||||||
|
|
||||||
struct btd_device_driver {
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,79 +0,0 @@
|
|||||||
From f3d2851b74fe790896f819efbc694e288d54d819 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:35:30 -0800
|
|
||||||
Subject: [PATCH 11/13] bonding: retry if callback returns TRUE
|
|
||||||
|
|
||||||
When a bonding completes, pass the status to any plugin bonding
|
|
||||||
callbacks; if any return TRUE than set a timer to retry the bonding
|
|
||||||
after an appropriate backoff period.
|
|
||||||
---
|
|
||||||
src/device.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 files changed, 46 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 9a62eef..4ad5aa0 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2493,6 +2493,44 @@ void btd_device_unregister_bonding_cb(struct btd_device *device,
|
|
||||||
device->bonding_callbacks, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean device_bonding_retry(gpointer data)
|
|
||||||
+{
|
|
||||||
+ struct btd_device *device = data;
|
|
||||||
+ struct btd_adapter *adapter = device_get_adapter(device);
|
|
||||||
+ struct bonding_req *bonding = device->bonding;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (!bonding)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ DBG("retrying bonding");
|
|
||||||
+ err = adapter_create_bonding(adapter, &device->bdaddr,
|
|
||||||
+ device->type, bonding->capability);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ device_bonding_complete(device, bonding->status);
|
|
||||||
+
|
|
||||||
+ bonding->retry_timer = 0;
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean device_bonding_get_retry(struct btd_device *device,
|
|
||||||
+ uint8_t status)
|
|
||||||
+{
|
|
||||||
+ GSList *l;
|
|
||||||
+ btd_device_bonding_cb_t cb;
|
|
||||||
+ gboolean retry = FALSE;
|
|
||||||
+
|
|
||||||
+ for (l = device->bonding_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ cb = l->data;
|
|
||||||
+ retry |= cb(device, TRUE, status);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+ device->bonding_callbacks = NULL;
|
|
||||||
+
|
|
||||||
+ return retry;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
@@ -2507,6 +2545,14 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
+ if (device_bonding_get_retry(device, status) && status) {
|
|
||||||
+ DBG("backing off and retrying");
|
|
||||||
+ bonding->status = status;
|
|
||||||
+ bonding->retry_timer = g_timeout_add(3000,
|
|
||||||
+ device_bonding_retry, device);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
|| auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
From 82ef8f4b96d62e18b5a191f6aaa9d79140ca64a4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:36:44 -0800
|
|
||||||
Subject: [PATCH 12/13] bonding: call plugin callback on cancellation
|
|
||||||
|
|
||||||
Call the plugin callbacks when a bonding request is cancelled.
|
|
||||||
---
|
|
||||||
src/device.c | 10 ++++++++++
|
|
||||||
1 files changed, 10 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 4ad5aa0..ea0d1fb 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2648,6 +2648,8 @@ void device_cancel_bonding(struct btd_device *device, uint8_t status)
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
DBusMessage *reply;
|
|
||||||
char addr[18];
|
|
||||||
+ GSList *l;
|
|
||||||
+ btd_device_bonding_cb_t cb;
|
|
||||||
|
|
||||||
if (!bonding)
|
|
||||||
return;
|
|
||||||
@@ -2655,6 +2657,14 @@ void device_cancel_bonding(struct btd_device *device, uint8_t status)
|
|
||||||
ba2str(&device->bdaddr, addr);
|
|
||||||
DBG("Canceling bonding request for %s", addr);
|
|
||||||
|
|
||||||
+ for (l = device->bonding_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ cb = l->data;
|
|
||||||
+ cb(device, FALSE, 0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+ device->bonding_callbacks = NULL;
|
|
||||||
+
|
|
||||||
if (device->authr)
|
|
||||||
device_cancel_authentication(device, FALSE);
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,274 +0,0 @@
|
|||||||
From 2236069d7d5bf54ae53470c13929cba90e020710 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 5 Apr 2012 15:42:12 -0700
|
|
||||||
Subject: [PATCH 13/13] autopair: Add autopair plugin.
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile.am | 5 +
|
|
||||||
acinclude.m4 | 6 ++
|
|
||||||
plugins/autopair.c | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 218 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 plugins/autopair.c
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index bd587eb..0e9129c 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -278,6 +278,11 @@ builtin_modules += dbusoob
|
|
||||||
builtin_sources += plugins/dbusoob.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
+if AUTOPAIRPLUGIN
|
|
||||||
+builtin_modules += autopair
|
|
||||||
+builtin_sources += plugins/autopair.c
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
if MAINTAINER_MODE
|
|
||||||
plugin_LTLIBRARIES += plugins/external-dummy.la
|
|
||||||
plugins_external_dummy_la_SOURCES = plugins/external-dummy.c
|
|
||||||
diff --git a/acinclude.m4 b/acinclude.m4
|
|
||||||
index b0f790c..4c1849a 100644
|
|
||||||
--- a/acinclude.m4
|
|
||||||
+++ b/acinclude.m4
|
|
||||||
@@ -220,6 +220,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
dbusoob_enable=no
|
|
||||||
wiimote_enable=no
|
|
||||||
thermometer_enable=no
|
|
||||||
+ autopair_enable=no
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(optimization, AC_HELP_STRING([--disable-optimization], [disable code optimization]), [
|
|
||||||
optimization_enable=${enableval}
|
|
||||||
@@ -364,6 +365,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
wiimote_enable=${enableval}
|
|
||||||
])
|
|
||||||
|
|
||||||
+ AC_ARG_ENABLE(autopair, AC_HELP_STRING([--enable-autopair], [compile with autopairing plugin]), [
|
|
||||||
+ autopair_enable=${enableval}
|
|
||||||
+ ])
|
|
||||||
+
|
|
||||||
AC_ARG_ENABLE(hal, AC_HELP_STRING([--enable-hal], [Use HAL to determine adapter class]), [
|
|
||||||
hal_enable=${enableval}
|
|
||||||
])
|
|
||||||
@@ -429,4 +434,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
AM_CONDITIONAL(DBUSOOBPLUGIN, test "${dbusoob_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(THERMOMETERPLUGIN, test "${thermometer_enable}" = "yes")
|
|
||||||
+ AM_CONDITIONAL(AUTOPAIRPLUGIN, test "${autopair_enable}" = "yes")
|
|
||||||
])
|
|
||||||
diff --git a/plugins/autopair.c b/plugins/autopair.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..58047b1
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/plugins/autopair.c
|
|
||||||
@@ -0,0 +1,208 @@
|
|
||||||
+/*
|
|
||||||
+ *
|
|
||||||
+ * BlueZ - Bluetooth protocol stack for Linux
|
|
||||||
+ *
|
|
||||||
+ * Copyright (C) 2012 Google Inc.
|
|
||||||
+ *
|
|
||||||
+ *
|
|
||||||
+ * This program is free software; you can redistribute it and/or modify
|
|
||||||
+ * it under the terms of the GNU General Public License as published by
|
|
||||||
+ * the Free Software Foundation; either version 2 of the License, or
|
|
||||||
+ * (at your option) any later version.
|
|
||||||
+ *
|
|
||||||
+ * This program is distributed in the hope that it will be useful,
|
|
||||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ * GNU General Public License for more details.
|
|
||||||
+ *
|
|
||||||
+ * You should have received a copy of the GNU General Public License
|
|
||||||
+ * along with this program; if not, write to the Free Software
|
|
||||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_CONFIG_H
|
|
||||||
+#include <config.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <time.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+
|
|
||||||
+#include <glib.h>
|
|
||||||
+
|
|
||||||
+#include <bluetooth/bluetooth.h>
|
|
||||||
+
|
|
||||||
+#include "glib-compat.h"
|
|
||||||
+#include "plugin.h"
|
|
||||||
+#include "adapter.h"
|
|
||||||
+#include "device.h"
|
|
||||||
+#include "storage.h"
|
|
||||||
+#include "textfile.h"
|
|
||||||
+#include "log.h"
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Plugin to handle automatic pairing of devices with reduced user
|
|
||||||
+ * interaction, including implementing the recommendation of the HID spec
|
|
||||||
+ * for keyboard devices.
|
|
||||||
+ *
|
|
||||||
+ * The plugin works by intercepting the PIN request for devices; if the
|
|
||||||
+ * device is a keyboard a random six-digit numeric PIN is generated and
|
|
||||||
+ * returned, flagged for displaying using DisplayPinCode.
|
|
||||||
+ *
|
|
||||||
+ * Bonding callbacks are also added for the device, so should the pairing
|
|
||||||
+ * attempt fail with the PIN from this plugin, a blacklist entry is added
|
|
||||||
+ * and pairing retried. On the second pass this plugin will ignore the
|
|
||||||
+ * device due to the blacklist and the user will be prompted for a PIN
|
|
||||||
+ * instead.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static GSList *blacklist = NULL;
|
|
||||||
+
|
|
||||||
+static void autopair_blacklist_device(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ bdaddr_t *ba;
|
|
||||||
+
|
|
||||||
+ ba = g_new0(bdaddr_t, 1);
|
|
||||||
+ device_get_address(device, ba, NULL);
|
|
||||||
+ blacklist = g_slist_prepend(blacklist, ba);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static GSList *attempting = NULL;
|
|
||||||
+
|
|
||||||
+static gboolean autopair_bondingcb(struct btd_device *device,
|
|
||||||
+ gboolean complete, uint8_t status)
|
|
||||||
+{
|
|
||||||
+ GSList *match;
|
|
||||||
+
|
|
||||||
+ match = g_slist_find(attempting, device);
|
|
||||||
+ if (!match)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ attempting = g_slist_remove_link(attempting, match);
|
|
||||||
+ btd_device_unref(device);
|
|
||||||
+
|
|
||||||
+ if (complete && status != 0) {
|
|
||||||
+ /* failed: blacklist and retry with the user's agent */
|
|
||||||
+ autopair_blacklist_device(device);
|
|
||||||
+ return TRUE;
|
|
||||||
+ } else {
|
|
||||||
+ /* successful or cancelled pair */
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean autopair_attempt(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ if (g_slist_find(attempting, device))
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ btd_device_register_bonding_cb(device, autopair_bondingcb);
|
|
||||||
+ attempting = g_slist_prepend(attempting, btd_device_ref(device));
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_cancel_all(void)
|
|
||||||
+{
|
|
||||||
+ GSList *l;
|
|
||||||
+ struct btd_device *device;
|
|
||||||
+
|
|
||||||
+ for (l = attempting; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ device = l->data;
|
|
||||||
+ btd_device_unregister_bonding_cb(device, autopair_bondingcb);
|
|
||||||
+ btd_device_unref(device);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(attempting);
|
|
||||||
+ attempting = NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
+ struct btd_device *device,
|
|
||||||
+ char *pinbuf, gboolean *display)
|
|
||||||
+{
|
|
||||||
+ char addr[18];
|
|
||||||
+ bdaddr_t local, peer;
|
|
||||||
+ uint32_t class;
|
|
||||||
+
|
|
||||||
+ if (!device_is_bonding(device, NULL))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ adapter_get_address(adapter, &local);
|
|
||||||
+
|
|
||||||
+ device_get_address(device, &peer, NULL);
|
|
||||||
+ ba2str(&peer, addr);
|
|
||||||
+
|
|
||||||
+ read_remote_class(&local, &peer, &class);
|
|
||||||
+
|
|
||||||
+ DBG("device %s 0x%x", addr, class);
|
|
||||||
+
|
|
||||||
+ if (g_slist_find_custom(blacklist, &peer, (GCompareFunc) bacmp)) {
|
|
||||||
+ DBG("prior autopair failed");
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ switch ((class & 0x1f00) >> 8) {
|
|
||||||
+ case 0x05:
|
|
||||||
+ switch ((class & 0xc0) >> 6) {
|
|
||||||
+ case 0x01:
|
|
||||||
+ case 0x03:
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ char pinstr[7];
|
|
||||||
+ srand(time(NULL));
|
|
||||||
+ snprintf(pinstr, sizeof pinstr, "%06d",
|
|
||||||
+ rand() % 1000000);
|
|
||||||
+ *display = TRUE;
|
|
||||||
+ memcpy(pinbuf, pinstr, 6);
|
|
||||||
+ return 6;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static int autopair_probe(struct btd_adapter *adapter)
|
|
||||||
+{
|
|
||||||
+ btd_adapter_register_pin_cb(adapter, autopair_pincb);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_remove(struct btd_adapter *adapter)
|
|
||||||
+{
|
|
||||||
+ btd_adapter_unregister_pin_cb(adapter, autopair_pincb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static struct btd_adapter_driver autopair_driver = {
|
|
||||||
+ .name = "autopair",
|
|
||||||
+ .probe = autopair_probe,
|
|
||||||
+ .remove = autopair_remove,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static int autopair_init(void)
|
|
||||||
+{
|
|
||||||
+ return btd_register_adapter_driver(&autopair_driver);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_exit(void)
|
|
||||||
+{
|
|
||||||
+ btd_unregister_adapter_driver(&autopair_driver);
|
|
||||||
+
|
|
||||||
+ autopair_cancel_all();
|
|
||||||
+
|
|
||||||
+ g_slist_free_full(blacklist, g_free);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+BLUETOOTH_PLUGIN_DEFINE(autopair, VERSION,
|
|
||||||
+ BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, autopair_init, autopair_exit)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,62 +0,0 @@
|
|||||||
From 36358d4a7b3471f5a124a95fec9ed0e4871299e0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Wed, 18 Apr 2012 15:53:55 -0700
|
|
||||||
Subject: [PATCH 14/14] autopair: use 0000 as PIN for dumb devices
|
|
||||||
|
|
||||||
Android tries 0000 for a set of audio devices, so follow suit and
|
|
||||||
do the same even though most audio devices support SSP these days.
|
|
||||||
|
|
||||||
BUG=chromium-os:25211
|
|
||||||
TEST=verified with audio devices after 'hciconfig hci0 sspmode 0'
|
|
||||||
---
|
|
||||||
plugins/autopair.c | 26 +++++++++++++++++++++++---
|
|
||||||
1 files changed, 23 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/autopair.c b/plugins/autopair.c
|
|
||||||
index 05de3ff..5b773c5 100644
|
|
||||||
--- a/plugins/autopair.c
|
|
||||||
+++ b/plugins/autopair.c
|
|
||||||
@@ -150,10 +150,24 @@ static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ((class & 0x1f00) >> 8) {
|
|
||||||
- case 0x05:
|
|
||||||
+ case 0x04: // Audio/Video
|
|
||||||
+ switch ((class & 0xfc) >> 2) {
|
|
||||||
+ case 0x01: // Wearable Headset Device
|
|
||||||
+ case 0x02: // Hands-free Device
|
|
||||||
+ case 0x06: // Headphones
|
|
||||||
+ case 0x07: // Portable Audio
|
|
||||||
+ case 0x0a: // HiFi Audio Device
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ memcpy(pinbuf, "0000", 4);
|
|
||||||
+ return 4;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ case 0x05: // Peripheral
|
|
||||||
switch ((class & 0xc0) >> 6) {
|
|
||||||
- case 0x01:
|
|
||||||
- case 0x03:
|
|
||||||
+ case 0x01: // Keyboard
|
|
||||||
+ case 0x03: // Combo keyboard/pointing device
|
|
||||||
if (autopair_attempt(device)) {
|
|
||||||
char pinstr[7];
|
|
||||||
srand(time(NULL));
|
|
||||||
@@ -164,6 +178,12 @@ static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
return 6;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case 0x02: // Pointing device
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ memcpy(pinbuf, "0000", 4);
|
|
||||||
+ return 4;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
diff --git a/src/bluetooth.conf b/src/bluetooth.conf
|
|
||||||
index 664dbd9..3263112 100644
|
|
||||||
--- a/src/bluetooth.conf
|
|
||||||
+++ b/src/bluetooth.conf
|
|
||||||
@@ -7,7 +7,7 @@
|
|
||||||
|
|
||||||
<!-- ../system.conf have denied everything, so we just punch some holes -->
|
|
||||||
|
|
||||||
- <policy user="root">
|
|
||||||
+ <policy user="bluetooth">
|
|
||||||
<allow own="org.bluez"/>
|
|
||||||
<allow send_destination="org.bluez"/>
|
|
||||||
<allow send_interface="org.bluez.Agent"/>
|
|
||||||
@@ -18,13 +18,7 @@
|
|
||||||
<allow send_interface="org.bluez.ThermometerWatcher"/>
|
|
||||||
</policy>
|
|
||||||
|
|
||||||
- <policy at_console="true">
|
|
||||||
- <allow send_destination="org.bluez"/>
|
|
||||||
- </policy>
|
|
||||||
-
|
|
||||||
- <!-- allow users of lp group (printing subsystem) to
|
|
||||||
- communicate with bluetoothd -->
|
|
||||||
- <policy group="lp">
|
|
||||||
+ <policy user="chronos">
|
|
||||||
<allow send_destination="org.bluez"/>
|
|
||||||
</policy>
|
|
||||||
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
diff --git a/src/main.conf b/src/main.conf
|
|
||||||
index 321f622..f6784fb 100644
|
|
||||||
--- a/src/main.conf
|
|
||||||
+++ b/src/main.conf
|
|
||||||
@@ -38,7 +38,7 @@ AutoConnectTimeout = 60
|
|
||||||
|
|
||||||
# What value should be assumed for the adapter Powered property when
|
|
||||||
# SetProperty(Powered, ...) hasn't been called yet. Defaults to true
|
|
||||||
-InitiallyPowered = true
|
|
||||||
+InitiallyPowered = false
|
|
||||||
|
|
||||||
# Remember the previously stored Powered state when initializing adapters
|
|
||||||
RememberPowered = true
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
diff --git a/lib/sdp.h b/lib/sdp.h
|
|
||||||
index 2fe74d5..e559a5c 100644
|
|
||||||
--- a/lib/sdp.h
|
|
||||||
+++ b/lib/sdp.h
|
|
||||||
@@ -34,7 +34,7 @@ extern "C" {
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <bluetooth/bluetooth.h>
|
|
||||||
|
|
||||||
-#define SDP_UNIX_PATH "/var/run/sdp"
|
|
||||||
+#define SDP_UNIX_PATH "/var/run/bluetooth/sdp"
|
|
||||||
#define SDP_RESPONSE_TIMEOUT 20
|
|
||||||
#define SDP_REQ_BUFFER_SIZE 2048
|
|
||||||
#define SDP_RSP_BUFFER_SIZE 65535
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
DIST bluez-4.62.tar.gz 974796 SHA256 f63203cbbd5be7d9986d5df42c7a96c3edb7442d99539fbe9c7964243b286792
|
|
||||||
DIST bluez-4.97.tar.xz 838040 SHA256 7599118d1551ea4a61534d3f3bcbb75b8bccbaf97d7d1e037cfc90cf62aa29c2 SHA512 7a5537ed2006cb5a83955b5d8feaedee075ddb9f93f026c9f02d0b852b0370b77311fd5f81fd908a2a6915130f04c00d6219d8812a312a40dbc67475f6b5f3ee WHIRLPOOL 2a367d87a0acbb105f9ec8cf71be5527dcb95619bf12985eb3404ce1922e89aa44624ffa6a6eba6b190093a230a449f11ab01b951f96398047dca1e9bd88a6d1
|
|
||||||
DIST bluez-4.99.tar.xz 859756 SHA256 41889a91a5516eec26c4e59095ceea076de158b1ac38fd0ede9034596f511d3b SHA512 79e36a65ff9ff9c3311a8ef4819692503bb02f048a3c42dd0b9512749fb8e4d810eb832f211fb7dfebc7b6b5bf82a9363edd15741d62595f36d782804bb39ac3 WHIRLPOOL 32b8e3f67c846a17e7335395021008c181a2645fdb08b4ebe36bf4ad5221eef00f86ec7ef0d1de19c64741c884376666677ca9e129868dcaa18a5d4c0737c894
|
|
||||||
DIST oui-20111231.txt.xz 540056 SHA256 0a141f649cf999e101efc2e36bd876f264d75bb8ebf4d2997153067132f85d17 SHA512 191eff688dcec6e5c0fae4ee3da1b2e3bd4cd239ba9b6f0db8c5ef515a9b3150af27d72f3921aa530c3c38b95d4e82d24167728ffccb53ce0c4fc2e257b4854e WHIRLPOOL 818ead21c81026619264e3557db727c10ca3bf8302c05493c19eee2e75ccdb802df487bb19807737ad9abfff77efaf7f94e6439d7245dd38ab4187d0bc2e4800
|
|
||||||
DIST oui-20120308.txt.xz 546720 SHA256 4256ba96a522333a41fd058e1880a04f77566c9ad0a62d3c0d7ac422bf8b9086 SHA512 f749b3ce9b6173760319849f1e4699f02d4f8628de78d0bc39c08b01331567b60a9bd3303a84982ad23bc6cbe7b6d9f27e2e26f699a818dac0e0e8fa6ddb44fa WHIRLPOOL 0797457e3bb54d49b295547a47894258c2c5a9954ca87c44948bdb57781e11c84d2d1be9cf6d3deb0d062e4a98b0b1fb406a1f0fbeb9d0a294da624c2e90f9ee
|
|
||||||
@ -1 +0,0 @@
|
|||||||
bluez-4.62.ebuild
|
|
||||||
@ -1,170 +0,0 @@
|
|||||||
# Copyright 1999-2010 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/bluez-4.62.ebuild,v 1.1 2010/03/08 14:35:09 pacho Exp $
|
|
||||||
|
|
||||||
EAPI="2"
|
|
||||||
|
|
||||||
inherit autotools multilib eutils
|
|
||||||
|
|
||||||
DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
|
|
||||||
HOMEPAGE="http://bluez.sourceforge.net/"
|
|
||||||
SRC_URI="mirror://kernel/linux/bluetooth/${P}.tar.gz"
|
|
||||||
LICENSE="GPL-2 LGPL-2.1"
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm x86"
|
|
||||||
|
|
||||||
IUSE="alsa caps +consolekit cups debug gstreamer old-daemons pcmcia test-programs usb"
|
|
||||||
|
|
||||||
CDEPEND="alsa? (
|
|
||||||
media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug]
|
|
||||||
)
|
|
||||||
caps? ( >=sys-libs/libcap-ng-0.6.2 )
|
|
||||||
gstreamer? (
|
|
||||||
>=media-libs/gstreamer-0.10
|
|
||||||
>=media-libs/gst-plugins-base-0.10 )
|
|
||||||
usb? ( dev-libs/libusb )
|
|
||||||
cups? ( net-print/cups )
|
|
||||||
sys-fs/udev
|
|
||||||
dev-libs/glib
|
|
||||||
sys-apps/dbus
|
|
||||||
media-libs/libsndfile
|
|
||||||
>=dev-libs/libnl-1.1
|
|
||||||
!net-wireless/bluez-libs
|
|
||||||
!net-wireless/bluez-utils"
|
|
||||||
DEPEND="sys-devel/flex
|
|
||||||
>=dev-util/pkgconfig-0.20
|
|
||||||
${CDEPEND}"
|
|
||||||
RDEPEND="${CDEPEND}
|
|
||||||
consolekit? ( sys-auth/pambase[consolekit] )
|
|
||||||
test-programs? (
|
|
||||||
dev-python/dbus-python
|
|
||||||
dev-python/pygobject )"
|
|
||||||
|
|
||||||
src_prepare() {
|
|
||||||
if use cups; then
|
|
||||||
epatch "${FILESDIR}/4.60/cups-location.patch"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fix alsa files location
|
|
||||||
epatch "${FILESDIR}/${PN}-alsa_location.patch"
|
|
||||||
|
|
||||||
# Incorporate ATH3k support
|
|
||||||
epatch "${FILESDIR}/${PN}-ath3k.patch"
|
|
||||||
|
|
||||||
# Allow user chronos to send requests
|
|
||||||
epatch "${FILESDIR}/${PN}-chronos.patch"
|
|
||||||
|
|
||||||
eautoreconf
|
|
||||||
}
|
|
||||||
|
|
||||||
src_configure() {
|
|
||||||
econf \
|
|
||||||
$(use_enable caps capng) \
|
|
||||||
--enable-network \
|
|
||||||
--enable-serial \
|
|
||||||
--enable-input \
|
|
||||||
--enable-audio \
|
|
||||||
--enable-service \
|
|
||||||
$(use_enable gstreamer) \
|
|
||||||
$(use_enable alsa) \
|
|
||||||
$(use_enable usb) \
|
|
||||||
--enable-netlink \
|
|
||||||
--enable-tools \
|
|
||||||
--enable-bccmd \
|
|
||||||
--enable-hid2hci \
|
|
||||||
--enable-dfutool \
|
|
||||||
$(use_enable old-daemons hidd) \
|
|
||||||
$(use_enable old-daemons pand) \
|
|
||||||
$(use_enable old-daemons dund) \
|
|
||||||
$(use_enable cups) \
|
|
||||||
$(use_enable test-programs test) \
|
|
||||||
--enable-udevrules \
|
|
||||||
--enable-configfiles \
|
|
||||||
$(use_enable pcmcia) \
|
|
||||||
$(use_enable debug) \
|
|
||||||
--localstatedir=/var
|
|
||||||
}
|
|
||||||
|
|
||||||
src_compile() {
|
|
||||||
# TODO: Re-enable parallel-make when dependency issue with generated headers
|
|
||||||
# is fixed. See http://crosbug.com/15028
|
|
||||||
emake -j1 || die "emake failed"
|
|
||||||
}
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
emake DESTDIR="${D}" install || die "make install failed"
|
|
||||||
|
|
||||||
dodoc AUTHORS ChangeLog README || die
|
|
||||||
|
|
||||||
if use test-programs ; then
|
|
||||||
cd "${S}/test"
|
|
||||||
dobin simple-agent simple-service monitor-bluetooth
|
|
||||||
newbin list-devices list-bluetooth-devices
|
|
||||||
for b in apitest hsmicro hsplay test-* ; do
|
|
||||||
newbin "${b}" "bluez-${b}"
|
|
||||||
done
|
|
||||||
insinto /usr/share/doc/${PF}/test-services
|
|
||||||
doins service-*
|
|
||||||
|
|
||||||
cd "${S}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use old-daemons; then
|
|
||||||
newconfd "${FILESDIR}/4.18/conf.d-hidd" hidd || die
|
|
||||||
newinitd "${FILESDIR}/4.18/init.d-hidd" hidd || die
|
|
||||||
fi
|
|
||||||
|
|
||||||
insinto /etc/bluetooth
|
|
||||||
doins \
|
|
||||||
input/input.conf \
|
|
||||||
audio/audio.conf \
|
|
||||||
network/network.conf \
|
|
||||||
serial/serial.conf \
|
|
||||||
|| die
|
|
||||||
|
|
||||||
insinto /etc/udev/rules.d/
|
|
||||||
newins "${FILESDIR}/${PN}-4.18-udev.rules" 70-bluetooth.rules || die
|
|
||||||
exeinto /$(get_libdir)/udev/
|
|
||||||
newexe "${FILESDIR}/${PN}-4.18-udev.script" bluetooth.sh || die
|
|
||||||
|
|
||||||
newinitd "${FILESDIR}/4.60/bluetooth-init.d" bluetooth || die
|
|
||||||
newconfd "${FILESDIR}/4.60/bluetooth-conf.d" bluetooth || die
|
|
||||||
}
|
|
||||||
|
|
||||||
pkg_postinst() {
|
|
||||||
udevadm control --reload-rules && udevadm trigger --subsystem-match=bluetooth
|
|
||||||
|
|
||||||
elog
|
|
||||||
elog "To use dial up networking you must install net-dialup/ppp."
|
|
||||||
elog
|
|
||||||
elog "For a password agent, there is for example net-wireless/bluez-gnome"
|
|
||||||
elog "for gnome and net-wireless/kdebluetooth for kde. You can also give a"
|
|
||||||
elog "try to net-wireless/blueman"
|
|
||||||
elog
|
|
||||||
elog "Use the old-daemons use flag to get the old daemons like hidd"
|
|
||||||
elog "installed. Please note that the init script doesn't stop the old"
|
|
||||||
elog "daemons after you update it so it's recommended to run:"
|
|
||||||
elog " /etc/init.d/bluetooth stop"
|
|
||||||
elog "before updating your configuration files or you can manually kill"
|
|
||||||
elog "the extra daemons you previously enabled in /etc/conf.d/bluetooth."
|
|
||||||
|
|
||||||
if use consolekit; then
|
|
||||||
elog ""
|
|
||||||
elog "If you want to use rfcomm as a normal user, you need to add the user"
|
|
||||||
elog "to the uucp group."
|
|
||||||
else
|
|
||||||
elog ""
|
|
||||||
elog "Since you have the consolekit use flag disabled, you will only be able to run"
|
|
||||||
elog "bluetooth clients as root. If you want to be able to run bluetooth clientes as "
|
|
||||||
elog "a regular user, you need to enable the consolekit use flag for this package."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use old-daemons; then
|
|
||||||
elog ""
|
|
||||||
elog "The hidd init script was installed because you have the old-daemons"
|
|
||||||
elog "use flag on. It is not started by default via udev so please add it"
|
|
||||||
elog "to the required runlevels using rc-update <runlevel> add hidd. If"
|
|
||||||
elog "you need init scripts for the other daemons, please file requests"
|
|
||||||
elog "to https://bugs.gentoo.org."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@ -1,187 +0,0 @@
|
|||||||
# Copyright 1999-2011 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/bluez-4.97-r1.ebuild,v 1.1 2011/12/31 21:09:18 pacho Exp $
|
|
||||||
|
|
||||||
EAPI="4"
|
|
||||||
PYTHON_DEPEND="test-programs? 2"
|
|
||||||
|
|
||||||
inherit autotools multilib eutils systemd python
|
|
||||||
|
|
||||||
DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
|
|
||||||
HOMEPAGE="http://www.bluez.org/"
|
|
||||||
|
|
||||||
# Because of oui.txt changing from time to time without noticement, we need to supply it
|
|
||||||
# ourselves instead of using http://standards.ieee.org/regauth/oui/oui.txt directly.
|
|
||||||
# See bugs #345263 and #349473 for reference.
|
|
||||||
OUIDATE="20111231"
|
|
||||||
SRC_URI="mirror://kernel/linux/bluetooth/${P}.tar.xz
|
|
||||||
http://dev.gentoo.org/~pacho/bluez/oui-${OUIDATE}.txt.xz"
|
|
||||||
|
|
||||||
LICENSE="GPL-2 LGPL-2.1"
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm ~hppa ~ppc ~ppc64 x86"
|
|
||||||
IUSE="alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb"
|
|
||||||
|
|
||||||
CDEPEND="
|
|
||||||
>=dev-libs/glib-2.14:2
|
|
||||||
sys-apps/dbus
|
|
||||||
>=sys-fs/udev-169
|
|
||||||
alsa? (
|
|
||||||
media-libs/alsa-lib[alsa_pcm_plugins_extplug,alsa_pcm_plugins_ioplug]
|
|
||||||
media-libs/libsndfile
|
|
||||||
)
|
|
||||||
caps? ( >=sys-libs/libcap-ng-0.6.2 )
|
|
||||||
cups? ( net-print/cups )
|
|
||||||
gstreamer? (
|
|
||||||
>=media-libs/gstreamer-0.10:0.10
|
|
||||||
>=media-libs/gst-plugins-base-0.10:0.10
|
|
||||||
)
|
|
||||||
usb? ( dev-libs/libusb:1 )
|
|
||||||
"
|
|
||||||
DEPEND="${CDEPEND}
|
|
||||||
>=dev-util/pkgconfig-0.20
|
|
||||||
>=dev-libs/check-0.9.8
|
|
||||||
sys-devel/flex
|
|
||||||
"
|
|
||||||
RDEPEND="${CDEPEND}
|
|
||||||
!net-wireless/bluez-libs
|
|
||||||
!net-wireless/bluez-utils
|
|
||||||
consolekit? (
|
|
||||||
|| ( sys-auth/consolekit
|
|
||||||
>=sys-apps/systemd-37 )
|
|
||||||
)
|
|
||||||
test-programs? (
|
|
||||||
dev-python/dbus-python
|
|
||||||
dev-python/pygobject:2
|
|
||||||
)
|
|
||||||
"
|
|
||||||
|
|
||||||
DOCS=( AUTHORS ChangeLog README )
|
|
||||||
|
|
||||||
pkg_setup() {
|
|
||||||
if use test-programs; then
|
|
||||||
python_pkg_setup
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_prepare() {
|
|
||||||
# Change the default D-Bus configuration; the daemon is run as
|
|
||||||
# bluetooth, not root; we don't use the lp user, and we use the
|
|
||||||
# chronos user instead of at_console
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-dbus.patch"
|
|
||||||
|
|
||||||
# Change the default SDP Server socket path to a sub-directory
|
|
||||||
# under /var/run, since /var/run is not writeable by the bluetooth
|
|
||||||
# user.
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-sdp-path.patch"
|
|
||||||
|
|
||||||
# Disable initial radio power for new adapters
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-initially-powered.patch"
|
|
||||||
|
|
||||||
# Automatic pairing support, including keyboard pairing support
|
|
||||||
# (in upstream review)
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0001-Rename-AUTH_TYPE_NOTIFY-to-AUTH_TYPE_NOTIFY_PASSKEY.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0002-Pass-passkey-by-pointer-rather-than-by-value.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0003-agent-add-DisplayPinCode-method.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0004-Add-AUTH_TYPE_NOTIFY_PASSKEY-to-device_request_authe.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0005-Add-display-parameter-to-plugin-pincode-callback.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0006-Display-PIN-generated-by-plugin.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0007-doc-document-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0008-simple-agent-add-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0009-Add-support-for-retrying-a-bonding.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0010-plugin-Add-bonding-callback-support-for-plugins.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0011-bonding-retry-if-callback-returns-TRUE.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0012-bonding-call-plugin-callback-on-cancellation.patch"
|
|
||||||
epatch "${FILESDIR}/${PN}-4.97-autopair-0013-autopair-Add-autopair-plugin.patch"
|
|
||||||
|
|
||||||
if use cups; then
|
|
||||||
sed -i \
|
|
||||||
-e "s:cupsdir = \$(libdir)/cups:cupsdir = `cups-config --serverbin`:" \
|
|
||||||
Makefile.tools Makefile.in || die
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_configure() {
|
|
||||||
econf \
|
|
||||||
--enable-hid2hci \
|
|
||||||
--enable-audio \
|
|
||||||
--enable-bccmd \
|
|
||||||
--enable-datafiles \
|
|
||||||
--enable-dfutool \
|
|
||||||
--enable-input \
|
|
||||||
--enable-network \
|
|
||||||
--enable-serial \
|
|
||||||
--enable-service \
|
|
||||||
--enable-tools \
|
|
||||||
--disable-hal \
|
|
||||||
--localstatedir=/var \
|
|
||||||
--with-systemdunitdir="$(systemd_get_unitdir)" \
|
|
||||||
--with-ouifile=/usr/share/misc/oui.txt \
|
|
||||||
$(use_enable alsa) \
|
|
||||||
$(use_enable caps capng) \
|
|
||||||
$(use_enable cups) \
|
|
||||||
$(use_enable debug) \
|
|
||||||
$(use_enable gstreamer) \
|
|
||||||
$(use_enable pcmcia) \
|
|
||||||
$(use_enable test-programs test) \
|
|
||||||
$(use_enable usb) \
|
|
||||||
--enable-health \
|
|
||||||
--enable-maemo6 \
|
|
||||||
--enable-pnat \
|
|
||||||
--enable-wiimote \
|
|
||||||
--enable-dbusoob \
|
|
||||||
--enable-autopair
|
|
||||||
}
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
default
|
|
||||||
|
|
||||||
if use test-programs ; then
|
|
||||||
cd "${S}/test"
|
|
||||||
dobin simple-agent simple-service monitor-bluetooth
|
|
||||||
newbin list-devices list-bluetooth-devices
|
|
||||||
rm test-textfile.{c,o} || die # bug #356529
|
|
||||||
for b in apitest hsmicro hsplay test-* ; do
|
|
||||||
newbin "${b}" "bluez-${b}"
|
|
||||||
done
|
|
||||||
insinto /usr/share/doc/${PF}/test-services
|
|
||||||
doins service-*
|
|
||||||
|
|
||||||
python_convert_shebangs -r 2 "${ED}"
|
|
||||||
cd "${S}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
insinto /etc/bluetooth
|
|
||||||
doins \
|
|
||||||
input/input.conf \
|
|
||||||
audio/audio.conf \
|
|
||||||
network/network.conf \
|
|
||||||
serial/serial.conf
|
|
||||||
|
|
||||||
newinitd "${FILESDIR}/rfcomm-init.d" rfcomm
|
|
||||||
newconfd "${FILESDIR}/rfcomm-conf.d" rfcomm
|
|
||||||
|
|
||||||
insinto /etc/init
|
|
||||||
newins "${FILESDIR}/${PN}-upstart.conf" bluetoothd.conf
|
|
||||||
|
|
||||||
# Install oui.txt as requested in bug #283791 and approved by upstream
|
|
||||||
insinto /usr/share/misc
|
|
||||||
newins "${WORKDIR}/oui-${OUIDATE}.txt" oui.txt
|
|
||||||
|
|
||||||
fowners bluetooth:bluetooth /var/lib/bluetooth
|
|
||||||
|
|
||||||
rm "${D}/lib/udev/rules.d/97-bluetooth.rules"
|
|
||||||
|
|
||||||
find "${D}" -name "*.la" -delete
|
|
||||||
}
|
|
||||||
|
|
||||||
pkg_postinst() {
|
|
||||||
if ! has_version "net-dialup/ppp"; then
|
|
||||||
elog "To use dial up networking you must install net-dialup/ppp."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use consolekit; then
|
|
||||||
elog "If you want to use rfcomm as a normal user, you need to add the user"
|
|
||||||
elog "to the uucp group."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@ -1,223 +0,0 @@
|
|||||||
# Copyright 1999-2012 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/bluez-4.99.ebuild,v 1.7 2012/04/15 16:53:41 maekke Exp $
|
|
||||||
|
|
||||||
EAPI="4"
|
|
||||||
PYTHON_DEPEND="test-programs? 2"
|
|
||||||
|
|
||||||
inherit autotools multilib eutils systemd python
|
|
||||||
|
|
||||||
DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
|
|
||||||
HOMEPAGE="http://www.bluez.org/"
|
|
||||||
|
|
||||||
# Because of oui.txt changing from time to time without noticement, we need to supply it
|
|
||||||
# ourselves instead of using http://standards.ieee.org/regauth/oui/oui.txt directly.
|
|
||||||
# See bugs #345263 and #349473 for reference.
|
|
||||||
OUIDATE="20120308"
|
|
||||||
SRC_URI="mirror://kernel/linux/bluetooth/${P}.tar.xz
|
|
||||||
http://dev.gentoo.org/~pacho/bluez/oui-${OUIDATE}.txt.xz"
|
|
||||||
|
|
||||||
LICENSE="GPL-2 LGPL-2.1"
|
|
||||||
SLOT="0"
|
|
||||||
KEYWORDS="amd64 arm hppa ~ppc ~ppc64 x86"
|
|
||||||
IUSE="alsa caps +consolekit cups debug gstreamer pcmcia test-programs usb readline"
|
|
||||||
|
|
||||||
CDEPEND="
|
|
||||||
>=dev-libs/glib-2.14:2
|
|
||||||
sys-apps/dbus
|
|
||||||
>=sys-fs/udev-169
|
|
||||||
alsa? (
|
|
||||||
media-libs/alsa-lib[alsa_pcm_plugins_extplug(+),alsa_pcm_plugins_ioplug(+)]
|
|
||||||
media-libs/libsndfile
|
|
||||||
)
|
|
||||||
caps? ( >=sys-libs/libcap-ng-0.6.2 )
|
|
||||||
cups? ( net-print/cups )
|
|
||||||
gstreamer? (
|
|
||||||
>=media-libs/gstreamer-0.10:0.10
|
|
||||||
>=media-libs/gst-plugins-base-0.10:0.10
|
|
||||||
)
|
|
||||||
usb? ( virtual/libusb:0 )
|
|
||||||
readline? ( sys-libs/readline )
|
|
||||||
"
|
|
||||||
DEPEND="${CDEPEND}
|
|
||||||
>=dev-util/pkgconfig-0.20
|
|
||||||
sys-devel/flex
|
|
||||||
test-programs? ( >=dev-libs/check-0.9.8 )
|
|
||||||
"
|
|
||||||
RDEPEND="${CDEPEND}
|
|
||||||
!net-wireless/bluez-libs
|
|
||||||
!net-wireless/bluez-utils
|
|
||||||
consolekit? (
|
|
||||||
|| ( sys-auth/consolekit
|
|
||||||
>=sys-apps/systemd-37 )
|
|
||||||
)
|
|
||||||
test-programs? (
|
|
||||||
dev-python/dbus-python
|
|
||||||
dev-python/pygobject:2
|
|
||||||
)
|
|
||||||
"
|
|
||||||
|
|
||||||
DOCS=( AUTHORS ChangeLog README )
|
|
||||||
|
|
||||||
pkg_setup() {
|
|
||||||
if use test-programs; then
|
|
||||||
python_pkg_setup
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_prepare() {
|
|
||||||
# Change the default D-Bus configuration; the daemon is run as
|
|
||||||
# bluetooth, not root; we don't use the lp user, and we use the
|
|
||||||
# chronos user instead of at_console
|
|
||||||
epatch "${FILESDIR}/${PN}-dbus.patch"
|
|
||||||
|
|
||||||
# Change the default SDP Server socket path to a sub-directory
|
|
||||||
# under /var/run, since /var/run is not writeable by the bluetooth
|
|
||||||
# user.
|
|
||||||
epatch "${FILESDIR}/${PN}-sdp-path.patch"
|
|
||||||
|
|
||||||
# Disable initial radio power for new adapters
|
|
||||||
epatch "${FILESDIR}/${PN}-initially-powered.patch"
|
|
||||||
|
|
||||||
# Automatic pairing support, including keyboard pairing support.
|
|
||||||
# (accepted upstream, can be dropped for next release)
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0001-Rename-AUTH_TYPE_NOTIFY-to-AUTH_TYPE_NOTIFY_PASSKEY.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0002-Pass-passkey-by-pointer-rather-than-by-value.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0003-agent-add-DisplayPinCode-method.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0004-Add-AUTH_TYPE_NOTIFY_PASSKEY-to-device_request_authe.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0005-Add-display-parameter-to-plugin-pincode-callback.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0006-Display-PIN-generated-by-plugin.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0007-doc-document-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0008-simple-agent-add-DisplayPinCode.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0009-Add-support-for-retrying-a-bonding.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0010-plugin-Add-bonding-callback-support-for-plugins.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0011-bonding-retry-if-callback-returns-TRUE.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0012-bonding-call-plugin-callback-on-cancellation.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-autopair-0013-autopair-Add-autopair-plugin.patch"
|
|
||||||
|
|
||||||
# Automatic pairing of dumb devices. Not yet submitted upstream
|
|
||||||
# so kept as a separate patch on top of the above series.
|
|
||||||
epatch "${FILESDIR}/${PN}-autopair.patch"
|
|
||||||
|
|
||||||
# Playstation3 Controller pairing plugin, retrieved from
|
|
||||||
# linux-bluetooth mailing list (posted 2012-04-18).
|
|
||||||
epatch "${FILESDIR}/${P}-ps3-0001.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-ps3-0002.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-ps3-0003.patch"
|
|
||||||
|
|
||||||
# Fix EIR parsing causing class of devices to be lost, retrieved
|
|
||||||
# from GIT head.
|
|
||||||
epatch "${FILESDIR}/${P}-eir-Fix-incorrect-eir_has_data_type-parsing.patch"
|
|
||||||
epatch "${FILESDIR}/${P}-eir-Fix-incorrect-eir_length-parsing.patch"
|
|
||||||
|
|
||||||
eautoreconf
|
|
||||||
|
|
||||||
if use cups; then
|
|
||||||
sed -i \
|
|
||||||
-e "s:cupsdir = \$(libdir)/cups:cupsdir = `cups-config --serverbin`:" \
|
|
||||||
Makefile.tools Makefile.in || die
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
src_configure() {
|
|
||||||
use readline || export ac_cv_header_readline_readline_h=no
|
|
||||||
|
|
||||||
econf \
|
|
||||||
--enable-audio \
|
|
||||||
--enable-bccmd \
|
|
||||||
--enable-datafiles \
|
|
||||||
--enable-dfutool \
|
|
||||||
--enable-input \
|
|
||||||
--enable-network \
|
|
||||||
--enable-serial \
|
|
||||||
--enable-service \
|
|
||||||
--enable-tools \
|
|
||||||
--disable-hal \
|
|
||||||
--localstatedir=/var \
|
|
||||||
--with-systemdunitdir="$(systemd_get_unitdir)" \
|
|
||||||
--with-ouifile=/usr/share/misc/oui.txt \
|
|
||||||
$(use_enable alsa) \
|
|
||||||
$(use_enable caps capng) \
|
|
||||||
$(use_enable cups) \
|
|
||||||
$(use_enable debug) \
|
|
||||||
$(use_enable gstreamer) \
|
|
||||||
$(use_enable pcmcia) \
|
|
||||||
$(use_enable test-programs test) \
|
|
||||||
$(use_enable usb) \
|
|
||||||
--enable-health \
|
|
||||||
--enable-wiimote \
|
|
||||||
--enable-dbusoob \
|
|
||||||
--enable-autopair \
|
|
||||||
--enable-playstation_peripheral
|
|
||||||
}
|
|
||||||
|
|
||||||
src_install() {
|
|
||||||
default
|
|
||||||
|
|
||||||
if use test-programs ; then
|
|
||||||
cd "${S}/test"
|
|
||||||
dobin simple-agent simple-service monitor-bluetooth
|
|
||||||
newbin list-devices list-bluetooth-devices
|
|
||||||
rm test-textfile.{c,o} || die # bug #356529
|
|
||||||
for b in apitest hsmicro hsplay test-* ; do
|
|
||||||
newbin "${b}" "bluez-${b}"
|
|
||||||
done
|
|
||||||
insinto /usr/share/doc/${PF}/test-services
|
|
||||||
doins service-*
|
|
||||||
|
|
||||||
python_convert_shebangs -r 2 "${ED}"
|
|
||||||
cd "${S}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
insinto /etc/bluetooth
|
|
||||||
doins \
|
|
||||||
input/input.conf \
|
|
||||||
audio/audio.conf \
|
|
||||||
network/network.conf \
|
|
||||||
serial/serial.conf
|
|
||||||
|
|
||||||
newinitd "${FILESDIR}/bluetooth-init.d-r1" bluetooth
|
|
||||||
newinitd "${FILESDIR}/rfcomm-init.d" rfcomm
|
|
||||||
newconfd "${FILESDIR}/rfcomm-conf.d" rfcomm
|
|
||||||
|
|
||||||
insinto /etc/init
|
|
||||||
newins "${FILESDIR}/${PN}-upstart.conf" bluetoothd.conf
|
|
||||||
|
|
||||||
insinto /lib/udev/rules.d
|
|
||||||
newins "${FILESDIR}/${PN}-ps3-gamepad.rules" "99-ps3-gamepad.rules"
|
|
||||||
|
|
||||||
# Install oui.txt as requested in bug #283791 and approved by upstream
|
|
||||||
insinto /usr/share/misc
|
|
||||||
newins "${WORKDIR}/oui-${OUIDATE}.txt" oui.txt
|
|
||||||
|
|
||||||
fowners bluetooth:bluetooth /var/lib/bluetooth
|
|
||||||
|
|
||||||
rm "${D}/lib/udev/rules.d/97-bluetooth.rules"
|
|
||||||
|
|
||||||
find "${D}" -name "*.la" -delete
|
|
||||||
}
|
|
||||||
|
|
||||||
pkg_postinst() {
|
|
||||||
udevadm control --reload-rules && udevadm trigger --subsystem-match=bluetooth
|
|
||||||
|
|
||||||
if ! has_version "net-dialup/ppp"; then
|
|
||||||
elog "To use dial up networking you must install net-dialup/ppp."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if use consolekit; then
|
|
||||||
elog "If you want to use rfcomm as a normal user, you need to add the user"
|
|
||||||
elog "to the uucp group."
|
|
||||||
else
|
|
||||||
elog "Since you have the consolekit use flag disabled, you will only be able to run"
|
|
||||||
elog "bluetooth clients as root. If you want to be able to run bluetooth clientes as "
|
|
||||||
elog "a regular user, you need to enable the consolekit use flag for this package or"
|
|
||||||
elog "to add the user to the plugdev group."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(rc-config list default | grep bluetooth)" = "" ] ; then
|
|
||||||
elog "You will need to add bluetooth service to default runlevel"
|
|
||||||
elog "for getting your devices detected from startup without needing"
|
|
||||||
elog "to reconnect them. For that please run:"
|
|
||||||
elog "'rc-update add bluetooth default'"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
# Bluetooth hidd daemon configuraton file
|
|
||||||
|
|
||||||
# Arguments to hidd
|
|
||||||
HIDD_OPTIONS="--encrypt"
|
|
||||||
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
? cups/.deps
|
|
||||||
? cups/Makefile
|
|
||||||
? cups/Makefile.in
|
|
||||||
Index: cups/Makefile.am
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvsroot/bluez/utils/cups/Makefile.am,v
|
|
||||||
retrieving revision 1.9
|
|
||||||
diff -u -r1.9 Makefile.am
|
|
||||||
--- cups/Makefile.am 20 Aug 2006 02:21:03 -0000 1.9
|
|
||||||
+++ cups/Makefile.am 1 Jun 2007 15:47:14 -0000
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
|
|
||||||
if CUPS
|
|
||||||
-cupsdir = $(libdir)/cups/backend
|
|
||||||
+cupsdir = `cups-config --serverbin`/backend
|
|
||||||
|
|
||||||
cups_PROGRAMS = bluetooth
|
|
||||||
else
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
#!/sbin/runscript
|
|
||||||
# Copyright 1999-2007 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/files/4.18/init.d-hidd,v 1.1 2008/11/28 21:21:35 dev-zero Exp $
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
need bluetooth
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
ebegin "Starting hidd"
|
|
||||||
start-stop-daemon --start --quiet \
|
|
||||||
--exec /usr/bin/hidd -- ${HIDD_OPTIONS} --server
|
|
||||||
local result="$?"
|
|
||||||
local service="/etc/bluetooth/input.service"
|
|
||||||
if [ "${result}" != "0" ] && grep -q "Autostart=true" ${service}; then
|
|
||||||
eerror "You have Autostart=true in ${service}."
|
|
||||||
eerror "Change this to false if you want to use hidd."
|
|
||||||
fi
|
|
||||||
eend ${result}
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
ebegin "Stopping hidd"
|
|
||||||
hidd --killall
|
|
||||||
start-stop-daemon --stop --quiet --exec /usr/bin/hidd
|
|
||||||
eend $?
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
diff -Naur bluez-4.31.orig/common/Makefile.am bluez-4.31/common/Makefile.am
|
|
||||||
--- bluez-4.31.orig/common/Makefile.am 2009-02-27 22:57:29.515330134 +0100
|
|
||||||
+++ bluez-4.31/common/Makefile.am 2009-02-27 22:58:11.249328307 +0100
|
|
||||||
@@ -4,6 +4,8 @@
|
|
||||||
libhelper_a_SOURCES = oui.h oui.c textfile.h textfile.c logging.h logging.c \
|
|
||||||
glib-helper.h glib-helper.c sdp-xml.h sdp-xml.c btio.h btio.c
|
|
||||||
|
|
||||||
+libhelper_a_LIBADD = @BLUEZ_LIBS@
|
|
||||||
+
|
|
||||||
noinst_PROGRAMS = test_textfile
|
|
||||||
|
|
||||||
test_textfile_LDADD = libhelper.a
|
|
||||||
diff -Naur bluez-4.31.orig/test/Makefile.am bluez-4.31/test/Makefile.am
|
|
||||||
--- bluez-4.31.orig/test/Makefile.am 2009-02-27 22:57:29.518659538 +0100
|
|
||||||
+++ bluez-4.31/test/Makefile.am 2009-02-27 23:07:09.294597176 +0100
|
|
||||||
@@ -23,13 +23,13 @@
|
|
||||||
|
|
||||||
bdaddr_SOURCES = bdaddr.c
|
|
||||||
|
|
||||||
-bdaddr_LDADD = @BLUEZ_LIBS@ $(top_builddir)/common/libhelper.a
|
|
||||||
+bdaddr_LDADD = $(top_builddir)/common/libhelper.a @BLUEZ_LIBS@
|
|
||||||
|
|
||||||
lmptest_LDADD = @BLUEZ_LIBS@
|
|
||||||
|
|
||||||
agent_LDADD = @DBUS_LIBS@
|
|
||||||
|
|
||||||
-btiotest_LDADD = @GLIB_LIBS@ @BLUEZ_LIBS@ $(top_builddir)/common/libhelper.a
|
|
||||||
+btiotest_LDADD = @GLIB_LIBS@ $(top_builddir)/common/libhelper.a @BLUEZ_LIBS@
|
|
||||||
|
|
||||||
noinst_MANS = bdaddr.8
|
|
||||||
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
The configure stuff is a inconsequent:
|
|
||||||
- even if neither alsa nor gstreamer support is enabled, SBC_LIBS gets substituted by libsbc.la
|
|
||||||
which doesn't get build without alsa or gstreamer. Making this conditional helps.
|
|
||||||
- ipctest needs both libipc.la and libsbc.la and fails if SBC_LIBS/SBC_CFLAGS are empty,
|
|
||||||
making the build conditional helps again.
|
|
||||||
--- acinclude.m4.orig 2009-04-06 16:26:14.570780241 +0200
|
|
||||||
+++ acinclude.m4 2009-04-06 16:26:59.540779148 +0200
|
|
||||||
@@ -330,8 +330,10 @@
|
|
||||||
AC_SUBST([GDBUS_CFLAGS], ['-I$(top_srcdir)/gdbus'])
|
|
||||||
AC_SUBST([GDBUS_LIBS], ['$(top_builddir)/gdbus/libgdbus.la'])
|
|
||||||
|
|
||||||
- AC_SUBST([SBC_CFLAGS], ['-I$(top_srcdir)/sbc'])
|
|
||||||
- AC_SUBST([SBC_LIBS], ['$(top_builddir)/sbc/libsbc.la'])
|
|
||||||
+ if (test "${alsa_enable}" = "yes" || test "${gstreamer_enable}" = "yes"); then
|
|
||||||
+ AC_SUBST([SBC_CFLAGS], ['-I$(top_srcdir)/sbc'])
|
|
||||||
+ AC_SUBST([SBC_LIBS], ['$(top_builddir)/sbc/libsbc.la'])
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL(SNDFILE, test "${sndfile_enable}" = "yes" && test "${sndfile_found}" = "yes")
|
|
||||||
AM_CONDITIONAL(NETLINK, test "${netlink_enable}" = "yes" && test "${netlink_found}" = "yes")
|
|
||||||
--- audio/Makefile.am.orig 2009-04-06 16:47:21.240681272 +0200
|
|
||||||
+++ audio/Makefile.am 2009-04-06 17:42:27.240597715 +0200
|
|
||||||
@@ -60,10 +60,16 @@
|
|
||||||
|
|
||||||
libipc_la_SOURCES = ipc.h ipc.c
|
|
||||||
|
|
||||||
+if AUDIOPLUGIN
|
|
||||||
+if SBC
|
|
||||||
+
|
|
||||||
noinst_PROGRAMS = ipctest
|
|
||||||
|
|
||||||
ipctest_LDADD= libipc.la @SBC_LIBS@ @GLIB_LIBS@
|
|
||||||
|
|
||||||
+endif
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
AM_CFLAGS = -fvisibility=hidden @SBC_CFLAGS@ \
|
|
||||||
@BLUEZ_CFLAGS@ @DBUS_CFLAGS@ @GLIB_CFLAGS@ @GDBUS_CFLAGS@
|
|
||||||
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
# Bluetooth configuraton file
|
|
||||||
|
|
||||||
# Bind rfcomm devices (allowed values are "true" and "false")
|
|
||||||
RFCOMM_ENABLE=true
|
|
||||||
|
|
||||||
# Config file for rfcomm
|
|
||||||
RFCOMM_CONFIG="/etc/bluetooth/rfcomm.conf"
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
#!/sbin/runscript
|
|
||||||
# Copyright 1999-2008 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/files/4.60/bluetooth-init.d,v 1.1 2010/02/01 19:47:46 pacho Exp $
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
after coldplug
|
|
||||||
need dbus localmount
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
ebegin "Starting Bluetooth"
|
|
||||||
|
|
||||||
udevadm trigger --subsystem-match=bluetooth
|
|
||||||
eend $?
|
|
||||||
|
|
||||||
if [ "${RFCOMM_ENABLE}" = "true" -a -x /usr/bin/rfcomm ]; then
|
|
||||||
if [ -f "${RFCOMM_CONFIG}" ]; then
|
|
||||||
ebegin " Starting rfcomm"
|
|
||||||
/usr/bin/rfcomm -f "${RFCOMM_CONFIG}" bind all
|
|
||||||
eend $?
|
|
||||||
else
|
|
||||||
ewarn "Not enabling rfcomm because RFCOMM_CONFIG does not exists"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
ebegin "Shutting down Bluetooth"
|
|
||||||
eend 0
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
#!/sbin/runscript
|
|
||||||
# Copyright 1999-2012 Gentoo Foundation
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/files/bluetooth-init.d-r1,v 1.1 2012/01/09 23:01:55 pacho Exp $
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
after coldplug
|
|
||||||
need dbus localmount hostname
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
ebegin "Udev coldplug of bluetooth devices"
|
|
||||||
udevadm trigger --subsystem-match=bluetooth --action=add
|
|
||||||
eend $?
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
# Start/Stop bluetooth service on device insertion. Gentoo specific.
|
|
||||||
SUBSYSTEM=="bluetooth", KERNEL=="hci[0-9]*", RUN+="bluetooth.sh"
|
|
||||||
|
|
||||||
# So that normal users can dial out.
|
|
||||||
SUBSYSTEM=="tty", SUBSYSTEMS=="bluetooth", GROUP="uucp"
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# bluetooth.sh: udev external RUN script
|
|
||||||
#
|
|
||||||
# Copyright:
|
|
||||||
# 2005-2006 Henrik Brix Andersen <brix@gentoo.org>
|
|
||||||
# 2007 Petteri Räty <betelgeuse@gentoo.org>
|
|
||||||
# 2008 Tiziano Müller <dev-zero@gentoo.org>
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
script=/etc/init.d/bluetooth
|
|
||||||
|
|
||||||
# Find out where sysfs is mounted. Exit if not available
|
|
||||||
sysfs=`grep -F sysfs /proc/mounts | awk '{print $2}'`
|
|
||||||
if [ "$sysfs" = "" ]; then
|
|
||||||
echo "sysfs is required"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d $sysfs/class/bluetooth/hci[0-9]* -a ! -d $sysfs/bus/bluetooth/devices/hci[0-9]* ]; then
|
|
||||||
if $script --quiet status; then
|
|
||||||
IN_HOTPLUG=1 $script --quiet stop
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if ! $script --quiet status; then
|
|
||||||
IN_HOTPLUG=1 $script --quiet start
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# bluetooth.sh: udev external RUN script
|
|
||||||
#
|
|
||||||
# Copyright:
|
|
||||||
# 2005-2006 Henrik Brix Andersen <brix@gentoo.org>
|
|
||||||
# 2007 Petteri Räty <betelgeuse@gentoo.org>
|
|
||||||
# 2008 Tiziano Müller <dev-zero@gentoo.org>
|
|
||||||
# 2011 Pacho Ramos <pacho@gentoo.org>
|
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
|
||||||
|
|
||||||
# Find out where sysfs is mounted. Exit if not available
|
|
||||||
sysfs=`grep -F sysfs /proc/mounts | awk '{print $2}'`
|
|
||||||
if [ "$sysfs" = "" ]; then
|
|
||||||
echo "sysfs is required"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d $sysfs/class/bluetooth/hci[0-9]* -a ! -d $sysfs/bus/bluetooth/devices/hci[0-9]* ]; then
|
|
||||||
udevadm trigger --subsystem-match=bluetooth --action=add
|
|
||||||
fi
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
From be1631d70689cfde701e9a1642a5afad11252af7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:40:25 -0800
|
|
||||||
Subject: [PATCH 01/13] Rename AUTH_TYPE_NOTIFY to AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
|
|
||||||
This makes room for additional notification types to be added.
|
|
||||||
---
|
|
||||||
src/device.c | 8 ++++----
|
|
||||||
src/device.h | 2 +-
|
|
||||||
src/event.c | 4 ++--
|
|
||||||
3 files changed, 7 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index dfc8e59..92c13f5 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2453,7 +2453,7 @@ void device_simple_pairing_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth = device->authr;
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY && auth->agent)
|
|
||||||
+ if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2470,7 +2470,7 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY && auth->agent)
|
|
||||||
+ if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
@@ -2724,7 +2724,7 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
err = agent_request_confirmation(agent, device, passkey,
|
|
||||||
confirm_cb, auth, NULL);
|
|
||||||
break;
|
|
||||||
- case AUTH_TYPE_NOTIFY:
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
err = agent_display_passkey(agent, device, passkey);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
@@ -2764,7 +2764,7 @@ static void cancel_authentication(struct authentication_req *auth)
|
|
||||||
case AUTH_TYPE_PASSKEY:
|
|
||||||
((agent_passkey_cb) auth->cb)(agent, &err, 0, device);
|
|
||||||
break;
|
|
||||||
- case AUTH_TYPE_NOTIFY:
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
/* User Notify doesn't require any reply */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 7cb9bb2..aa7f2f1 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -30,7 +30,7 @@ typedef enum {
|
|
||||||
AUTH_TYPE_PINCODE,
|
|
||||||
AUTH_TYPE_PASSKEY,
|
|
||||||
AUTH_TYPE_CONFIRM,
|
|
||||||
- AUTH_TYPE_NOTIFY,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
} auth_type_t;
|
|
||||||
|
|
||||||
struct btd_device *device_create(DBusConnection *conn,
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 113a2b6..95cdbdb 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -202,8 +202,8 @@ int btd_event_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_NOTIFY, passkey,
|
|
||||||
- FALSE, NULL);
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
+ passkey, FALSE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void btd_event_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,107 +0,0 @@
|
|||||||
From 888f24266b8ff06d7007afb5e6a38ba621750451 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:43:48 -0800
|
|
||||||
Subject: [PATCH 02/13] Pass passkey by pointer rather than by value
|
|
||||||
|
|
||||||
This allows alternate data of a different type to be passed to
|
|
||||||
device_request_authentication() for other notification types such
|
|
||||||
as those that require a PIN.
|
|
||||||
---
|
|
||||||
src/device.c | 9 +++++----
|
|
||||||
src/device.h | 2 +-
|
|
||||||
src/event.c | 8 ++++----
|
|
||||||
3 files changed, 10 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 92c13f5..8a2ae9d 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2681,7 +2681,7 @@ done:
|
|
||||||
}
|
|
||||||
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
- uint32_t passkey, gboolean secure, void *cb)
|
|
||||||
+ void *data, gboolean secure, void *cb)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth;
|
|
||||||
struct agent *agent;
|
|
||||||
@@ -2707,7 +2707,6 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth->device = device;
|
|
||||||
auth->cb = cb;
|
|
||||||
auth->type = type;
|
|
||||||
- auth->passkey = passkey;
|
|
||||||
auth->secure = secure;
|
|
||||||
device->authr = auth;
|
|
||||||
|
|
||||||
@@ -2721,11 +2720,13 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth, NULL);
|
|
||||||
break;
|
|
||||||
case AUTH_TYPE_CONFIRM:
|
|
||||||
- err = agent_request_confirmation(agent, device, passkey,
|
|
||||||
+ auth->passkey = *(uint32_t *)data;
|
|
||||||
+ err = agent_request_confirmation(agent, device, auth->passkey,
|
|
||||||
confirm_cb, auth, NULL);
|
|
||||||
break;
|
|
||||||
case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
- err = agent_display_passkey(agent, device, passkey);
|
|
||||||
+ auth->passkey = *(uint32_t *)data;
|
|
||||||
+ err = agent_display_passkey(agent, device, auth->passkey);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
err = -EINVAL;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index aa7f2f1..998aee7 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -83,7 +83,7 @@ gboolean device_is_creating(struct btd_device *device, const char *sender);
|
|
||||||
gboolean device_is_bonding(struct btd_device *device, const char *sender);
|
|
||||||
void device_cancel_bonding(struct btd_device *device, uint8_t status);
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
- uint32_t passkey, gboolean secure, void *cb);
|
|
||||||
+ void *data, gboolean secure, void *cb);
|
|
||||||
void device_cancel_authentication(struct btd_device *device, gboolean aborted);
|
|
||||||
gboolean device_is_authenticating(struct btd_device *device);
|
|
||||||
gboolean device_is_authorizing(struct btd_device *device);
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 95cdbdb..7d66b6d 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -130,7 +130,7 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_PINCODE, 0,
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_PINCODE, NULL,
|
|
||||||
secure, pincode_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ int btd_event_user_confirm(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
return device_request_authentication(device, AUTH_TYPE_CONFIRM,
|
|
||||||
- passkey, FALSE, confirm_cb);
|
|
||||||
+ &passkey, FALSE, confirm_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
int btd_event_user_passkey(bdaddr_t *sba, bdaddr_t *dba)
|
|
||||||
@@ -190,7 +190,7 @@ int btd_event_user_passkey(bdaddr_t *sba, bdaddr_t *dba)
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
- return device_request_authentication(device, AUTH_TYPE_PASSKEY, 0,
|
|
||||||
+ return device_request_authentication(device, AUTH_TYPE_PASSKEY, NULL,
|
|
||||||
FALSE, passkey_cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ int btd_event_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
return device_request_authentication(device, AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
- passkey, FALSE, NULL);
|
|
||||||
+ &passkey, FALSE, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void btd_event_simple_pairing_complete(bdaddr_t *local, bdaddr_t *peer,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,161 +0,0 @@
|
|||||||
From e84af9f6ba447c540512d56ccc7326af621749bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 10:56:56 -0800
|
|
||||||
Subject: [PATCH 03/13] agent: add DisplayPinCode method
|
|
||||||
|
|
||||||
In constrast to DisplayPasskey, this sends a UTF-8 string PIN code
|
|
||||||
to the agent; also we support a callback for the case where the
|
|
||||||
Agent doesn't implement this new method so we can fallback.
|
|
||||||
---
|
|
||||||
src/agent.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/agent.h | 4 ++
|
|
||||||
2 files changed, 115 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/agent.c b/src/agent.c
|
|
||||||
index 9b942e8..23e3b43 100644
|
|
||||||
--- a/src/agent.c
|
|
||||||
+++ b/src/agent.c
|
|
||||||
@@ -52,7 +52,8 @@ typedef enum {
|
|
||||||
AGENT_REQUEST_CONFIRMATION,
|
|
||||||
AGENT_REQUEST_PINCODE,
|
|
||||||
AGENT_REQUEST_AUTHORIZE,
|
|
||||||
- AGENT_REQUEST_CONFIRM_MODE
|
|
||||||
+ AGENT_REQUEST_CONFIRM_MODE,
|
|
||||||
+ AGENT_REQUEST_DISPLAY_PINCODE,
|
|
||||||
} agent_request_type_t;
|
|
||||||
|
|
||||||
struct agent {
|
|
||||||
@@ -699,6 +700,115 @@ int agent_display_passkey(struct agent *agent, struct btd_device *device,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void display_pincode_reply(DBusPendingCall *call, void *user_data)
|
|
||||||
+{
|
|
||||||
+ struct agent_request *req = user_data;
|
|
||||||
+ struct agent *agent = req->agent;
|
|
||||||
+ DBusMessage *message;
|
|
||||||
+ DBusError err;
|
|
||||||
+ agent_cb cb = req->cb;
|
|
||||||
+
|
|
||||||
+ /* clear agent->request early; our callback will likely try
|
|
||||||
+ * another request */
|
|
||||||
+ agent->request = NULL;
|
|
||||||
+
|
|
||||||
+ /* steal_reply will always return non-NULL since the callback
|
|
||||||
+ * is only called after a reply has been received */
|
|
||||||
+ message = dbus_pending_call_steal_reply(call);
|
|
||||||
+
|
|
||||||
+ dbus_error_init(&err);
|
|
||||||
+ if (dbus_set_error_from_message(&err, message)) {
|
|
||||||
+ error("Agent replied with an error: %s, %s",
|
|
||||||
+ err.name, err.message);
|
|
||||||
+
|
|
||||||
+ cb(agent, &err, req->user_data);
|
|
||||||
+
|
|
||||||
+ if (dbus_error_has_name(&err, DBUS_ERROR_NO_REPLY)) {
|
|
||||||
+ agent_cancel(agent);
|
|
||||||
+ dbus_message_unref(message);
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ goto done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_error_init(&err);
|
|
||||||
+ if (!dbus_message_get_args(message, &err, DBUS_TYPE_INVALID)) {
|
|
||||||
+ error("Wrong reply signature: %s", err.message);
|
|
||||||
+ cb(agent, &err, req->user_data);
|
|
||||||
+ dbus_error_free(&err);
|
|
||||||
+ goto done;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ cb(agent, NULL, req->user_data);
|
|
||||||
+done:
|
|
||||||
+ dbus_message_unref(message);
|
|
||||||
+
|
|
||||||
+ agent_request_free(req, TRUE);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int display_pincode_request_new(struct agent_request *req,
|
|
||||||
+ const char *device_path,
|
|
||||||
+ const char *pincode)
|
|
||||||
+{
|
|
||||||
+ struct agent *agent = req->agent;
|
|
||||||
+
|
|
||||||
+ req->msg = dbus_message_new_method_call(agent->name, agent->path,
|
|
||||||
+ "org.bluez.Agent", "DisplayPinCode");
|
|
||||||
+ if (req->msg == NULL) {
|
|
||||||
+ error("Couldn't allocate D-Bus message");
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_message_append_args(req->msg,
|
|
||||||
+ DBUS_TYPE_OBJECT_PATH, &device_path,
|
|
||||||
+ DBUS_TYPE_STRING, &pincode,
|
|
||||||
+ DBUS_TYPE_INVALID);
|
|
||||||
+
|
|
||||||
+ if (dbus_connection_send_with_reply(connection, req->msg,
|
|
||||||
+ &req->call, REQUEST_TIMEOUT) == FALSE) {
|
|
||||||
+ error("D-Bus send failed");
|
|
||||||
+ return -EIO;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_pending_call_set_notify(req->call, display_pincode_reply,
|
|
||||||
+ req, NULL);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int agent_display_pincode(struct agent *agent, struct btd_device *device,
|
|
||||||
+ const char *pincode, agent_cb cb,
|
|
||||||
+ void *user_data, GDestroyNotify destroy)
|
|
||||||
+{
|
|
||||||
+ struct agent_request *req;
|
|
||||||
+ const gchar *dev_path = device_get_path(device);
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (agent->request)
|
|
||||||
+ return -EBUSY;
|
|
||||||
+
|
|
||||||
+ DBG("Calling Agent.DisplayPinCode: name=%s, path=%s, pincode=%s",
|
|
||||||
+ agent->name, agent->path, pincode);
|
|
||||||
+
|
|
||||||
+ req = agent_request_new(agent, AGENT_REQUEST_DISPLAY_PINCODE, cb,
|
|
||||||
+ user_data, destroy);
|
|
||||||
+
|
|
||||||
+ err = display_pincode_request_new(req, dev_path, pincode);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ goto failed;
|
|
||||||
+
|
|
||||||
+ agent->request = req;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+failed:
|
|
||||||
+ agent_request_free(req, FALSE);
|
|
||||||
+ return err;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
uint8_t agent_get_io_capability(struct agent *agent)
|
|
||||||
{
|
|
||||||
return agent->capability;
|
|
||||||
diff --git a/src/agent.h b/src/agent.h
|
|
||||||
index f62bf3b..69ad42b 100644
|
|
||||||
--- a/src/agent.h
|
|
||||||
+++ b/src/agent.h
|
|
||||||
@@ -64,6 +64,10 @@ int agent_request_confirmation(struct agent *agent, struct btd_device *device,
|
|
||||||
int agent_display_passkey(struct agent *agent, struct btd_device *device,
|
|
||||||
uint32_t passkey);
|
|
||||||
|
|
||||||
+int agent_display_pincode(struct agent *agent, struct btd_device *device,
|
|
||||||
+ const char *pincode, agent_cb cb,
|
|
||||||
+ void *user_data, GDestroyNotify destroy);
|
|
||||||
+
|
|
||||||
int agent_cancel(struct agent *agent);
|
|
||||||
|
|
||||||
gboolean agent_is_busy(struct agent *agent, void *user_data);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,151 +0,0 @@
|
|||||||
From 16583671c03b871003430e433ddf197833ea0086 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:16:40 -0800
|
|
||||||
Subject: [PATCH 04/13] Add AUTH_TYPE_NOTIFY_PASSKEY to
|
|
||||||
device_request_authentication
|
|
||||||
|
|
||||||
This new authentication type accepts a pincode and calls the
|
|
||||||
DisplayPinCode agent method, a fallback is provided so that if the
|
|
||||||
method is not implemented the older RequestPinCode method is used
|
|
||||||
instead.
|
|
||||||
|
|
||||||
Due to this fallback, the agent_pincode_cb is used and calling
|
|
||||||
functions should send the pincode passed to the callback to the
|
|
||||||
adapter, which may differ from that generated.
|
|
||||||
---
|
|
||||||
src/device.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/device.h | 1 +
|
|
||||||
2 files changed, 58 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 8a2ae9d..f32666e 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -93,6 +93,7 @@ struct authentication_req {
|
|
||||||
struct agent *agent;
|
|
||||||
struct btd_device *device;
|
|
||||||
uint32_t passkey;
|
|
||||||
+ char *pincode;
|
|
||||||
gboolean secure;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -277,6 +278,8 @@ static void device_free(gpointer user_data)
|
|
||||||
|
|
||||||
DBG("%p", device);
|
|
||||||
|
|
||||||
+ if (device->authr)
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
g_free(device->authr);
|
|
||||||
g_free(device->path);
|
|
||||||
g_free(device->alias);
|
|
||||||
@@ -2453,12 +2456,15 @@ void device_simple_pairing_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct authentication_req *auth = device->authr;
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
+ if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
+ || auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void device_auth_req_free(struct btd_device *device)
|
|
||||||
{
|
|
||||||
+ if (device->authr)
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
g_free(device->authr);
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
@@ -2470,7 +2476,8 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
- if (auth && auth->type == AUTH_TYPE_NOTIFY_PASSKEY && auth->agent)
|
|
||||||
+ if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
+ || auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
@@ -2680,6 +2687,46 @@ done:
|
|
||||||
device->authr->agent = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void display_pincode_cb(struct agent *agent, DBusError *err, void *data)
|
|
||||||
+{
|
|
||||||
+ struct authentication_req *auth = data;
|
|
||||||
+ struct btd_device *device = auth->device;
|
|
||||||
+ struct btd_adapter *adapter = device_get_adapter(device);
|
|
||||||
+ struct agent *adapter_agent = adapter_get_agent(adapter);
|
|
||||||
+
|
|
||||||
+ if (err && (g_str_equal(DBUS_ERROR_UNKNOWN_METHOD, err->name) ||
|
|
||||||
+ g_str_equal(DBUS_ERROR_NO_REPLY, err->name))) {
|
|
||||||
+
|
|
||||||
+ /* Request a pincode if we fail to display one */
|
|
||||||
+ if (auth->agent == adapter_agent || adapter_agent == NULL) {
|
|
||||||
+ if (agent_request_pincode(agent, device, pincode_cb,
|
|
||||||
+ auth->secure, auth, NULL) < 0)
|
|
||||||
+ goto done;
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (agent_display_pincode(adapter_agent, device, auth->pincode,
|
|
||||||
+ display_pincode_cb, auth, NULL) < 0)
|
|
||||||
+ goto done;
|
|
||||||
+
|
|
||||||
+ auth->agent = adapter_agent;
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+done:
|
|
||||||
+ /* No need to reply anything if the authentication already failed */
|
|
||||||
+ if (auth->cb == NULL)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ ((agent_pincode_cb) auth->cb)(agent, err, auth->pincode, device);
|
|
||||||
+
|
|
||||||
+ g_free(device->authr->pincode);
|
|
||||||
+ device->authr->pincode = NULL;
|
|
||||||
+ device->authr->cb = NULL;
|
|
||||||
+ device->authr->agent = NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
void *data, gboolean secure, void *cb)
|
|
||||||
{
|
|
||||||
@@ -2728,6 +2775,11 @@ int device_request_authentication(struct btd_device *device, auth_type_t type,
|
|
||||||
auth->passkey = *(uint32_t *)data;
|
|
||||||
err = agent_display_passkey(agent, device, auth->passkey);
|
|
||||||
break;
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PINCODE:
|
|
||||||
+ auth->pincode = g_strdup((const char *)data);
|
|
||||||
+ err = agent_display_pincode(agent, device, auth->pincode,
|
|
||||||
+ display_pincode_cb, auth, NULL);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
err = -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -2768,6 +2820,9 @@ static void cancel_authentication(struct authentication_req *auth)
|
|
||||||
case AUTH_TYPE_NOTIFY_PASSKEY:
|
|
||||||
/* User Notify doesn't require any reply */
|
|
||||||
break;
|
|
||||||
+ case AUTH_TYPE_NOTIFY_PINCODE:
|
|
||||||
+ ((agent_pincode_cb) auth->cb)(agent, &err, NULL, device);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dbus_error_free(&err);
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 998aee7..561865c 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -31,6 +31,7 @@ typedef enum {
|
|
||||||
AUTH_TYPE_PASSKEY,
|
|
||||||
AUTH_TYPE_CONFIRM,
|
|
||||||
AUTH_TYPE_NOTIFY_PASSKEY,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PINCODE,
|
|
||||||
} auth_type_t;
|
|
||||||
|
|
||||||
struct btd_device *device_create(DBusConnection *conn,
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
From 1630cbe326460a89d5c342847b658a499484ced0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 29 Mar 2012 14:04:14 -0700
|
|
||||||
Subject: [PATCH 05/13] Add display parameter to plugin pincode callback
|
|
||||||
|
|
||||||
Pass a display parameter to the plugin pincode callback, a plugin
|
|
||||||
may set this to TRUE to indicate the PIN it generates should be
|
|
||||||
displayed on the screen for entry into the remote device.
|
|
||||||
---
|
|
||||||
plugins/wiimote.c | 2 +-
|
|
||||||
src/adapter.c | 4 ++--
|
|
||||||
src/adapter.h | 4 ++--
|
|
||||||
src/event.c | 3 ++-
|
|
||||||
4 files changed, 7 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/wiimote.c b/plugins/wiimote.c
|
|
||||||
index 1ae638b..43b6de3 100644
|
|
||||||
--- a/plugins/wiimote.c
|
|
||||||
+++ b/plugins/wiimote.c
|
|
||||||
@@ -56,7 +56,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
|
|
||||||
- char *pinbuf)
|
|
||||||
+ char *pinbuf, gboolean *display)
|
|
||||||
{
|
|
||||||
uint16_t vendor, product;
|
|
||||||
bdaddr_t sba, dba;
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index acb845e..ccf7991 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -3330,7 +3330,7 @@ void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
- char *pin_buf)
|
|
||||||
+ char *pin_buf, gboolean *display)
|
|
||||||
{
|
|
||||||
GSList *l;
|
|
||||||
btd_adapter_pin_cb_t cb;
|
|
||||||
@@ -3339,7 +3339,7 @@ ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
|
|
||||||
for (l = adapter->pin_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
cb = l->data;
|
|
||||||
- ret = cb(adapter, dev, pin_buf);
|
|
||||||
+ ret = cb(adapter, dev, pin_buf, display);
|
|
||||||
if (ret > 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
diff --git a/src/adapter.h b/src/adapter.h
|
|
||||||
index ceebb97..aa66070 100644
|
|
||||||
--- a/src/adapter.h
|
|
||||||
+++ b/src/adapter.h
|
|
||||||
@@ -172,13 +172,13 @@ int btd_adapter_switch_offline(struct btd_adapter *adapter);
|
|
||||||
void btd_adapter_enable_auto_connect(struct btd_adapter *adapter);
|
|
||||||
|
|
||||||
typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
|
|
||||||
- struct btd_device *dev, char *out);
|
|
||||||
+ struct btd_device *dev, char *out, gboolean *display);
|
|
||||||
void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
|
|
||||||
btd_adapter_pin_cb_t cb);
|
|
||||||
void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,
|
|
||||||
btd_adapter_pin_cb_t cb);
|
|
||||||
ssize_t btd_adapter_get_pin(struct btd_adapter *adapter, struct btd_device *dev,
|
|
||||||
- char *pin_buf);
|
|
||||||
+ char *pin_buf, gboolean *display);
|
|
||||||
|
|
||||||
typedef void (*bt_hci_result_t) (uint8_t status, gpointer user_data);
|
|
||||||
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index 7d66b6d..d87b6a4 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -119,12 +119,13 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
struct btd_device *device;
|
|
||||||
char pin[17];
|
|
||||||
ssize_t pinlen;
|
|
||||||
+ gboolean display = FALSE;
|
|
||||||
|
|
||||||
if (!get_adapter_and_device(sba, dba, &adapter, &device, TRUE))
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
memset(pin, 0, sizeof(pin));
|
|
||||||
- pinlen = btd_adapter_get_pin(adapter, device, pin);
|
|
||||||
+ pinlen = btd_adapter_get_pin(adapter, device, pin, &display);
|
|
||||||
if (pinlen > 0 && (!secure || pinlen == 16)) {
|
|
||||||
btd_adapter_pincode_reply(adapter, dba, pin, pinlen);
|
|
||||||
return 0;
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From 2a902f071ec21572094ce9cdf54099ad275e7904 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 29 Mar 2012 14:07:13 -0700
|
|
||||||
Subject: [PATCH 06/13] Display PIN generated by plugin
|
|
||||||
|
|
||||||
If a plugin pincode callback sets the display parameter to TRUE, send
|
|
||||||
the generated PIN to the agent for display using the new DisplayPinCode
|
|
||||||
agent method, including its fallback to RequestPinCode.
|
|
||||||
---
|
|
||||||
src/event.c | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/event.c b/src/event.c
|
|
||||||
index d87b6a4..5b60fb3 100644
|
|
||||||
--- a/src/event.c
|
|
||||||
+++ b/src/event.c
|
|
||||||
@@ -127,6 +127,11 @@ int btd_event_request_pin(bdaddr_t *sba, bdaddr_t *dba, gboolean secure)
|
|
||||||
memset(pin, 0, sizeof(pin));
|
|
||||||
pinlen = btd_adapter_get_pin(adapter, device, pin, &display);
|
|
||||||
if (pinlen > 0 && (!secure || pinlen == 16)) {
|
|
||||||
+ if (display && device_is_bonding(device, NULL))
|
|
||||||
+ return device_request_authentication(device,
|
|
||||||
+ AUTH_TYPE_NOTIFY_PINCODE, pin,
|
|
||||||
+ secure, pincode_cb);
|
|
||||||
+
|
|
||||||
btd_adapter_pincode_reply(adapter, dba, pin, pinlen);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
From 8a9347822f86059d015ae3893387aa971fa41ab7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:25:39 -0800
|
|
||||||
Subject: [PATCH 07/13] doc: document DisplayPinCode
|
|
||||||
|
|
||||||
---
|
|
||||||
doc/agent-api.txt | 24 ++++++++++++++++++++++++
|
|
||||||
1 files changed, 24 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/doc/agent-api.txt b/doc/agent-api.txt
|
|
||||||
index 9ab2063..5c8d4d2 100644
|
|
||||||
--- a/doc/agent-api.txt
|
|
||||||
+++ b/doc/agent-api.txt
|
|
||||||
@@ -61,6 +61,30 @@ Methods void Release()
|
|
||||||
so the display should be zero-padded at the start if
|
|
||||||
the value contains less than 6 digits.
|
|
||||||
|
|
||||||
+ void DisplayPinCode(object device, string pincode)
|
|
||||||
+
|
|
||||||
+ This method gets called when the service daemon
|
|
||||||
+ needs to display a pincode for an authentication.
|
|
||||||
+
|
|
||||||
+ An empty reply should be returned. When the pincode
|
|
||||||
+ needs no longer to be displayed, the Cancel method
|
|
||||||
+ of the agent will be called.
|
|
||||||
+
|
|
||||||
+ If this method is not implemented the RequestPinCode
|
|
||||||
+ method will be used instead.
|
|
||||||
+
|
|
||||||
+ This is used during the pairing process of keyboards
|
|
||||||
+ that don't support Bluetooth 2.1 Secure Simple Pairing,
|
|
||||||
+ in contrast to DisplayPasskey which is used for those
|
|
||||||
+ that do.
|
|
||||||
+
|
|
||||||
+ This method will only ever be called once since
|
|
||||||
+ older keyboards do not support typing notification.
|
|
||||||
+
|
|
||||||
+ Note that the PIN will always be a 6-digit number,
|
|
||||||
+ zero-padded to 6 digits. This is for harmony with
|
|
||||||
+ the later specification.
|
|
||||||
+
|
|
||||||
void RequestConfirmation(object device, uint32 passkey)
|
|
||||||
|
|
||||||
This method gets called when the service daemon
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
From 4f2f55231bad4d5da2505cb674375e9bf8ac029d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Mon, 23 Jan 2012 15:25:56 -0800
|
|
||||||
Subject: [PATCH 08/13] simple-agent: add DisplayPinCode
|
|
||||||
|
|
||||||
---
|
|
||||||
test/simple-agent | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/simple-agent b/test/simple-agent
|
|
||||||
index af84815..38d0235 100755
|
|
||||||
--- a/test/simple-agent
|
|
||||||
+++ b/test/simple-agent
|
|
||||||
@@ -52,6 +52,11 @@ class Agent(dbus.service.Object):
|
|
||||||
print "DisplayPasskey (%s, %06d)" % (device, passkey)
|
|
||||||
|
|
||||||
@dbus.service.method("org.bluez.Agent",
|
|
||||||
+ in_signature="os", out_signature="")
|
|
||||||
+ def DisplayPinCode(self, device, pincode):
|
|
||||||
+ print "DisplayPinCode (%s, %s)" % (device, pincode)
|
|
||||||
+
|
|
||||||
+ @dbus.service.method("org.bluez.Agent",
|
|
||||||
in_signature="ou", out_signature="")
|
|
||||||
def RequestConfirmation(self, device, passkey):
|
|
||||||
print "RequestConfirmation (%s, %06d)" % (device, passkey)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
From 0cd8c8427019cfd7e1c69fb6a5b4261863716d56 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:34:01 -0800
|
|
||||||
Subject: [PATCH 09/13] Add support for retrying a bonding
|
|
||||||
|
|
||||||
In order to retry a bonding we need a timer that will perform the
|
|
||||||
retry, we need to stash the status and capability of the bonding
|
|
||||||
request so it can use them again, and in the case of a retrying
|
|
||||||
bonding attempt we need to not tear down the temporary D-Bus device
|
|
||||||
object on the adapter.
|
|
||||||
---
|
|
||||||
src/adapter.c | 2 +-
|
|
||||||
src/device.c | 14 ++++++++++++++
|
|
||||||
src/device.h | 1 +
|
|
||||||
3 files changed, 16 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index ccf7991..f065a5d 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -2989,7 +2989,7 @@ void adapter_remove_connection(struct btd_adapter *adapter,
|
|
||||||
if (device_is_authenticating(device))
|
|
||||||
device_cancel_authentication(device, TRUE);
|
|
||||||
|
|
||||||
- if (device_is_temporary(device)) {
|
|
||||||
+ if (device_is_temporary(device) && !device_is_retrying(device)) {
|
|
||||||
const char *path = device_get_path(device);
|
|
||||||
|
|
||||||
DBG("Removing temporary device %s", path);
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index f32666e..9d4517f 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -85,6 +85,9 @@ struct bonding_req {
|
|
||||||
DBusMessage *msg;
|
|
||||||
guint listener_id;
|
|
||||||
struct btd_device *device;
|
|
||||||
+ uint8_t capability;
|
|
||||||
+ uint8_t status;
|
|
||||||
+ guint retry_timer;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct authentication_req {
|
|
||||||
@@ -2295,6 +2298,9 @@ static void bonding_request_free(struct bonding_req *bonding)
|
|
||||||
if (bonding->conn)
|
|
||||||
dbus_connection_unref(bonding->conn);
|
|
||||||
|
|
||||||
+ if (bonding->retry_timer)
|
|
||||||
+ g_source_remove(bonding->retry_timer);
|
|
||||||
+
|
|
||||||
device = bonding->device;
|
|
||||||
g_free(bonding);
|
|
||||||
|
|
||||||
@@ -2367,6 +2373,7 @@ proceed:
|
|
||||||
|
|
||||||
bonding->conn = dbus_connection_ref(conn);
|
|
||||||
bonding->msg = dbus_message_ref(msg);
|
|
||||||
+ bonding->capability = capability;
|
|
||||||
|
|
||||||
return bonding;
|
|
||||||
}
|
|
||||||
@@ -2469,6 +2476,13 @@ static void device_auth_req_free(struct btd_device *device)
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ struct bonding_req *bonding = device->bonding;
|
|
||||||
+
|
|
||||||
+ return bonding && bonding->retry_timer != 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 561865c..b957ad6 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -75,6 +75,7 @@ void device_set_temporary(struct btd_device *device, gboolean temporary);
|
|
||||||
void device_set_bonded(struct btd_device *device, gboolean bonded);
|
|
||||||
void device_set_auto_connect(struct btd_device *device, gboolean enable);
|
|
||||||
gboolean device_is_connected(struct btd_device *device);
|
|
||||||
+gboolean device_is_retrying(struct btd_device *device);
|
|
||||||
DBusMessage *device_create_bonding(struct btd_device *device,
|
|
||||||
DBusConnection *conn, DBusMessage *msg,
|
|
||||||
const char *agent_path, uint8_t capability);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,81 +0,0 @@
|
|||||||
From 83c36231418f9deff7ba16ceb0ead5d63e177a04 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:30:53 -0800
|
|
||||||
Subject: [PATCH 10/13] plugin: Add bonding callback support for plugins
|
|
||||||
|
|
||||||
Allow plugins to register a bonding callback on a device, this will be
|
|
||||||
called on completion or cancellation of a bonding attempt on that
|
|
||||||
device and allow retrying of the bonding attempt.
|
|
||||||
|
|
||||||
These callbacks will only be called once, in the case of retrying the
|
|
||||||
callback must be registered again separately from another callback
|
|
||||||
(e.g. the pincode callback).
|
|
||||||
---
|
|
||||||
src/device.c | 17 +++++++++++++++++
|
|
||||||
src/device.h | 8 ++++++++
|
|
||||||
2 files changed, 25 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 9d4517f..9a62eef 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -144,6 +144,7 @@ struct btd_device {
|
|
||||||
GSList *primaries; /* List of primary services */
|
|
||||||
GSList *drivers; /* List of device drivers */
|
|
||||||
GSList *watches; /* List of disconnect_data */
|
|
||||||
+ GSList *bonding_callbacks; /* List of bonding callbacks */
|
|
||||||
gboolean temporary;
|
|
||||||
struct agent *agent;
|
|
||||||
guint disconn_timer;
|
|
||||||
@@ -264,6 +265,8 @@ static void device_free(gpointer user_data)
|
|
||||||
g_slist_free_full(device->attios, g_free);
|
|
||||||
g_slist_free_full(device->attios_offline, g_free);
|
|
||||||
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+
|
|
||||||
att_cleanup(device);
|
|
||||||
|
|
||||||
if (device->tmp_records)
|
|
||||||
@@ -2476,6 +2479,20 @@ static void device_auth_req_free(struct btd_device *device)
|
|
||||||
device->authr = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void btd_device_register_bonding_cb(struct btd_device *device,
|
|
||||||
+ btd_device_bonding_cb_t cb)
|
|
||||||
+{
|
|
||||||
+ device->bonding_callbacks = g_slist_prepend(
|
|
||||||
+ device->bonding_callbacks, cb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void btd_device_unregister_bonding_cb(struct btd_device *device,
|
|
||||||
+ btd_device_bonding_cb_t cb)
|
|
||||||
+{
|
|
||||||
+ device->bonding_callbacks = g_slist_remove(
|
|
||||||
+ device->bonding_callbacks, cb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index b957ad6..ce8675b 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -103,6 +103,14 @@ guint device_add_disconnect_watch(struct btd_device *device,
|
|
||||||
void device_remove_disconnect_watch(struct btd_device *device, guint id);
|
|
||||||
void device_set_class(struct btd_device *device, uint32_t value);
|
|
||||||
|
|
||||||
+typedef gboolean (*btd_device_bonding_cb_t) (struct btd_device *device,
|
|
||||||
+ gboolean complete, uint8_t status);
|
|
||||||
+
|
|
||||||
+void btd_device_register_bonding_cb(struct btd_device *dev,
|
|
||||||
+ btd_device_bonding_cb_t cb);
|
|
||||||
+void btd_device_unregister_bonding_cb(struct btd_device *dev,
|
|
||||||
+ btd_device_bonding_cb_t cb);
|
|
||||||
+
|
|
||||||
#define BTD_UUIDS(args...) ((const char *[]) { args, NULL } )
|
|
||||||
|
|
||||||
struct btd_device_driver {
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,79 +0,0 @@
|
|||||||
From f3d2851b74fe790896f819efbc694e288d54d819 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:35:30 -0800
|
|
||||||
Subject: [PATCH 11/13] bonding: retry if callback returns TRUE
|
|
||||||
|
|
||||||
When a bonding completes, pass the status to any plugin bonding
|
|
||||||
callbacks; if any return TRUE than set a timer to retry the bonding
|
|
||||||
after an appropriate backoff period.
|
|
||||||
---
|
|
||||||
src/device.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 files changed, 46 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 9a62eef..4ad5aa0 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2493,6 +2493,44 @@ void btd_device_unregister_bonding_cb(struct btd_device *device,
|
|
||||||
device->bonding_callbacks, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean device_bonding_retry(gpointer data)
|
|
||||||
+{
|
|
||||||
+ struct btd_device *device = data;
|
|
||||||
+ struct btd_adapter *adapter = device_get_adapter(device);
|
|
||||||
+ struct bonding_req *bonding = device->bonding;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (!bonding)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ DBG("retrying bonding");
|
|
||||||
+ err = adapter_create_bonding(adapter, &device->bdaddr,
|
|
||||||
+ device->type, bonding->capability);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ device_bonding_complete(device, bonding->status);
|
|
||||||
+
|
|
||||||
+ bonding->retry_timer = 0;
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean device_bonding_get_retry(struct btd_device *device,
|
|
||||||
+ uint8_t status)
|
|
||||||
+{
|
|
||||||
+ GSList *l;
|
|
||||||
+ btd_device_bonding_cb_t cb;
|
|
||||||
+ gboolean retry = FALSE;
|
|
||||||
+
|
|
||||||
+ for (l = device->bonding_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ cb = l->data;
|
|
||||||
+ retry |= cb(device, TRUE, status);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+ device->bonding_callbacks = NULL;
|
|
||||||
+
|
|
||||||
+ return retry;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gboolean device_is_retrying(struct btd_device *device)
|
|
||||||
{
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
@@ -2507,6 +2545,14 @@ void device_bonding_complete(struct btd_device *device, uint8_t status)
|
|
||||||
|
|
||||||
DBG("bonding %p status 0x%02x", bonding, status);
|
|
||||||
|
|
||||||
+ if (device_bonding_get_retry(device, status) && status) {
|
|
||||||
+ DBG("backing off and retrying");
|
|
||||||
+ bonding->status = status;
|
|
||||||
+ bonding->retry_timer = g_timeout_add(3000,
|
|
||||||
+ device_bonding_retry, device);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (auth && (auth->type == AUTH_TYPE_NOTIFY_PASSKEY
|
|
||||||
|| auth->type == AUTH_TYPE_NOTIFY_PINCODE) && auth->agent)
|
|
||||||
agent_cancel(auth->agent);
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
From 82ef8f4b96d62e18b5a191f6aaa9d79140ca64a4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Tue, 24 Jan 2012 10:36:44 -0800
|
|
||||||
Subject: [PATCH 12/13] bonding: call plugin callback on cancellation
|
|
||||||
|
|
||||||
Call the plugin callbacks when a bonding request is cancelled.
|
|
||||||
---
|
|
||||||
src/device.c | 10 ++++++++++
|
|
||||||
1 files changed, 10 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index 4ad5aa0..ea0d1fb 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -2648,6 +2648,8 @@ void device_cancel_bonding(struct btd_device *device, uint8_t status)
|
|
||||||
struct bonding_req *bonding = device->bonding;
|
|
||||||
DBusMessage *reply;
|
|
||||||
char addr[18];
|
|
||||||
+ GSList *l;
|
|
||||||
+ btd_device_bonding_cb_t cb;
|
|
||||||
|
|
||||||
if (!bonding)
|
|
||||||
return;
|
|
||||||
@@ -2655,6 +2657,14 @@ void device_cancel_bonding(struct btd_device *device, uint8_t status)
|
|
||||||
ba2str(&device->bdaddr, addr);
|
|
||||||
DBG("Canceling bonding request for %s", addr);
|
|
||||||
|
|
||||||
+ for (l = device->bonding_callbacks; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ cb = l->data;
|
|
||||||
+ cb(device, FALSE, 0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(device->bonding_callbacks);
|
|
||||||
+ device->bonding_callbacks = NULL;
|
|
||||||
+
|
|
||||||
if (device->authr)
|
|
||||||
device_cancel_authentication(device, FALSE);
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,274 +0,0 @@
|
|||||||
From 2236069d7d5bf54ae53470c13929cba90e020710 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Thu, 5 Apr 2012 15:42:12 -0700
|
|
||||||
Subject: [PATCH 13/13] autopair: Add autopair plugin.
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile.am | 5 +
|
|
||||||
acinclude.m4 | 6 ++
|
|
||||||
plugins/autopair.c | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 218 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 plugins/autopair.c
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index bd587eb..0e9129c 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -278,6 +278,11 @@ builtin_modules += dbusoob
|
|
||||||
builtin_sources += plugins/dbusoob.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
+if AUTOPAIRPLUGIN
|
|
||||||
+builtin_modules += autopair
|
|
||||||
+builtin_sources += plugins/autopair.c
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
if MAINTAINER_MODE
|
|
||||||
plugin_LTLIBRARIES += plugins/external-dummy.la
|
|
||||||
plugins_external_dummy_la_SOURCES = plugins/external-dummy.c
|
|
||||||
diff --git a/acinclude.m4 b/acinclude.m4
|
|
||||||
index b0f790c..4c1849a 100644
|
|
||||||
--- a/acinclude.m4
|
|
||||||
+++ b/acinclude.m4
|
|
||||||
@@ -220,6 +220,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
dbusoob_enable=no
|
|
||||||
wiimote_enable=no
|
|
||||||
thermometer_enable=no
|
|
||||||
+ autopair_enable=no
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(optimization, AC_HELP_STRING([--disable-optimization], [disable code optimization]), [
|
|
||||||
optimization_enable=${enableval}
|
|
||||||
@@ -364,6 +365,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
wiimote_enable=${enableval}
|
|
||||||
])
|
|
||||||
|
|
||||||
+ AC_ARG_ENABLE(autopair, AC_HELP_STRING([--enable-autopair], [compile with autopairing plugin]), [
|
|
||||||
+ autopair_enable=${enableval}
|
|
||||||
+ ])
|
|
||||||
+
|
|
||||||
AC_ARG_ENABLE(hal, AC_HELP_STRING([--enable-hal], [Use HAL to determine adapter class]), [
|
|
||||||
hal_enable=${enableval}
|
|
||||||
])
|
|
||||||
@@ -429,4 +434,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
AM_CONDITIONAL(DBUSOOBPLUGIN, test "${dbusoob_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(THERMOMETERPLUGIN, test "${thermometer_enable}" = "yes")
|
|
||||||
+ AM_CONDITIONAL(AUTOPAIRPLUGIN, test "${autopair_enable}" = "yes")
|
|
||||||
])
|
|
||||||
diff --git a/plugins/autopair.c b/plugins/autopair.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..58047b1
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/plugins/autopair.c
|
|
||||||
@@ -0,0 +1,208 @@
|
|
||||||
+/*
|
|
||||||
+ *
|
|
||||||
+ * BlueZ - Bluetooth protocol stack for Linux
|
|
||||||
+ *
|
|
||||||
+ * Copyright (C) 2012 Google Inc.
|
|
||||||
+ *
|
|
||||||
+ *
|
|
||||||
+ * This program is free software; you can redistribute it and/or modify
|
|
||||||
+ * it under the terms of the GNU General Public License as published by
|
|
||||||
+ * the Free Software Foundation; either version 2 of the License, or
|
|
||||||
+ * (at your option) any later version.
|
|
||||||
+ *
|
|
||||||
+ * This program is distributed in the hope that it will be useful,
|
|
||||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ * GNU General Public License for more details.
|
|
||||||
+ *
|
|
||||||
+ * You should have received a copy of the GNU General Public License
|
|
||||||
+ * along with this program; if not, write to the Free Software
|
|
||||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_CONFIG_H
|
|
||||||
+#include <config.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <time.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+
|
|
||||||
+#include <glib.h>
|
|
||||||
+
|
|
||||||
+#include <bluetooth/bluetooth.h>
|
|
||||||
+
|
|
||||||
+#include "glib-compat.h"
|
|
||||||
+#include "plugin.h"
|
|
||||||
+#include "adapter.h"
|
|
||||||
+#include "device.h"
|
|
||||||
+#include "storage.h"
|
|
||||||
+#include "textfile.h"
|
|
||||||
+#include "log.h"
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Plugin to handle automatic pairing of devices with reduced user
|
|
||||||
+ * interaction, including implementing the recommendation of the HID spec
|
|
||||||
+ * for keyboard devices.
|
|
||||||
+ *
|
|
||||||
+ * The plugin works by intercepting the PIN request for devices; if the
|
|
||||||
+ * device is a keyboard a random six-digit numeric PIN is generated and
|
|
||||||
+ * returned, flagged for displaying using DisplayPinCode.
|
|
||||||
+ *
|
|
||||||
+ * Bonding callbacks are also added for the device, so should the pairing
|
|
||||||
+ * attempt fail with the PIN from this plugin, a blacklist entry is added
|
|
||||||
+ * and pairing retried. On the second pass this plugin will ignore the
|
|
||||||
+ * device due to the blacklist and the user will be prompted for a PIN
|
|
||||||
+ * instead.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static GSList *blacklist = NULL;
|
|
||||||
+
|
|
||||||
+static void autopair_blacklist_device(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ bdaddr_t *ba;
|
|
||||||
+
|
|
||||||
+ ba = g_new0(bdaddr_t, 1);
|
|
||||||
+ device_get_address(device, ba, NULL);
|
|
||||||
+ blacklist = g_slist_prepend(blacklist, ba);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static GSList *attempting = NULL;
|
|
||||||
+
|
|
||||||
+static gboolean autopair_bondingcb(struct btd_device *device,
|
|
||||||
+ gboolean complete, uint8_t status)
|
|
||||||
+{
|
|
||||||
+ GSList *match;
|
|
||||||
+
|
|
||||||
+ match = g_slist_find(attempting, device);
|
|
||||||
+ if (!match)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ attempting = g_slist_remove_link(attempting, match);
|
|
||||||
+ btd_device_unref(device);
|
|
||||||
+
|
|
||||||
+ if (complete && status != 0) {
|
|
||||||
+ /* failed: blacklist and retry with the user's agent */
|
|
||||||
+ autopair_blacklist_device(device);
|
|
||||||
+ return TRUE;
|
|
||||||
+ } else {
|
|
||||||
+ /* successful or cancelled pair */
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean autopair_attempt(struct btd_device *device)
|
|
||||||
+{
|
|
||||||
+ if (g_slist_find(attempting, device))
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ btd_device_register_bonding_cb(device, autopair_bondingcb);
|
|
||||||
+ attempting = g_slist_prepend(attempting, btd_device_ref(device));
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_cancel_all(void)
|
|
||||||
+{
|
|
||||||
+ GSList *l;
|
|
||||||
+ struct btd_device *device;
|
|
||||||
+
|
|
||||||
+ for (l = attempting; l != NULL; l = g_slist_next(l)) {
|
|
||||||
+ device = l->data;
|
|
||||||
+ btd_device_unregister_bonding_cb(device, autopair_bondingcb);
|
|
||||||
+ btd_device_unref(device);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_slist_free(attempting);
|
|
||||||
+ attempting = NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
+ struct btd_device *device,
|
|
||||||
+ char *pinbuf, gboolean *display)
|
|
||||||
+{
|
|
||||||
+ char addr[18];
|
|
||||||
+ bdaddr_t local, peer;
|
|
||||||
+ uint32_t class;
|
|
||||||
+
|
|
||||||
+ if (!device_is_bonding(device, NULL))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ adapter_get_address(adapter, &local);
|
|
||||||
+
|
|
||||||
+ device_get_address(device, &peer, NULL);
|
|
||||||
+ ba2str(&peer, addr);
|
|
||||||
+
|
|
||||||
+ read_remote_class(&local, &peer, &class);
|
|
||||||
+
|
|
||||||
+ DBG("device %s 0x%x", addr, class);
|
|
||||||
+
|
|
||||||
+ if (g_slist_find_custom(blacklist, &peer, (GCompareFunc) bacmp)) {
|
|
||||||
+ DBG("prior autopair failed");
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ switch ((class & 0x1f00) >> 8) {
|
|
||||||
+ case 0x05:
|
|
||||||
+ switch ((class & 0xc0) >> 6) {
|
|
||||||
+ case 0x01:
|
|
||||||
+ case 0x03:
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ char pinstr[7];
|
|
||||||
+ srand(time(NULL));
|
|
||||||
+ snprintf(pinstr, sizeof pinstr, "%06d",
|
|
||||||
+ rand() % 1000000);
|
|
||||||
+ *display = TRUE;
|
|
||||||
+ memcpy(pinbuf, pinstr, 6);
|
|
||||||
+ return 6;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static int autopair_probe(struct btd_adapter *adapter)
|
|
||||||
+{
|
|
||||||
+ btd_adapter_register_pin_cb(adapter, autopair_pincb);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_remove(struct btd_adapter *adapter)
|
|
||||||
+{
|
|
||||||
+ btd_adapter_unregister_pin_cb(adapter, autopair_pincb);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static struct btd_adapter_driver autopair_driver = {
|
|
||||||
+ .name = "autopair",
|
|
||||||
+ .probe = autopair_probe,
|
|
||||||
+ .remove = autopair_remove,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static int autopair_init(void)
|
|
||||||
+{
|
|
||||||
+ return btd_register_adapter_driver(&autopair_driver);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void autopair_exit(void)
|
|
||||||
+{
|
|
||||||
+ btd_unregister_adapter_driver(&autopair_driver);
|
|
||||||
+
|
|
||||||
+ autopair_cancel_all();
|
|
||||||
+
|
|
||||||
+ g_slist_free_full(blacklist, g_free);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+BLUETOOTH_PLUGIN_DEFINE(autopair, VERSION,
|
|
||||||
+ BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, autopair_init, autopair_exit)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
From c86e19ef02a7faf845b399a50f4aa0b23b003fcf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Syam Sidhardhan <s.syam@samsung.com>
|
|
||||||
Date: Mon, 16 Apr 2012 18:31:38 +0530
|
|
||||||
Subject: [PATCH 1/2] eir: Fix incorrect eir_has_data_type() parsing
|
|
||||||
|
|
||||||
Updating the "parsed" variable twice inside the for loop, leads to
|
|
||||||
incorrect parsing.
|
|
||||||
---
|
|
||||||
src/eir.c | 4 ++--
|
|
||||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/eir.c b/src/eir.c
|
|
||||||
index 419f444..4dfadea 100644
|
|
||||||
--- a/src/eir.c
|
|
||||||
+++ b/src/eir.c
|
|
||||||
@@ -337,9 +337,9 @@ void eir_create(const char *name, int8_t tx_power, uint16_t did_vendor,
|
|
||||||
gboolean eir_has_data_type(uint8_t *data, size_t len, uint8_t type)
|
|
||||||
{
|
|
||||||
uint8_t field_len;
|
|
||||||
- size_t parsed;
|
|
||||||
+ size_t parsed = 0;
|
|
||||||
|
|
||||||
- for (parsed = 0; parsed < len - 1; parsed += field_len) {
|
|
||||||
+ while (parsed < len - 1) {
|
|
||||||
field_len = data[0];
|
|
||||||
|
|
||||||
if (field_len == 0)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
From 8dbaea685b5a0e155c1433d054ead4ce332c3570 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Syam Sidhardhan <s.syam@samsung.com>
|
|
||||||
Date: Mon, 16 Apr 2012 18:31:37 +0530
|
|
||||||
Subject: [PATCH 2/2] eir: Fix incorrect eir_length() parsing
|
|
||||||
|
|
||||||
Issue:
|
|
||||||
The COD value displayed via dbus during inquiry is wrong.
|
|
||||||
This is because of the incorrect return length of the eir_length(),
|
|
||||||
which leads to appending the COD at wrong location.
|
|
||||||
|
|
||||||
Analysis:
|
|
||||||
After appending the COD at the end of the eir data, we can see
|
|
||||||
there are some '00' present in the eir field length in the eir file.
|
|
||||||
XX:XX:XX:XX:XX:XX 07095359414D5043020A040B0312111F110C110E110311
|
|
||||||
0000000000000000000000040D000142
|
|
||||||
|
|
||||||
Fix:
|
|
||||||
Corrected the length calculation in eir_length(), which is determining,
|
|
||||||
which position the COD should append
|
|
||||||
---
|
|
||||||
src/eir.c | 4 ++--
|
|
||||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/eir.c b/src/eir.c
|
|
||||||
index 4dfadea..923d7be 100644
|
|
||||||
--- a/src/eir.c
|
|
||||||
+++ b/src/eir.c
|
|
||||||
@@ -373,9 +373,9 @@ size_t eir_append_data(uint8_t *eir, size_t eir_len, uint8_t type,
|
|
||||||
size_t eir_length(uint8_t *eir, size_t maxlen)
|
|
||||||
{
|
|
||||||
uint8_t field_len;
|
|
||||||
- size_t parsed, length;
|
|
||||||
+ size_t parsed = 0, length = 0;
|
|
||||||
|
|
||||||
- for (parsed = 0, length = 0; parsed < maxlen - 1; parsed += field_len) {
|
|
||||||
+ while (parsed < maxlen - 1) {
|
|
||||||
field_len = eir[0];
|
|
||||||
|
|
||||||
if (field_len == 0)
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
From: Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
Subject: [PATCH BlueZ v2 1/3] manager: add a btd_manager_get_default_adapter_address_str() call
|
|
||||||
Date: Wed, 18 Apr 2012 11:38:09 +0200
|
|
||||||
|
|
||||||
Add a new btd_* call to get the default adapter address as a string,
|
|
||||||
meant to be used by _external_ plugins, this is to avoid to make public
|
|
||||||
these symbols:
|
|
||||||
|
|
||||||
manager_get_default_adapter
|
|
||||||
adapter_get_address
|
|
||||||
bt_malloc
|
|
||||||
ba2str
|
|
||||||
---
|
|
||||||
|
|
||||||
Alternatively a version without the _str prefix can be used which
|
|
||||||
returns a bdaddr_t, but I have to make ba2str a global symbol so I can
|
|
||||||
make the conversion to string in the plugin itself.
|
|
||||||
|
|
||||||
Let me know how do you like that.
|
|
||||||
|
|
||||||
|
|
||||||
src/manager.c | 21 +++++++++++++++++++++
|
|
||||||
src/manager.h | 1 +
|
|
||||||
2 files changed, 22 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/manager.c b/src/manager.c
|
|
||||||
index 6244516..fbd5ef8 100644
|
|
||||||
--- a/src/manager.c
|
|
||||||
+++ b/src/manager.c
|
|
||||||
@@ -270,6 +270,27 @@ struct btd_adapter *manager_get_default_adapter(void)
|
|
||||||
return manager_find_adapter_by_id(default_adapter_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
+char *btd_manager_get_default_adapter_address_str(void)
|
|
||||||
+{
|
|
||||||
+ struct btd_adapter *adapter;
|
|
||||||
+ bdaddr_t adapter_bdaddr;
|
|
||||||
+ char *str;
|
|
||||||
+
|
|
||||||
+ adapter = manager_get_default_adapter();
|
|
||||||
+ if (adapter == NULL) {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ adapter_get_address(adapter, &adapter_bdaddr);
|
|
||||||
+
|
|
||||||
+ str = bt_malloc(18);
|
|
||||||
+ if (str == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ ba2str(&adapter_bdaddr, str);
|
|
||||||
+ return str;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void manager_remove_adapter(struct btd_adapter *adapter)
|
|
||||||
{
|
|
||||||
uint16_t dev_id = adapter_get_dev_id(adapter);
|
|
||||||
diff --git a/src/manager.h b/src/manager.h
|
|
||||||
index 264cd25..7df882e 100644
|
|
||||||
--- a/src/manager.h
|
|
||||||
+++ b/src/manager.h
|
|
||||||
@@ -36,6 +36,7 @@ const char *manager_get_base_path(void);
|
|
||||||
struct btd_adapter *manager_find_adapter(const bdaddr_t *sba);
|
|
||||||
struct btd_adapter *manager_find_adapter_by_id(int id);
|
|
||||||
struct btd_adapter *manager_get_default_adapter(void);
|
|
||||||
+char *btd_manager_get_default_adapter_address_str(void);
|
|
||||||
void manager_foreach_adapter(adapter_cb func, gpointer user_data);
|
|
||||||
GSList *manager_get_adapters(void);
|
|
||||||
struct btd_adapter *btd_manager_register_adapter(int id, gboolean up);
|
|
||||||
--
|
|
||||||
1.7.10
|
|
||||||
|
|
||||||
@ -1,144 +0,0 @@
|
|||||||
From: Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
Subject: [PATCH BlueZ v2 2/3] device: add a btd_device_set_trusted() call
|
|
||||||
Date: Wed, 18 Apr 2012 11:38:10 +0200
|
|
||||||
|
|
||||||
Add a new btd_* call to set a device as trusted, meant to be used by
|
|
||||||
_external_ plugins, this avoid making public these symbols:
|
|
||||||
|
|
||||||
record_from_string
|
|
||||||
store_record
|
|
||||||
sdp_record_free
|
|
||||||
str2ba
|
|
||||||
str2ba
|
|
||||||
store_device_id
|
|
||||||
write_trust
|
|
||||||
dbus_bus_get
|
|
||||||
manager_find_adapter
|
|
||||||
adapter_get_device
|
|
||||||
dbus_connection_unref
|
|
||||||
---
|
|
||||||
|
|
||||||
If BlueZ can pull the required parameters itself from trusted devices this can
|
|
||||||
be simplified, if not then the name should be fixed to make clearer what the
|
|
||||||
function does.
|
|
||||||
|
|
||||||
src/device.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
src/device.h | 9 +++++++
|
|
||||||
2 files changed, 83 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/device.c b/src/device.c
|
|
||||||
index ea6fec2..6e434c1 100644
|
|
||||||
--- a/src/device.c
|
|
||||||
+++ b/src/device.c
|
|
||||||
@@ -49,6 +49,7 @@
|
|
||||||
#include "att.h"
|
|
||||||
#include "hcid.h"
|
|
||||||
#include "adapter.h"
|
|
||||||
+#include "manager.h"
|
|
||||||
#include "gattrib.h"
|
|
||||||
#include "attio.h"
|
|
||||||
#include "device.h"
|
|
||||||
@@ -2948,6 +2949,80 @@ GSList *btd_device_get_primaries(struct btd_device *device)
|
|
||||||
return device->primaries;
|
|
||||||
}
|
|
||||||
|
|
||||||
+int btd_device_set_trusted(const char *adapter_address,
|
|
||||||
+ const char *device_address,
|
|
||||||
+ char *name,
|
|
||||||
+ uint16_t vendor_id_source,
|
|
||||||
+ uint16_t vendor_id,
|
|
||||||
+ uint16_t product_id,
|
|
||||||
+ uint16_t version_id,
|
|
||||||
+ const char *uuid,
|
|
||||||
+ const char *sdp_record)
|
|
||||||
+{
|
|
||||||
+ struct btd_adapter *adapter;
|
|
||||||
+ struct btd_device *device;
|
|
||||||
+ DBusConnection *conn;
|
|
||||||
+ bdaddr_t src;
|
|
||||||
+ bdaddr_t dst;
|
|
||||||
+ sdp_record_t *record;
|
|
||||||
+ int ret = 0;
|
|
||||||
+
|
|
||||||
+ record = record_from_string(sdp_record);
|
|
||||||
+ if (record == NULL) {
|
|
||||||
+ ret = -ENODEV;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ ret = store_record(adapter_address, device_address, record);
|
|
||||||
+ sdp_record_free(record);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+ str2ba(adapter_address, &src);
|
|
||||||
+ str2ba(device_address, &dst);
|
|
||||||
+
|
|
||||||
+ /* Set the device id */
|
|
||||||
+ store_device_id(adapter_address, device_address, vendor_id_source, vendor_id,
|
|
||||||
+ product_id, version_id);
|
|
||||||
+ /* Don't write a profile here,
|
|
||||||
+ * it will be updated when the device connects */
|
|
||||||
+
|
|
||||||
+ write_trust(adapter_address, device_address, "[all]", TRUE);
|
|
||||||
+
|
|
||||||
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
|
|
||||||
+ if (conn == NULL) {
|
|
||||||
+ DBG("Failed to get on the bus");
|
|
||||||
+ ret = -EPERM;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ adapter = manager_find_adapter(&src);
|
|
||||||
+ if (adapter == NULL) {
|
|
||||||
+ DBG("Failed to get the adapter");
|
|
||||||
+ ret = -EPERM;
|
|
||||||
+ goto out_dbus_unref;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* This is needed: adapter_find_device() wouldn't need a Dbus
|
|
||||||
+ * connection but it would not be enough as it only searches for
|
|
||||||
+ * already existing devices, while adapter_get_device() will create a
|
|
||||||
+ * new device if necessary.
|
|
||||||
+ */
|
|
||||||
+ device = adapter_get_device(conn, adapter, device_address);
|
|
||||||
+ if (device == NULL) {
|
|
||||||
+ DBG("Failed to get the device");
|
|
||||||
+ ret = -ENODEV;
|
|
||||||
+ goto out_dbus_unref;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ device_set_temporary(device, FALSE);
|
|
||||||
+ btd_device_add_uuid(device, uuid);
|
|
||||||
+
|
|
||||||
+out_dbus_unref:
|
|
||||||
+ dbus_connection_unref(conn);
|
|
||||||
+out:
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void btd_device_add_uuid(struct btd_device *device, const char *uuid)
|
|
||||||
{
|
|
||||||
GSList *uuid_list;
|
|
||||||
diff --git a/src/device.h b/src/device.h
|
|
||||||
index 690c64d..1011e3e 100644
|
|
||||||
--- a/src/device.h
|
|
||||||
+++ b/src/device.h
|
|
||||||
@@ -57,6 +57,15 @@ void device_register_services(DBusConnection *conn, struct btd_device *device,
|
|
||||||
GSList *prim_list, int psm);
|
|
||||||
GSList *device_services_from_record(struct btd_device *device,
|
|
||||||
GSList *profiles);
|
|
||||||
+int btd_device_set_trusted(const char *adapter_address,
|
|
||||||
+ const char *device_address,
|
|
||||||
+ char *name,
|
|
||||||
+ uint16_t vendor_id_source,
|
|
||||||
+ uint16_t vendor_id,
|
|
||||||
+ uint16_t product_id,
|
|
||||||
+ uint16_t version_id,
|
|
||||||
+ const char *uuid,
|
|
||||||
+ const char *sdp_record);
|
|
||||||
void btd_device_add_uuid(struct btd_device *device, const char *uuid);
|
|
||||||
struct btd_adapter *device_get_adapter(struct btd_device *device);
|
|
||||||
void device_get_address(struct btd_device *device, bdaddr_t *bdaddr,
|
|
||||||
--
|
|
||||||
1.7.10
|
|
||||||
|
|
||||||
@ -1,760 +0,0 @@
|
|||||||
From: Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
Subject: [PATCH BlueZ v2 3/3] Add playstation-peripheral plugin: USB pairing and LEDs settings
|
|
||||||
Date: Wed, 18 Apr 2012 11:38:11 +0200
|
|
||||||
|
|
||||||
Add a plugin which handles the connection of a Playstation peripheral,
|
|
||||||
when a new hidraw device is connected the plugin:
|
|
||||||
|
|
||||||
- Filters udev events, and select the Playstation peripheral
|
|
||||||
- Sets the Master bluetooth address in the peripheral (USB pairing)
|
|
||||||
- Sets LEDs to match the joystick system number if needed
|
|
||||||
(for USB and BT)
|
|
||||||
- Adds the device to the database of the current default
|
|
||||||
adapter (BT association)
|
|
||||||
|
|
||||||
Signed-off-by: Bastien Nocera <hadess-0MeiytkfxGOsTnJN9+BGXg@public.gmane.org>
|
|
||||||
Signed-off-by: Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
For the first review round plugins/playstation-peripheral.c is the most
|
|
||||||
interesting file, in particular the handle_device_plug() and
|
|
||||||
peripheral_pair() functions.
|
|
||||||
|
|
||||||
Makefile.am | 7 +
|
|
||||||
acinclude.m4 | 10 +
|
|
||||||
plugins/playstation-peripheral-hid.c | 263 ++++++++++++++++++++++++
|
|
||||||
plugins/playstation-peripheral-hid.h | 10 +
|
|
||||||
plugins/playstation-peripheral.c | 376 ++++++++++++++++++++++++++++++++++
|
|
||||||
5 files changed, 666 insertions(+)
|
|
||||||
create mode 100644 plugins/playstation-peripheral-hid.c
|
|
||||||
create mode 100644 plugins/playstation-peripheral-hid.h
|
|
||||||
create mode 100644 plugins/playstation-peripheral.c
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 62705f6..61c7a07 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -267,6 +267,13 @@ builtin_modules += dbusoob
|
|
||||||
builtin_sources += plugins/autopair.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
+if PLAYSTATION_PERIPHERAL_PLUGIN
|
|
||||||
+plugin_LTLIBRARIES += plugins/playstation-peripheral.la
|
|
||||||
+plugins_playstation_peripheral_la_SOURCES = plugins/playstation-peripheral.c plugins/playstation-peripheral-hid.c
|
|
||||||
+plugins_playstation_peripheral_la_LDFLAGS = -module -avoid-version -no-undefined @UDEV_LIBS@
|
|
||||||
+plugins_playstation_peripheral_la_CFLAGS = -fvisibility=hidden @DBUS_CFLAGS@ @GLIB_CFLAGS@ @UDEV_CFLAGS@
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
if MAINTAINER_MODE
|
|
||||||
plugin_LTLIBRARIES += plugins/external-dummy.la
|
|
||||||
plugins_external_dummy_la_SOURCES = plugins/external-dummy.c
|
|
||||||
diff --git a/acinclude.m4 b/acinclude.m4
|
|
||||||
index dcf9a48..06efe2a 100644
|
|
||||||
--- a/acinclude.m4
|
|
||||||
+++ b/acinclude.m4
|
|
||||||
@@ -176,6 +176,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
sndfile_enable=${sndfile_found}
|
|
||||||
hal_enable=no
|
|
||||||
usb_enable=${usb_found}
|
|
||||||
+ playstation_peripheral_enable=${udev_found}
|
|
||||||
alsa_enable=${alsa_found}
|
|
||||||
gstreamer_enable=${gstreamer_found}
|
|
||||||
audio_enable=yes
|
|
||||||
@@ -265,6 +266,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
usb_enable=${enableval}
|
|
||||||
])
|
|
||||||
|
|
||||||
+ AC_ARG_ENABLE(playstation_peripheral, AC_HELP_STRING([--enable-playstation-peripheral], [enable playstation-peripheral plugin]), [
|
|
||||||
+ playstation_peripheral_enable=${enableval}
|
|
||||||
+ ])
|
|
||||||
+
|
|
||||||
AC_ARG_ENABLE(tools, AC_HELP_STRING([--enable-tools], [install Bluetooth utilities]), [
|
|
||||||
tools_enable=${enableval}
|
|
||||||
])
|
|
||||||
@@ -360,6 +365,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have USB library.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
+ if (test "${playstation_peripheral_enable}" = "yes" && test "${udev_found}" = "yes"); then
|
|
||||||
+ AC_DEFINE(HAVE_PLAYSTATION_PERIPHERAL_PLUGIN, 1, [Define to 1 if you have playstation-peripheral plugin.])
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
AM_CONDITIONAL(SNDFILE, test "${sndfile_enable}" = "yes" && test "${sndfile_found}" = "yes")
|
|
||||||
AM_CONDITIONAL(USB, test "${usb_enable}" = "yes" && test "${usb_found}" = "yes")
|
|
||||||
AM_CONDITIONAL(SBC, test "${alsa_enable}" = "yes" || test "${gstreamer_enable}" = "yes" ||
|
|
||||||
@@ -392,4 +401,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
|
|
||||||
AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(THERMOMETERPLUGIN, test "${thermometer_enable}" = "yes")
|
|
||||||
AM_CONDITIONAL(AUTOPAIRPLUGIN, test "${autopair_enable}" = "yes")
|
|
||||||
+ AM_CONDITIONAL(PLAYSTATION_PERIPHERAL_PLUGIN, test "${playstation_peripheral_enable}" = "yes" && test "${udev_found}" = "yes")
|
|
||||||
])
|
|
||||||
diff --git a/plugins/playstation-peripheral-hid.c b/plugins/playstation-peripheral-hid.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..9c5e530
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/plugins/playstation-peripheral-hid.c
|
|
||||||
@@ -0,0 +1,263 @@
|
|
||||||
+/*
|
|
||||||
+ * playstation peripheral plugin: lowlevel hid functions
|
|
||||||
+ *
|
|
||||||
+ * Copyright (C) 2011 Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
+ *
|
|
||||||
+ *
|
|
||||||
+ * This program is free software; you can redistribute it and/or modify
|
|
||||||
+ * it under the terms of the GNU General Public License as published by
|
|
||||||
+ * the Free Software Foundation; either version 2 of the License, or
|
|
||||||
+ * (at your option) any later version.
|
|
||||||
+ *
|
|
||||||
+ * This program is distributed in the hope that it will be useful,
|
|
||||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ * GNU General Public License for more details.
|
|
||||||
+ *
|
|
||||||
+ * You should have received a copy of the GNU General Public License
|
|
||||||
+ * along with this program; if not, write to the Free Software
|
|
||||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <stdint.h>
|
|
||||||
+#include <sys/ioctl.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+#include <errno.h>
|
|
||||||
+
|
|
||||||
+#include <linux/hidraw.h>
|
|
||||||
+
|
|
||||||
+#include "log.h"
|
|
||||||
+#include "playstation-peripheral-hid.h"
|
|
||||||
+
|
|
||||||
+/* Fallback definitions to compile with older headers */
|
|
||||||
+#ifndef HIDIOCGFEATURE
|
|
||||||
+#define HIDIOCGFEATURE(len) _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#ifndef HIDIOCSFEATURE
|
|
||||||
+#define HIDIOCSFEATURE(len) _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#define BDADDR_STR_SIZE 18 /* strlen("00:00:00:00:00:00") + 1 */
|
|
||||||
+
|
|
||||||
+#define LED_1 (0x01 << 1)
|
|
||||||
+#define LED_2 (0x01 << 2)
|
|
||||||
+#define LED_3 (0x01 << 3)
|
|
||||||
+#define LED_4 (0x01 << 4)
|
|
||||||
+
|
|
||||||
+#define LED_STATUS_OFF 0
|
|
||||||
+#define LED_STATUS_ON 1
|
|
||||||
+
|
|
||||||
+/* Usb cable pairing section */
|
|
||||||
+static unsigned char *get_feature_report(int fd, uint8_t report_number,
|
|
||||||
+ unsigned int len)
|
|
||||||
+{
|
|
||||||
+ unsigned char *buf;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ buf = calloc(len, sizeof(*buf));
|
|
||||||
+ if (buf == NULL) {
|
|
||||||
+ error("%s:%s() calloc failed", __FILE__, __func__);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ buf[0] = report_number;
|
|
||||||
+
|
|
||||||
+ ret = ioctl(fd, HIDIOCGFEATURE(len), buf);
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ error("%s:%s() HIDIOCGFEATURE ret = %d",
|
|
||||||
+ __FILE__, __func__, ret);
|
|
||||||
+ free(buf);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return buf;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int set_feature_report(int fd, uint8_t *report, int len)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ ret = ioctl(fd, HIDIOCSFEATURE(len), report);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ error("%s:%s() HIDIOCSFEATURE failed, ret = %d",
|
|
||||||
+ __FILE__, __func__, ret);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *sixaxis_get_device_bdaddr(int fd)
|
|
||||||
+{
|
|
||||||
+ unsigned char *buf;
|
|
||||||
+ char *address;
|
|
||||||
+
|
|
||||||
+ buf = get_feature_report(fd, 0xf2, 18);
|
|
||||||
+ if (buf == NULL) {
|
|
||||||
+ error("%s:%s() cannot get feature report", __FILE__, __func__);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ address = calloc(BDADDR_STR_SIZE, sizeof(*address));
|
|
||||||
+ if (address == NULL) {
|
|
||||||
+ error("%s:%s() calloc failed", __FILE__, __func__);
|
|
||||||
+ free(buf);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ snprintf(address, BDADDR_STR_SIZE,
|
|
||||||
+ "%02X:%02X:%02X:%02X:%02X:%02X",
|
|
||||||
+ buf[4], buf[5], buf[6], buf[7], buf[8], buf[9]);
|
|
||||||
+
|
|
||||||
+ free(buf);
|
|
||||||
+ return address;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *sixaxis_get_master_bdaddr(int fd)
|
|
||||||
+{
|
|
||||||
+ unsigned char *buf;
|
|
||||||
+ char *address;
|
|
||||||
+
|
|
||||||
+ buf = get_feature_report(fd, 0xf5, 8);
|
|
||||||
+ if (buf == NULL) {
|
|
||||||
+ error("%s:%s() cannot get feature report", __FILE__, __func__);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ address = calloc(BDADDR_STR_SIZE, sizeof(*address));
|
|
||||||
+ if (address == NULL) {
|
|
||||||
+ error("%s:%s() calloc failed", __FILE__, __func__);
|
|
||||||
+ free(buf);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ snprintf(address, BDADDR_STR_SIZE,
|
|
||||||
+ "%02X:%02X:%02X:%02X:%02X:%02X",
|
|
||||||
+ buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
|
|
||||||
+
|
|
||||||
+ free(buf);
|
|
||||||
+ return address;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int sixaxis_set_master_bdaddr(int fd, char *adapter_bdaddr)
|
|
||||||
+{
|
|
||||||
+ uint8_t *report;
|
|
||||||
+ uint8_t addr[6];
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ ret = sscanf(adapter_bdaddr,
|
|
||||||
+ "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
|
|
||||||
+ &addr[0], &addr[1], &addr[2],
|
|
||||||
+ &addr[3], &addr[4], &addr[5]);
|
|
||||||
+ if (ret != 6) {
|
|
||||||
+ error("%s:%s() Parsing the bt address failed",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ report = malloc(8);
|
|
||||||
+ if (report == NULL) {
|
|
||||||
+ error("%s:%s() malloc failed", __FILE__, __func__);
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ report[0] = 0xf5;
|
|
||||||
+ report[1] = 0x01;
|
|
||||||
+
|
|
||||||
+ report[2] = addr[0];
|
|
||||||
+ report[3] = addr[1];
|
|
||||||
+ report[4] = addr[2];
|
|
||||||
+ report[5] = addr[3];
|
|
||||||
+ report[6] = addr[4];
|
|
||||||
+ report[7] = addr[5];
|
|
||||||
+
|
|
||||||
+ ret = set_feature_report(fd, report, 8);
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ error("%s:%s() cannot set feature report",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DBG("New Master Bluetooth address: %s", adapter_bdaddr);
|
|
||||||
+
|
|
||||||
+out:
|
|
||||||
+ free(report);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* Led setting section */
|
|
||||||
+static int set_leds(int fd, unsigned char leds_status[4])
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * the total time the led is active (0xff means forever)
|
|
||||||
+ * | duty_length: how long a cycle is in deciseconds:
|
|
||||||
+ * | | (0 means "blink very fast")
|
|
||||||
+ * | | ??? (Maybe a phase shift or duty_length multiplier?)
|
|
||||||
+ * | | | % of duty_length led is off (0xff means 100%)
|
|
||||||
+ * | | | | % of duty_length led is on (0xff is 100%)
|
|
||||||
+ * | | | | |
|
|
||||||
+ * 0xff, 0x27, 0x10, 0x00, 0x32,
|
|
||||||
+ */
|
|
||||||
+ unsigned char leds_report[] = {
|
|
||||||
+ 0x01,
|
|
||||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, /* rumble values TBD */
|
|
||||||
+ 0x00, 0x00, 0x00, 0x00, 0x1e, /* LED_1=0x02, LED_2=0x04 ... */
|
|
||||||
+ 0xff, 0x27, 0x10, 0x00, 0x32, /* LED_4 */
|
|
||||||
+ 0xff, 0x27, 0x10, 0x00, 0x32, /* LED_3 */
|
|
||||||
+ 0xff, 0x27, 0x10, 0x00, 0x32, /* LED_2 */
|
|
||||||
+ 0xff, 0x27, 0x10, 0x00, 0x32, /* LED_1 */
|
|
||||||
+ 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ int leds = 0;
|
|
||||||
+ if (leds_status[0])
|
|
||||||
+ leds |= LED_1;
|
|
||||||
+ if (leds_status[1])
|
|
||||||
+ leds |= LED_2;
|
|
||||||
+ if (leds_status[2])
|
|
||||||
+ leds |= LED_3;
|
|
||||||
+ if (leds_status[3])
|
|
||||||
+ leds |= LED_4;
|
|
||||||
+
|
|
||||||
+ leds_report[10] = leds;
|
|
||||||
+
|
|
||||||
+ ret = write(fd, leds_report, sizeof(leds_report));
|
|
||||||
+ if (ret < (ssize_t) sizeof(leds_report))
|
|
||||||
+ error("%s:%s() Unable to write to hidraw device",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int set_controller_number(int fd, unsigned int n)
|
|
||||||
+{
|
|
||||||
+ unsigned char leds_status[4] = {0, 0, 0, 0};
|
|
||||||
+
|
|
||||||
+ switch (n) {
|
|
||||||
+ case 0:
|
|
||||||
+ break;
|
|
||||||
+ case 1:
|
|
||||||
+ case 2:
|
|
||||||
+ case 3:
|
|
||||||
+ case 4:
|
|
||||||
+ leds_status[n - 1] = LED_STATUS_ON;
|
|
||||||
+ break;
|
|
||||||
+ case 5:
|
|
||||||
+ case 6:
|
|
||||||
+ case 7:
|
|
||||||
+ leds_status[4 - 1] = LED_STATUS_ON;
|
|
||||||
+ leds_status[n - 4 - 1] = LED_STATUS_ON;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ error("%s:%s() Only 7 controllers supported for now",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return set_leds(fd, leds_status);
|
|
||||||
+}
|
|
||||||
diff --git a/plugins/playstation-peripheral-hid.h b/plugins/playstation-peripheral-hid.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..ade8fa0
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/plugins/playstation-peripheral-hid.h
|
|
||||||
@@ -0,0 +1,10 @@
|
|
||||||
+#ifndef __PLAYSTATION_PERIPHERAL_HID_H
|
|
||||||
+#define __PLAYSTATION_PERIPHERAL_HID_H
|
|
||||||
+
|
|
||||||
+char *sixaxis_get_device_bdaddr(int fd);
|
|
||||||
+char *sixaxis_get_master_bdaddr(int fd);
|
|
||||||
+int sixaxis_set_master_bdaddr(int fd, char *adapter_bdaddr);
|
|
||||||
+
|
|
||||||
+int set_controller_number(int fd, unsigned int n);
|
|
||||||
+
|
|
||||||
+#endif /* __PLAYSTATION_PERIPHERAL_HID_H */
|
|
||||||
diff --git a/plugins/playstation-peripheral.c b/plugins/playstation-peripheral.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..90d69ee
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/plugins/playstation-peripheral.c
|
|
||||||
@@ -0,0 +1,376 @@
|
|
||||||
+/*
|
|
||||||
+ * playstation peripheral plugin: support for Playstation peripherals
|
|
||||||
+ *
|
|
||||||
+ * Copyright (C) 2009 Bastien Nocera <hadess-0MeiytkfxGOsTnJN9+BGXg@public.gmane.org>
|
|
||||||
+ * Copyright (C) 2011 Antonio Ospite <ospite-aNJ+ML1ZbiP93QAQaVx+gl6hYfS7NtTn@public.gmane.org>
|
|
||||||
+ *
|
|
||||||
+ *
|
|
||||||
+ * This program is free software; you can redistribute it and/or modify
|
|
||||||
+ * it under the terms of the GNU General Public License as published by
|
|
||||||
+ * the Free Software Foundation; either version 2 of the License, or
|
|
||||||
+ * (at your option) any later version.
|
|
||||||
+ *
|
|
||||||
+ * This program is distributed in the hope that it will be useful,
|
|
||||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ * GNU General Public License for more details.
|
|
||||||
+ *
|
|
||||||
+ * You should have received a copy of the GNU General Public License
|
|
||||||
+ * along with this program; if not, write to the Free Software
|
|
||||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * In the following this terminology is used:
|
|
||||||
+ *
|
|
||||||
+ * - peripheral: a Playstation peripheral (Sixaxis, DS3, headset, etc.)
|
|
||||||
+ * - controller: an input peripheral
|
|
||||||
+ * - adapter: the bluetooth dongle on the host system.
|
|
||||||
+ * - adapter_bdaddr: the bdaddr of the bluetooth adapter.
|
|
||||||
+ * - device_bdaddr: the bdaddr of the Playstation peripheral.
|
|
||||||
+ * - master_bdaddr: the bdaddr of the adapter to be configured into the
|
|
||||||
+ * Playstation peripheral
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_CONFIG_H
|
|
||||||
+#include <config.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <stdint.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+#include <errno.h>
|
|
||||||
+#include <glib.h>
|
|
||||||
+
|
|
||||||
+#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
|
|
||||||
+#include <libudev.h>
|
|
||||||
+
|
|
||||||
+#include "plugin.h"
|
|
||||||
+#include "log.h"
|
|
||||||
+#include "adapter.h"
|
|
||||||
+#include "device.h"
|
|
||||||
+#include "manager.h"
|
|
||||||
+#include "storage.h"
|
|
||||||
+#include "sdp_lib.h"
|
|
||||||
+
|
|
||||||
+#include "playstation-peripheral-hid.h"
|
|
||||||
+
|
|
||||||
+struct playstation_peripheral {
|
|
||||||
+ uint16_t vendor_id;
|
|
||||||
+ uint16_t product_id;
|
|
||||||
+ char *name;
|
|
||||||
+ char *sdp_record;
|
|
||||||
+ char *uuid;
|
|
||||||
+
|
|
||||||
+ /* device specific callbacks to get master/device bdaddr and set
|
|
||||||
+ * master bdaddr
|
|
||||||
+ */
|
|
||||||
+ char * (*get_device_bdaddr)(int);
|
|
||||||
+ char * (*get_master_bdaddr)(int);
|
|
||||||
+ int (*set_master_bdaddr) (int, char *);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static struct playstation_peripheral peripherals[] = {
|
|
||||||
+ {
|
|
||||||
+ .vendor_id = 0x054c,
|
|
||||||
+ .product_id = 0x0268,
|
|
||||||
+ .name = "PLAYSTATION(R)3 Controller",
|
|
||||||
+ .sdp_record = "3601920900000A000100000900013503191124090004350D35061901000900113503190011090006350909656E09006A0901000900093508350619112409010009000D350F350D350619010009001335031900110901002513576972656C65737320436F6E74726F6C6C65720901012513576972656C65737320436F6E74726F6C6C6572090102251B536F6E7920436F6D707574657220456E7465727461696E6D656E740902000901000902010901000902020800090203082109020428010902052801090206359A35980822259405010904A101A102850175089501150026FF00810375019513150025013500450105091901291381027501950D0600FF8103150026FF0005010901A10075089504350046FF0009300931093209358102C0050175089527090181027508953009019102750895300901B102C0A1028502750895300901B102C0A10285EE750895300901B102C0A10285EF750895300901B102C0C0090207350835060904090901000902082800090209280109020A280109020B09010009020C093E8009020D280009020E2800",
|
|
||||||
+ .uuid = "00001124-0000-1000-8000-00805f9b34fb",
|
|
||||||
+ .get_device_bdaddr = sixaxis_get_device_bdaddr,
|
|
||||||
+ .get_master_bdaddr = sixaxis_get_master_bdaddr,
|
|
||||||
+ .set_master_bdaddr = sixaxis_set_master_bdaddr,
|
|
||||||
+ },
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static struct udev *ctx;
|
|
||||||
+static struct udev_monitor *monitor;
|
|
||||||
+static guint watch_id;
|
|
||||||
+
|
|
||||||
+static int create_peripheral_association(const char *adapter_address,
|
|
||||||
+ const char *device_address,
|
|
||||||
+ struct playstation_peripheral *peripheral)
|
|
||||||
+{
|
|
||||||
+ int ret = 0;
|
|
||||||
+
|
|
||||||
+ ret = btd_device_set_trusted(adapter_address, device_address,
|
|
||||||
+ peripheral->name,
|
|
||||||
+ 0x0002, /* VersionIDSource = USB Implementer's Forum */
|
|
||||||
+ peripheral->vendor_id,
|
|
||||||
+ peripheral->product_id,
|
|
||||||
+ 0, /* version is hardcoded to 0 for now */
|
|
||||||
+ peripheral->uuid,
|
|
||||||
+ peripheral->sdp_record);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int peripheral_pair(int fd, char *adapter_bdaddr,
|
|
||||||
+ struct playstation_peripheral *peripheral)
|
|
||||||
+{
|
|
||||||
+ char *device_bdaddr;
|
|
||||||
+ char *master_bdaddr;
|
|
||||||
+ int ret = 0;
|
|
||||||
+
|
|
||||||
+ master_bdaddr = peripheral->get_master_bdaddr(fd);
|
|
||||||
+ if (master_bdaddr == NULL) {
|
|
||||||
+ DBG("Failed to get the Old master Bluetooth address from the device");
|
|
||||||
+ return -EPERM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Only set the master bdaddr when needed, this is how the PS3 does
|
|
||||||
+ * it, perhaps to avoid unnecessary writes to some eeprom.
|
|
||||||
+ */
|
|
||||||
+ if (g_strcmp0(master_bdaddr, adapter_bdaddr) != 0) {
|
|
||||||
+ DBG("Old master Bluetooth address was: %s", master_bdaddr);
|
|
||||||
+ ret = peripheral->set_master_bdaddr(fd, adapter_bdaddr);
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ DBG("Failed to set the master Bluetooth address");
|
|
||||||
+ free(master_bdaddr);
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ device_bdaddr = peripheral->get_device_bdaddr(fd);
|
|
||||||
+ if (device_bdaddr == NULL) {
|
|
||||||
+ DBG("Failed to get the Bluetooth address from the device");
|
|
||||||
+ free(master_bdaddr);
|
|
||||||
+ return -EPERM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DBG("Device bdaddr %s", device_bdaddr);
|
|
||||||
+
|
|
||||||
+ ret = create_peripheral_association(adapter_bdaddr, device_bdaddr, peripheral);
|
|
||||||
+
|
|
||||||
+ free(device_bdaddr);
|
|
||||||
+ free(master_bdaddr);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline struct playstation_peripheral *find_playstation_peripheral(const char *hid_id)
|
|
||||||
+{
|
|
||||||
+ unsigned int array_size = sizeof(peripherals)/sizeof(peripherals[0]);
|
|
||||||
+ unsigned int i;
|
|
||||||
+ int ret;
|
|
||||||
+ uint16_t protocol;
|
|
||||||
+ uint16_t vendor_id;
|
|
||||||
+ uint16_t product_id;
|
|
||||||
+
|
|
||||||
+ ret = sscanf(hid_id, "%hx:%hx:%hx", &protocol, &vendor_id, &product_id);
|
|
||||||
+ if (ret != 3) {
|
|
||||||
+ error("%s:%s() Parsing HID_ID failed",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < array_size; i++) {
|
|
||||||
+ if (peripherals[i].vendor_id == vendor_id &&
|
|
||||||
+ peripherals[i].product_id == product_id)
|
|
||||||
+ return &peripherals[i];
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline int is_usb_peripheral(const char *hid_id)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+ uint16_t protocol;
|
|
||||||
+ uint16_t vendor_id;
|
|
||||||
+ uint16_t product_id;
|
|
||||||
+
|
|
||||||
+ ret = sscanf(hid_id, "%hx:%hx:%hx", &protocol, &vendor_id, &product_id);
|
|
||||||
+ if (ret != 3) {
|
|
||||||
+ error("%s:%s() Parsing HID_ID failed",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DBG("%hx:%hx:%hx", protocol, vendor_id, product_id);
|
|
||||||
+ return (protocol == 3);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void handle_device_plug(struct udev_device *udevice)
|
|
||||||
+{
|
|
||||||
+ struct udev_device *hid_parent;
|
|
||||||
+ struct udev_enumerate *enumerate;
|
|
||||||
+ struct udev_list_entry *devices, *dev_list_entry;
|
|
||||||
+ const char *hid_id;
|
|
||||||
+ const char *hid_phys;
|
|
||||||
+ const char *hidraw_node;
|
|
||||||
+ unsigned char is_usb = FALSE;
|
|
||||||
+ int js_num = 0;
|
|
||||||
+ int fd;
|
|
||||||
+ struct playstation_peripheral *peripheral;
|
|
||||||
+
|
|
||||||
+ hid_parent = udev_device_get_parent_with_subsystem_devtype(udevice,
|
|
||||||
+ "hid", NULL);
|
|
||||||
+ if (!hid_parent) {
|
|
||||||
+ error("%s:%s() cannot get parent hid device",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ hid_id = udev_device_get_property_value(hid_parent, "HID_ID");
|
|
||||||
+ DBG("HID_ID: %s", hid_id);
|
|
||||||
+
|
|
||||||
+ peripheral = find_playstation_peripheral(hid_id);
|
|
||||||
+ if (!peripheral) {
|
|
||||||
+ error("No supported peripheral found");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DBG("Found a Playstation peripheral: %s", peripheral->name);
|
|
||||||
+
|
|
||||||
+ hidraw_node = udev_device_get_devnode(udevice);
|
|
||||||
+
|
|
||||||
+ /* looking for joysticks */
|
|
||||||
+ hid_phys = udev_device_get_property_value(hid_parent, "HID_PHYS");
|
|
||||||
+
|
|
||||||
+ enumerate = udev_enumerate_new(udev_device_get_udev(udevice));
|
|
||||||
+ udev_enumerate_add_match_sysname(enumerate, "js*");
|
|
||||||
+ udev_enumerate_scan_devices(enumerate);
|
|
||||||
+
|
|
||||||
+ devices = udev_enumerate_get_list_entry(enumerate);
|
|
||||||
+ udev_list_entry_foreach(dev_list_entry, devices) {
|
|
||||||
+ const char *devname;
|
|
||||||
+ struct udev_device *js_dev;
|
|
||||||
+ struct udev_device *input_parent;
|
|
||||||
+ const char *input_phys;
|
|
||||||
+
|
|
||||||
+ devname = udev_list_entry_get_name(dev_list_entry);
|
|
||||||
+ js_dev = udev_device_new_from_syspath(udev_device_get_udev(udevice),
|
|
||||||
+ devname);
|
|
||||||
+
|
|
||||||
+ input_parent = udev_device_get_parent_with_subsystem_devtype(js_dev,
|
|
||||||
+ "input", NULL);
|
|
||||||
+ if (!input_parent) {
|
|
||||||
+ error("%s:%s() cannot get parent input device.",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* check this is the joystick relative to
|
|
||||||
+ * the hidraw device above */
|
|
||||||
+ input_phys = udev_device_get_sysattr_value(input_parent,
|
|
||||||
+ "phys");
|
|
||||||
+ if (g_strcmp0(input_phys, hid_phys) == 0) {
|
|
||||||
+ js_num = atoi(udev_device_get_sysnum(js_dev)) + 1;
|
|
||||||
+ DBG("joypad device_num: %d", js_num);
|
|
||||||
+ DBG("hidraw_node: %s", hidraw_node);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ udev_device_unref(js_dev);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ udev_enumerate_unref(enumerate);
|
|
||||||
+
|
|
||||||
+ fd = open(hidraw_node, O_RDWR);
|
|
||||||
+ if (fd < 0) {
|
|
||||||
+ error("%s:%s() hidraw open", __FILE__, __func__);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ is_usb = is_usb_peripheral(hid_id);
|
|
||||||
+ if (is_usb) {
|
|
||||||
+ char *adapter_bdaddr;
|
|
||||||
+
|
|
||||||
+ adapter_bdaddr = btd_manager_get_default_adapter_address_str();
|
|
||||||
+ if (adapter_bdaddr == NULL) {
|
|
||||||
+ error("No adapters, exiting");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DBG("Adapter bdaddr %s", adapter_bdaddr);
|
|
||||||
+
|
|
||||||
+ peripheral_pair(fd, adapter_bdaddr, peripheral);
|
|
||||||
+ free(adapter_bdaddr);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (js_num > 0)
|
|
||||||
+ set_controller_number(fd, js_num);
|
|
||||||
+
|
|
||||||
+ close(fd);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean device_event_idle(struct udev_device *udevice)
|
|
||||||
+{
|
|
||||||
+ handle_device_plug(udevice);
|
|
||||||
+ udev_device_unref(udevice);
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean monitor_event(GIOChannel *source, GIOCondition condition,
|
|
||||||
+ gpointer data)
|
|
||||||
+{
|
|
||||||
+ struct udev_device *udevice;
|
|
||||||
+
|
|
||||||
+ udevice = udev_monitor_receive_device(monitor);
|
|
||||||
+ if (udevice == NULL)
|
|
||||||
+ goto out;
|
|
||||||
+ if (g_strcmp0(udev_device_get_action(udevice), "add") != 0) {
|
|
||||||
+ udev_device_unref(udevice);
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Give UDEV some time to load kernel modules */
|
|
||||||
+ g_timeout_add_seconds(1, (GSourceFunc) device_event_idle, udevice);
|
|
||||||
+
|
|
||||||
+out:
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int playstation_peripheral_init(void)
|
|
||||||
+{
|
|
||||||
+ GIOChannel *channel;
|
|
||||||
+
|
|
||||||
+ DBG("Setup Playstation peripheral plugin");
|
|
||||||
+
|
|
||||||
+ ctx = udev_new();
|
|
||||||
+ monitor = udev_monitor_new_from_netlink(ctx, "udev");
|
|
||||||
+ if (monitor == NULL) {
|
|
||||||
+ error("%s:%s() Could not get udev monitor",
|
|
||||||
+ __FILE__, __func__);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Listen for newly connected hidraw interfaces */
|
|
||||||
+ udev_monitor_filter_add_match_subsystem_devtype(monitor,
|
|
||||||
+ "hidraw", NULL);
|
|
||||||
+ udev_monitor_enable_receiving(monitor);
|
|
||||||
+
|
|
||||||
+ channel = g_io_channel_unix_new(udev_monitor_get_fd(monitor));
|
|
||||||
+ watch_id = g_io_add_watch(channel, G_IO_IN, monitor_event, NULL);
|
|
||||||
+ g_io_channel_unref(channel);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void playstation_peripheral_exit(void)
|
|
||||||
+{
|
|
||||||
+ DBG("Cleanup Playstation peripheral plugin");
|
|
||||||
+
|
|
||||||
+ if (watch_id != 0) {
|
|
||||||
+ g_source_remove(watch_id);
|
|
||||||
+ watch_id = 0;
|
|
||||||
+ }
|
|
||||||
+ if (monitor != NULL) {
|
|
||||||
+ udev_monitor_unref(monitor);
|
|
||||||
+ monitor = NULL;
|
|
||||||
+ }
|
|
||||||
+ if (ctx != NULL) {
|
|
||||||
+ udev_unref(ctx);
|
|
||||||
+ ctx = NULL;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+BLUETOOTH_PLUGIN_DEFINE(playstation_peripheral, VERSION,
|
|
||||||
+ BLUETOOTH_PLUGIN_PRIORITY_DEFAULT,
|
|
||||||
+ playstation_peripheral_init,
|
|
||||||
+ playstation_peripheral_exit)
|
|
||||||
--
|
|
||||||
1.7.10
|
|
||||||
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
bluez installs stuff into /etc/alsa, which is wrong since the
|
|
||||||
correct location (also stated in alsa-lib configure.in) is
|
|
||||||
/usr/share/alsa instead
|
|
||||||
Upstream report:
|
|
||||||
http://permalink.gmane.org/gmane.linux.bluez.kernel/4739
|
|
||||||
--- Makefile.am~ 2010-02-12 20:26:48.000000000 +0100
|
|
||||||
+++ Makefile.am 2010-03-05 10:17:15.000000000 +0100
|
|
||||||
@@ -241,7 +241,7 @@
|
|
||||||
audio_libasound_module_ctl_bluetooth_la_CFLAGS = @ALSA_CFLAGS@
|
|
||||||
|
|
||||||
if CONFIGFILES
|
|
||||||
-alsaconfdir = $(sysconfdir)/alsa
|
|
||||||
+alsaconfdir = $(datadir)/alsa
|
|
||||||
|
|
||||||
alsaconf_DATA = audio/bluetooth.conf
|
|
||||||
endif
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,62 +0,0 @@
|
|||||||
From 36358d4a7b3471f5a124a95fec9ed0e4871299e0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Scott James Remnant <scott@netsplit.com>
|
|
||||||
Date: Wed, 18 Apr 2012 15:53:55 -0700
|
|
||||||
Subject: [PATCH 14/14] autopair: use 0000 as PIN for dumb devices
|
|
||||||
|
|
||||||
Android tries 0000 for a set of audio devices, so follow suit and
|
|
||||||
do the same even though most audio devices support SSP these days.
|
|
||||||
|
|
||||||
BUG=chromium-os:25211
|
|
||||||
TEST=verified with audio devices after 'hciconfig hci0 sspmode 0'
|
|
||||||
---
|
|
||||||
plugins/autopair.c | 26 +++++++++++++++++++++++---
|
|
||||||
1 files changed, 23 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/autopair.c b/plugins/autopair.c
|
|
||||||
index 05de3ff..5b773c5 100644
|
|
||||||
--- a/plugins/autopair.c
|
|
||||||
+++ b/plugins/autopair.c
|
|
||||||
@@ -150,10 +150,24 @@ static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ((class & 0x1f00) >> 8) {
|
|
||||||
- case 0x05:
|
|
||||||
+ case 0x04: // Audio/Video
|
|
||||||
+ switch ((class & 0xfc) >> 2) {
|
|
||||||
+ case 0x01: // Wearable Headset Device
|
|
||||||
+ case 0x02: // Hands-free Device
|
|
||||||
+ case 0x06: // Headphones
|
|
||||||
+ case 0x07: // Portable Audio
|
|
||||||
+ case 0x0a: // HiFi Audio Device
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ memcpy(pinbuf, "0000", 4);
|
|
||||||
+ return 4;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ case 0x05: // Peripheral
|
|
||||||
switch ((class & 0xc0) >> 6) {
|
|
||||||
- case 0x01:
|
|
||||||
- case 0x03:
|
|
||||||
+ case 0x01: // Keyboard
|
|
||||||
+ case 0x03: // Combo keyboard/pointing device
|
|
||||||
if (autopair_attempt(device)) {
|
|
||||||
char pinstr[7];
|
|
||||||
srand(time(NULL));
|
|
||||||
@@ -164,6 +178,12 @@ static ssize_t autopair_pincb(struct btd_adapter *adapter,
|
|
||||||
return 6;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case 0x02: // Pointing device
|
|
||||||
+ if (autopair_attempt(device)) {
|
|
||||||
+ memcpy(pinbuf, "0000", 4);
|
|
||||||
+ return 4;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.7.7.3
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
diff --git a/src/bluetooth.conf b/src/bluetooth.conf
|
|
||||||
index 664dbd9..3263112 100644
|
|
||||||
--- a/src/bluetooth.conf
|
|
||||||
+++ b/src/bluetooth.conf
|
|
||||||
@@ -7,7 +7,11 @@
|
|
||||||
|
|
||||||
<!-- ../system.conf have denied everything, so we just punch some holes -->
|
|
||||||
|
|
||||||
<policy user="root">
|
|
||||||
+ <allow send_destination="org.bluez"/>
|
|
||||||
+ </policy>
|
|
||||||
+
|
|
||||||
+ <policy user="bluetooth">
|
|
||||||
<allow own="org.bluez"/>
|
|
||||||
<allow send_destination="org.bluez"/>
|
|
||||||
<allow send_interface="org.bluez.Agent"/>
|
|
||||||
@@ -18,13 +22,7 @@
|
|
||||||
<allow send_interface="org.bluez.ThermometerWatcher"/>
|
|
||||||
</policy>
|
|
||||||
|
|
||||||
- <policy at_console="true">
|
|
||||||
- <allow send_destination="org.bluez"/>
|
|
||||||
- </policy>
|
|
||||||
-
|
|
||||||
- <!-- allow users of lp group (printing subsystem) to
|
|
||||||
- communicate with bluetoothd -->
|
|
||||||
- <policy group="lp">
|
|
||||||
+ <policy user="chronos">
|
|
||||||
<allow send_destination="org.bluez"/>
|
|
||||||
</policy>
|
|
||||||
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
diff --git a/src/main.conf b/src/main.conf
|
|
||||||
index 321f622..f6784fb 100644
|
|
||||||
--- a/src/main.conf
|
|
||||||
+++ b/src/main.conf
|
|
||||||
@@ -38,7 +38,7 @@ AutoConnectTimeout = 60
|
|
||||||
|
|
||||||
# What value should be assumed for the adapter Powered property when
|
|
||||||
# SetProperty(Powered, ...) hasn't been called yet. Defaults to true
|
|
||||||
-InitiallyPowered = true
|
|
||||||
+InitiallyPowered = false
|
|
||||||
|
|
||||||
# Remember the previously stored Powered state when initializing adapters
|
|
||||||
RememberPowered = true
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
diff -Nurp bluez-4.39.orig/src/bluetooth.conf bluez-4.39/src/bluetooth.conf
|
|
||||||
--- bluez-4.39.orig/src/bluetooth.conf 2008-12-20 20:18:10.000000000 +0100
|
|
||||||
+++ bluez-4.39/src/bluetooth.conf 2009-09-05 13:30:34.411581498 +0200
|
|
||||||
@@ -17,6 +17,10 @@
|
|
||||||
<allow send_destination="org.bluez"/>
|
|
||||||
</policy>
|
|
||||||
|
|
||||||
+ <policy group="plugdev">
|
|
||||||
+ <allow send_destination="org.bluez"/>
|
|
||||||
+ </policy>
|
|
||||||
+
|
|
||||||
<policy context="default">
|
|
||||||
<deny send_destination="org.bluez"/>
|
|
||||||
</policy>
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
# Match the PS3 Controller RAW HID device when plugged in via USB,
|
|
||||||
# place in the bluetooth group so bluetoothd can set pairing information.
|
|
||||||
SUBSYSTEM=="hidraw", SUBSYSTEMS=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", GROUP="bluetooth", MODE="0660"
|
|
||||||
|
|
||||||
# Match the PS3 Controller RAW HID device when connected via Bluetooth,
|
|
||||||
# place in the bluetooth group so bluetoothd can update pairing information
|
|
||||||
# and stop the lights from flashing.
|
|
||||||
SUBSYSTEM=="hidraw", SUBSYSTEMS=="hid", KERNELS=="*:054C:0268.*", GROUP="bluetooth", MODE="0660"
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
diff --git a/lib/sdp.h b/lib/sdp.h
|
|
||||||
index 2fe74d5..e559a5c 100644
|
|
||||||
--- a/lib/sdp.h
|
|
||||||
+++ b/lib/sdp.h
|
|
||||||
@@ -34,7 +34,7 @@ extern "C" {
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <bluetooth/bluetooth.h>
|
|
||||||
|
|
||||||
-#define SDP_UNIX_PATH "/var/run/sdp"
|
|
||||||
+#define SDP_UNIX_PATH "/var/run/bluetooth/sdp"
|
|
||||||
#define SDP_RESPONSE_TIMEOUT 20
|
|
||||||
#define SDP_REQ_BUFFER_SIZE 2048
|
|
||||||
#define SDP_RSP_BUFFER_SIZE 65535
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user