#include #include #include #include #include #include #include #include #include #include #ifndef Q_OS_ANDROID #include #else #include #endif #include #include #include #include int main(int argc, char *argv[]) { QScopedPointer app(new QGuiApplication(argc, argv)); //! [Advertising Data] advertisingData.setDiscoverability(QLowEnergyAdvertisingData::DiscoverabilityGeneral); advertisingData.setIncludePowerLevel(true); advertisingData.setLocalName("app"); // save chars for service QList services; services << (QBluetoothUuid::ServiceClassUuid::CyclingSpeedAndCadence); services << ((QBluetoothUuid::ServiceClassUuid)0xFF00); advertisingData.setServices(services); //! [Advertising Data] { QLowEnergyCharacteristicData charData; charData.setUuid(QBluetoothUuid::CharacteristicType::CSCFeature); charData.setProperties(QLowEnergyCharacteristic::Read); QByteArray value; if(!bike_wheel_revs) value.append((char)0x02); // crank supported else value.append((char)0x03); // crank and wheel supported value.append((char)0x00); charData.setValue(value); QLowEnergyCharacteristicData charData2; charData2.setUuid(QBluetoothUuid::CharacteristicType::SensorLocation); charData2.setProperties(QLowEnergyCharacteristic::Read); QByteArray valueLocaltion; valueLocaltion.append((char)13); // rear hub charData2.setValue(valueLocaltion); /*const QLowEnergyDescriptorData clientConfig2(QBluetoothUuid::ClientCharacteristicConfiguration, QByteArray(2, 0)); charData2.addDescriptor(clientConfig2);*/ QLowEnergyCharacteristicData charData3; charData3.setUuid(QBluetoothUuid::CharacteristicType::CSCMeasurement); charData3.setProperties(QLowEnergyCharacteristic::Read | QLowEnergyCharacteristic::Notify); QByteArray descriptor; descriptor.append((char)0x01); descriptor.append((char)0x00); const QLowEnergyDescriptorData clientConfig4(QBluetoothUuid::ClientCharacteristicConfiguration, descriptor); charData3.addDescriptor(clientConfig4); QLowEnergyCharacteristicData charData4; charData4.setUuid(QBluetoothUuid::CharacteristicType::SCControlPoint); charData4.setProperties(QLowEnergyCharacteristic::Write | QLowEnergyCharacteristic::Indicate); const QLowEnergyDescriptorData cpClientConfig(QBluetoothUuid::ClientCharacteristicConfiguration, QByteArray(2, 0)); charData4.addDescriptor(cpClientConfig); serviceData.setType(QLowEnergyServiceData::ServiceTypePrimary); serviceData.setUuid(QBluetoothUuid::ServiceClassUuid::CyclingSpeedAndCadence); serviceData.addCharacteristic(charData); serviceData.addCharacteristic(charData3); serviceData.addCharacteristic(charData2); serviceData.addCharacteristic(charData4); } { QLowEnergyCharacteristicData charData; charData.setUuid(QBluetoothUuid::CharacteristicType::ServiceChanged); charData.setProperties(QLowEnergyCharacteristic::Indicate); const QLowEnergyDescriptorData cpClientConfig(QBluetoothUuid::ClientCharacteristicConfiguration, QByteArray(2, 0)); charData.addDescriptor(cpClientConfig); serviceDataChanged.setType(QLowEnergyServiceData::ServiceTypePrimary); serviceDataChanged.setUuid(QBluetoothUuid::ServiceClassUuid::GenericAttribute); serviceDataChanged.addCharacteristic(charData); } //! [Start Advertising] leController = QLowEnergyController::createPeripheral(); Q_ASSERT(leController); serviceChanged = leController->addService(serviceDataChanged); service = leController->addService(serviceData); QLowEnergyAdvertisingParameters pars = QLowEnergyAdvertisingParameters(); pars.setInterval(100, 100); leController->startAdvertising(pars, advertisingData, advertisingData); }