improve sensorservice's dumpsys
it now displays the reported trigger mode properly, as well as the number and type of the last received data Change-Id: I2ff64b32ab71f1332bc2e09671c8c02bb9550490
This commit is contained in:
parent
cf90bad477
commit
ba02cd2f6c
|
@ -114,15 +114,20 @@ typedef struct ASensorEvent {
|
|||
int32_t reserved0;
|
||||
int64_t timestamp;
|
||||
union {
|
||||
float data[16];
|
||||
ASensorVector vector;
|
||||
ASensorVector acceleration;
|
||||
ASensorVector magnetic;
|
||||
float temperature;
|
||||
float distance;
|
||||
float light;
|
||||
float pressure;
|
||||
float step_counter;
|
||||
union {
|
||||
float data[16];
|
||||
ASensorVector vector;
|
||||
ASensorVector acceleration;
|
||||
ASensorVector magnetic;
|
||||
float temperature;
|
||||
float distance;
|
||||
float light;
|
||||
float pressure;
|
||||
};
|
||||
union {
|
||||
uint64_t data[8];
|
||||
uint64_t step_counter;
|
||||
} u64;
|
||||
};
|
||||
int32_t reserved1[4];
|
||||
} ASensorEvent;
|
||||
|
|
|
@ -65,30 +65,26 @@ SensorDevice::SensorDevice()
|
|||
}
|
||||
}
|
||||
|
||||
void SensorDevice::dump(String8& result, char* buffer, size_t SIZE)
|
||||
void SensorDevice::dump(String8& result)
|
||||
{
|
||||
if (!mSensorModule) return;
|
||||
sensor_t const* list;
|
||||
ssize_t count = mSensorModule->get_sensors_list(mSensorModule, &list);
|
||||
|
||||
snprintf(buffer, SIZE, "%d h/w sensors:\n", int(count));
|
||||
result.append(buffer);
|
||||
result.appendFormat("%d h/w sensors:\n", int(count));
|
||||
|
||||
Mutex::Autolock _l(mLock);
|
||||
for (size_t i=0 ; i<size_t(count) ; i++) {
|
||||
const Info& info = mActivationCount.valueFor(list[i].handle);
|
||||
snprintf(buffer, SIZE, "handle=0x%08x, active-count=%d, rates(ms)={ ",
|
||||
result.appendFormat("handle=0x%08x, active-count=%d, rates(ms)={ ",
|
||||
list[i].handle,
|
||||
info.rates.size());
|
||||
result.append(buffer);
|
||||
for (size_t j=0 ; j<info.rates.size() ; j++) {
|
||||
snprintf(buffer, SIZE, "%4.1f%s",
|
||||
result.appendFormat("%4.1f%s",
|
||||
info.rates.valueAt(j) / 1e6f,
|
||||
j<info.rates.size()-1 ? ", " : "");
|
||||
result.append(buffer);
|
||||
}
|
||||
snprintf(buffer, SIZE, " }, selected=%4.1f ms\n", info.delay / 1e6f);
|
||||
result.append(buffer);
|
||||
result.appendFormat(" }, selected=%4.1f ms\n", info.delay / 1e6f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
status_t activate(void* ident, int handle, int enabled);
|
||||
status_t setDelay(void* ident, int handle, int64_t ns);
|
||||
status_t resetStateWithoutActuatingHardware(void *ident, int handle);
|
||||
void dump(String8& result, char* buffer, size_t SIZE);
|
||||
void dump(String8& result);
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
|
@ -136,9 +136,9 @@ int32_t SensorFusion::getMinDelay() const {
|
|||
return mAcc.getMinDelay();
|
||||
}
|
||||
|
||||
void SensorFusion::dump(String8& result, char* buffer, size_t SIZE) {
|
||||
void SensorFusion::dump(String8& result) {
|
||||
const Fusion& fusion(mFusion);
|
||||
snprintf(buffer, SIZE, "9-axis fusion %s (%d clients), gyro-rate=%7.2fHz, "
|
||||
result.appendFormat("9-axis fusion %s (%d clients), gyro-rate=%7.2fHz, "
|
||||
"q=< %g, %g, %g, %g > (%g), "
|
||||
"b=< %g, %g, %g >\n",
|
||||
mEnabled ? "enabled" : "disabled",
|
||||
|
@ -152,7 +152,6 @@ void SensorFusion::dump(String8& result, char* buffer, size_t SIZE) {
|
|||
fusion.getBias().x,
|
||||
fusion.getBias().y,
|
||||
fusion.getBias().z);
|
||||
result.append(buffer);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
|
@ -68,7 +68,7 @@ public:
|
|||
float getPowerUsage() const;
|
||||
int32_t getMinDelay() const;
|
||||
|
||||
void dump(String8& result, char* buffer, size_t SIZE);
|
||||
void dump(String8& result);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -187,47 +187,77 @@ static const String16 sDump("android.permission.DUMP");
|
|||
|
||||
status_t SensorService::dump(int fd, const Vector<String16>& args)
|
||||
{
|
||||
const size_t SIZE = 1024;
|
||||
char buffer[SIZE];
|
||||
String8 result;
|
||||
if (!PermissionCache::checkCallingPermission(sDump)) {
|
||||
snprintf(buffer, SIZE, "Permission Denial: "
|
||||
result.appendFormat("Permission Denial: "
|
||||
"can't dump SurfaceFlinger from pid=%d, uid=%d\n",
|
||||
IPCThreadState::self()->getCallingPid(),
|
||||
IPCThreadState::self()->getCallingUid());
|
||||
result.append(buffer);
|
||||
} else {
|
||||
Mutex::Autolock _l(mLock);
|
||||
snprintf(buffer, SIZE, "Sensor List:\n");
|
||||
result.append(buffer);
|
||||
result.append("Sensor List:\n");
|
||||
for (size_t i=0 ; i<mSensorList.size() ; i++) {
|
||||
const Sensor& s(mSensorList[i]);
|
||||
const sensors_event_t& e(mLastEventSeen.valueFor(s.getHandle()));
|
||||
snprintf(buffer, SIZE,
|
||||
"%-48s| %-32s | 0x%08x | maxRate=%7.2fHz | "
|
||||
"last=<%5.1f,%5.1f,%5.1f>\n",
|
||||
result.appendFormat(
|
||||
"%-48s| %-32s | 0x%08x | ",
|
||||
s.getName().string(),
|
||||
s.getVendor().string(),
|
||||
s.getHandle(),
|
||||
s.getMinDelay() ? (1000000.0f / s.getMinDelay()) : 0.0f,
|
||||
e.data[0], e.data[1], e.data[2]);
|
||||
result.append(buffer);
|
||||
}
|
||||
SensorFusion::getInstance().dump(result, buffer, SIZE);
|
||||
SensorDevice::getInstance().dump(result, buffer, SIZE);
|
||||
s.getHandle());
|
||||
|
||||
snprintf(buffer, SIZE, "%d active connections\n",
|
||||
mActiveConnections.size());
|
||||
result.append(buffer);
|
||||
snprintf(buffer, SIZE, "Active sensors:\n");
|
||||
result.append(buffer);
|
||||
if (s.getMinDelay() > 0) {
|
||||
result.appendFormat(
|
||||
"maxRate=%7.2fHz | ", 1e6f / s.getMinDelay());
|
||||
} else {
|
||||
result.append(s.getMinDelay() == 0
|
||||
? "on-demand | "
|
||||
: "one-shot | ");
|
||||
}
|
||||
|
||||
switch (s.getType()) {
|
||||
case SENSOR_TYPE_ROTATION_VECTOR:
|
||||
case SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR:
|
||||
result.appendFormat(
|
||||
"last=<%5.1f,%5.1f,%5.1f,%5.1f,%5.1f>\n",
|
||||
e.data[0], e.data[1], e.data[2], e.data[3], e.data[4]);
|
||||
break;
|
||||
case SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED:
|
||||
case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED:
|
||||
result.appendFormat(
|
||||
"last=<%5.1f,%5.1f,%5.1f,%5.1f,%5.1f,%5.1f>\n",
|
||||
e.data[0], e.data[1], e.data[2], e.data[3], e.data[4], e.data[5]);
|
||||
break;
|
||||
case SENSOR_TYPE_GAME_ROTATION_VECTOR:
|
||||
result.appendFormat(
|
||||
"last=<%5.1f,%5.1f,%5.1f,%5.1f>\n",
|
||||
e.data[0], e.data[1], e.data[2], e.data[3]);
|
||||
break;
|
||||
case SENSOR_TYPE_SIGNIFICANT_MOTION:
|
||||
case SENSOR_TYPE_STEP_DETECTOR:
|
||||
result.appendFormat( "last=<%f>\n", e.data[0]);
|
||||
break;
|
||||
case SENSOR_TYPE_STEP_COUNTER:
|
||||
result.appendFormat( "last=<%llu>\n", e.u64.step_counter);
|
||||
break;
|
||||
default:
|
||||
// default to 3 values
|
||||
result.appendFormat(
|
||||
"last=<%5.1f,%5.1f,%5.1f>\n",
|
||||
e.data[0], e.data[1], e.data[2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
SensorFusion::getInstance().dump(result);
|
||||
SensorDevice::getInstance().dump(result);
|
||||
|
||||
result.appendFormat("%d active connections\n", mActiveConnections.size());
|
||||
result.append("Active sensors:\n");
|
||||
for (size_t i=0 ; i<mActiveSensors.size() ; i++) {
|
||||
int handle = mActiveSensors.keyAt(i);
|
||||
snprintf(buffer, SIZE, "%s (handle=0x%08x, connections=%d)\n",
|
||||
result.appendFormat("%s (handle=0x%08x, connections=%d)\n",
|
||||
getSensorName(handle).string(),
|
||||
handle,
|
||||
mActiveSensors.valueAt(i)->getNumConnections());
|
||||
result.append(buffer);
|
||||
}
|
||||
}
|
||||
write(fd, result.string(), result.size());
|
||||
|
|
Loading…
Reference in New Issue