色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久久午夜一区 | 韩国免费一区 | 真人一级毛片视频 | 丁香色情五月综合网站 | 亚洲国产精品久久艾草 | 日韩福利片午夜免费观着 | 亚洲精品色播一区二区 | 蜜臀久久99静品久久久久久 | 精品一区二区三区无码免费视频 | 欧美老熟妇乱人伦人妻 | 女人18毛片水真多免费视频 | 太刺激了国语精彩对白 | 日本无码精品一二三四区视频 | 欧美性猛交久久久乱大交 | 国内精品久久久久影院日本 | 筋肉雄汁gay雄汁外送网站 | 国产高清乱码又大又圆 | 亚洲尤物内射超碰 | 人与禽性视频77777 | 大量国产私密保健视频 | 午夜片少妇无码区在线观看 | 任我爽橹在线视频精品583 | 人妻丰满熟妇AV无码区不卡 | 久久久久人妻一区精品色 | 欧美人与动人物牲交免费观看久久 | 亚洲精品一区av在线播放 | 永久免费AV无码网站性色AV | 337p日本欧洲亚洲大胆艺术96 | 亚洲综合无码一区二区痴汉 | vr成人片在线播放网站 | 无码精品人妻一区二区三区免费看 | 久久超碰极品视觉盛宴 | 日本免费在线播放 | 粗大的内捧猛烈进出少妇 | 女人扒下裤让男人桶到爽 | 九色丨PORNY丨自拍 ICU |