Android CTS Verifier Sensor Test Cases (5)

4. CTS Sensor Batching Tests

该项测试将依次测试Accelerometer, Magnetic Field, Orientation, Gyroscope, Pressure, Gravity, Rotation Vector, Magnetic Field Uncalibrated, Game Rotation Vector, Gyroscope Uncalibrated, Linear Acceleration, Geomagnetic Rotation Vector 等 Virtual Sensor 在 Fastest 和 50Hz data rate下的batching 和 flush 功能。这些 sensor 类型都是 continuous,另外还有 on-change 和 special 类型的 sensor 将在另外一个Batching测试项中测试。CTS Sensor Batching Tests 只涉及系统醒着的场景,系统休眠的相关测试将在其他用例中包含。

一些有用的背景知识:

目前按照 sensor 的连接方式可以分为两大类,一类是 sensor 直接通过 I2C/SPI 总线与 CPU 通信即
AP(Application Processor)方案;另一类是 sensor 连接在 MCU 上,MCU 上运行 Sensor
Driver, Firmware 甚至 Fusion Algorithm,MCU 再与CPU通信,这类方案称为 Sensor Hub
方案。两类方案最明显的一个区别是AP方案中,当系统进入休眠时,将无法获取 sensor 的数据和状态,而且在不唤醒系统的前提下不能对
sensor 进行任何操作;Sensor Hub 方案中由于 MCU 的存在,在系统进入休眠时,MCU 可以继续对 sensor
进行操作,也可以根据特定的需求去唤醒系统。

Batching
的目的是系统在该模式下,sensor产生的数据会临时保存在硬件的FIFO中,等时间到了,再一起上报给HAL。在这一段时间内,系统可以去处理其他事情或进入休眠,从而到达降低功耗的目的。

如果没有硬件的 FIFO 或者方案不支持 batching 功能,那么 HAL 上报的 sensorList 结构体的
fifoReservedEventCount 和 fifoMaxEventCount 字段必须置为 0. 否则 batching 和
suspend 相关的测试会失败。此种情况,batching 等价于 setDelay, max_report_latency_ns 参数对
HAL 不起作用。

AP and Hub

代码解析:

private static final int BATCHING_PERIOD = 10;  // 10 sec
private static final int RATE_50HZ = 20000; // 20 ms
private static final int RATE_FASTEST = SensorManager.SENSOR_DELAY_FASTEST;
private static final int BATCHING_PADDING_TIME_S = (int) Math.ceil(BATCHING_PERIOD * 0.1f + 2); // batching时间到后,CTS 允许的等待数据上报到 APK 的时间隙(time slot), 据猜测应该是考虑到系统从睡眠中恢复需要时间。
/* 对每个 sensor 做 fastest, 50Hz 的 batching 和 flush 测试 */
public void testAccelerometer_fastest_batching() throws Throwable {
    runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_PERIOD);
}
public void testAccelerometer_50hz_batching() throws Throwable {
    runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_PERIOD);
}
public void testAccelerometer_fastest_flush() throws Throwable {
    runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_PERIOD);
}
public void testAccelerometer_50hz_flush() throws Throwable {
    runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_PERIOD);
}
。。。
/* 基本的 batching 测试 */
private void runBatchingSensorTest()
{
    int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);
    int testDurationSec = maxBatchReportLatencySec + BATCHING_PADDING_TIME_S;
    。。。
    operation.addVerification(
        EventBasicVerification.getDefault(
            environment, TimeUnit.SECONDS.toMicros(testDurationSec)));
}

EventBasicVerification 对收到的数据进行基本的验证,如有无数据,sensor类型,时间戳同步,数据的standard deviation.
这里写图片描述
这里写图片描述

测试失败:

  1. “Failed due to (insufficient events $number/400)”,没有收到数据,或数据少于期待的个数;
  2. “Standard deviation out of range: stddev =”, 数据没有校准,或测试时设备没有静止;
  3. “Failed due to wrong sensor observed, “, HAL上报了错误的 sensor 数据;

EventBasicVerification.java
SensorBatchingTests.java

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值