<?xml version="1.0" encoding="UTF-8" ?>

<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">

  <interface name="org.freedesktop.ModemManager.Modem">
    <method name="Enable">
      <tp:docstring>
	Enable the device. Initializes the modem.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_enable"/>
      <arg name="enable" type="b" direction="in">
	<tp:docstring>
	  True to enable the device, False to disable.
	</tp:docstring>
      </arg>
    </method>

    <method name="Connect">
      <tp:docstring>
	Dial in.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_connect"/>
      <arg name="number" type="s" direction="in">
	<tp:docstring>
	  The number to use for dialing.
      </tp:docstring>
      </arg>
    </method>

    <method name="Disconnect">
      <tp:docstring>
	Disconnect modem.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_disconnect"/>
    </method>

    <method name="GetIP4Config">
      <tp:docstring>
	Request the IP4 configuration from the device.
	Note that it'll only be supported for IPMethod MM_MODEM_IP_METHOD_STATIC.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_get_ip4_config"/>
      <arg name="address" type="(uuuu)" direction="out">
	Structure containing IP4 address, DNS1, DNS2, DNS3.
	The DNS list is padded with 0's if there's less than 3 DNS servers.
      </arg>
    </method>

    <method name="GetInfo">
      <tp:docstring>
        Get the card information (manufacturer, modem, version).
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_get_info"/>
      <arg name="info" type="(sss)" direction="out">
        <tp:docstring>
          Structure containing manufacturer, model, and version (revision) of the card.
        </tp:docstring>
      </arg>
    </method>

    <method name="Reset">
      <tp:docstring>
        Clear non-persistent configuration and state, and return the device to
        a newly-powered-on state.  This command may power-cycle the device.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_reset"/>
    </method>

    <method name="FactoryReset">
      <tp:docstring>
        Clear the modem's configuration (including persistent configuration and
        state), and return the device to a factory-default state. This command
        may or may not power-cycle the device.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_modem_factory_reset"/>
      <arg name="code" type="s" direction="in">
        Carrier-supplied code required to reset the modem.  Ignored if not required.
      </arg>
    </method>

    <signal name="StateChanged">
      <tp:docstring>
        The modem's state (see the State property) changed.
      </tp:docstring>
      <arg name="old" type="u">
        <tp:docstring>
          Old state.
        </tp:docstring>
      </arg>
      <arg name="new" type="u">
        <tp:docstring>
          New state.
        </tp:docstring>
      </arg>
      <arg name="reason" type="u" tp:type="MM_MODEM_STATE_CHANGED_REASON">
        <tp:docstring>
          Reason for this state change.
        </tp:docstring>
      </arg>
    </signal>

    <property name="Device" type="s" access="read">
      <tp:docstring>
	The modem port to use for IP configuration and traffic.
      </tp:docstring>
    </property>

    <property name="DeviceIdentifier" type="s" access="read">
      <tp:docstring>
	A best-effort device identifier based on various device information like
	model name, firmware revision, USB/PCI/PCMCIA IDs, and other properties.
	This ID is not guaranteed to be unique and may be shared between
	identical devices with the same firmware, but is intended to be
	"unique enough" for use as a casual device identifier for various
	user experience operations.  This is not the device's IMEI or ESN since
	those may not be available before unlocking the device via a PIN.
      </tp:docstring>
    </property>

    <property name="MasterDevice" type="s" access="read">
      <tp:docstring>
	The physical modem device reference (ie, USB, PCI, PCMCIA device), which
	may be dependent upon the operating system.  In Linux for example, this
	points to a sysfs path of the usb_device object.
      </tp:docstring>
    </property>

    <property name="Driver" type="s" access="read">
      <tp:docstring>
        The driver handling the device.
      </tp:docstring>
    </property>

    <property name="Type" type="u" access="read" tp:type="MM_MODEM_TYPE">
      <tp:docstring>
        The modem type.
      </tp:docstring>
    </property>

    <property name="Enabled" type="b" access="read">
      <tp:docstring>
        TRUE if the modem is enabled (ie, powered and usable), FALSE if it is disabled.
      </tp:docstring>
    </property>

    <property name="EquipmentIdentifier" type="s" access="read">
      <tp:docstring>
        The identity of the device. This will be the IMEI number for
        GSM devices and the hex-format ESN/MEID for CDMA devices.
      </tp:docstring>
    </property>

    <property name="UnlockRequired" type="s" access="read">
      <tp:docstring>
        Empty if the device is usable without an unlock code or has already
        been unlocked. If the device needs to be unlocked before becoming usable this
        property contains the specific unlock code required.  Valid unlock code values
        are "" (blank), "sim-pin", "sim-puk", "ph-sim-pin", "ph-fsim-pin",
        "ph-fsim-puk", "sim-pin2", "sim-puk2", "ph-net-pin", "ph-net-puk",
        "ph-netsub-pin", "ph-netsub-puk", "ph-sp-pin", "ph-sp-puk", "ph-corp-pin", and
        "ph-corp-puk".
      </tp:docstring>
    </property>

    <property name="UnlockRetries" type="u" access="read">
      <tp:docstring>
        The number of unlock retries remaining for the unlock code given by the property UnlockRequired, or 999 if
        the device does not support reporting unlock retries.
      </tp:docstring>
    </property>

    <property name="IpMethod" type="u" access="read" tp:type="MM_MODEM_IP_METHOD">
      <tp:docstring>
        The IP configuration method.
      </tp:docstring>
    </property>

    <!-- This ought to be of tp:type="MM_MODEM_STATE" but there are a couple
         more wrinkles to be sorted out before we can export that here.
         Also, Enabled should be folded into this. -->
    <property name="State" type="u" access="read">
      <tp:docstring>
        State of the modem.
      </tp:docstring>
    </property>

    <tp:enum name="MM_MODEM_TYPE" type="u">
      <tp:enumvalue suffix="GSM" value="1">
	<tp:docstring>
	  A GSM device.
	</tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="CDMA" value="2">
	<tp:docstring>
	  A CDMA device.
	</tp:docstring>
      </tp:enumvalue>
    </tp:enum>

    <tp:enum name="MM_MODEM_IP_METHOD" type="u">
      <tp:enumvalue suffix="PPP" value="0">
	<tp:docstring>
	  Use PPP to get the address.
	</tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="STATIC" value="1">
	<tp:docstring>
	  Static configuration, the modem will provide IP information.
	</tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DHCP" value="2">
	<tp:docstring>
	  Use DHCP
	</tp:docstring>
      </tp:enumvalue>
    </tp:enum>

    <tp:enum name="MM_MODEM_STATE_CHANGED_REASON" type="u">
      <tp:enumvalue suffix="UNKNOWN" value="0">
        <tp:docstring>
          Reason unknown or not reportable.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="USER_REQUESTED" value="1">
        <tp:docstring>
          State change was requested by an interface user.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="SUSPEND" value="2">
        <tp:docstring>
          State change was caused by a system suspend.
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>


  </interface>
</node>
