Android L 출시에서는 일부 센서 HAL 버전 지원이 중지되며 SENSORS_DEVICE_API_VERSION_1_0
및 SENSORS_DEVICE_API_VERSION_1_3
버전만 지원됩니다.
다음 버전에서는 1_0에 대한 지원도 중단한 가능성이 높습니다.
1_0에는 일괄 처리의 개념이 없으며, 가능한 한 1_0을 사용하는 모든 기기를 1_3으로 업그레이드해야 합니다.
1_1 및 1_2는 일괄 처리 개념의 잘못된 정의에 따른 부작용을 겪고 있으며 더 이상 지원되지 않습니다.
현재 1_1 또는 1_2를 사용 중인 모든 기기는 1_3으로 업그레이드해야 합니다.
1_3에서는 일괄 처리의 개념을 간소화했으며 wake up 센서가 도입되었습니다.
1_3으로 업그레이드하려면 아래의 변경사항을 따르세요.
batch 함수 구현
하드웨어에 FIFO가 없어서 일괄 처리를 구현하지 않는 경우에도 batch
함수를 구현해야 합니다. batch
는 특정 센서의 샘플링 기간 및 최대 보고 지연 시간을 설정하는 데 사용됩니다. setDelay
를 대체합니다. setDelay
는 더 이상 호출되지 않습니다.
일괄 처리를 구현하지 않는 경우에는 제공된 sampling_period_ns
매개변수로 기존의 setDelay
함수를 호출하여 batch
를 구현하기만 하면 됩니다.
flush 함수 구현
일괄 처리를 구현하지 않는 경우에도 flush
함수를 구현해야 합니다.
일괄 처리를 구현하지 않는 경우 flush
는 한 개의 META_DATA_FLUSH_COMPLETE
이벤트를 생성하고 0(성공)을 반환해야 합니다.
sensors_poll_device_t.common.version 변경
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
새 필드를 센서 정의에 추가
각 센서를 정의할 때는 평상시의 sensor_t 필드 외에 다음을 실행합니다.
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
또한 새 필드도 1_0 및 1_3 사이로 정의되도록 설정해야 합니다.
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount: 일괄 처리를 구현하지 않는 경우 0으로 설정합니다.
fifoMaxEventCount: 일괄 처리를 구현하지 않는 경우 0으로 설정합니다.
stringType: sensors.h에 정의된 모든 공식 Android 센서에 대해 0으로 설정합니다. 이 값은 프레임워크로 덮어쓰기 때문입니다. 비공식 센서를 설정하는 방법은 sensor_t를 참조하세요.
requiredPermission: 애플리케이션이 센서에 액세스하는 데 필요한 권한입니다. 보통은 모든 센서에 대해 0으로 설정할 수 있지만 유형이 HEART_RATE
인 센서의 경우에는 SENSOR_PERMISSION_BODY_SENSORS.
로 설정해야 합니다.
maxDelay: 이 값은 중요하며 센서 및 드라이버의 기능에 맞게 설정해야 합니다.
이 값은 지속 및 변경 시 센서에 대해서만 정의됩니다. 이는 이 센서가 지원하는 가장 낮은 주파수에 해당하는 두 센서 이벤트 간의 지연 시간입니다. batch
함수를 통해 더 낮은 주파수가 요청되면 대신 이 주파수에서 이벤트가 생성됩니다. 이 값은 프레임워크 또는 애플리케이션에서 배치 FIFO가 가득 차는 시기를 예상하기 위한 용도로 사용될 수 있습니다. 이 값을 제대로 설정하지 않으면 CTS에 불합격합니다.
원샷 및 특수 보고 모드 센서의 경우 maxDelay
를 0으로 설정합니다.
연속 센서의 경우 허용되는 최대 샘플링 기간(마이크로초)으로 설정하세요.
다음은 period_ns
, maxDelay
, minDelay
에 적용됩니다.
period_ns
는 나노초인 반면maxDelay
/minDelay
는 마이크로초입니다.maxDelay
는 항상 32비트로 서명된 정수 내에 들어가야 합니다. 이는 바이너리 호환성을 이유로 64비트 아키텍처에서 64비트로만 선언됩니다.
flags: 이 필드는 센서 모드, 그리고 센서가 절전 모드 해제 센서인지 여부를 정의합니다.
일괄 처리를 구현하지 않고 1.0에서 1.3으로 이전하는 경우에는 다음과 같이 설정하세요.
원샷 센서의 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
연속 센서의 경우 SENSOR_FLAG_CONTINUOUS_MODE
, 변경 시 센서의 경우 SENSOR_FLAG_ON_CHANGE_MODE
(근접 예외), 특수 보고 모드를 포함하는 센서의 경우 SENSOR_FLAG_SPECIAL_REPORTING_MODE
(기울임 감지기 예외)
근접 센서 및 Android 공식 기울임 감지기의 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
.
1_1 또는 1_2에서 업그레이드 시의 참고사항
-
batch
함수는 이제 시간 제한 인수의 값과 상관없이 일괄 처리를 지원하지 않는 센서의 경우에도 거의 대부분 성공합니다.batch
함수가 실패할 수 있는 유일한 경우는 내부 오류나 잘못된sensor_handle,
이나 네거티브sampling_period_ns
또는max_report_latency_ns
가 발생하는 경우입니다. - 센서의 일괄 처리 지원 여부는
fifoMaxEventCount
가 0보다 큰지에 따라 정의됩니다. 이전 버전에서는batch()
의 반환 값을 기준으로 합니다. - 일괄 처리를 지원하는 센서는 항상 '일괄 모드'입니다(이전 버전의 명칭).
max_report_latency_ns
매개변수가 0인 경우에도 센서는 계속해서 일괄 처리를 수행해야 합니다. 즉, SoC가 정지 모드로 전환되면 이벤트가 FIFO에 저장되어야 합니다. -
batch
함수의flags
매개변수는 더 이상 사용되지 않습니다.DRY_RUN
및WAKE_UPON_FIFO_FULL
은 둘 다 지원 중단되었으며batch
함수로 전달되지 않습니다. - 일괄 시간 제한 인수는 이제
max_report_latency
인수로 불립니다.