void BluetoothHandler::getInfo() { qDebug() << "YYYY getInfo()"; // connect to the device information service // read the various characteristic values if (!bt_initialised) { qDebug() << "Bluetooth libraries are not initialised!"; return; } bt_gatt_conn_parm_t conParm; conParm.minConn = 0x30; conParm.maxConn = 0x50; conParm.latency = 0; conParm.superTimeout = 50; errno= 0; DataContainer* dc = DataContainer::getInstance(); QString device_addr = dc->getCurrentDeviceAddr(); // connect to the device information service int function_result = 0; int retry_count = 0; _handler->emitSignalInfoMessage("Connecting to Device Information Service"); /* BEGIN WORKAROUND - Temporary fix to address race condition */ do { function_result = bt_gatt_connect_service(device_addr.toAscii().constData(), DEVICE_INFORMATION_SERVICE_UUID, NULL, &conParm, this); retry_count++; delay(50); } while ((retry_count < 50) && (function_result == -1) && (errno== EBUSY)); if (function_result < 0) { qDebug() << "YYYY GATT connect service request DEVICE_INFORMATION_SERVICE_UUID failed: " + QString::number(errno) + " (" + QString(strerror(errno)) + ")"; Utilities::alert("GATT connect service request DEVICE_INFORMATION_SERVICE_UUID failed: " + QString::number(errno)); } else { qDebug() << "YYYY requested connection to DEVICE_INFORMATION_SERVICE_UUID OK"; } }
void BluetoothHandler::startProximityMonitoring() { qDebug() << "YYYY setting up proximity monitoring"; // connect to the immediate alert service // connect to the link loss service // connect to the TX power service // switch on link loss alerts by writing the Alert Level characteristic // read the TX Power Level periodically if (!bt_initialised) { qDebug() << "Bluetooth libraries are not initialised!"; return; } bt_gatt_conn_parm_t conParm; conParm.minConn = 0x30; conParm.maxConn = 0x50; conParm.latency = 0; conParm.superTimeout = 50; errno= 0; DataContainer* dc = DataContainer::getInstance(); QString device_addr = dc->getCurrentDeviceAddr(); // connect to the immediate alert service int function_result = 0; int retry_count = 0; /* BEGIN WORKAROUND - Temporary fix to address race condition */ do { function_result = bt_gatt_connect_service(device_addr.toAscii().constData(), IMMEDIATE_ALERT_SERVICE_UUID, NULL, &conParm, this); retry_count++; delay(50); } while ((retry_count < 50) && (function_result == -1) && (errno== EBUSY)); if (function_result < 0) { qDebug() << "YYYY GATT connect service request IMMEDIATE_ALERT_SERVICE_UUID failed: " + QString::number(errno) + " (" + QString(strerror(errno)) + ")"; Utilities::alert("GATT connect service request IMMEDIATE_ALERT_SERVICE_UUID failed: " + QString::number(errno)); } else { qDebug() << "YYYY requested connection to IMMEDIATE_ALERT_SERVICE_UUID OK"; } // connect to the link loss service function_result = 0; retry_count = 0; /* BEGIN WORKAROUND - Temporary fix to address race condition */ do { function_result = bt_gatt_connect_service(device_addr.toAscii().constData(), LINK_LOSS_SERVICE_UUID, NULL, &conParm, this); retry_count++; delay(50); } while ((retry_count < 50) && (function_result == -1) && (errno== EBUSY)); if (function_result < 0) { qDebug() << "YYYY GATT connect service request LINK_LOSS_SERVICE_UUID failed: " + QString::number(errno) + " (" + QString(strerror(errno)) + ")"; Utilities::alert("GATT connect service request LINK_LOSS_SERVICE_UUID failed: " + QString::number(errno)); } else { qDebug() << "YYYY requested connection to LINK_LOSS_SERVICE_UUID OK"; } // connect to the TX power service function_result = 0; retry_count = 0; /* BEGIN WORKAROUND - Temporary fix to address race condition */ do { function_result = bt_gatt_connect_service(device_addr.toAscii().constData(), TX_POWER_SERVICE_UUID, NULL, &conParm, this); retry_count++; delay(50); } while ((retry_count < 50) && (function_result == -1) && (errno== EBUSY)); if (function_result < 0) { Utilities::alert("GATT connect service request TX_POWER_SERVICE_UUID failed: " + QString::number(errno)); } else { qDebug() << "YYYY requested connection to TX_POWER_SERVICE_UUID OK"; } }