Bluetooth Management API
*************************

Copyright (C) 2008-2009  Marcel Holtmann <marcel@holtmann.org>


Packet Structures
=================

	Commands:

	0    4    8   12   16   22   24   28   31   35   39   43   47
	+-------------------+-------------------+-------------------+
	|  Command Code     |  Controller Index |  Parameter Length |
	+-------------------+-------------------+-------------------+
	|                                                           |

	Events:

	0    4    8   12   16   22   24   28   31   35   39   43   47
	+-------------------+-------------------+-------------------+
	|  Event Code       |  Controller Index |  Parameter Length |
	+-------------------+-------------------+-------------------+
	|                                                           |

Controller Index can have a special value <non-controller> to indicate that
command or event is not related to any controller. Possible values:

	<controller id>		0x0000 to 0xFFFE
	<non-controller>	0xFFFF


Read Management Version Information Command
===========================================

	Command Code:		0x0001
	Controller Index:	<non-controller>
	Command Parameters:
	Return Parameters:	Version (1 Octets)
				Revision (2 Octets)


Read Management Supported Features Command
==========================================

	Command Code:		0x0002
	Controller Index:	<non-controller>
	Command Parameters:
	Return Parameters:	Features (8 Octets)

		Feature Bit 0:	Controller Support
		Feature Bit 1:	Tracing Support


Read Controller Index List Command
==================================

	Command Code:		0x0003
	Controller Index:	<non-controller>
	Command Parameters:
	Return Parameters:	Num_Controllers (2 Octets)
				Controller_Index[i] (2 Octets)


Read Controller Information Command
===================================

	Command Code:		0x0004
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Controller_Type (1 Octet)
				Powered (1 octet)
				Connectable (1 octet)
				Discoverable (1 octet)
				Pairable (1 octed)
				Security_Mode (1 octed)
				BD_ADDR (6 Octets)
				Device_Class (3 octets)
				Supported_Features (8 Octets)
				Manufacturer (2 Octets)
				HCI_Version (1 Octet)
				HCI_Revision (2 Octets)
				Name (249 Octets)

		Controller_Type:0x00 Reserved
				0x01 Bluetooth (BR/EDR)
				0x02 802.11 (AMP)


Set Powered Command
===================

	Command Code:		0x0005
	Controller Index:	<controller id>
	Command Parameters:	Powered (1 Octet)
	Return Parameters:	Powered (1 Octet)


Set Discoverable Command
========================

	Command Code:		0x0006
	Controller Index:	<controller id>
	Command Parameters:	Discoverable (1 Octet)
	Return Parameters:	Discoverable (1 Octet)


Set Connectable Command
=======================

	Command Code:		0x0007
	Controller Index:	<controller id>
	Command Parameters:	Connectable (1 Octet)
	Return Parameters:	Connectable (1 Octet)


Set Pairable Command
====================

	Command Code:		0x0008
	Controller Index:	<controller id>
	Command Parameters:	Pairable (1 Octet)
	Return Parameters:	Pairable (1 Octet)

Add UUID Command
================

	Command Code:		0x0009
	Controller Index:	<controller id>
	Command Parameters:	UUID (16 Octets)
				SVC_Hint (1 octet)
	Return Parameters:


Remove UUID Command
===================

	Command Code:		0x000A
	Controller Index:	<controller id>
	Command Parameters:	UUID (16 Octets)
	Return Parameters:


Set Device Class
================

	Command Code:		0x000B
	Controller Index:	<controller id>
	Command Parameters:	Major_Class (1 octet)
				Minor_Class (1 octed)
	Return Parameters:


Set Service Cache Command
=========================

	Command Code:		0x000C
	Controller Index:	<controller id>
	Command Parameters:	Enable (1 octet)
	Return Parameters:


Load Keys Command
=================

	Command Code:		0x000D
	Controller Index:	<controller id>
	Command Parameters:	Debug_Keys (1 Octet)
				Key_Count (2 Octets)
				Key1 {
					Address (6 Octets)
					Type (1 Octet)
					Value (16 Octets)
					PIN_Length (1 Octet)
				}
				Key2 { }
				...
	Return Parameters:


Remove Key Command
==================

	Command Code:		0x000E
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
				Disconnect (1 Octet)
	Return Parameters:


Disconnect Command
==================

	Command Code:		0x000F
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:	Address (6 Octets)

Get Connections Command
=======================

	Command Code:		0x0010
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Connection_Count (2 Octets)
				Address1 (6 Octets)
				Address2 (6 Octets)
				...

PIN Code Reply Command
=======================

	Command Code:		0x0011
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Address (6 Octets)
				PIN_Length (1 Octet)
				PIN_Code (16 Octets)


PIN Code Negative Reply Command
===============================

	Command Code:		0x0012
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Address (6 Octets)


Set IO Capability Command
=========================

	Command Code:		0x0013
	Controller Index:	<controller id>
	Command Parameters:	IO_Capability (1 Octet)
	Return Parameters:


Pair Device Command
===================

	Command Code:		0x0014
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
				IO_Capability (1 Octet)
	Return Parameters:	Address (6 Octets)
				Status (1 Octet)


User Confirmation Reply Command
===============================

	Command Code:		0x0015
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:	Address (6 Octets)
				Status (1 Octet)


User Confirmation Negative Reply Command
========================================

	Command Code:		0x0016
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:	Address (6 Octets)
				Status (1 Octet)

Set Local Name Command
======================

	Command Code:		0x0017
	Controller Index:	<controller id>
	Command Parameters:	Name (249 Octets)
	Return Parameters:	Name (249 Octets)

Read Local Out Of Band Data Command
========================================

	Command Code:		0x0018
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Hash (16 Octets)
				Randomizer (16 Octets)


Add Remote Out Of Band Data Command
========================================

	Command Code:		0x0019
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
				Hash (16 Octets)
				Randomizer (16 Octets)
	Return Parameters:


Remove Remote Out Of Band Data Command
========================================

	Command Code:		0x001A
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:

Start Discovery Command
=======================

	Command Code:		0x0001B
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:

Stop Discovery Command
======================

	Command Code:		0x0001C
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:

Block Device Command
====================

	Command Code:		0x0001D
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:	Status (1 octet)

Unblock Device Command
======================

	Command Code:		0x0001E
	Controller Index:	<controller id>
	Command Parameters:	Address (6 Octets)
	Return Parameters:	Status (1 octet)

Read Tracing Buffer Size Command
================================

	Command Code:		<not yet assigned>
	Controller Index:	<non-controller>
	Command Parameters:
	Return Parameters:	Status (1 Octet)
				Buffer_Size (2 Octets)

		Buffer Size in Kilobytes


Write Tracing Buffer Size Command
=================================

	Command Code:		<not yet assigned>
	Controller Index:	<non-controller>
	Command Parameters:	Buffer_Size (2 Octets)
	Return Parameters:	Status (1 Octet)

		Buffer Size in Kilobytes


Read Controller Tracing Filter Command
=======================================

	Command Code:		<not yet assigned>
	Controller Index:	<controller id>
	Command Parameters:
	Return Parameters:	Status (1 Octet)
				Tracing_Enable (1 Octect)
				Num_Filters (2 Octect)
				Protocol_UUID[i] (16 Octets)
				Protocol_Identifier[i] (16 Octets)

		Tracing_Enable:	0x00 Tracing disabled
				0x01 Command and Event tracing
				0x02 Command, Event and ACL tracing
				0x03 Command, Event, ACL and SCO tracing


Write Controller Tracing Filter Command
=======================================

	Command Code:		<not yet assigned>
	Controller Index:	<controller id>
	Command Parameters:	Tracing_Enable (1 Octect)
				Num_Filters (2 Octect)
				Protocol_UUID[i] (16 Octets)
				Protocol_Identifier[i] (16 Octets)
	Return Parameters:	Status (1 Octet)


Command Complete Event
======================

Event Code		0x0001
Controller Index:	<controller id> or <non-controller>
Event Parameters	Command_Opcode (2 Octets)
			Return_Parameters


Command Status Event
====================

Event Code		0x0002
Controller Index:	<controller id> or <non-controller>
Event Parameters	Status (1 Octet)
			Command_Opcode (2 Octets)


Controller Error Event
======================

Event Code		0x0003
Controller Index:	<controller id>
Event Parameters	Error_Code (1 Octet)


Index Added Event
=================

Event Code		0x0004
Controller Index:	<controller id>
Event Parameters


Index Removed Event
===================

Event Code		0x0005
Controller Index:	<controller id>
Event Parameters

Controller Powered Event
========================

Event Code		0x0006
Controller Index:	<controller id>
Event Parameters	Powered (1 Octet)

Controller Discoverable Event
=============================

Event Code		0x0007
Controller Index:	<controller id>
Event Parameters	Discoverable (1 Octet)

Controller Connectable Event
============================

Event Code		0x0008
Controller Index:	<controller id>
Event Parameters	Connectable (1 Octet)

Controller Pairable Event
=========================

Event Code		0x0009
Controller Index:	<controller id>
Event Parameters	Pairable (1 Octet)

New Key Event
=============

Event Code		0x000A
Controller Index:	<controller id>
Event Parameters	Key {
				Address (6 Octets)
				Type (1 Octet)
				Value (16 Octets)
				PIN_Length (1 Octet)
			}
			Old_Key_Type (1 Octet)

Device Connected Event
======================

Event Code		0x000B
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)

Device Disconnected Event
=========================

Event Code		0x000C
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)

Connect Failed Event
====================

Event Code		0x000D
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)
			Status (1 Octet)

PIN Code Request Event
======================

Event Code		0x000E
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)
			Secure (1 Octet)

	Secure: 0x01  secure PIN code required
		0x00  secure PIN code not required

User Confirmation Request Event
===============================

Event Code		0x000F
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)
			Value (4 Octets)


Authentication Failed Event
===========================

Event Code		0x0010
Controller Index:	<controller id>
Event Parameters	Address (6 Octets)
			Status (1 Octet)

Local Name Changed Event
========================

Event Code		0x0011
Controller Index	<controller id>
Event Parameters	Name (249 Octets)

Device Found Event
==================

Event Code		0x0012
Controller Index	<controller id>
Event Parameters	Address (6 Octets)
			Class_Of_Device (3 Octets)
			RSSI (1 Octet)
			EIR_Data (240 Octets)

Remote Name Event
=================

Event Code		0x0013
Controller Index	<controller id>
Event Parameters	Address (6 Octets)
			Name (249 Octets)


Discovering Event
=================

Event Code		0x00014
Controller Index	<controller id>
Event Parameters	Discovering (1 Octet)
