IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 >
Andriod Sensor 架構(gòu)深入剖析
時(shí)間: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實(shí)現(xiàn)傳感器系統(tǒng)包括以下幾個(gè)部分:

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

2、Sensor HAL層接口

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

對傳感器類型的定義:

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

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

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

每個(gè)傳感器的數(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)體的擴(kuò)展,主要完成讀取底層數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在struct sensors_poll_device_t結(jié)構(gòu)體中,poll函數(shù)用來獲取底層數(shù)據(jù),調(diào)用時(shí)將被阻塞定義如下:

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

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

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

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

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

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

在這個(gè)方法中,首先需要為hw_device_t分配內(nèi)存空間,并對其初始化,設(shè)置重要方法的實(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é)假日請致電值班手機(jī):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號

主站蜘蛛池模板: 太阳能光伏发电_太阳能热水器_空气能热水器_直饮净水器_深圳市大兴节能环保科技有限公司 | 信管飞软件官网 - 亚拓软件旗下精细化管理软件、进销存管理软件、混凝土ERP、通风设备ERP、风管报价软件、出纳软件、送货单打印软件、ERP软件等免费下载 | 烟台金润核电材料股份有限公司| 新密耐火材料厂家价格-河南郑州荣盛窑炉耐火材料有限公司 | 潍坊网络推广,临沂360推广,东营360推广,枣庄360推广,潍坊网站建设,潍坊网络公司,潍坊360搜索,潍坊APP开发,潍坊360推广,潍坊360代理,潍坊点睛网络科技有限公司 | 手板机箱_亚克力机箱_医疗机箱_美容机箱_医疗设备外壳厂家_鸿堪医疗器械有限公司 | 数控落地镗铣床_数控刨台式镗铣床_数控龙门加工中心-青岛辉腾机械设备有限公司 | 网咖网址导航,网咖分类目录,网址目录,免费收录国内外、各行业优秀网站网站。 | 中深世纪广告公司 深圳标志设计,深圳logo设计公司,包装设计公司,深圳商标设计,深圳画册设计公司 中商信息网-商务数据网-中文商务数据网 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 河北万岁药业有限公司 | 银泰洁净--净化工程总承包,20年精耕细作,专为净化而来_银泰洁净--净化工程总承包,20年精耕细作,专为净化而来 | 熊猫家装-装修公司,上海装修、室内设计、家装、别墅装修、办公室装修、全屋定制就上熊猫家装 | 外圆/圆管抛光机_方管抛光机/除锈机_活塞杆抛光机-不锈钢管抛光机-邢台欧邦机械 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 上海联锐精密机械有限公司-【官网】 | 皮革耐折试验机-消字率测试仪-面具全视野测试仪-东莞市誉扬检测仪器有限公司 | 智能搅拌锅_食品搅拌锅_多功能搅拌锅 - 青岛环速科技有限公司 | 智能门锁管理-公寓管理软件-智能水电表管理系统-深圳安安智能 | 洗车机-自动汽车洗车机-全自动洗车设备-全自动电脑洗车机-北京自然绿环境科技发展有限公司 | 冷缩电缆附件_热缩电缆附件-乐清安尚电气有限公司 | 深圳钢成培训专业从事,五轴培训,车铣复合培训,数控车床,CNC数控编程,模具编程 ,钣金机械与模具设计,powermill,mastercam,solidworks,ug,hypermill培训 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 真空上料机_加料机_天津自动上料机_投料站_包装机加料_吸料机_粉体称重-天津市飞云粉体设备有限公司 | 郑州空调维修_郑州中央空调维修_空调清洗维保-郑州大晟机电设备安装工程有限公司 | 微机继电保护测试仪,单相继电保护测试仪,三相继电保护测试仪,六相继电保护测试仪,介质损耗测试仪,氧化锌避雷器测试仪,无线核相仪-扬州豪泰电力科技有限公司 | 网带输送机_皮带_滚筒_链板输送机_不锈钢输送链条生产厂家-宁津县鸿昶机械设备有限公司 | 首页--南京俊全科技有限公司,环保监测无人机,大疆无人机,农用无人机,植保无人机,巡检无人机,无人机环境监测仪,消防,无人机,航拍测绘,固定翼无人机,无人机电力巡检,四旋翼无人机 | 京建鹏达_商用无烟烧烤设备多少钱|开店商用自助旋转烧烤炉价格|无烟电烧烤炉批发厂家|无烟烧烤桌定做厂商-京建鹏达烧烤设备网 | 家具板|橱柜衣柜家具板|木饰面定制|榉木胶合板|防水胶合板|胶合板厂家-佛山吉盛唐朝木业-大坂木业 | 水电站泵站LCU控制屏_发电机保护_变压器保护_逆功率保护_防孤岛保护装置_ 电力微机保护网 | 河南郑州纯净水设备_厂家_价格_河南江宇环保科技有限公司水处理设备工厂 | 木工圆锯片,进口锯片厂家,合金锯片生产厂家,木工合金锯片,BAK(百恪)刀具有限公司 | 锯骨机-砍排机-全自动锯骨机-商用砍排机-切丁机 - 广州市九盈机械设备有限公司 | 南京消防申报公司-江苏国消设备安装有限公司 | 注册会计师考试_CPA考试_注册会计师培训-北京注册会计师协会培训网 | 箱包定制_广州箱包厂_双肩电脑背包_双肩旅行包_拉杆箱包_商务公文包_包包批发,深圳爱自由,礼品箱包定制,电话:400-0061-690 | 沈阳机电一体化电热锅炉_沈阳蓄热式电锅炉_沈阳壁挂式电锅炉【沈阳远鹏电热供水设备工程安装有限公司】 | 山东邹平华强无纺布有限公司 | 消防改造安装,消防维修检测,消防工程安装,气体灭火施工安装,火灾烟感探测器清洗 | 正宗舌尖上的卤味卤菜卤肉卤水熟食的做法及配方大全网 |