void QBluetoothDeviceDiscoveryAgentPrivate::allocate() { Q_Q(QBluetoothDeviceDiscoveryAgent); /* connect to socker server */ int result = m_socketServer.Connect(); if (result != KErrNone) { _q_setError(QBluetoothDeviceDiscoveryAgent::UnknownError, QString("RSocketServ.Connect() failed with error")); return; } // create link manager device discoverer if (m_socketServer.Handle() != NULL) { // create new active object for querying devices m_deviceDiscovery = new BluetoothLinkManagerDeviceDiscoverer(m_socketServer); if (m_deviceDiscovery) { QObject::connect(m_deviceDiscovery, SIGNAL(deviceDiscoveryComplete()), q, SIGNAL(finished())); QObject::connect(m_deviceDiscovery, SIGNAL(deviceDiscovered(const QBluetoothDeviceInfo&)), q, SLOT(_q_newDeviceFound(const QBluetoothDeviceInfo&))); QObject::connect(m_deviceDiscovery, SIGNAL(linkManagerError(QBluetoothDeviceDiscoveryAgent::Error,QString)), q, SLOT(_q_setError(QBluetoothDeviceDiscoveryAgent::Error,QString))); QObject::connect(m_deviceDiscovery, SIGNAL(canceled()), q, SIGNAL(canceled())); } else { _q_setError(QBluetoothDeviceDiscoveryAgent::UnknownError, QString("Cannot allocate BluetoothLinkManagerDeviceDiscoverer: failed with error")); } } }
/*! Informs that our request has been prosessed and the data is available to be used. */ void BluetoothLinkManagerDeviceDiscoverer::RunL() { qDebug() << __PRETTY_FUNCTION__ << iStatus.Int(); switch (iStatus.Int()) { case KErrNone: // found device if (m_pendingCancel && !m_pendingStart) { m_pendingCancel = false; emit canceled(); } else { m_pendingCancel = false; m_pendingStart = false; // get next (possible) discovered device m_hostResolver.Next(m_entry, iStatus); SetActive(); emit deviceDiscovered(currentDeviceDataToQBluetoothDeviceInfo()); } break; case KErrHostResNoMoreResults: // done with search if (m_pendingCancel && !m_pendingStart){ // search was canceled prior to finishing m_pendingCancel = false; m_pendingStart = false; emit canceled(); } else if (m_pendingStart){ // search was restarted just prior to finishing m_pendingStart = false; m_pendingCancel = false; startDiscovery(m_discoveryType); } else { // search completed normally m_pendingStart = false; m_pendingCancel = false; emit deviceDiscoveryComplete(); } break; case KErrCancel: // user canceled search if (m_pendingStart){ // user activated search after cancel m_pendingStart = false; m_pendingCancel = false; startDiscovery(m_discoveryType); } else { // standard user cancel case m_pendingCancel = false; emit canceled(); } break; default: m_pendingStart = false; m_pendingCancel = false; setError(iStatus.Int()); } }