内容发布更新时间 : 2024/12/25 10:50:01星期一 下面是文章的全部内容请认真阅读。
(2)实现代码分析
在代码中含有两个传感器ADC电位器和LM75温度传感器,所以在sensor.c中,首先需要定义传感器数组device_sensor_list[],其实就是初始化struct sensor_t结构体,初始化如下:
定义open_sensors函数,来打开Sensor模块,代码如下:
在这个方法中,首先需要为hw_device_t分配内存空间,并对其初始化,设置重要方法的实现。 control_open_data_source()打开传感器并使能设备:
调用sensor__data_poll方法读取数据: /*轮询读取数据*/
static int sensors__data_poll(struct sensors_data_context_t *dev, sensors_data_t * values) { int n; int mag; float temp; char buf[10]; while (1) {
if(count % 3 == 2) // 读取ADC值 {
if( read(dev->event_fd[0], &mag, sizeof(mag)) < 0) {
LOGE(\}else{
dev->sensors[ID_MAGNETIC_FIELD].magnetic.v[0] =(float)mag;
LOGE(\
*values = dev->sensors[ID_MAGNETIC_FIELD]; values->sensor = ID_MAGNETIC_FIELD; count++; }
usleep(500000);
return ID_MAGNETIC_FIELD; }
else if(count%3 == 1) //读取温度传感器值 {
memset(buf, 0 ,sizeof(buf));
if((n = read(dev->event_fd[1], buf, 10)) < 0) {
LOGE(\}else{
buf[n - 1] = '\\0';
temp =(float) (atoi(buf) / 1000);
dev->sensors[ID_TEMPERATURE].temperature = temp; LOGE(\
*values = dev->sensors[ID_TEMPERATURE]; values->sensor = ID_TEMPERATURE; count++; }
close(dev->event_fd[1]);
dev->event_fd[1]= open(%usleep(500000); return ID_TEMPERATURE; }
else if(count%3 == 0) //读取方向传感器模拟值 {
LOGI(\/* fill up data of orientation */
dev->sensors[ID_ORIENTATION].orientation.azimuth = x + 5; dev->sensors[ID_ORIENTATION].orientation.pitch = y + 5; dev->sensors[ID_ORIENTATION].orientation.roll = z + 5; *values = dev->sensors[ID_ORIENTATION]; values->sensor = ID_ORIENTATION; count++;
x += 0.0001; y += 0.0001; z += 0.0001; usleep (500000); return ID_ORIENTATION; } } }
下面是另外的博主写的内容 1. 体系结构 2. 数据结构 3. 四大函数