色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

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

1、Android sensor架構(gòu)

Android4.0系統(tǒng)內(nèi)置對傳感器的支持達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)體如下:

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

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

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

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

Sensor設(shè)備結(jié)構(gòu)體sensors_poll_device_t,對標準硬件設(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 華清遠見教育科技集團 版權(quán)所有 ,京ICP備16055225號,京公海網(wǎng)安備11010802025203號

主站蜘蛛池模板: 加勒比中文无码久久综合色 | 亚洲日本无码一区二区三区 | 日本乱码伦视频免费播放 | 亚洲AV无一区二区三区久久 | 日本真人做人爱一区二区三区 | 女性自慰网站免费观看w | 美腿制服丝袜国产亚洲 | 国产三级韩国三级日产三级 | 无码一区二区三区日韩人妻 | 欧美色精品vr | 国产精品久久久久久久免费A片 | nc18嫩草影院 | 欧美激情猛片xxxⅹ大3 | 在线永久免费观看日韩a | 久久亚洲道色宗和久久 | 十八岁以下不能看的影院免费 | 久久久精品人妻一区二区三区 | 成人精品国产区在线观看 | 国产做A爰片毛片A片美国 | 我要看免费一级毛片 | 黄色在线观看www | 日韩亚洲欧美久久久www综合 | 污网址在线观看免费入口 | 日本免费在线观看视频 | 久久18禁高潮出水呻吟娇喘 | 精品无码成人网站久久久久久 | 美女裸体永久免费视频网站 | 无套内谢少妇毛片A片软件 自在自线亚洲а∨天堂在线 | 亚洲一二区制服无码中字 | 欧美中文字幕一区二区 | 色老板视频线观看在线 | 一本色道无码道DVD在线观看 | 真实国产乱子伦精品一区二区三区 | 国产精品亚洲色婷婷99久久精品 | 国产在线导航 | 国产成人国拍亚洲精品 | 欧美激情一区二区三区高清视频 | 中文字幕在线中文字幕在线中三区 | 国产成人亚洲综合A∨ | 大地资源在线观看官网第三页 | 女人喷液抽搐高潮视频, |