Как реализовать пакетирование датчиков в Tizen

Мне нужно получить данные с акселерометра на Tizen Wearable (в идеале 3.0 или ниже) в пакетном режиме для максимальной эффективности батареи.

Соответствующий apidoc находится здесь.

Мой текущий код выглядит так:

static void start_accelerometer() {
    sensor_type_e type = SENSOR_ACCELEROMETER;
    int max_batch_latency = 30000; // 300 is max queue, 100 ms is default period

    if (sensor_get_default_sensor(type, &sensor) == SENSOR_ERROR_NONE)
    {
        if (sensor_create_listener(sensor, &listener) == SENSOR_ERROR_NONE
            && sensor_listener_set_max_batch_latency(listener, max_batch_latency) == SENSOR_ERROR_NONE
            && sensor_listener_set_event_cb(listener, 100, accelerometer_sensor_event_callback, NULL) == SENSOR_ERROR_NONE
            && sensor_listener_set_option(listener, SENSOR_OPTION_ALWAYS_ON) == SENSOR_ERROR_NONE
            )
        {
            if (sensor_listener_start(listener) == SENSOR_ERROR_NONE)
            {
                dlog_print(DLOG_INFO, TAG, "Sensor started");
            }
        }
    }
}

Я пробовал множество вариантов вышеизложенного (например, настройки sensor_listener_set_option на SENSOR_OPTION_DEFAULT, чтобы он останавливался при выключении дисплея, запуск датчика без настройки обратного вызова события и чтения данных вручную), но во всех случаях я никогда не получаю пакетные значения от датчика (либо в обратном вызове или через sensor_listener_read_data()). Я всегда получаю только самые свежие данные.

Вы знаете, как получить пакетные данные с акселерометра на носимых устройствах Tizen?

P.S. Я использую Galaxy Watch Active 1 для разработки.


person jiroch    schedule 01.06.2020    source источник


Ответы (1)


Насколько мне известно, физические датчики работают в пакетном режиме только тогда, когда точка доступа переходит в состояние ожидания, это происходит только тогда, когда дисплей выключен. Итак, после выключения дисплея подождите от 10 до 30 минут перед проверкой. Кроме того, установите достаточные интервалы (около 1000 мс), чтобы избежать слишком большого слива.

Наконец, используя sensor_listener_read_data (), вы можете получить только самые свежие данные.

person cocobang    schedule 02.06.2020
comment
Спасибо - я также общался с инженерами Samsung, и они сказали именно то, что вы сделали. Они подтвердили, что моя реализация, приведенная выше, верна, и единственное, чего не хватало, - это ожидание перехода точки доступа в приостановленное состояние - что было проблемой в основном потому, что вы не можете отлаживать это при потоковой передаче журналов с устройства через sdb :) - person jiroch; 02.06.2020