bluez-imx (5.50+imx-mendel3) mendel-day; urgency=medium

  * Cut for day release.

 -- Coral <coral-support@google.com>  Tue, 08 Oct 2019 15:09:54 -0500

bluez-imx (5.50+imx-mendel2) mendel-chef; urgency=medium

  * Cut for chef release and normalization of version.

 -- Coral <coral-support@google.com>  Tue, 19 Mar 2019 17:08:25 -0700

bluez-imx (5.50+imx-mendel1) mendel-beaker; urgency=medium

  * Cut for beaker release and normalization of version.
  
 -- Coral <coral-support@google.com>  Wed, 16 Jan 2019 12:00:00 -0800

bluez-imx (5.50+imx-0) unstable; urgency=medium

  * Initial release

 -- Coral <coral-support@google.com>  Mon, 30 Jul 2018 11:46:24 -0800

bluez (5.50-1) unstable; urgency=medium

  * Update to 5.50.
  * Fixed the version to be deleted of the conf file. (Closes: #877482)
  * Add more details to change the default "Name" of device in main.conf
    (Closes: #904212)
    Add patches/main.conf-Add-more-details-Closes-904212.patch

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sun, 29 Jul 2018 11:46:24 +0900

bluez (5.49-4) unstable; urgency=medium

  * Change team mail address.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 23 May 2018 12:36:15 +0900

bluez (5.49-3) unstable; urgency=medium

  * Fix syntax error in bluez preinst script. (Closes: #899340)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 23 May 2018 11:35:59 +0900

bluez (5.49-2) unstable; urgency=medium

  * Fix bluetoothd segfault in btd_adv_manager_refresh() (Closes: #898201)
    Add patches/adapter-Fix-accessing-NULL-adv_manager.patch. 
    Cherry-picked from 37a30b5435a45c3f8e233309fc70fc7de92b2e76.
  * Fix segfault after PIN entry. (Closes: #884663)
    Add patches/shared-gatt-client-Fix-segfault-after-PIN-entry.patch.
  * Remove obsolete conf file by bluez.preinst. (Closes: #877482)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 23 May 2018 08:29:05 +0900

bluez (5.49-1) unstable; urgency=medium

  * Update to 5.49.
  * Remove patches/0002-autopair-Don-t-handle-the-iCade.patch.
    This patch was applied to upstream.
  * Add patches/Fix-typo.patch.
  * Remove libbluetooth3-dbg and bluez-dbg.
  * Remove dh-systemd from B-D.
  * Bump Standards-Version to 4.1.3.
  * Change Vcs-Browser and Vcs-Git to salsa.
  * Update manpages (Closes: #867948).
  * Remove dh-autoreconf and autotools-dev from B-D.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Mon, 19 Mar 2018 09:24:02 +0900

bluez (5.47-1) unstable; urgency=medium

  * Update to 5.47. (Closes: #876849)
  * Update debian/control.
    - Bump Standards-Version to 4.1.0.
    - Update to debhelper 10.
    - Remove dh-systemd, autotools-dev and dh-autoreconf from B-D.
  * Remove patches/fix_udevadm_in_hid2hci.patch.
  * Remove patches/CVE-2017-1000250.patch.
  * Remove profiles/proximity/proximity.conf from debian/bluez.install.
  * Remove copyrtight of alert, cyclingspeed, heartrate and proximity.
  * Fix missing-call-to-dpkg-maintscript-helper in bluez.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Fri, 22 Sep 2017 12:10:14 +0900

bluez (5.46-1) unstable; urgency=medium

  * CVE-2017-1000250: information disclosure vulnerability in
    service_search_attr_req (Closes: #875633)
    Add patches/CVE-2017-1000250.patch. Thanks to Salvatore Bonaccorso.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 29 Jul 2017 04:56:04 +0900

bluez (5.45-1) unstable; urgency=medium

  * Update to 5.45.
  * Change VCS from svn to git.
  * Update debian/control.
    - Add libasound2-dev to B-D.
    - Add libdw-dev to B-D.
    - Update Vcs-Browser and Vcs-Git field.
  * Remove debian/patches/fix-typo-in-src-main.conf.patch
  * Update debian/patches/main.conf.patch


 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sun, 02 Jul 2017 09:07:00 +0900

bluez (5.43-2) unstable; urgency=medium

  * Fix bluez-obexd service is not started under systemd. (Closes: #804908)
    Add patches/org.bluez.obex.service.in.patch.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 18 Mar 2017 00:25:38 +0900

bluez (5.43-1) unstable; urgency=medium

  * Update to 5.43. (Closes: #840983)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 01 Nov 2016 07:04:47 +0900

bluez (5.41-1) unstable; urgency=medium

  * Update to 5.41. (Closes: #771627, #835901)
  * Update debian/rules.
    - Add --list-missing option to dh_install.
  * Update debian/patches
    - Add patches/0002-autopair-Don-t-handle-the-iCade.patch.
      iCade support by autopair.
    - Add patches/0004-agent-Assert-possible-infinite-loop.patch.
      Show assert if possible infinite loop.
    - Add patches/fix_udevadm_in_hid2hci.patch.
      Change path of udevadm from /sbin to /bin.
    - Add patches/main.conf.patch.
      Set AutoEnable to true in Policy.
    - Add patches/fix-typo-in-src-main.conf.patch. (Closes: #833883)
   * Add pulseaudio-module-bluetooth to Suggests of bluez. (Closes: #815323)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 01 Oct 2016 08:17:01 +0900

bluez (5.40-1~exp0) experimental; urgency=medium

  * Update to 5.40. (Closes: #824163, #824732)
  * Update debian/control.
    - Bumped Standards-Version to 3.9.8.
  * Update debian/rules.
    - Remove --enable-usb from option of configure.
      This option does not support current version.
  * Add btattach, rctest and sdptool. (Closes: #816865)
  * Add bluez-test-tools package. (Closes: #795350)
    This package contains *-tester program.
  * Update debian/copyright to DEP5 format.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 30 Jun 2016 11:29:37 +0900

bluez (5.36-1) unstable; urgency=medium

  * Update to 5.36.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 07 Nov 2015 11:47:02 +0900

bluez (5.33-1) unstable; urgency=medium

  * Update to 5.33.
  * Remove patches/fix_ftbfs_with_c99.patch.
  * Update patches/bluetooth.conf.patch and
    patches/change_path_of_hogsuspend.patch.
  * Update libbluetooth3.symbols.
  * Update control.
    - Bumped Standards-Version to 3.9.6.
  * Add manpage of gatttool. (Closes: #786489)
  * Add bluemoon, hex2hcd and mpris-proxy to bluez. (Closes: #780015)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 18 Aug 2015 20:59:23 +0900

bluez (5.23-2) unstable; urgency=medium

  * debian/control.
    - Remove Provides: obex-server, obexd-client from bluez-obexd.
      (Closes: #771290)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 16 Sep 2014 14:17:30 +0900

bluez (5.23-1) unstable; urgency=high

  * New upstream release. Update to 5.23.
  * Add patches/change_path_of_hogsuspend.patch. (Closes: #759188, #758979)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 16 Sep 2014 09:01:37 +0900

bluez (5.21-3) unstable; urgency=medium

  * Remove old conf files. (Closes: #737502, #756890)
  * Remove rfcomm support from init script. (Closes: #754830)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 09 Aug 2014 03:48:22 +0900

bluez (5.21-2) unstable; urgency=medium

  * Fix FTBFS with C99. (Closes: #755345)
    Add patches/fix_ftbfs_with_c99.patch.
  * Add support user session of obexd. (Closes: #754675)
    Add patches/0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch
    and patches/0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch.
  * Update bluez.bluetooth.init. (Closes: #754830, #712386, #737502)
    Remove -f option of rfcomm.
  * Move hciconfig from /usr to /bin.
  * Update path of hciconfig in 50-bluetooth-hci-auto-poweron.rules.
    (Closes: #755274)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 22 Jul 2014 09:25:12 +0900

bluez (5.21-1) unstable; urgency=medium

  * Upload to unstable.
  * Update README.Debian.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Mon, 14 Jul 2014 08:21:17 +0900

bluez (5.21-1~exp0) experimental; urgency=medium

  * New upstream release. Update to 5.21.
  * Remove version from obexd-server and obexd-client.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 08 Jul 2014 07:34:03 +0900

bluez (5.20-1~exp0) experimental; urgency=medium

  * New upstream release. Update to 5.20.
  * Update debian/bluez.bluetooth.init
    Remove function to start hci device at startup in sysvinit.
  * Add 50-bluetooth-hci-auto-poweron.rules.
    This supports start hci device at startup.
  * Update libbluetooth3.symbols.
  * Add patches/bluetooth.conf.patch.
    This add permission of bluetooth control to user into bluetooth group.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 02 Jul 2014 11:22:04 +0900

bluez (5.19-1~exp0) experimental; urgency=medium

  * New upstream release. Update to 5.19.
  * Move bluetoothd daemon and obexd to /usr/lib/bluetooth/. (Closes: #749283)
    - Change bluez-obexd.install and bluez.install.
    - Add --libexec to CONFIGURE_FLAGS in rules.
    - Move bluez.links.in to bluez.links, and remove DEB_HOST_MULTIARCH.
    - Remove sed function from override_dh_auto_configure target in rules.
  * Fix FTBFS on ppc64el. (Closes: 745628)
    - Add dh-autoreconf to Build-Depends.
    - Enable autoreconf addon for dh.
  * Install sixaxis plugin.
    - Add path of sixaxis plugin to libbluetooth3.install and
      libbluetooth-dev.install.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 25 Jun 2014 01:58:30 +0900

bluez (5.17-1~exp0) experimental; urgency=medium

  * New upstream release. Update to 5.17. (Closes: #732453)
  * debian/rules.
    - Add '--with systemd' to dh option.
    - Enable threads and sixaxis support at configure.
    - Update override_dh_installinit in debian/rules.
    - Add override_dh_systemd_enable and override_dh_systemd_start.
      target in debian/rules.
    - Remove old configure.
    - Add --enable-experimental to option of confiugre. (Closes: #712385)
    - Install gatttool (Closes: #720486)
  * debian/bluez.bluetooth.init
    Add function to start hci device at startup in sysvinit
  * debian/control
    - Add dh-systemd (>= 1.5) to Build-Depends.
    - Update Standards-Version to 3.9.5.
    - Remove quilt from Build-Depends.
    - Remove libusb-dev from Build-Depends.
    - Update libglib2.0-dev to 2.28.
    - Update Vcs-Svn and Vcs-Browser field.
  * Update libbluetooth3.symbols.
  * Add 0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 08 Apr 2014 10:00:50 +0900

bluez (5.5-1~exp1) experimental; urgency=low

  * Fix install path of bluetoothd.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 21 May 2013 14:11:46 +0900

bluez (5.5-1~exp0) experimental; urgency=low

  * New upstream release. Update to 5.5. (Closes: #705519, #690749, #706986)
  * Remove unnecessary patches.
    - patches/01_lower_sink_ranking.patch
    - patches/02_disable_hal.patch
    - patches/06-alsalib.patch
    - patches/07-fix-639356.patch
    - patches/08-0001-systemd-install-systemd-unit-files.patch
  * Update debian/control.
    - Update Standards-Version to 3.9.4.
    - Update version of debhelper to 9.
    - Add bluez-hcidump, bluez-obexd and bluez-test-scripts packages.
      (Closes: #690120)
    - Remove bluez-utils, bluez-compat, bluez-alsa, bluez-audio,
      bluez-pcmcia-support and bluez-gstreamer packages.
    - Add udev, systemd and libical-dev to Build-Depends.
    - Remove libnl-dev from Build-Depends. (Closes: #688160)
    - Remove libsndfile1-dev from Build-Depends.
    - Remove libasound2-dev from Build-Depends.
    - Remove bluez-alsa from Recommends of bluetooth.
    - Downgrade bluez-cups and bluez-obexd to Suggests. (Closes: #702081)
    - Add ${misc:Depends} to Depends of bluetooth package. (Closes: #692550)
    - Remove ${python:Depends} from Depends of bluez.
    - Remove python-gi and python-dbus from Depends of bluez.
      (Closes: #697752)
  * Move api document from bluez to libbluetooth-dev.
  * Update watch file
  * Remove unnecessary manpages.
    - bluetooth-agent.1, bluez-simple-agent.1 and hcitrace.1.
  * Add manpage of bluetoothctl and btmon.
  * Remove bluez.lintian-overrides and bluez_agent.udev.
  * Update debian/rules.
    - Convert from CDBS to dh, and cleanup.
    - Add --enable-pie to configure option.
    - Remove --enable-test from configure.
  * Add man for btmon and update bluez.manpages
  * Update libbluetooth3.symbols
  * Add bluez.links
  * Update compat to 9.
  * Update README.examples. (Closes: #673191)
  * Update bluez.bluetooth.init.
    bluetoothd needs --background option of start-stop-daemon.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sun, 19 May 2013 04:05:46 +0900

bluez (4.101-1) experimental; urgency=low

  * New upstream release. Update to 4.101.
  * Update patches.
    - patches/01_lower_sink_ranking.patch
    - patches/03-Fix-return-code-of-hid2hci.patch
  * Update debian/bluez.install.
    Remove line for lib/udev/rules.d/97-bluetooth.rules.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Mon, 23 Jul 2012 09:15:52 +0900

bluez (4.99-2) unstable; urgency=low

  * Update debian/control.
    - Drop obsolete python-gobject dependency. (Closes: #663744)
      python-gi is used instead.
    - Change module-init-tools dependency to kmod. (Closes: #663359)
  * Fix FTBFS with -std=c99 option. (Closes: #661879)
    Add patches/09_fix_ftbfs_with_c99.patch
  * Update debian/README.Debian. (Closes: #663955)
    Add more infomation about alsa.conf.
  * Update bluez.postint. (Closes: #663066)
    Remove udev reload and makedev from postinst.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Fri, 23 Mar 2012 17:51:50 +0900

bluez (4.99-1) unstable; urgency=low

  * New upstream release.
  * Update debian/control.
    - Update Standards-Version to 3.9.3.
    - Use architecture wild-card linux-any. (Closes: #662095)
    - Update version of cdbs to >= 0.4.97.
  * Remove some patches. Applied to version 4.99.
    - 09_fix_compile_with_C++.patch
    - 10-audio-Fix-disabling-local-A2DP-endpoints-when-UNIX-s.patch

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 08 Mar 2012 08:01:05 +0900

bluez (4.98-3) unstable; urgency=low

  * Fix A2DP not working on default. (Closes: #659897, #657255)
    Add patches/10-audio-Fix-disabling-local-A2DP-endpoints-when-UNIX-s.patch.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 25 Feb 2012 16:49:54 +0900

bluez (4.98-2) unstable; urgency=low

  * Provides proximity.conf by bluez. (Closes: #656889)
    Update debian/bluez.install. proximity.conf was installed to
    etc/bluetooth/proximity.conf.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 01 Feb 2012 05:24:00 +0900

bluez (4.98-1) unstable; urgency=low

  * New upstream release.
  * Update debian/bluetooth-dbus.conf.
  * Update debian/control.
    Add Multi-Arch: foreign to bluez.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 24 Jan 2012 05:35:09 +0900

bluez (4.97-1) experimental; urgency=low

  * New upstream release.
  * Update debian/contorl.
    - Add check (>= 0.9.8-1.1) to Build-Depends.
  * Update debian/rules.
    - Remove --enable-attrib, --enable-udevrules and --enable-configfiles
      from configure.
    - Add --enable-time, --enable-alert and --enable-gatt-example to
      configure.
  * Update bluez-cups.install.
    Fix cups backend into multiarch path. (Closes: #645884)
  * Update man for l2test. (Closes: #649432)
  * Update debian/patches/06-alsalib.patch

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 27 Dec 2011 17:19:00 +0900

bluez (4.96-3) unstable; urgency=low

  * Install debian/bluez-udev to /lib/udev/bluez-udev.
    (Closes #639356, #643829)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Fri, 30 Sep 2011 12:35:45 +0900

bluez (4.96-2) unstable; urgency=low

  * Add support static library of libbluetooth-dev. (Closes: #558742)
    Don't include static library in bluez-alsa and bluez-gstreamer.
  * Fix bluez udev rules attempt to access /usr when /usr may not be mounted.
    Thanks to anomie@users.sourceforge.net. (Closes: #639356)
  * Fix typo in debian/bluez.preinst. (Closes: #643321)
    Thanks to Trent W. Buck.
  * Remove dh-autoreconf and add '-Wl,--as-needed' to LDFLAGS.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sun, 28 Sep 2011 01:50:05 +0900

bluez (4.96-1) unstable; urgency=low

  * New upstream release.
    Applied some patch from Daniel Schaal. Thanks! (Closes: #636633)
  * Add debug packages.
    bluez-dbg and libbluetooth3-dbg.
  * Add support systemd.
  * Update debian/control.
    - Add s390x to Architecture. (Closes: #636545)
    - Add libreadline-dev to Build-Depends.
  * Drop patchsys-quilt.mk snippet: superfluous with source
    format 3.0 "(quilt)".
  * Refresh patch.
  * Switch to multiarch.
  * Update debian/rules.
    - Remove obsolete configure flags.
    - Add new plugins (proximity, sap, wiimote, thermometer, dbusoob).
    - Strip and move to .install files.
    - Add LDFLAGS=-Wl,--as-needed to configure option.
  * Add usr/bin/gatttool into bluez package.
  * Update bluez.lintian-overrides.
  * Update debian/copyright.
    Update path of license file.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 04 Aug 2011 11:46:35 +0900

bluez (4.94-3) unstable; urgency=low

  * Add dh-autoreconf to Build-Depends. To support dh-autoreconf,
    update debian/control and debian/rules.
  * Update version and the install path for which libasound depended.
    Add patch/06-alsalib.patch. Thanks for Steve Langasek and Jordi Mallach.
    (Closes: #634976).
  * Remove Andrea Veri from Uploaders.
    Thank you for having maintained this package. (Closes: #635095)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sun, 24 Jul 2011 18:31:59 +0900

bluez (4.94-2) unstable; urgency=medium

  * Add udev to Replaces and Breaks field (Closes: #628904).
  * Fix typo from deamon to daemon (Closes: 629901).

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 09 Jun 2011 21:48:21 +0900

bluez (4.94-1) unstable; urgency=medium

  * New upstream release.
  * Update debian/control.
    - Add ppc64 to Architecture.
    - Add version depency of udev (Closes: #628904, #628765).
  * Remove debian/patches/03_fix_udevdir.patch.
    Applied to upstream.
  * Update debian/bluez.bluetooth.init.
    Applied patch from Cristian Ionescu-Idbohrn (Closes: #628491).
  * Update debian/bluez.postinst.
    Add abort-upgrade, abort-remove and abort-deconfigure target
    to bluez.postinst.
  * Fix return code of hid2hci.
    Add patch 03-Fix-return-code-of-hid2hci.patch
  * Fix work Logitech keyboard (Closes: #626975)
    Add patch 04-Fix-bluetooth-hid2hci.rules.patch

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 01 Jun 2011 15:30:01 +0900

bluez (4.93-3) unstable; urgency=low

  * Fix install hid2hci to /lib/udev.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 31 May 2011 19:42:33 +0900

bluez (4.93-2) unstable; urgency=low

  * Update debian/README.Debian.gz.
    Add description of bluez-simple-agent (Closes: #488306, #384680).
  * Update debian/bluez_agent.udev and debian/bluez.bluetooth.init.
    Fix path of hid2hci (Closes: #628491).
  * Add debian/patches/03_fix_udevdir.patch.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 31 May 2011 18:04:29 +0900

bluez (4.93-1) unstable; urgency=low

  * New upstream release.
  * Update debian/control.
    - Add libudev-dev to Build-Depends.
  * Update debian/bluetooth-dbus.conf.
    Add policy for lp group.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Fri, 20 May 2011 10:31:07 +0900

bluez (4.91-1) unstable; urgency=low

  * New upstream release.
  * Updte debian/control
    + Update to S-V 3.9.2: no changes needed.
    + Remove libdbus-1-dev from Build-Depends.
      This is interpolated by libdbus-1-dev.
  * Update debian/libbluetooth3.symbols.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 12 Apr 2011 11:50:49 +0900

bluez (4.89-1) unstable; urgency=low

  * New upstream release.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 05 Mar 2011 17:08:40 +0900

bluez (4.87-2) unstable; urgency=low

  * Upload to unstable.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 09 Feb 2011 01:38:45 +0900

bluez (4.87-1) experimental; urgency=low

  * New upstream release.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 26 Jan 2011 07:58:27 +0900

bluez (4.86-1) experimental; urgency=low

  * New upstream release.
  * Update debian/rules.
    - Enable health plugin and attrib plugin.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Mon, 24 Jan 2011 11:49:55 +0900

bluez (4.84-1) experimental; urgency=low

  * New upstream release.
  * Update README.Debian.
    - Update section of Keyboard and mouse support
      (Closes: #599894, #535929).

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 12 Jan 2011 17:23:25 +0900

bluez (4.82-1) experimental; urgency=low

  * New upstream release.
  * Add manpages of bluetooth-agent.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Mon, 20 Dec 2010 01:39:43 +0900

bluez (4.81-1) experimental; urgency=low

  * New upstream release.
  * Drop patches/010_udev_rules_agent.patch (Closes: ##588034).
    Connection of bluetooth is cut off after system start,
    if applied this patch. And this patch is not already necessary.
  * Disabled HAL (Closes: 599023).
    Add patches/02_disable_hal.patch
  * Update debian/rules
    - Provide again bluetooth-agent utility (Closes: #598982).
    - Remove --enable-netlink option of configure.
      This option was not provided.
  * Update debian/bluez.install
    Remove path of plugins.
  * Update libbluetooth-dev.install
    Remove path of plugins.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 02 Dec 2010 12:17:48 +0900

bluez (4.70-1) unstable; urgency=low

  * New upstream release.
  * Update debian/bluez.bluetooth.init (Closes: #593172).
  * Update debian/bluez.preinst (Closes: #592982, #568301).
  * Update debian/control.
    - python-gobject and python-dbus move from Suggests to Depends.
  * Replase bluetooth-agent to bluez-simple-agent.
  * Some test program move to usr/bin.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Fri, 03 Sep 2010 08:43:02 +0900

bluez (4.69-1) unstable; urgency=low

  * New upstream release (Closes: #589727).
  * Update debian/control.
    - bumped standards-version to 3.9.1.
  * Update libbluetooth3.symbols.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 28 Jul 2010 13:44:34 +0900

bluez (4.66-1) unstable; urgency=low

  * New upstream release.
  * Update debian/control.
    - Add libcap-ng-dev to Build-depends.
  * Update debian/rules.
    - Add serial.conf (Closes: #559672).
    - Update configure option.
      Remove --enable-manpages.
      Change --enable-pcmciarules to --enable-pcmcia.
      Add --enable-pnat, --enable-tracer, --enable-udevrules,
          --enable-configfiles and --enable-capng.
  * Add man file of hcitrace.
  * Update udev rule (Closes: #535075).
    Thanks to Sjoerd Simons.
  * Add patch 01_lower_sink_ranking.patch (Closes: #571595).
    Thanks to Sebastian Dröge.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 22 Jun 2010 12:45:57 +0900

bluez (4.64-1) unstable; urgency=low

  * New upstream release.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 15 May 2010 15:44:23 +0900

bluez (4.63-2) unstable; urgency=low

  * Remove some contents from debian/NEWS. (Closes: #579817)

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Thu, 06 May 2010 06:50:14 +0900

bluez (4.63-1) unstable; urgency=low

  * Update debian/control.
    - Remove Filippo Giunchedi <filippo@debian.org> from uploaders.
    - bumped standards-version to 3.8.4.
  * Add man files.
    bluetooth-agent.1, l2test.1.
  * Update libbluetooth3.symbols.
    Add hci_bustostr@Base, hci_read_inq_response_tx_power_level@Base,
    hci_typetostr@Base, sdp_get_supp_feat@Base, sdp_set_supp_feat@Base
  * Update debian/NEWS.
  * Add debian/source/format.

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 20 Apr 2010 06:08:24 +0900

bluez (4.60-1) unstable; urgency=low

  * New upstream release.
  * debian/control:
    - Add Nobuhiro Iwamatsu to Uploaders (Closes #564569).

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 23 Jan 2010 16:03:01 +0900

bluez (4.57-1) unstable; urgency=low

  * New upstream bug fix release.

 -- Andrea Veri <andrea.veri89@gmail.com>  Thu, 12 Nov 2009 21:27:54 +0100

bluez (4.56-2) unstable; urgency=low

  * debian/control:
    - makedev re-added as alternate depend of udev, as
      it's needed by postints. Thanks to Guillem Jover
      for the report. (Closes: #546860)

 -- Andrea Veri <andrea.veri89@gmail.com>  Wed, 14 Oct 2009 00:19:19 +0200

bluez (4.56-1) unstable; urgency=low

  * New upstream release. (Closes: #539361)
  * rctest man page is no more missing. (Closes: #535949)
  * debian/control:
    - bumped standards-version to 3.8.3. No changes needed.
    - added myself into uploaders plus DM tag.
    - removed makedev depends. (Closes: #546860)
  * debian/copyright:
    - added missing copyright holders.
  * debian/patches/001_agent_fixes.patch:
    - removed, applied upstream
  * debian/patches/002_a2dpsink_marginal.patch:
    - removed, applied upstream.
  * debian/patches/005_l2ping_section.patch:
    - removed, applied upstream.
  * debian/rules:
    - removed the hack to have man page installed correctly.
      It has been fixed upstream and points to the right section. (8)
  * debian/libbluetooth3.symbols:
    - refreshed.
  * debian/bluez.examples:
    - test/test-* removed and added all needed examples by hand to avoid
      the installation of useless stuff.

 -- Andrea Veri <andrea.veri89@gmail.com>  Mon, 12 Oct 2009 15:40:02 +0200

bluez (4.42-2) unstable; urgency=low

  * Fix "Bashisms in init script" (Closes: #534511)
  * Handle upgrade of old /etc/modprobe.d/bluez (Closes: #523050)
  * Conflict/Replace bluez-audio in bluez (Closes: #535089)

 -- Filippo Giunchedi <filippo@debian.org>  Tue, 30 Jun 2009 20:05:13 +0200

bluez (4.42-1) unstable; urgency=low

  * New upstream release
    + drop not needed debian/patches/003_configure_amd64_rpath.patch
  * Provide transitional bluez-audio to migrate to bluez-alsa and
    bluez-gstreamer (Closes: #531449)
  * Install README.Debian in binary bluez (Closes: #532018)
  * Make bluez-{alsa,gstreamer} depend on bluez
  * Switch to group bluetooth from netdev for authorized users
    (Closes: #534118)
  * Mention pand/hidd/dund move to bluez-compat in init script and default
    (Closes: #532622)
  * debian/patches/002_test_agent_newapi.patch port bluetooth-agent to new
    D-Bus API
  * Update to S-V 3.8.2: no changes
  * Introduce common SSD_OPTIONS in init script and sleep 1 on restart

 -- Filippo Giunchedi <filippo@debian.org>  Sun, 21 Jun 2009 14:01:04 +0200

bluez (4.40-2) unstable; urgency=low

  * Ship a libbluetooth3.symbols file instead of shlibs
  * Ship more examples from test/, thus suggest: python-gobject and
    python-dbus together with README.examples
  * Provide a script in /lib/udev/bluez for waiting on /usr being available
    and a patch udev rules to use it

 -- Filippo Giunchedi <filippo@debian.org>  Tue, 26 May 2009 00:02:53 +0200

bluez (4.40-1) unstable; urgency=low

  * New upstream release
    - scripts/bluetooth.rules -> scripts/bluetooth-serial.rules
  * Upload to unstable
  * Change usage for hid2hci: install udev rules and issue a warning from init
    script

 -- Filippo Giunchedi <filippo@debian.org>  Fri, 22 May 2009 14:56:07 +0200

bluez (4.34-0exp1) experimental; urgency=low

  * First upload of bluez 4.x (Closes: #499529)
    - include parts of the packaging from ubuntu, thanks!
    - bluez-utils and bluez-libs are now a single source package
    - libbluetooth2 -> libbluetooth3 bump
    - conflict bluez with bluez-utils (<= 3.36-3)
    - update debian/copyright, thanks to Nobuhiro Iwamatsu
  * Remove hid2hci patches/script
  * Remove broken link to documentation (Closes: #504675)
  * Install a sample commandline agent from test/ into bluetooth-agent
    - add 001_test_agent_default_adapter.patch to get the default adapter
  * Install test/simple-agent and test/list-devices as examples
  * Remove old commented code from maintainer scripts (pcmcia-support postinst
    and bluez preinst)
  * Update watch file to match bluez only
  * Add #DEBHELPER# to debian/bluez-utils.postrm
  * Update to S-V 3.8.1: no changes needed
  * Fix lintian warnings:
    - add -e to remaining maintainer scripts
    - remove full path to update-rc.d in debian/bluez.postinst
    - override "bluez-utils: maintainer-script-empty postrm" for transitional
      bluez-utils postrm
  * Use 7 in debian/compat
  * Fix debian/bluez.preinst to use dpkg-query, thus removing the lintian
    override

 -- Filippo Giunchedi <filippo@debian.org>  Wed, 01 Apr 2009 12:20:01 +0200

bluez (4.29-0ubuntu1) jaunty; urgency=low

  * New upstream version (LP: #326811)
    - Use AVRCP version 1.0 for now.
    - Decrease AVDTP idle timeout to one second.
    - Delay AVRCP connection when remote device connects A2DP.
    - Add workaround for AVDTP stream setup with broken headsets.
    - Add missing three-way calling feature bit for Handsfree.
    - Fix handsfree callheld indicator updating.
    - Fix parsing of all AT commands within the buffer.
    - Fix authentication replies when disconnected.
    - Fix handling of debug combination keys.
    - Fix handling of changed combination keys.
    - Fix handling of link keys when using no bonding.
    - Fix handling of invalid/unknown authentication requirements.
    - Fix closing of L2CAP raw socket used for dedicated bonding.

 -- Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>  Sun, 08 Feb 2009 10:48:36 +0100

bluez (4.28-0ubuntu1) jaunty; urgency=low

  * New upstream version. (LP: #324492)
    - Add AVDTP signal fragmentation support.
    - Add more SBC performance optimizations.
    - Add more SBC audio quality improvements.
    - Use native byte order for audio plugins.
    - Set the adapter alias only after checking the EIR data.
    - Fix auto-disconnect issue with explicit A2DP connections.
    - Fix invalid memory access of ALSA plugin.
    - Fix compilation with -Wsign-compare.

 -- Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>  Mon, 02 Feb 2009 21:57:08 +0100

bluez (4.27-0ubuntu1) jaunty; urgency=low

  * New upstream version. (LP: #304784)
    - Improves interoperability and security handling
      with Bluetooth 2.1 based devices.

 -- Mario Limonciello <mario_limonciello@dell.com>  Tue, 27 Jan 2009 12:44:39 -0600

bluez (4.25-0ubuntu6) jaunty; urgency=low

  * Drop previous patch, bluez is a bit strange and this is basically ok.

 -- Scott James Remnant <scott@ubuntu.com>  Mon, 19 Jan 2009 17:01:14 +0000

bluez (4.25-0ubuntu5) jaunty; urgency=low

  * debian/patches/ubuntu_dbus_policy.patch:
    - Drop send_interface allow which isn't service-specific.  LP: #318740.

 -- Scott James Remnant <scott@ubuntu.com>  Mon, 19 Jan 2009 15:38:43 +0000

bluez (4.25-0ubuntu4) jaunty; urgency=low

  * Add Breaks to ensure the right udev version is used.

 -- Scott James Remnant <scott@ubuntu.com>  Fri, 09 Jan 2009 11:35:06 +0000

bluez (4.25-0ubuntu3) jaunty; urgency=low

  * debian/hid2hci.rules: Update to use ATTRS{} instead of SYSFS{}

 -- Scott James Remnant <scott@ubuntu.com>  Wed, 07 Jan 2009 14:18:52 +0000

bluez (4.25-0ubuntu2) jaunty; urgency=low

  * debian/rules: Install rules into /lib/udev/rules.d
  * debian/bluez.preinst: Remove old rule if unchanged.

 -- Scott James Remnant <scott@ubuntu.com>  Wed, 07 Jan 2009 11:35:39 +0000

bluez (4.25-0ubuntu1) jaunty; urgency=low

  * New upstream release. (LP: #312087)

 -- Baptiste Mille-Mathias <baptiste.millemathias@gmail.com>  Tue, 30 Dec 2008 19:53:44 +0100

bluez (4.21-0ubuntu1) jaunty; urgency=low

  * New upstream version. (LP: #304109)

 -- Mario Limonciello <mario_limonciello@dell.com>  Wed, 03 Dec 2008 15:56:03 -0600

bluez (4.17-0ubuntu1) jaunty; urgency=low

  * New upstream version. (LP: #284039)
  * Drop the following patches that landed upstream:
    - logitech_5500_ids.patch
    - dell_bt_365.patch
    - sco_connect_git.patch

 -- Mario Limonciello <mario_limonciello@dell.com>  Wed, 05 Nov 2008 13:28:35 -0600

bluez (4.12-0ubuntu5) intrepid; urgency=low

  * Add debian/hid2hci.rules to enable running hid2hci
    as soon as some bluetooth dongles get plugged in. (LP: #288294)
  * debian/bluez.postinst:
    - Update udev rules on postinst.
  * debian/rules:
    - Install debian/hid2hci.rules to 62-bluez-hid2hci.rules

 -- Mario Limonciello <superm1@ubuntu.com>  Sat, 25 Oct 2008 23:32:00 -0500

bluez (4.12-0ubuntu4) intrepid; urgency=low

  * Add hid2hci.patch to enable hid2hci to be ran after
    suspending a machine. (LP: #268877)
  * debian/rules:
    - Install new script from above patch.
  * Add logitech_5500_ids.patch for enabling hid2hci on
    more logitech devices. (LP: #272352)

 -- Mario Limonciello <mario_limonciello@dell.com>  Wed, 22 Oct 2008 16:01:59 -0500

bluez (4.12-0ubuntu3) intrepid; urgency=low

  * debian/bluez.postinst:
    - Don't show output for MAKEDEV. (LP: 280360)
  * Add dell_bt_365.patch which will enable putting the Dell BT365
    adapter into HCI mode upon bootup. (LP: #286724)
  * debian/control:
    - Add one more binary package for old compatibility binaries. (LP: #281580)
  * debian/rules:
    - Enable compatibility binaries.  These are HIGHLY discouraged from usage
      and will not necessarily be here in the future.
  * debian/bluez.install:
    - Adjust what binaries get installed, to be able to pull out hidd, dund,
      and pand as necessary.

 -- Mario Limonciello <mario_limonciello@dell.com>  Mon, 20 Oct 2008 20:37:24 -0500

bluez (4.12-0ubuntu2) intrepid; urgency=low

  * debian/control:
    - Move libbluetooth3 to the top of the list so that it is the
      package that gets to keep the real changelog rather than symlinks.
    - Only Replaces: packages rather than conflicts to help with
      upgrades (LP: #279954)

 -- Mario Limonciello <mario_limonciello@dell.com>  Tue, 07 Oct 2008 16:32:31 -0500

bluez (4.12-0ubuntu1) intrepid; urgency=low

  * Initial Release. (LP: #274950)
    - This package replaces bluez-utils and bluez-libs source packages.
    - It was generated by merging the contents of bluez-utils and bluez-libs
      and updating content.
    - Legacy functionality for hidd, dund, and pand are not present, and
      have been removed from all configuration files.
  * This release introduces encryption (LP: #182191)
  * debian/patches:
    - bluez-utils-oui-usage.patch was borrowed from the Fedora 10 packaging.
    - sco-connect-git.patch was taken from bluez git shortly after 4.12 release.
      It should "help" with some sco headset issues.
  * debian/control:
    - Update different packages per upstream's recommendations.
    - Update conflicts/replaces for earlier packages.
    - Add a transitional bluez-utils package to help with the transition.

 -- Mario Limonciello <superm1@ubuntu.com>  Tue, 07 Oct 2008 12:10:29 -0500
