Android: Gyroscope Fusion

MVOID SensorProviderService::doEnableSensor(const SensorConfig& config) { if (!isSupport()) { return; } android::hardware::sensors::V1_0::SensorType type = SensorType::GYROSCOPE; //HIDL process if (mSensorContext[config.type].mSensorStatus == STATUS_UNINITIALIZED) { mpSensorManager = ISensorManager::getService(); switch(config.type) { case SENSOR_TYPE_GYRO: type = SensorType::GYROSCOPE; break; case SENSOR_TYPE_ACCELERATION: type = SensorType::ACCELEROMETER; break; case SENSOR_TYPE_LIGHT: type = SensorType::LIGHT; break; #ifdef SENSOR_HUB_OIS case SENSOR_TYPE_OIS_DATA: type = (android::hardware::sensors::V1_0::SensorType)(SENSOR_TYPE_OIS + SENSOR_TYPE_DEVICE_PRIVATE_BASE); break; #endif case SENSOR_TYPE_ALS: type = (android::hardware::sensors::V1_0::SensorType)33171055; break; case SENSOR_TYPE_FLICKER_DET: type = (android::hardware::sensors::V1_0::SensorType)33171054; break; case SENSOR_TYPE_RGBW: type = (android::hardware::sensors::V1_0::SensorType)33171052; break; case SENSOR_TYPE_ALS_FRONT: type = SensorType::DEVICE_PRIVATE_BASE; break; default: MY_LOGW("unknown type(%d)", config.type); type = SensorType::DEVICE_PRIVATE_BASE; break; } IF_NULL_RETURN_VALUE(mpSensorManager, void()); if (mpDeathRecipient == NULL) { mpDeathRecipient = new SensorDeathRecipient(this); ::android::hardware::Return<bool> linked = mpSensorManager->linkToDeath(mpDeathRecipient, /*cookie*/ 0); if (!linked || !linked.isOk()) { MY_LOGE("Unable to link to sensor service death notifications"); return; } } ::android::hardware::Return<void> result = mpSensorManager->getDefaultSensor(type, [&](const SensorInfo& sensor, Result ret) { if (ret == Result::OK) { mSensorContext[config.type].mSensorHandle = sensor.sensorHandle; mSensorContext[config.type].mSensorName = sensor.name; MY_LOGI("getDefaultSensor[%d] successfully", config.type); } else { mSensorContext[config.type].mSensorStatus = STATUS_ERROR; } }); if (!result.isOk() || mSensorContext[config.type].mSensorStatus == STATUS_ERROR) { MY_LOGI("Unable to get Default Sensor[%d]... do nothing and return", config.type); return; } } if (mpListener == NULL) { //create SensorEventQueue and register callback mpListener = new SensorProviderListener(this); IF_NULL_RETURN_VALUE(mpSensorManager, void()); ::android::hardware::Return<void> result = mpSensorManager->createEventQueue(mpListener, [&](const sp<IEventQueue>& queue, Result ret) { ret == Result::OK ? mpEventQueue = queue : mpEventQueue = NULL; }); if (!result.isOk() || mpEventQueue == NULL) { MY_LOGE("createEventQueue FAIL!"); return; } } if (config.interval < mSensorContext[config.type].mCurrentInterval) { IF_NULL_RETURN_VALUE(mpEventQueue, void()); ::android::hardware::Return<Result> ret = mpEventQueue->enableSensor(mSensorContext[config.type].mSensorHandle, config.interval * 1000, 0 /* latency */); if (!ret.isOk()) { MY_LOGE("enable Sensor FAIL!"); return; } MY_LOGD("Sensor enabled, interval=%d ms, type=%d", config.interval, config.type); mSensorContext[config.type].mCurrentInterval = config.interval; mSensorContext[config.type].mSensorStatus = STATUS_INITIALIZED; } }
最新发布
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值