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

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


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

	Commands:

	0       4       8      12      16      202     24      28    31
	+-------------------------------+-----------------------------+
	|  Command Code                 |  Parameter Total Length     |
        +-------------------------------+-----------------------------+
	|                                                             |

	Events:

	0       4       8      12      16      202     24      28    31
	+-------------------------------+-----------------------------+
	|  Event Code                   |  Parameter Total Length     |
        +-------------------------------+-----------------------------+
	|                                                             |


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

	Command Code:		0x0001
	Command Parameters:
	Return Parameters:	Version (1 Octets)
				Revision (2 Octets)

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

	Command Code:		0x0002
	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
	Command Parameters:
	Return Paramters:	Num_Controllers (2 Octets)
				Controller_Index[i] (2 Octets)

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

	Command Code:		0x0004
	Command Parameters:	Controller_Index (2 Octets)
	Return Parameters:	Status (1 Octet)
				Controller_Index (2 Octets)
				Controller_Type (1 Octet)
				BD_ADDR (6 Octets)
				Supported_Features (8 Octets)

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

Read Controller Statistics Command
==================================

	Command Code:		0x0005
	Command Parameters:	Controller_Index (2 Octets)
	Return Paramters:	Status (1 Octet)
				Controller_Index (2 Octets)
				....

Read Controller Mode Command
============================

	Command Code:		0x0006
	Command Parameters:	Controller_Index (2 Octets)
	Return Paramters:	Status (1 Octect)
				Controller_Index (2 Octets)
				Enabled (1 Octet)
				Mode (1 Octet)

		Enabled:	0x00 Powered off
				0x01 Controller Enabled

		Mode:		0x00 Reserved
				0x01 Connectable (pairing forbidden)
				0x02 Connectable (pairing allowed)
				0x03 Discoverable (pairing forbidden)
				0x04 Discoverable (pairing allowed)

Write Controller Mode Command
=============================

	Command Code:		0x0007
	Command Parameters:	Controller_Index (2 Octets)
				...
	Return Parameters:	Status (1 Octet)
				Controller_Index (2 Octets)


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

	Command Code:		0x0004
	Command Parameters:
	Return Parameters:	Status (1 Octet)
				Buffer_Size (2 Octets)

		Buffer Size in Kilobytes

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

	Command Code:		0x0005
	Command Parameters:	Buffer_Size (2 Octets)
	Return Parameters:	Status (1 Octet)

		Buffer Size in Kilobytes

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

	Command Code:		0x0011
	Command Parameters:	Controller_Index (2 Octects)
	Return Parameters:	Status (1 Octet)
				Controller_Index (2 Octets)
				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:		0x0012 (Group 0x0)
	Command Parameters:	Controller_Index (2 Octects)
				Tracing_Enable (1 Octect)
				Num_Filters (2 Octect)
				Protocol_UUID[i] (16 Octets)
				Protocol_Identifier[i] (16 Octets)
	Return Paramters:	Status (1 Octet)
				Controller_Index (2 Octets)



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

Event Code		0x0001
Event Parameters	Command_Opcode
			Return_Parameters


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

Event Code		0x0002
Event Parameters	Status
			Command_Opcode

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

Event Code		0x0003
Event Parameters	Error_Code
