6580 M 通过sensorlist.apk去查看,显示的应该是ORIENTATION,为什么显示的确是Orientation Sensor

it2022-05-05  151

6580 M 通过sensorlist.apk去查看,在MAGNETOMETER上显示的应该是ORIENTATION,为什么显示的确是Orientation Sensor?在sensors.c里面确实也应该显示是ORIENTATION。

vendor\mediatek\proprietary\hardware\sensor\sensors.c

struct sensor_t sSensorList[] = { #ifdef CUSTOM_KERNEL_ACCELEROMETER { .name = ACCELEROMETER, .vendor = ACCELEROMETER_VENDER, .version = 3, .handle = ID_ACCELEROMETER+ID_OFFSET, .type = SENSOR_TYPE_ACCELEROMETER, .maxRange = ACCELEROMETER_RANGE,//32.0f, .resolution = ACCELEROMETER_RESOLUTION,//4.0f/1024.0f, .power = ACCELEROMETER_POWER,//130.0f/1000.0f, .minDelay = 10000, .maxDelay = 1000000, .reserved = {} }, #endif #if defined(CUSTOM_KERNEL_ALSPS) || defined(CUSTOM_KERNEL_PS) { .name = PROXIMITY, .vendor = PROXIMITY_VENDER, .version = 1, .handle = ID_PROXIMITY+ID_OFFSET, .type = SENSOR_TYPE_PROXIMITY, .maxRange = PROXIMITY_RANGE,//1.00f, .resolution = PROXIMITY_RESOLUTION,//1.0f, .power = PROXIMITY_POWER,//0.13f, .reserved = {} }, #endif #if defined(CUSTOM_KERNEL_ALSPS) || defined(CUSTOM_KERNEL_ALS) { .name = LIGHT, .vendor = LIGHT_VENDER, .version = 1, .handle = ID_LIGHT+ID_OFFSET, .type = SENSOR_TYPE_LIGHT, .maxRange = LIGHT_RANGE,//10240.0f, .resolution = LIGHT_RESOLUTION,//1.0f, .power = LIGHT_POWER,//0.13f, .reserved = {} }, #endif #ifdef CUSTOM_KERNEL_GYROSCOPE { .name = GYROSCOPE, .vendor = GYROSCOPE_VENDER, .version = 3, .handle = ID_GYROSCOPE+ID_OFFSET, .type = SENSOR_TYPE_GYROSCOPE, .maxRange = GYROSCOPE_RANGE,//34.91f, .resolution = GYROSCOPE_RESOLUTION,//0.0107f, .power = GYROSCOPE_POWER,//6.1f, .minDelay = 10000, .maxDelay = 1000000, .reserved = {} }, #endif #ifdef CUSTOM_KERNEL_MAGNETOMETER { .name = ORIENTATION, .vendor = ORIENTATION_VENDER, .version = 3, .handle = ID_ORIENTATION+ID_OFFSET, .type = SENSOR_TYPE_ORIENTATION, .maxRange = ORIENTATION_RANGE,//360.0f, .resolution = ORIENTATION_RESOLUTION,//1.0f, .power = ORIENTATION_POWER,//0.25f, .minDelay = 100000, .maxDelay = 1000000, .reserved = {} }, { .name = MAGNETOMETER, .vendor = MAGNETOMETER_VENDER, .version = 3, .handle = ID_MAGNETIC+ID_OFFSET, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = MAGNETOMETER_RANGE,//600.0f, .resolution = MAGNETOMETER_RESOLUTION,//0.0016667f, .power = MAGNETOMETER_POWER,//0.25f, .minDelay = 100000, .maxDelay = 1000000, .reserved = {} }, #endif

通过查找代码主要是在SensorService::onFirstRefmUserSensorList.replaceAt(aSensor, orientationIndex);取代了orientation。

frameworks\native\services\sensorservice\SensorService.cpp

void SensorService::onFirstRef() { ALOGD("nuSensorService starting..."); SensorDevice& dev(SensorDevice::getInstance()); if (dev.initCheck() == NO_ERROR) { sensor_t const* list; ssize_t count = dev.getSensorList(&list); if (count > 0) { ssize_t orientationIndex = -1; bool hasGyro = false, hasAccel = false, hasMag = false; uint32_t virtualSensorsNeeds = (1<<SENSOR_TYPE_GRAVITY) | (1<<SENSOR_TYPE_LINEAR_ACCELERATION) | (1<<SENSOR_TYPE_ROTATION_VECTOR); mLastEventSeen.setCapacity(count); for (ssize_t i=0 ; i<count ; i++) { registerSensor( new HardwareSensor(list[i]) ); switch (list[i].type) { case SENSOR_TYPE_ACCELEROMETER: hasAccel = true; break; case SENSOR_TYPE_MAGNETIC_FIELD: hasMag = true; break; case SENSOR_TYPE_ORIENTATION: orientationIndex = i; break; case SENSOR_TYPE_GYROSCOPE: case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED: hasGyro = true; break; case SENSOR_TYPE_GRAVITY: case SENSOR_TYPE_LINEAR_ACCELERATION: case SENSOR_TYPE_ROTATION_VECTOR: virtualSensorsNeeds &= ~(1<<list[i].type); break; } } // it's safe to instantiate the SensorFusion object here // (it wants to be instantiated after h/w sensors have been // registered) const SensorFusion& fusion(SensorFusion::getInstance()); // build the sensor list returned to users mUserSensorList = mSensorList; if (hasGyro && hasAccel && hasMag) { Sensor aSensor; // Add Android virtual sensors if they're not already // available in the HAL aSensor = registerVirtualSensor( new RotationVectorSensor() ); if (virtualSensorsNeeds & (1<<SENSOR_TYPE_ROTATION_VECTOR)) { mUserSensorList.add(aSensor); } aSensor = registerVirtualSensor( new GravitySensor(list, count) ); if (virtualSensorsNeeds & (1<<SENSOR_TYPE_GRAVITY)) { mUserSensorList.add(aSensor); } aSensor = registerVirtualSensor( new LinearAccelerationSensor(list, count) ); if (virtualSensorsNeeds & (1<<SENSOR_TYPE_LINEAR_ACCELERATION)) { mUserSensorList.add(aSensor); } aSensor = registerVirtualSensor( new OrientationSensor() ); if (virtualSensorsNeeds & (1<<SENSOR_TYPE_ROTATION_VECTOR)) { // if we are doing our own rotation-vector, also add // the orientation sensor and remove the HAL provided one. //mUserSensorList.replaceAt(aSensor, orientationIndex); mUserSensorList.add(aSensor); //zxw add } // virtual debugging sensors are not added to mUserSensorList registerVirtualSensor( new CorrectedGyroSensor(list, count) ); registerVirtualSensor( new GyroDriftSensor() ); } // debugging sensor list mUserSensorListDebug = mSensorList;

这样修改后显示正常


最新回复(0)