1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-drivers_peripheral

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 07:36 80e6969

Сенсорный драйвер-модуль: введение

Сенсорный драйвер-модуль предоставляет и реализует аппаратные интерфейсы драйверов (HDI), связанные с датчиками, включая получение информации о датчиках, включение или отключение датчика, подписку на данные датчиков или отказ от подписки на них, а также настройку параметров датчиков. Эти API упрощают разработку сервисов.

Рисунок 1. Архитектура сенсорного драйвер-модуля.

Сенсорный драйвер-модуль: архитектура

Введение

Модуль сенсорного драйвера предоставляет и реализует интерфейсы аппаратных драйверов (HDIs), связанных с датчиками. Это включает в себя получение информации о датчике, включение и отключение датчиков, подписку и отказ от подписки на данные датчика, а также настройку параметров датчика. Эти API облегчают разработку сервисов.

Структура каталогов

Структура каталогов модуля сенсорного драйвера выглядит следующим образом:

/drivers/peripheral/sensor
├── hal                # HAL code
│   └── include       # HAL header files
│   └── src           # HAL code implementation
├── interfaces         # Driver capability APIs provided for upper-layer services
│   └── include       # APIs exposed externally
├── test               # Test code
│   └── unittest      # Unit test code

Использование

В этом разделе в качестве примера использования API датчиков рассматривается акселерометр.

Доступные API

HAL-модуль сенсорного драйвера обеспечивает API, которые могут быть напрямую вызваны сервисами датчиков для получения, настройки и подписки или отказа от подписки на данные датчиков. В следующей таблице перечислены API, предоставляемые модулем сенсорного драйвера.

Таблица 1. Основные HDI сенсорного модуля.

Категория API Описание
Запрос int32_t GetAllSensors(struct SensorInformation **sensorInfo, int32_t *count) Получает информацию обо всех датчиках в системе. Информация о датчике обычно включает имя датчика, производителя датчика, версию прошивки, версию оборудования, идентификатор типа датчика, идентификатор датчика, максимальный диапазон измерений, точность и мощность.

Продолжение таблицы следует. Использование

Пример кода:

#include "sensor_if.h"
#include "sensor_type.h"

/* Создаём callback. */
void SensorDataCallback(struct SensorEvents *event) {
    if (event == NULL) {
        return;
    }
    float *sensorData = (float *) event->data;
    printf("sensor data[%f]", *sensorData);
}

void SensorSample() {
    int ret;
    struct SensorInformation *sensorInfo = NULL;
    int32_t count = 0;
    int32_t sensorInterval = 200000000; /* Устанавливаем частоту выборки данных на 200 000 000, в единицах наносекунд (200 мс). */

    /* 1. Создаём экземпляр SensorInterface. */
    const struct SensorInterface *sensorDev = NewSensorInterfaceInstance();
    if (sensorDev == NULL) {
        return;
    }

    /* 2. Регистрируем обратный вызов для данных датчика. */
    ret = sensorDev->Register(0, SensorDataCallback);
    if (ret != 0) {
        return;
    }

    /* 3. Получаем список датчиков, поддерживаемых устройством. */
    ret = sensorDev->GetAllSensors(&sensorInfo, &count);
    if (ret != 0) {
        return;
    }

    /* 4. Устанавливаем частоту дискретизации датчика. */
    ret = sensorDev->SetBatch(SENSOR_TYPE_ACCELEROMETER, sensorInterval, 0);
    if (ret != 0) {
        return;
    }

    /* 5. Включаем датчик. */
    ret = sensorDev->Enable(SENSOR_TYPE_ACCELEROMETER);
    if (ret != 0) {
        return;
    }

    /* 6. Отключаем датчик. */
    ret = sensorDev->Disable(SENSOR_TYPE_ACCELEROMETER);
    if (ret != 0) {
        return;
    }

    /* 7. Отменяем регистрацию обратного вызова для данных датчика. */
    ret = sensorDev->Unregister(0);
    if (ret != 0) {
        return;
    }

    /* 8. Освобождаем экземпляр SensorInterface. */
    ret = FreeSensorInterfaceInstance();
    if (ret != 0) {
        return;
    }
}

Репозитории

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openharmony-drivers_peripheral.git
git@api.gitlife.ru:oschina-mirror/openharmony-drivers_peripheral.git
oschina-mirror
openharmony-drivers_peripheral
openharmony-drivers_peripheral
master