Telematics SDK - User Guide  v1.46.14
Using Sensor APIs to control sensor features

Using Sensor APIs to control sensor features

Please follow below steps as a guide to control sensor features

1. Get sensor factory

auto &sensorFactory = telux::sensor::SensorFactory::getInstance();

2. Prepare a callback that is invoked when the sensor sub-system initialization is complete

std::promise<telux::common::ServiceStatus> p;
auto initCb = [&p](telux::common::ServiceStatus status) {
std::cout << "Received service status: " << static_cast<int>(status) << std::endl;
p.set_value(status);
};

3. Get the sensor feature manager. If initialization fails, perform necessary error handling

std::shared_ptr<telux::sensor::ISensorFeatureManager> sensorFeatureManager
= sensorFactory.getSensorFeatureManager(initCb);
if (sensorFeatureManager == nullptr) {
std::cout << "sensor feature manager is nullptr" << std::endl;
exit(1);
}
std::cout << "obtained sensor feature manager" << std::endl;

4. Wait until initialization is complete

p.get_future().get();
if (sensorManager->getServiceStatus() != telux::common::ServiceStatus::SERVICE_AVAILABLE) {
std::cout << "Sensor service not available" << std::endl;
exit(1);
}

5. Get information regarding available sensor features

std::cout << "Sensor feature service is now available" << std::endl;
std::vector<telux::sensor::SensorFeature> sensorFeatures;
telux::common::Status status = sensorFeatureManager->getAvailableFeatures(sensorFeatures);
if (status != telux::common::Status::SUCCESS) {
std::cout << "Failed to get information on available features" << static_cast<int>(status)
<< std::endl;
exit(1);
}
std::cout << "Received sensor features" << std::endl;
for (auto feature : sensorFeatures) {
printSensorFeatureInfo(feature);
}

6. Create and register a sensor feature event listener

std::shared_ptr<SensorFeatureEventListener> sensorFeatureEventListener
= std::make_shared<SensorFeatureEventListener>();
sensorFeatureManager->registerListener(sensorFeatureEventListener);

7. Enable the required features

status = sensorFeatureManager->enableFeature(name);
if (status != telux::common::Status::SUCCESS) {
std::cout << "Failed to enable feature: " << name << std::endl;
exit(1);
}

8. Receive sensor feature events with the registered listener

virtual void onEvent(telux::sensor::SensorFeatureEvent event) override {
printSensorFeatureEvent(event);
}

9. When the sensor feature(s) are no longer necessary, disable them

status = sensorFeatureManager->disableFeature(name);
if (status != telux::common::Status::SUCCESS) {
std::cout << "Failed to disable feature: " << name << std::endl;
exit(1);
}

10. Release the instance of ISensorFeatureManager to cleanup resources

sensorFeatureManager = nullptr;