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;
|
int32_t reserved0;
|
||||||
int64_t timestamp;
|
int64_t timestamp;
|
||||||
union {
|
union {
|
||||||
float data[16];
|
union {
|
||||||
ASensorVector vector;
|
float data[16];
|
||||||
ASensorVector acceleration;
|
ASensorVector vector;
|
||||||
ASensorVector magnetic;
|
ASensorVector acceleration;
|
||||||
float temperature;
|
ASensorVector magnetic;
|
||||||
float distance;
|
float temperature;
|
||||||
float light;
|
float distance;
|
||||||
float pressure;
|
float light;
|
||||||
float step_counter;
|
float pressure;
|
||||||
|
};
|
||||||
|
union {
|
||||||
|
uint64_t data[8];
|
||||||
|
uint64_t step_counter;
|
||||||
|
} u64;
|
||||||
};
|
};
|
||||||
int32_t reserved1[4];
|
int32_t reserved1[4];
|
||||||
} ASensorEvent;
|
} 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;
|
if (!mSensorModule) return;
|
||||||
sensor_t const* list;
|
sensor_t const* list;
|
||||||
ssize_t count = mSensorModule->get_sensors_list(mSensorModule, &list);
|
ssize_t count = mSensorModule->get_sensors_list(mSensorModule, &list);
|
||||||
|
|
||||||
snprintf(buffer, SIZE, "%d h/w sensors:\n", int(count));
|
result.appendFormat("%d h/w sensors:\n", int(count));
|
||||||
result.append(buffer);
|
|
||||||
|
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
for (size_t i=0 ; i<size_t(count) ; i++) {
|
for (size_t i=0 ; i<size_t(count) ; i++) {
|
||||||
const Info& info = mActivationCount.valueFor(list[i].handle);
|
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,
|
list[i].handle,
|
||||||
info.rates.size());
|
info.rates.size());
|
||||||
result.append(buffer);
|
|
||||||
for (size_t j=0 ; j<info.rates.size() ; j++) {
|
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,
|
info.rates.valueAt(j) / 1e6f,
|
||||||
j<info.rates.size()-1 ? ", " : "");
|
j<info.rates.size()-1 ? ", " : "");
|
||||||
result.append(buffer);
|
|
||||||
}
|
}
|
||||||
snprintf(buffer, SIZE, " }, selected=%4.1f ms\n", info.delay / 1e6f);
|
result.appendFormat(" }, selected=%4.1f ms\n", info.delay / 1e6f);
|
||||||
result.append(buffer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ public:
|
||||||
status_t activate(void* ident, int handle, int enabled);
|
status_t activate(void* ident, int handle, int enabled);
|
||||||
status_t setDelay(void* ident, int handle, int64_t ns);
|
status_t setDelay(void* ident, int handle, int64_t ns);
|
||||||
status_t resetStateWithoutActuatingHardware(void *ident, int handle);
|
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();
|
return mAcc.getMinDelay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SensorFusion::dump(String8& result, char* buffer, size_t SIZE) {
|
void SensorFusion::dump(String8& result) {
|
||||||
const Fusion& fusion(mFusion);
|
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), "
|
"q=< %g, %g, %g, %g > (%g), "
|
||||||
"b=< %g, %g, %g >\n",
|
"b=< %g, %g, %g >\n",
|
||||||
mEnabled ? "enabled" : "disabled",
|
mEnabled ? "enabled" : "disabled",
|
||||||
|
@ -152,7 +152,6 @@ void SensorFusion::dump(String8& result, char* buffer, size_t SIZE) {
|
||||||
fusion.getBias().x,
|
fusion.getBias().x,
|
||||||
fusion.getBias().y,
|
fusion.getBias().y,
|
||||||
fusion.getBias().z);
|
fusion.getBias().z);
|
||||||
result.append(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
|
@ -68,7 +68,7 @@ public:
|
||||||
float getPowerUsage() const;
|
float getPowerUsage() const;
|
||||||
int32_t getMinDelay() 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)
|
status_t SensorService::dump(int fd, const Vector<String16>& args)
|
||||||
{
|
{
|
||||||
const size_t SIZE = 1024;
|
|
||||||
char buffer[SIZE];
|
|
||||||
String8 result;
|
String8 result;
|
||||||
if (!PermissionCache::checkCallingPermission(sDump)) {
|
if (!PermissionCache::checkCallingPermission(sDump)) {
|
||||||
snprintf(buffer, SIZE, "Permission Denial: "
|
result.appendFormat("Permission Denial: "
|
||||||
"can't dump SurfaceFlinger from pid=%d, uid=%d\n",
|
"can't dump SurfaceFlinger from pid=%d, uid=%d\n",
|
||||||
IPCThreadState::self()->getCallingPid(),
|
IPCThreadState::self()->getCallingPid(),
|
||||||
IPCThreadState::self()->getCallingUid());
|
IPCThreadState::self()->getCallingUid());
|
||||||
result.append(buffer);
|
|
||||||
} else {
|
} else {
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
snprintf(buffer, SIZE, "Sensor List:\n");
|
result.append("Sensor List:\n");
|
||||||
result.append(buffer);
|
|
||||||
for (size_t i=0 ; i<mSensorList.size() ; i++) {
|
for (size_t i=0 ; i<mSensorList.size() ; i++) {
|
||||||
const Sensor& s(mSensorList[i]);
|
const Sensor& s(mSensorList[i]);
|
||||||
const sensors_event_t& e(mLastEventSeen.valueFor(s.getHandle()));
|
const sensors_event_t& e(mLastEventSeen.valueFor(s.getHandle()));
|
||||||
snprintf(buffer, SIZE,
|
result.appendFormat(
|
||||||
"%-48s| %-32s | 0x%08x | maxRate=%7.2fHz | "
|
"%-48s| %-32s | 0x%08x | ",
|
||||||
"last=<%5.1f,%5.1f,%5.1f>\n",
|
|
||||||
s.getName().string(),
|
s.getName().string(),
|
||||||
s.getVendor().string(),
|
s.getVendor().string(),
|
||||||
s.getHandle(),
|
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);
|
|
||||||
|
|
||||||
snprintf(buffer, SIZE, "%d active connections\n",
|
if (s.getMinDelay() > 0) {
|
||||||
mActiveConnections.size());
|
result.appendFormat(
|
||||||
result.append(buffer);
|
"maxRate=%7.2fHz | ", 1e6f / s.getMinDelay());
|
||||||
snprintf(buffer, SIZE, "Active sensors:\n");
|
} else {
|
||||||
result.append(buffer);
|
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++) {
|
for (size_t i=0 ; i<mActiveSensors.size() ; i++) {
|
||||||
int handle = mActiveSensors.keyAt(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(),
|
getSensorName(handle).string(),
|
||||||
handle,
|
handle,
|
||||||
mActiveSensors.valueAt(i)->getNumConnections());
|
mActiveSensors.valueAt(i)->getNumConnections());
|
||||||
result.append(buffer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
write(fd, result.string(), result.size());
|
write(fd, result.string(), result.size());
|
||||||
|
|
Loading…
Reference in New Issue