3 * meego handset bluetooth
4 * Copyright © 2010, Intel Corporation.
6 * This program is licensed under the terms and conditions of the
7 * Apache License, version 2.0. The full text of the Apache License is at
8 * http://www.apache.org/licenses/LICENSE-2.0
12 #include "nearbydevicesmodel.h"
13 #include "bluetoothbaseagent.h"
15 NearbyDevicesModel::NearbyDevicesModel(QObject *parent) :
16 QAbstractListModel(parent), adapter(NULL), agent(NULL)
18 manager = new OrgBluezManagerInterface(
20 "/", QDBusConnection::systemBus(), this);
22 connect(manager,SIGNAL(AdapterAdded(QDBusObjectPath)),this,SLOT(adapterAdded(QDBusObjectPath)));
23 connect(manager,SIGNAL(AdapterRemoved(QDBusObjectPath)),this,SLOT(adapterRemoved(QDBusObjectPath)));
24 adapterAdded(QDBusObjectPath());
26 QHash<int,QByteArray> roles;
27 QMetaObject properties = NearbyItem::staticMetaObject;
28 for(int i=0; i<properties.propertyCount();i++)
30 roles[i]=properties.property(i).name();
36 int NearbyDevicesModel::rowCount(const QModelIndex &parent) const
39 return devices.size();
42 QVariant NearbyDevicesModel::data(const QModelIndex &index, int role) const
45 if(!index.isValid() || index.row() < 0)
47 qDebug()<<"invalid index"<<index.row();
51 QString roleName = roleNames()[role];
52 QMetaObject object = NearbyItem::staticMetaObject;
54 for(int i=0; i<object.propertyCount(); i++)
56 if(object.property(i).name() == roleName)
59 return object.property(i).read(devices[index.row()]);
66 void NearbyDevicesModel::pair(QString hwaddy)
69 qDebug()<<"attempting to pair with "<<hwaddy;
71 if(!agent) agent = new AsyncAgent("/temp/agent", this);
73 adapter->CreatePairedDevice(hwaddy,
74 QDBusObjectPath("/temp/agent"),"");
76 //qDebug()<<"new object created: "<<object.path();
79 void NearbyDevicesModel::discover(bool start)
84 adapter->StartDiscovery();
85 else adapter->StopDiscovery();
88 void NearbyDevicesModel::removeAll(bool)
90 for(int i=0;i<devices.size();i++)
96 void NearbyDevicesModel::replyRequestConfirmation(bool confirmed)
98 qDebug()<<"reply to RequestConfirmation:"<<confirmed;
99 if(agent) agent->replyRequestConfirmation(confirmed);
102 void NearbyDevicesModel::replyPasskey(uint passkey)
104 if(agent) agent->replyPasskey(passkey);
107 void NearbyDevicesModel::replyRequestPidCode(QString pidCode)
109 if(agent) agent->replyRequestPidCode(pidCode);
112 void NearbyDevicesModel::setAdapterProperty(QString name, QVariant value)
114 if(adapter) adapter->setProperty(name.toAscii().data(),value);
117 void NearbyDevicesModel::deviceCreated(QString hwaddy, QVariantMap properties)
120 foreach(NearbyItem* path, devices)
122 if(path->address() == hwaddy)
131 beginInsertRows(QModelIndex(), devices.size(), devices.size());
133 NearbyItem* item = new NearbyItem(properties["Name"].toString(),
134 hwaddy,properties["Icon"].toString(),properties["LegacyPairing"].toBool(),this);
136 devices.append(item);
137 emit nearbyDeviceFound(devices.indexOf(item));
142 void NearbyDevicesModel::deviceRemoved(QString hwaddy)
144 foreach(NearbyItem* device, devices)
146 if(device->address() == hwaddy)
148 int i=devices.indexOf(device);
149 //if(i == -1) continue;
150 beginRemoveRows(QModelIndex(),i,i);
152 emit nearbyDeviceRemoved(i);
158 void NearbyDevicesModel::adapterAdded(QDBusObjectPath path)
160 if(adapter && adapter->path() == path.path()) return;
162 QDBusObjectPath adapterpath = manager->DefaultAdapter();
164 if(adapterpath.path() == "")
167 adapter = new OrgBluezAdapterInterface(
170 QDBusConnection::systemBus(), this);
173 SIGNAL(DeviceFound(QString, QVariantMap)),
175 SLOT(deviceCreated(QString, QVariantMap)));
177 SIGNAL(DeviceDisappeared(QString)),
179 SLOT(deviceRemoved(QString)));
181 SIGNAL(PropertyChanged(QString,QDBusVariant)),
183 SLOT(adapterPropertiesChangedSlot(QString,QDBusVariant)));
186 void NearbyDevicesModel::adapterRemoved(QDBusObjectPath)
188 QDBusObjectPath adapterpath = manager->DefaultAdapter();
190 if(adapterpath.path() == "")
193 if(adapter){ delete adapter; adapter = NULL; }
198 void NearbyDevicesModel::adapterPropertiesChangedSlot(QString n,QDBusVariant v)
200 adapterPropertiesChanged(n,v.variant());