diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2006-04-16 18:20:04 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2006-04-16 18:20:04 +0000 |
commit | edf44daa60e0e73ead85092a57b52b9735d44bdd (patch) | |
tree | 9f624abdd9b4ed709e41e8e2b670f86a59a54ea9 | |
parent | 309d97605a26e8c3dc843feb334c9529cf7ad0e8 (diff) |
Add C#/Mono wrapper
-rw-r--r-- | hcid/Bluetooth.cs | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/hcid/Bluetooth.cs b/hcid/Bluetooth.cs new file mode 100644 index 00000000..24998af5 --- /dev/null +++ b/hcid/Bluetooth.cs @@ -0,0 +1,146 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2005-2006 Marcel Holtmann <marcel@holtmann.org> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +namespace Bluetooth +{ + using System; + using DBus; + + public delegate void RemoteDeviceFoundHandler(string address, Int16 rssi, + string major, string minor, string[] services); + public delegate void RemoteNameUpdatedHandler(string address, string name); + + [Interface("org.bluez.Adapter")] + internal abstract class AdapterProxy + { + [Method] public abstract string GetAddress(); + [Method] public abstract string GetVersion(); + [Method] public abstract string GetRevision(); + [Method] public abstract string GetManufacturer(); + [Method] public abstract string GetCompany(); + + [Method] public abstract void SetDiscoverableTimeout(int timeout); + [Method] public abstract void SetMode(string mode); + + [Method] public abstract string GetName(); + [Method] public abstract void SetName(string name); + [Method] public abstract string GetRemoteAlias(string address); + [Method] public abstract void SetRemoteAlias(string address, string alias); + + [Method] public abstract string[] ListBondings(); + [Method] public abstract bool HasBonding(string address); + +#pragma warning disable 0067 + [Signal] public virtual event RemoteDeviceFoundHandler RemoteDeviceFound; + [Signal] public virtual event RemoteNameUpdatedHandler RemoteNameUpdated; +#pragma warning restore 0067 + } + + public class Adapter : IDisposable + { + private Service service; + private Connection connection; + private AdapterProxy adapter; + private string path; + +#pragma warning disable 0067 + public event RemoteDeviceFoundHandler RemoteDeviceFound; + public event RemoteNameUpdatedHandler RemoteNameUpdated; +#pragma warning restore 0067 + + public Adapter() : this("/org/bluez/Adapter/hci0") + { + } + + public Adapter(string path) + { + connection = Bus.GetSystemBus(); + service = Service.Get(connection, "org.bluez"); + + this.path = path; + + adapter = (AdapterProxy) service.GetObject(typeof(AdapterProxy), path); + + service.SignalCalled += OnSignalCalled; + + adapter.RemoteDeviceFound += OnRemoteDeviceFound; + adapter.RemoteNameUpdated += OnRemoteNameUpdated; + } + + public void Dispose() + { + GC.SuppressFinalize(adapter); + } + + private void OnSignalCalled(Signal signal) + { + if (signal.InterfaceName != "org.bluez.Adapter") + return; + + if (signal.PathName != path) + return; + } + + private void OnRemoteDeviceFound(string address, Int16 rssi, + string major, string minor, string[] services) + { + if (RemoteDeviceFound != null) + RemoteDeviceFound(address, rssi, major, minor, services); + } + + private void OnRemoteNameUpdated(string address, string name) + { + if (RemoteNameUpdated != null) + RemoteNameUpdated(address, name); + } + + public string Address { + get { return adapter.GetAddress(); } + } + + public string Version { + get { return adapter.GetVersion(); } + } + + public string Revision { + get { return adapter.GetRevision(); } + } + + public string Manufacturer { + get { return adapter.GetManufacturer(); } + } + + public string Company { + get { return adapter.GetCompany(); } + } + + public string Name { + get { return adapter.GetName(); } + set { adapter.SetName(value); } + } + + public override string ToString() { + return Address; + } + } +} |