全部文档
OneOS简介 硬件支持 编译构造工具 API参考文档 高级语言 用户编程手册 应用笔记 FAQ

SENSOR设备


API 列表

接口 说明
os_device_find() 根据传感器设备名称查找设备
os_device_open() 打开传感器设备
os_device_read() 读取数据
os_device_control() 控制传感器设备
os_device_set_rx_indicate() 设置接收回调函数
os_device_close() 关闭传感器设备

os_device_find

该函数根据传感器设备名称查找设备,函数原型如下:

os_device_t *os_device_find(const char* name);
参数 说明
name 传感器设备名称
返回 说明
设备指针 查找到对应设备将返回相应的设备指针
OS_NULL 没有找到相应的设备对象

os_device_open

该函数用于打开设备,函数原型如下:

os_err_t os_device_open(os_device_t *dev, os_uint16_t oflag);
参数 说明
dev 设备指针
oflag 设备模式标志
返回 说明
OS_EOK 设备打开成功
OS_EBUSY 设备忙
其他错误码 设备打开失败

os_device_read

该函数用于读取传感器接收到的数据,函数原型如下:

os_size_t os_device_read(os_device_t *dev, os_off_t pos, void* buffer, os_size_t size);
参数 说明
dev 设备指针
pos 读取数据偏移量,此参数传感器未使用
buffer 缓冲区指针,读取的数据将会被保存在缓冲区中
size 读取数据的大小
返回 说明
读到数据的实际大小 返回读取到数据的个数
0 需要读取当前线程的 errno 来判断错误状态

os_device_control

该函数用于对传感器设备进行配置,函数原型如下:

os_err_t os_device_control(os_device_t *dev, int cmd, void* arg);
参数 说明
dev 设备指针
cmd 命令控制字
arg 控制的参数
返回 说明
OS_EOK 函数执行成功
OS_ENOSYS 执行失败,dev 为空
其他错误码 执行失败

其中的 cmd 目前支持以下几种命令控制字:

#define  OS_SENSOR_CTRL_GET_ID         (0)  /* Get device id */
#define  OS_SENSOR_CTRL_GET_INFO       (1)  /* Get sensor info */
#define  OS_SENSOR_CTRL_SET_RANGE      (2)  /* Set the measure range of sensor */
#define  OS_SENSOR_CTRL_SET_ODR        (3)  /* Set output date rate. unit is HZ */
#define  OS_SENSOR_CTRL_SET_MODE       (4)  /* Set sensor's work mode */
#define  OS_SENSOR_CTRL_SET_POWER      (5)  /* Set power mode */
#define  OS_SENSOR_CTRL_SELF_TEST      (6)  /* Take a self test */

os_device_set_rx_indicate

该函数用于设置数据接收指示,当传感器收到数据时,通知上层应用线程有数据到达 ,函数原型如下:

os_err_t os_device_set_rx_indicate(os_device_t *dev, os_err_t (*rx_ind)(os_device_t *dev,os_size_t size));
参数 说明
dev 设备指针
rx_ind 回调函数指针
dev 回调函数参数:设备指针
size 回调函数参数:接收缓冲区数据量(字节)
返回 说明
OS_EOK 设置成功

os_device_close

该函数用于关闭传感器设备,函数原型如下:

os_err_t os_device_close(os_device_t *dev);
参数 说明
dev 设备句柄
返回 说明
OS_EOK 关闭设备成功
OS_ERROR 设备已经完全关闭,不能重复关闭设备
其他错误码 关闭设备失败

关闭设备接口和打开设备接口需配对使用,打开一次设备对应要关闭一次设备,这样设备才会被完全关闭,否则设备仍处于未关闭状态。

使用示例

本例程为测试acce类型的sensor icm20608:

#include <drv_cfg.h>
#include <os_tick.h>
#include <stdio.h>
#include <shell.h>
#include <sensors/sensor.h>

static int sensor_acce_test(int argc, char *argv[])
{
    int i;
    char sensor_name[24];
    struct os_sensor_data sensor_data;

    if (argc != 2)
    {
        os_kprintf("usage:sensor_acce_test <sensor_name>\r\n");
        return -1;
    }

    snprintf(sensor_name, sizeof(sensor_name) - 1, "acce_%s", argv[1]);

    os_device_t *sensor = os_device_find(sensor_name);
    OS_ASSERT(sensor != NULL);
    os_device_open(sensor, OS_DEVICE_FLAG_RDWR);

    for (i = 0; i < 10; i++)
    {
        os_device_read(sensor, 0, &sensor_data, sizeof(struct os_sensor_data));
        os_kprintf("sensor acce (%d, %d, %d)\r\n", 
                    sensor_data.data.acce.x, 
                    sensor_data.data.acce.y, 
                    sensor_data.data.acce.z);

        os_task_mdelay(1000);
    }

    return 0;
}
SH_CMD_EXPORT(sensor_acce_test, sensor_acce_test, "sensor_acce_test");

运行结果如下:

sh>sensor_acce_test icm20608
sensor acce (296, -642, 724)
sensor acce (385, 840, 150)
sensor acce (-183, -322, 912)
sensor acce (398, 1034, 194)
sensor acce (774, 325, -299)
sensor acce (894, 566, 204)
sensor acce (136, 274, -915)
sensor acce (448, 354, 494)
sensor acce (688, -463, -373)
sensor acce (833, 255, -166)

results matching ""

    No results matching ""

    返回顶部