色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 >
Andriod Sensor 架構(gòu)深入剖析
時間:2018-08-16作者:華清遠(yuǎn)見

1、Android sensor架構(gòu)

Android4.0系統(tǒng)內(nèi)置對傳感器的支持達(dá)13種,它們分別是:加速度傳感器(accelerometer)、磁力傳感器(magnetic field)、方向傳感器(orientation)、陀螺儀(gyroscope)、環(huán)境光照傳感器(light)、壓力傳感器(pressure)、溫度傳感器(temperature)和距離傳感器(proximity)等。

Android實現(xiàn)傳感器系統(tǒng)包括以下幾個部分:

各部分之間架構(gòu)圖如下:

2、Sensor HAL層接口

Google為Sensor提供了統(tǒng)一的HAL接口,不同的硬件廠商需要根據(jù)該接口來實現(xiàn)并完成具體的硬件抽象層,Android中Sensor的HAL接口定義在:hardware/libhardware/include/hardware/sensors.h

對傳感器類型的定義:

傳感器模塊的定義結(jié)構(gòu)體如下:

該接口的定義實際上是對標(biāo)準(zhǔn)的硬件模塊hw_module_t的一個擴展,增加了一個get_sensors_list函數(shù),用于獲取傳感器的列表。

對任意一個sensor設(shè)備都會有一個sensor_t結(jié)構(gòu)體,其定義如下:

每個傳感器的數(shù)據(jù)由sensors_event_t結(jié)構(gòu)體表示,定義如下:

其中,sensor為傳感器的標(biāo)志符,而不同的傳感器則采用union方式來表示,sensors_vec_t結(jié)構(gòu)體用來表示不同傳感器的數(shù)據(jù),sensors_vec_t定義如下:

Sensor設(shè)備結(jié)構(gòu)體sensors_poll_device_t,對標(biāo)準(zhǔn)硬件設(shè)備hw_device_t結(jié)構(gòu)體的擴展,主要完成讀取底層數(shù)據(jù),并將數(shù)據(jù)存儲在struct sensors_poll_device_t結(jié)構(gòu)體中,poll函數(shù)用來獲取底層數(shù)據(jù),調(diào)用時將被阻塞定義如下:

控制設(shè)備打開/關(guān)閉結(jié)構(gòu)體定義如下:

3、Sensor HAL實現(xiàn)(以LM75溫度傳感器為例子)

(1)打開設(shè)備流程圖

(2)實現(xiàn)代碼分析

在代碼中含有兩個傳感器ADC電位器和LM75溫度傳感器,所以在sensor.c中,首先需要定義傳感器數(shù)組device_sensor_list[],其實就是初始化struct sensor_t結(jié)構(gòu)體,初始化如下:

定義open_sensors函數(shù),來打開Sensor模塊,代碼如下:

在這個方法中,首先需要為hw_device_t分配內(nèi)存空間,并對其初始化,設(shè)置重要方法的實現(xiàn)。

control_open_data_source()打開傳感器并使能設(shè)備:

調(diào)用sensor__data_poll方法讀取數(shù)據(jù):

/*輪詢讀取數(shù)據(jù)*/
        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("read adc error");
                }else{ 
                dev->sensors[ID_MAGNETIC_FIELD].magnetic.v[0] =(float)mag; 
                LOGE("read adc %f\n",(float)mag);
                *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("read temp error");
                    }else{
                    buf[n - 1] = '\0';
                    temp =(float) (atoi(buf) / 1000);
                    dev->sensors[ID_TEMPERATURE].temperature = temp;
                    LOGE("read temp %f\n",temp);
                    *values = dev->sensors[ID_TEMPERATURE];
                    values->sensor = ID_TEMPERATURE;
                    count++;
                }
                    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) //讀取方向傳感器模擬值
                 {
                    LOGI("read orientation\n");
                    /* fill up data of orientation */
                    dev->sensors[ID_ORIENTATION].orientation.azimuth = x + 5;
                    dev->sensors[ID_ORIENTATION].orientation.pitch = y + 5;
                 &nbnbsp;  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;
              }
            }
        }

Sensor相關(guān)技術(shù):

Sensor框架結(jié)構(gòu)分析

Sensor HAL框架分析


發(fā)表評論

全國咨詢電話:400-611-6270,雙休日及節(jié)假日請致電值班手機:15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠(yuǎn)見教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號,京公海網(wǎng)安備11010802025203號

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 爱福利视频一区| 亚洲精品动漫100p| 青草青草久热精品视频在线观看| 国产精品夜色7777狼人| 国产一区二区日韩| 欧美性视频网站| 国产一区二区三区18 | 中文字幕亚洲天堂| 国语自产精品视频在免费| 亚洲成人av在线播放| 欧美日韩国产91| 成人免费福利在线| 粉嫩老牛aⅴ一区二区三区| 成人精品久久久| 欧美性猛交xxx| 日韩黄在线观看| 97视频在线看| 国产一区二区三区日韩欧美| 7777精品视频| 日韩视频欧美视频| 成人乱人伦精品视频在线观看| 欧美日韩aaaa| 日韩精品免费在线| 57pao国产精品一区| 三级精品视频久久久久| 国产精品久久久久久搜索| 久青草国产97香蕉在线视频| 成人福利在线视频| 久久久久久免费精品| 在线观看久久久久久| 国产有码在线一区二区视频| 欧美视频在线免费| 揄拍成人国产精品视频| 91精品国产自产在线老师啪| 欧美电影在线观看完整版| 亚洲欧美在线一区二区| 国产在线a不卡| 91av国产在线| 欧美色视频日本高清在线观看| 亚洲小视频在线观看| 成人精品一区二区三区电影免费|