<!--
    Copyright 2015 Intel Corporation All Rights Reserved.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    ******************************************************************

    The introspection XML found in this file is used to generate GDBus
    skeleton code that will be used by the IoTivity BlueZ-based GATT
    Service (OIC Transport Profile) implementation.

    See the GATT and LE Advertisement API documentation in the BlueZ
    gatt-api.txt and advertisement-api.txt documents, respectively for
    further details.
-->

<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/org/pipedald/gatt/service">

    <!--
      ***********************************************
      BlueZ GATT Service interface introspection XML.
      ***********************************************
  -->
    <interface name="org.bluez.GattService1">

        <property name="UUID" type="s" access="read"/>
        <property name="Primary" type="b" access="read"/>
        <property name="Characteristics" type="ao" access="read"/>

        <!--
    ===========================================================
    The "Device" property is only exposed on the client side by
    BlueZ itself.  It isn't set by the IoTivity server side.
    Don't bother generating skeleton code for it.
    ===========================================================
    <property name="Device" type="o" access="read">
    </property>

    ===========================================================
    The "Includes" property is not supported as of BlueZ 5.30.
    It also isn't used by the IoTivity server side
    implementation.  Don't bother generating skeleton code for
    it.
    ===========================================================
    <property name="Includes" type="ao" access="read"/>
    -->

    </interface>

    <!--
      ******************************************************
      BlueZ GATT Characteristic interface introspection XML.
      ******************************************************
  -->
    <interface name="org.bluez.GattCharacteristic1">
        <!--
    ============================================================
    None of the OIC GATT characteristics support the "ReadValue"
    method.  Don't bother generating skeleton code for it.
    ============================================================
    <method name="ReadValue">
      <arg name="value" type="ay" direction="out"/>
      <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
    </method>
    -->

        <method name="WriteValue">
            <arg name="value" type="ay" direction="in">
                <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
            </arg>
        </method>

        <method name="StartNotify"/>

        <method name="StopNotify"/>


        <property name="UUID" type="s" access="read"/>
        <property name="Service" type="o" access="read"/>

        <property name="Value" type="ay" access="read">
            <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
        </property>

        <property name="Notifying" type="b" access="read">
        </property>
        <property name="Flags" type="as" access="read"/>
        <property name="Descriptors" type="ao" access="read"/>
    </interface>

    <!--
      **************************************************
      BlueZ GATT Descriptor interface introspection XML.
      **************************************************
  -->
    <interface name="org.bluez.GattDescriptor1">
        <method name="ReadValue">
            <arg name="value" type="ay" direction="out">
                <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
            </arg>
        </method>

        <!--
    ============================================================
    None of the OIC GATT descriptors directly supported by
    IoTivity support the "WriteValue" method.  The OIC Client
    Characteristic Configuration Descriptor supports writes, but
    that descriptor is handled by BlueZ, not IoTivity, when the
    "notify" property is set on a given GATT characteristic.
    Don't bother generating skeleton code for it.
    ============================================================

    <method name="WriteValue">
      <arg name="value" type="ay" direction="in">
            <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
          </arg>
    </method>
    -->


        <property name="UUID" type="s" access="read"/>
        <property name="Characteristic" type="o" access="read"/>

        <property name="Value" type="ay" access="read">
            <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
        </property>

        <property name="Flags" type="as" access="read"/>
    </interface>

    <!--
      ***************************************************
      BlueZ LE Advertisement interface introspection XML.
      ***************************************************
  -->
    <interface name="org.bluez.LEAdvertisement1">
        <method name="Release">
            <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
        </method>


        <property name="Type" type="s" access="read"/>
        <property name="ServiceUUIDs" type="as" access="read"/>
        <property name="ManufacturerData" type="a{sv}" access="read"/>
        <property name="SolicitUUIDs" type="as" access="read"/>
        <property name="ServiceData" type="a{sv}" access="read"/>
        <property name="IncludeTxPower" type="b" access="read"/>
    </interface>

    <!--
    **************************************
    BlueZ LE instance interfaces.
    **************************************
-->

    <interface name="org.freedesktop.DBus.Introspectable">
        <method name="Introspect">
            <arg name="xml" type="s" direction="out"/>
        </method>
    </interface>
    <interface name="org.bluez.Adapter1">
        <method name="StartDiscovery"></method>
        <method name="SetDiscoveryFilter">
            <arg name="properties" type="a{sv}" direction="in"/>
        </method>
        <method name="StopDiscovery"></method>
        <method name="RemoveDevice">
            <arg name="device" type="o" direction="in"/>
        </method>
        <method name="GetDiscoveryFilters">
            <arg name="filters" type="as" direction="out"/>
        </method>
        <property name="Address" type="s" access="read"></property>
        <property name="AddressType" type="s" access="read"></property>
        <property name="Name" type="s" access="read"></property>
        <property name="Alias" type="s" access="readwrite"></property>
        <property name="Class" type="u" access="read"></property>
        <property name="Powered" type="b" access="readwrite"></property>
        <property name="Discoverable" type="b" access="readwrite"></property>
        <property name="DiscoverableTimeout" type="u" access="readwrite"></property>
        <property name="Pairable" type="b" access="readwrite"></property>
        <property name="PairableTimeout" type="u" access="readwrite"></property>
        <property name="Discovering" type="b" access="read"></property>
        <property name="UUIDs" type="as" access="read"></property>
        <property name="Modalias" type="s" access="read"></property>
        <property name="Roles" type="as" access="read"></property>
    </interface>
    <interface name="org.freedesktop.DBus.Properties">
        <method name="Get">
            <arg name="interface" type="s" direction="in"/>
            <arg name="name" type="s" direction="in"/>
            <arg name="value" type="v" direction="out"/>
        </method>
        <method name="Set">
            <arg name="interface" type="s" direction="in"/>
            <arg name="name" type="s" direction="in"/>
            <arg name="value" type="v" direction="in"/>
        </method>
        <method name="GetAll">
            <arg name="interface" type="s" direction="in"/>
            <arg name="properties" type="a{sv}" direction="out"/>
        </method>
        <signal name="PropertiesChanged">
            <arg name="interface" type="s"/>
            <arg name="changed_properties" type="a{sv}"/>
            <arg name="invalidated_properties" type="as"/>
        </signal>
    </interface>
    <interface name="org.bluez.GattManager1">
        <method name="RegisterApplication">
            <arg name="application" type="o" direction="in"/>
            <arg name="options" type="a{sv}" direction="in"/>
        </method>
        <method name="UnregisterApplication">
            <arg name="application" type="o" direction="in"/>
        </method>
    </interface>
    <interface name="org.bluez.LEAdvertisingManager1">
        <method name="RegisterAdvertisement">
            <arg name="advertisement" type="o" direction="in"/>
            <arg name="options" type="a{sv}" direction="in"/>
        </method>
        <method name="UnregisterAdvertisement">
            <arg name="service" type="o" direction="in"/>
        </method>
        <property name="ActiveInstances" type="y" access="read"></property>
        <property name="SupportedInstances" type="y" access="read"></property>
        <property name="SupportedIncludes" type="as" access="read"></property>
        <property name="SupportedSecondaryChannels" type="as" access="read"></property>
    </interface>
    <interface name="org.bluez.Media1">
        <method name="RegisterEndpoint">
            <arg name="endpoint" type="o" direction="in"/>
            <arg name="properties" type="a{sv}" direction="in"/>
        </method>
        <method name="UnregisterEndpoint">
            <arg name="endpoint" type="o" direction="in"/>
        </method>
        <method name="RegisterPlayer">
            <arg name="player" type="o" direction="in"/>
            <arg name="properties" type="a{sv}" direction="in"/>
        </method>
        <method name="UnregisterPlayer">
            <arg name="player" type="o" direction="in"/>
        </method>
        <method name="RegisterApplication">
            <arg name="application" type="o" direction="in"/>
            <arg name="options" type="a{sv}" direction="in"/>
        </method>
        <method name="UnregisterApplication">
            <arg name="application" type="o" direction="in"/>
        </method>
    </interface>
    <interface name="org.bluez.NetworkServer1">
        <method name="Register">
            <arg name="uuid" type="s" direction="in"/>
            <arg name="bridge" type="s" direction="in"/>
        </method>
        <method name="Unregister">
            <arg name="uuid" type="s" direction="in"/>
        </method>
    </interface>

</node>