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
