Сенсорный драйвер-модуль: введение
Сенсорный драйвер-модуль предоставляет и реализует аппаратные интерфейсы драйверов (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 )