**
1、android sensor架構
android4.0系統內建對感測器的支援達13種,它們分別是:加速度感測器(accelerometer)、磁力感測器(magnetic field)、方向感測器(orientation)、陀螺儀(gyroscope)、環境光照感測器(light)、壓力感測器(pressure)、溫度感測器(temperature)和距離感測器(proximity)等。
android實現感測器系統包括以下幾個部分:
各部分之間架構圖如下:
2、sensor hal層介面
google為sensor提供了統一的hal介面,不同的硬體廠商需要根據該介面來實現並完成具體的硬體抽象層,android中sensor的hal介面定義在:hardware/libhardware/include/hardware/sensors.h
對感測器型別的定義:
感測器模組的定義結構體如下:
該介面的定義實際上是對標準的硬體模組hw_module_t的乙個擴充套件,增加了乙個get_sensors_list函式,用於獲取感測器的列表。
對任意乙個sensor裝置都會有乙個sensor_t結構體,其定義如下:
每個感測器的資料由sensors_event_t結構體表示,定義如下:
其中,sensor為感測器的標誌符,而不同的感測器則採用union方式來表示,sensors_vec_t結構體用來表示不同感測器的資料,sensors_vec_t定義如下:
sensor裝置結構體sensors_poll_device_t,對標準硬體裝置hw_device_t結構體的擴充套件,主要完成讀取底層資料,並將資料儲存在struct sensors_poll_device_t結構體中,poll函式用來獲取底層資料,呼叫時將被阻塞定義如下:
控制裝置開啟/關閉結構體定義如下:
3、sensor hal實現(以lm75溫度感測器為例子)
(1)開啟裝置流程圖
(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)
else
usleep(500000);
return id_magnetic_field;
}else if(count%3 == 1) //讀取溫度感測器值
else
close(dev->event_fd[1]);
dev->event_fd[1]= open("/sys/bus/i2c/devices/0-0048/temp1_input", o_rdonly);
usleep(500000);
return id_temperature;
}else if(count%3 == 0) //讀取方向感測器模擬值}}
Android Sensor 架構深入剖析
android sensor 架構深入剖析 華清遠見嵌入式學院講師。1 android sensor架構 android4.0系統內建對感測器的支援達13種,它們分別是 加速度感測器 accelerometer 磁力感測器 magnetic field 方向感測器 orientation 陀螺儀 g...
Android Sensor 架構深入剖析
1 android sensor架構 android4.0系統內建對感測器的支援達13種,它們分別是 加速度感測器 accelerometer 磁力感測器 magnetic field 方向感測器 orientation 陀螺儀 gyroscope 環境光照感測器 light 壓力感測器 press...
Android Sensor 架構深入剖析
華清遠見嵌入式學院講師。1 android sensor架構 android4.0系統內建對感測器的支援達13種,它們分別是 加速度感測器 accelerometer 磁力感測器 magnetic field 方向感測器 orientation 陀螺儀 gyroscope 環境光照感測器 light...