aboutsummaryrefslogtreecommitdiff
path: root/src/bluez.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/bluez.vala')
-rw-r--r--src/bluez.vala139
1 files changed, 134 insertions, 5 deletions
diff --git a/src/bluez.vala b/src/bluez.vala
index 14984bf..0a5a393 100644
--- a/src/bluez.vala
+++ b/src/bluez.vala
@@ -9,34 +9,163 @@
* license.
*/
+public class BluezManager : Object
+{
+ public BluezAdapter default_adapter;
+
+ public BluezManager ()
+ {
+ }
+
+ public void start () throws IOError
+ {
+ proxy = Bus.get_proxy_sync<BluezManagerInterface> (BusType.SYSTEM, "org.bluez", "/");
+ proxy.default_adapter_changed.connect (default_adapter_changed_cb);
+ default_adapter_changed_cb (proxy.default_adapter ());
+ }
+
+ private BluezManagerInterface proxy;
+
+ private void default_adapter_changed_cb (string path)
+ {
+ default_adapter = new BluezAdapter (path);
+ }
+}
+
+public class BluezAdapter : Object
+{
+ public List<BluezDevice> get_devices ()
+ {
+ var devices = new List<BluezDevice> ();
+ foreach (var device in _devices)
+ devices.append (device);
+ return devices;
+ }
+
+ private bool _discoverable = false;
+ public bool discoverable
+ {
+ get { return _discoverable; }
+ set
+ {
+ proxy.set_property ("Discoverable", new Variant.boolean (value));
+ }
+ }
+
+ internal string path;
+ private List<BluezDevice> _devices;
+ private BluezAdapterInterface proxy;
+
+ internal BluezAdapter (string path)
+ {
+ this.path = path;
+ _devices = new List<BluezDevice> ();
+ proxy = Bus.get_proxy_sync<BluezAdapterInterface> (BusType.SYSTEM, "org.bluez", path);
+
+ proxy.property_changed.connect (property_changed_cb);
+ var properties = proxy.get_properties ();
+ var iter = HashTableIter<string, Variant> (properties);
+ string name;
+ Variant value;
+ while (iter.next (out name, out value))
+ property_changed_cb (name, value);
+
+ proxy.device_created.connect (device_created_cb);
+ foreach (var device_path in proxy.list_devices ())
+ device_created_cb (device_path);
+ }
+
+ private void property_changed_cb (string name, Variant value)
+ {
+ stderr.printf ("%s %s=%s\n", path, name, value.print (false));
+ if (name == "Discoverable" && value.is_of_type (VariantType.BOOLEAN))
+ _discoverable = value.get_boolean ();
+ }
+
+ private void device_created_cb (string path)
+ {
+ foreach (var device in _devices)
+ if (device.path == path)
+ return;
+
+ var device = new BluezDevice (path);
+ _devices.append (device);
+ }
+}
+
+public class BluezDevice : Object
+{
+ private string _name = null;
+ public string name { get { return _name; } }
+
+ internal string path;
+ private BluezDeviceInterface proxy;
+
+ internal BluezDevice (string path)
+ {
+ this.path = path;
+ proxy = Bus.get_proxy_sync<BluezDeviceInterface> (BusType.SYSTEM, "org.bluez", path);
+
+ proxy.property_changed.connect (property_changed_cb);
+ var properties = proxy.get_properties ();
+ var iter = HashTableIter<string, Variant> (properties);
+ string name;
+ Variant value;
+ while (iter.next (out name, out value))
+ property_changed_cb (name, value);
+
+ //var input_device = Bus.get_proxy_sync<BluezInputInterface> (BusType.SYSTEM, "org.bluez", path);
+ //input_device.property_changed.connect (input_property_changed_cb);
+ }
+
+ private void property_changed_cb (string name, Variant value)
+ {
+ stderr.printf ("%s %s=%s\n", path, name, value.print (false));
+ if (name == "Name" && value.is_of_type (VariantType.STRING))
+ _name = value.get_string ();
+ }
+
+ private void input_property_changed_cb (string name, Variant value)
+ {
+ stderr.printf ("%s i %s=%s\n", path, name, value.print (false));
+ }
+}
+
[DBus (name = "org.bluez.Manager")]
-public interface BluezManager : Object
+private interface BluezManagerInterface : Object
{
public abstract string default_adapter () throws IOError;
+ public signal void default_adapter_changed (string path);
}
[DBus (name = "org.bluez.Adapter")]
-public interface BluezAdapter : Object
+private interface BluezAdapterInterface : Object
{
public abstract string[] list_devices () throws IOError;
public abstract HashTable<string, Variant> get_properties () throws IOError;
public abstract void set_property (string name, Variant value) throws IOError;
+ public signal void property_changed (string name, Variant value);
+ public signal void device_created (string path);
}
[DBus (name = "org.bluez.Device")]
-public interface BluezDevice : Object
+private interface BluezDeviceInterface : Object
{
public abstract HashTable<string, Variant> get_properties () throws IOError;
+ public signal void property_changed (string name, Variant value);
}
[DBus (name = "org.bluez.Audio")]
-public interface BluezAudio : Object
+private interface BluezAudioInterface : Object
{
public abstract void connect () throws IOError;
}
[DBus (name = "org.bluez.Input")]
-public interface BluezInput : Object
+private interface BluezInputInterface : Object
{
public abstract void connect () throws IOError;
+ public abstract void disconnect () throws IOError;
+ public abstract HashTable<string, Variant> get_properties () throws IOError;
+ public signal void property_changed (string name, Variant value);
}