HAL 버전 지원 중단

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_RUNWAKE_UPON_FIFO_FULL은 둘 다 지원 중단되었으며 batch 함수로 전달되지 않습니다.
  • 일괄 시간 제한 인수는 이제 max_report_latency 인수로 불립니다.