BlueZ D-Bus Advertisement Monitor API Description


This API allows an client to specify a job of monitoring advertisements by registering the root of hierarchy and then exposing advertisement monitors under the root with filtering conditions, thresholds of RSSI and timers of RSSI thresholds.

Once a monitoring job is activated by BlueZ, the client can expect to get notified on the targeted advertisements no matter if there is an ongoing discovery session (a discovery session is started/stopped with methods in org.bluez.Adapter1 interface).

Advertisement Monitor hierarchy

Service org.bluez Interface org.bluez.AdvertisementMonitor1 [experimental] Object path freely definable

Methods void Release() [noreply]

        This gets called as a signal for a client to perform
        clean-up when (1)a monitor cannot be activated after it
        was exposed or (2)a monitor has been deactivated.

    void Activate() [noreply]

        After a monitor was exposed, this gets called as a
        signal for client to get acknowledged when a monitor
        has been activated, so the client can expect to receive
        calls on DeviceFound() or DeviceLost().

    void DeviceFound(object device) [noreply]

        This gets called to notify the client of finding the
        targeted device. Once receiving the call, the client
        should start to monitor the corresponding device to
        retrieve the changes on RSSI and advertisement content.

    void DeviceLost(object device) [noreply]

        This gets called to notify the client of losing the
        targeted device. Once receiving this call, the client
        should stop monitoring the corresponding device.

Properties string Type [read-only]

        The type of the monitor. See SupportedMonitorTypes in
        org.bluez.AdvertisementMonitorManager1 for the available
        options.

    (Int16, Uint16, Int16, Uint16) RSSIThreshholdsAndTimers [read-only, optional]

        This contains HighRSSIThreshold, HighRSSIThresholdTimer,
        LowRSSIThreshold, LowRSSIThresholdTimer in order. The
        unit of HighRSSIThreshold and LowRSSIThreshold is dBm.
        The unit of HighRSSIThresholdTimer and
        LowRSSIThresholdTimer is second.

        If these are provided, RSSI would be used as a factor to
        notify the client of whether a device stays in range or
        move out of range. A device is considered in-range when
        the RSSIs of the received advertisement(s) during
        HighRSSIThresholdTimer seconds exceed HighRSSIThreshold.
        Likewise, a device is considered out-of-range when the
        RSSIs of the received advertisement(s) during
        LowRSSIThresholdTimer do not reach LowRSSIThreshold.

    array{(uint8, uint8, string)} Patterns [read-only, optional]

        If Type is set to 0x01, this must exist and has at least
        one entry in the array.

        The structure of a pattern contains the following.
        uint8 start_position
            The index in an AD data field where the search
            should start. The beginning of an AD data field
            is index 0.
        uint8 AD_data_type
            See https://www.bluetooth.com/specifications/
            assigned-numbers/generic-access-profile/ for
            the possible allowed value.
        string content_of_pattern
            This is the value of the pattern.

Advertisement Monitor Manager hierarchy

Service org.bluez Interface org.bluez.AdvertisementMonitorManager1 [experimental] Object path /org/bluez/{hci0,hci1,...}

Methods void RegisterMonitor(object application)

        This registers a hierarchy of advertisement monitors.
        The application object path together with the D-Bus
        system bus connection ID define the identification of
        the application registering advertisement monitors.

        Possible errors: org.bluez.Error.InvalidArguments
                 org.bluez.Error.AlreadyExists

    void UnregisterMonitor(object application)

        This unregisters advertisement monitors that have been
        previously registered. The object path parameter must
        match the same value that has been used on
        registration.

        Possible errors: org.bluez.Error.InvalidArguments
                 org.bluez.Error.DoesNotExist

Properties array{string} SupportedMonitorTypes [read-only]

        This lists the supported types of advertisement
        monitors. An application should check this before
        instantiate and expose an object of
        org.bluez.AdvertisementMonitor1.

        Possible values for monitor types:

        "or_patterns"
            Patterns with logic OR applied. With this type,
            property "Patterns" must exist and has at least
            one pattern.

    array{string} SupportedFeatures [read-only]

        This lists the features of advertisement monitoring
        supported by BlueZ.

        Possible values for features:

        "controller-patterns"
            If the controller is capable of performing
            advertisement monitoring by patterns, BlueZ
            would offload the patterns to the controller to
            reduce power consumption.