Loading libs/sensor/ISensorServer.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -139,10 +139,12 @@ public: } virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) { int deviceId, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) { Parcel data, reply; data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); data.writeString16(opPackageName); data.writeInt32(deviceId); data.writeUint32(size); data.writeInt32(type); data.writeInt32(format); Loading Loading @@ -237,6 +239,7 @@ status_t BnSensorServer::onTransact( case CREATE_SENSOR_DIRECT_CONNECTION: { CHECK_INTERFACE(ISensorServer, data, reply); const String16& opPackageName = data.readString16(); const int deviceId = data.readInt32(); uint32_t size = data.readUint32(); int32_t type = data.readInt32(); int32_t format = data.readInt32(); Loading @@ -246,8 +249,8 @@ status_t BnSensorServer::onTransact( return BAD_VALUE; } native_handle_set_fdsan_tag(resource); sp<ISensorEventConnection> ch = createSensorDirectConnection(opPackageName, size, type, format, resource); sp<ISensorEventConnection> ch = createSensorDirectConnection( opPackageName, deviceId, size, type, format, resource); native_handle_close_with_tag(resource); native_handle_delete(resource); reply->writeStrongBinder(IInterface::asBinder(ch)); Loading libs/sensor/SensorManager.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -315,6 +315,12 @@ bool SensorManager::isDataInjectionEnabled() { int SensorManager::createDirectChannel( size_t size, int channelType, const native_handle_t *resourceHandle) { static constexpr int DEFAULT_DEVICE_ID = 0; return createDirectChannel(DEFAULT_DEVICE_ID, size, channelType, resourceHandle); } int SensorManager::createDirectChannel( int deviceId, size_t size, int channelType, const native_handle_t *resourceHandle) { Mutex::Autolock _l(mLock); if (assertStateLocked() != NO_ERROR) { return NO_INIT; Loading @@ -327,7 +333,7 @@ int SensorManager::createDirectChannel( } sp<ISensorEventConnection> conn = mSensorServer->createSensorDirectConnection(mOpPackageName, mSensorServer->createSensorDirectConnection(mOpPackageName, deviceId, static_cast<uint32_t>(size), static_cast<int32_t>(channelType), SENSOR_DIRECT_FMT_SENSORS_EVENT, resourceHandle); Loading libs/sensor/include/sensor/ISensorServer.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ public: virtual int32_t isDataInjectionEnabled() = 0; virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) = 0; int deviceId, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) = 0; virtual int setOperationParameter( int32_t handle, int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) = 0; Loading libs/sensor/include/sensor/SensorManager.h +2 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public: String8 packageName = String8(""), int mode = 0, String16 attributionTag = String16("")); bool isDataInjectionEnabled(); int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData); int createDirectChannel( int deviceId, size_t size, int channelType, const native_handle_t *channelData); void destroyDirectChannel(int channelNativeHandle); int configureDirectChannel(int channelNativeHandle, int sensorHandle, int rateLevel); int setOperationParameter(int handle, int type, const Vector<float> &floats, const Vector<int32_t> &ints); Loading services/sensorservice/SensorDirectConnection.cpp +19 −15 Original line number Diff line number Diff line Loading @@ -28,10 +28,10 @@ using util::ProtoOutputStream; SensorService::SensorDirectConnection::SensorDirectConnection(const sp<SensorService>& service, uid_t uid, const sensors_direct_mem_t *mem, int32_t halChannelHandle, const String16& opPackageName) const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mMem(*mem), mHalChannelHandle(halChannelHandle), mOpPackageName(opPackageName), mDestroyed(false) { mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mUserId = multiuser_get_user_id(mUid); ALOGD_IF(DEBUG_CONNECTIONS, "Created SensorDirectConnection"); } Loading Loading @@ -180,8 +180,7 @@ int32_t SensorService::SensorDirectConnection::configureChannel(int handle, int }; Mutex::Autolock _l(mConnectionLock); SensorDevice& dev(SensorDevice::getInstance()); int ret = dev.configureDirectChannel(handle, getHalChannelHandle(), &config); int ret = configure(handle, &config); if (rateLevel == SENSOR_DIRECT_RATE_STOP) { if (ret == NO_ERROR) { Loading Loading @@ -224,7 +223,6 @@ void SensorService::SensorDirectConnection::capRates() { std::unordered_map<int, int>& existingConnections = (!temporarilyStopped) ? mActivated : mActivatedBackup; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : existingConnections) { int handle = i.first; int rateLevel = i.second; Loading @@ -239,8 +237,8 @@ void SensorService::SensorDirectConnection::capRates() { // Only reconfigure the channel if it's ongoing if (!temporarilyStopped) { // Stopping before reconfiguring is the well-tested path in CTS dev.configureDirectChannel(handle, getHalChannelHandle(), &stopConfig); dev.configureDirectChannel(handle, getHalChannelHandle(), &capConfig); configure(handle, &stopConfig); configure(handle, &capConfig); } } } Loading @@ -258,7 +256,6 @@ void SensorService::SensorDirectConnection::uncapRates() { const struct sensors_direct_cfg_t stopConfig = { .rate_level = SENSOR_DIRECT_RATE_STOP }; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : mMicRateBackup) { int handle = i.first; int rateLevel = i.second; Loading @@ -273,13 +270,23 @@ void SensorService::SensorDirectConnection::uncapRates() { // Only reconfigure the channel if it's ongoing if (!temporarilyStopped) { // Stopping before reconfiguring is the well-tested path in CTS dev.configureDirectChannel(handle, getHalChannelHandle(), &stopConfig); dev.configureDirectChannel(handle, getHalChannelHandle(), &config); configure(handle, &stopConfig); configure(handle, &config); } } mMicRateBackup.clear(); } int SensorService::SensorDirectConnection::configure( int handle, const sensors_direct_cfg_t* config) { if (mDeviceId == RuntimeSensor::DEFAULT_DEVICE_ID) { SensorDevice& dev(SensorDevice::getInstance()); return dev.configureDirectChannel(handle, getHalChannelHandle(), config); } else { return mService->configureRuntimeSensorDirectChannel(handle, this, config); } } void SensorService::SensorDirectConnection::stopAll(bool backupRecord) { Mutex::Autolock _l(mConnectionLock); stopAllLocked(backupRecord); Loading @@ -290,9 +297,8 @@ void SensorService::SensorDirectConnection::stopAllLocked(bool backupRecord) { .rate_level = SENSOR_DIRECT_RATE_STOP }; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : mActivated) { dev.configureDirectChannel(i.first, getHalChannelHandle(), &config); configure(i.first, &config); } if (backupRecord && mActivatedBackup.empty()) { Loading @@ -306,8 +312,6 @@ void SensorService::SensorDirectConnection::recoverAll() { if (!mActivatedBackup.empty()) { stopAllLocked(false); SensorDevice& dev(SensorDevice::getInstance()); // recover list of report from backup ALOG_ASSERT(mActivated.empty(), "mActivated must be empty if mActivatedBackup was non-empty"); Loading @@ -319,7 +323,7 @@ void SensorService::SensorDirectConnection::recoverAll() { struct sensors_direct_cfg_t config = { .rate_level = i.second }; dev.configureDirectChannel(i.first, getHalChannelHandle(), &config); configure(i.first, &config); } } } Loading Loading
libs/sensor/ISensorServer.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -139,10 +139,12 @@ public: } virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) { int deviceId, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) { Parcel data, reply; data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); data.writeString16(opPackageName); data.writeInt32(deviceId); data.writeUint32(size); data.writeInt32(type); data.writeInt32(format); Loading Loading @@ -237,6 +239,7 @@ status_t BnSensorServer::onTransact( case CREATE_SENSOR_DIRECT_CONNECTION: { CHECK_INTERFACE(ISensorServer, data, reply); const String16& opPackageName = data.readString16(); const int deviceId = data.readInt32(); uint32_t size = data.readUint32(); int32_t type = data.readInt32(); int32_t format = data.readInt32(); Loading @@ -246,8 +249,8 @@ status_t BnSensorServer::onTransact( return BAD_VALUE; } native_handle_set_fdsan_tag(resource); sp<ISensorEventConnection> ch = createSensorDirectConnection(opPackageName, size, type, format, resource); sp<ISensorEventConnection> ch = createSensorDirectConnection( opPackageName, deviceId, size, type, format, resource); native_handle_close_with_tag(resource); native_handle_delete(resource); reply->writeStrongBinder(IInterface::asBinder(ch)); Loading
libs/sensor/SensorManager.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -315,6 +315,12 @@ bool SensorManager::isDataInjectionEnabled() { int SensorManager::createDirectChannel( size_t size, int channelType, const native_handle_t *resourceHandle) { static constexpr int DEFAULT_DEVICE_ID = 0; return createDirectChannel(DEFAULT_DEVICE_ID, size, channelType, resourceHandle); } int SensorManager::createDirectChannel( int deviceId, size_t size, int channelType, const native_handle_t *resourceHandle) { Mutex::Autolock _l(mLock); if (assertStateLocked() != NO_ERROR) { return NO_INIT; Loading @@ -327,7 +333,7 @@ int SensorManager::createDirectChannel( } sp<ISensorEventConnection> conn = mSensorServer->createSensorDirectConnection(mOpPackageName, mSensorServer->createSensorDirectConnection(mOpPackageName, deviceId, static_cast<uint32_t>(size), static_cast<int32_t>(channelType), SENSOR_DIRECT_FMT_SENSORS_EVENT, resourceHandle); Loading
libs/sensor/include/sensor/ISensorServer.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ public: virtual int32_t isDataInjectionEnabled() = 0; virtual sp<ISensorEventConnection> createSensorDirectConnection(const String16& opPackageName, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) = 0; int deviceId, uint32_t size, int32_t type, int32_t format, const native_handle_t *resource) = 0; virtual int setOperationParameter( int32_t handle, int32_t type, const Vector<float> &floats, const Vector<int32_t> &ints) = 0; Loading
libs/sensor/include/sensor/SensorManager.h +2 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public: String8 packageName = String8(""), int mode = 0, String16 attributionTag = String16("")); bool isDataInjectionEnabled(); int createDirectChannel(size_t size, int channelType, const native_handle_t *channelData); int createDirectChannel( int deviceId, size_t size, int channelType, const native_handle_t *channelData); void destroyDirectChannel(int channelNativeHandle); int configureDirectChannel(int channelNativeHandle, int sensorHandle, int rateLevel); int setOperationParameter(int handle, int type, const Vector<float> &floats, const Vector<int32_t> &ints); Loading
services/sensorservice/SensorDirectConnection.cpp +19 −15 Original line number Diff line number Diff line Loading @@ -28,10 +28,10 @@ using util::ProtoOutputStream; SensorService::SensorDirectConnection::SensorDirectConnection(const sp<SensorService>& service, uid_t uid, const sensors_direct_mem_t *mem, int32_t halChannelHandle, const String16& opPackageName) const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mMem(*mem), mHalChannelHandle(halChannelHandle), mOpPackageName(opPackageName), mDestroyed(false) { mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mUserId = multiuser_get_user_id(mUid); ALOGD_IF(DEBUG_CONNECTIONS, "Created SensorDirectConnection"); } Loading Loading @@ -180,8 +180,7 @@ int32_t SensorService::SensorDirectConnection::configureChannel(int handle, int }; Mutex::Autolock _l(mConnectionLock); SensorDevice& dev(SensorDevice::getInstance()); int ret = dev.configureDirectChannel(handle, getHalChannelHandle(), &config); int ret = configure(handle, &config); if (rateLevel == SENSOR_DIRECT_RATE_STOP) { if (ret == NO_ERROR) { Loading Loading @@ -224,7 +223,6 @@ void SensorService::SensorDirectConnection::capRates() { std::unordered_map<int, int>& existingConnections = (!temporarilyStopped) ? mActivated : mActivatedBackup; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : existingConnections) { int handle = i.first; int rateLevel = i.second; Loading @@ -239,8 +237,8 @@ void SensorService::SensorDirectConnection::capRates() { // Only reconfigure the channel if it's ongoing if (!temporarilyStopped) { // Stopping before reconfiguring is the well-tested path in CTS dev.configureDirectChannel(handle, getHalChannelHandle(), &stopConfig); dev.configureDirectChannel(handle, getHalChannelHandle(), &capConfig); configure(handle, &stopConfig); configure(handle, &capConfig); } } } Loading @@ -258,7 +256,6 @@ void SensorService::SensorDirectConnection::uncapRates() { const struct sensors_direct_cfg_t stopConfig = { .rate_level = SENSOR_DIRECT_RATE_STOP }; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : mMicRateBackup) { int handle = i.first; int rateLevel = i.second; Loading @@ -273,13 +270,23 @@ void SensorService::SensorDirectConnection::uncapRates() { // Only reconfigure the channel if it's ongoing if (!temporarilyStopped) { // Stopping before reconfiguring is the well-tested path in CTS dev.configureDirectChannel(handle, getHalChannelHandle(), &stopConfig); dev.configureDirectChannel(handle, getHalChannelHandle(), &config); configure(handle, &stopConfig); configure(handle, &config); } } mMicRateBackup.clear(); } int SensorService::SensorDirectConnection::configure( int handle, const sensors_direct_cfg_t* config) { if (mDeviceId == RuntimeSensor::DEFAULT_DEVICE_ID) { SensorDevice& dev(SensorDevice::getInstance()); return dev.configureDirectChannel(handle, getHalChannelHandle(), config); } else { return mService->configureRuntimeSensorDirectChannel(handle, this, config); } } void SensorService::SensorDirectConnection::stopAll(bool backupRecord) { Mutex::Autolock _l(mConnectionLock); stopAllLocked(backupRecord); Loading @@ -290,9 +297,8 @@ void SensorService::SensorDirectConnection::stopAllLocked(bool backupRecord) { .rate_level = SENSOR_DIRECT_RATE_STOP }; SensorDevice& dev(SensorDevice::getInstance()); for (auto &i : mActivated) { dev.configureDirectChannel(i.first, getHalChannelHandle(), &config); configure(i.first, &config); } if (backupRecord && mActivatedBackup.empty()) { Loading @@ -306,8 +312,6 @@ void SensorService::SensorDirectConnection::recoverAll() { if (!mActivatedBackup.empty()) { stopAllLocked(false); SensorDevice& dev(SensorDevice::getInstance()); // recover list of report from backup ALOG_ASSERT(mActivated.empty(), "mActivated must be empty if mActivatedBackup was non-empty"); Loading @@ -319,7 +323,7 @@ void SensorService::SensorDirectConnection::recoverAll() { struct sensors_direct_cfg_t config = { .rate_level = i.second }; dev.configureDirectChannel(i.first, getHalChannelHandle(), &config); configure(i.first, &config); } } } Loading