NewBlue D-Bus LE Advertising API Description
******************************************

Advertising packets are structured data which is broadcast on the LE Advertising
channels and available for all devices in range.  Because of the limited space
available in LE Advertising packets (31 bytes), each packet's contents must be
carefully controlled.

NewBlue constructs the advertisement data from the structured data, configure
the data, set the advertisement parameters and enable advertisement.

Advertisement Data objects are registered freely and then referenced by NewBlue
when constructing the data.

LE Advertisement Data hierarchy
===============================

Specifies the Advertisement Data to be broadcast and some advertising
parameters.  Properties which are not present will not be included in the
data.  Required advertisement data types will always be included.
All UUIDs are 128-bit versions in the API, and 16 or 32-bit
versions of the same UUID will be used in the advertising data as appropriate.

Service         org.chromium.Newblue
Interface       org.bluez.LEAdvertisement1
Object path     freely definable

Methods         void Release() [noreply]

Properties      string Type

                array{string} ServiceUUIDs

                dict ManufacturerData

                array{string} SolicitUUIDs

                dict ServiceData

                bool IncludeTxPower


LE Advertising Manager hierarchy
================================

The Advertising Manager allows external applications to register Advertisement
Data which should be broadcast to devices.  Advertisement Data elements must
follow the API for LE Advertisement Data described above.

Service         org.chromium.Newblue
Interface       org.bluez.LEAdvertisingManager1 [Experimental]
Object path     /org/bluez/{hci0,hci1,...}

Methods         RegisterAdvertisement(object advertisement, dict options)

                        Possible errors: org.bluez.Error.Failed

                UnregisterAdvertisement(object advertisement)

                // NOT IMPLEMENTED
                void SetAdvertisingIntervals(uint16 min_interval_ms,
                                             uint16 max_interval_ms)

Properties      bool IsTXPowerSupported [readonly]
