当前位置:文档之家› 【最新版】基于Android的智能家居系统毕业设计论文

【最新版】基于Android的智能家居系统毕业设计论文

东莞理工学院

毕业论文(设计)

题目

基于Android的智能家居系统设计——

C语言功能模块及部分驱动

基于Android的智能家居系统设计——

C语言功能模块及驱动部分

摘要:我们最早可以追溯到1994年,智能家居已经进入中国市场,但是由于经济和技术的成本原因尚未普及。今年与人民生活水平的逐步提高,特别是嵌入式设备的快速发展,使智能家居不再像以前那么高不可攀了。

智能家居项目,写这篇文章是基于安卓界面,通过C控制硬件。控制常见的家用电器如空调电灯,并通过一系列的室内温度和湿度自动监测以及实现安全的影响。

由于这个项目的内容较多,所以是两种方式的分工来完成设计。详细摘要,基于智能家居通过JNI接受从JA V A数据,然后由C语言在各种硬件的行动以实现用户的需求,和硬件驱动程序编程的一部分。

关键字:智能家居,JNI,C语言

Smart Home system design based on Android——

C Language Function Module and Drive Section Abstract:in early 1994, Smart Home ’t popular because the before.

Smart Home project in this paper, is written in Android based interface, through the C to control the of a series of control room and protection.

Owing to the very big project , it is finish by twp people’s teamwork. And in this paper, Smart Home in an data came from the JA V A by JNI based on C language, and then by the various )是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。

智能家居是在互联网的影响之下物联化体现。智能家居通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能,甚至为各种能源费用节约资金。

智能家居的概念起源很早,但一直未有具体的建筑案例出现,直到1984年美国联合科技公司(United Technologies Building System)将建筑设备信息化、整合化概念应用于美国康涅狄格州(Connecticut)哈特佛市(Hartford)的CityPlaceBuilding时,才出现了首栋的“智能型建筑”,从此揭开了全世界争相建造智能家居派的序幕。

国内现状

智能家居作为一个新生产业,处于一个导入期与成长期的临界点,市场消费观念还未形成,但随着智能家居市场推广普及的进一步落实,培育起消费者的使用习惯,智能家居市场的消费潜力必然是巨大的,产业前景光明。正因为

如此,国内优秀的智能家居生产企业愈来愈重视对行业市场的研究,特别是对企业发展环境和客户需求趋势变化的深入研究,一大批国内优秀的智能家居品牌迅速崛起,逐渐成为智能家居产业中的翘楚! 智能家居至今在中国已经历了近12年的发展,从人们最初的梦想,到今天真实的走进我们的生活,经历了一个艰难的过程。[2]

智能家居在中国的发展经历的四个阶段,分别是萌芽期智能小区期、开创期、徘徊期、融合演变期。

萌芽期智能小区期(1994年-1999年)

这是智能家居在中国的第一个发展阶段,整个行业还处在一个概念熟悉、产品认知的阶段,这时没有出现专业的智能家居生产厂商,只有深圳有一两家从事美国X-10智能家居代理销售的公司从事进口零售业务,产品多销售给居住国内的欧美用户。

开创期(2000年-2005年)

国内先后成立了五十多家智能家居研发生产企业,主要集中在深圳、上海、天津、北京、杭州、厦门等地。智能家居的市场营销、技术培训体系逐渐完善起来,此阶段,国外智能家居产品基本没有进入国内市场。

徘徊期(年)

2005年以后,由于上一阶段智能家居企业的野蛮成长和恶性竞争,给智能家居行业带来了极大的负面影响:包括过分夸大智能家居的功能而实际上无法达到这个效果、厂商只顾发展代理商却忽略了对代理商的培训和扶持导致代理商经营困难、产品不稳定导致用户高投诉率。行业用户、媒体开始质疑智能家居的实际效果,由原来的鼓吹变得谨慎,市场销售也几年出来增长减缓甚至部分区域出现了销售额下降的现象。2005年-2007年,大约有20多家智能家居生产企业退出了这一市场,各地代理商结业转行的也不在少数。许多坚持下来的智能家居企业,在这几年也经历了缩减规模的痛苦。正在这一时期,国外的智能家居品牌却暗中布局进入了中国市场,而活跃在市场上的国外主要智能家居品牌都是这一时期进入中国市场的,如罗格朗、霍尼韦尔、施耐德、Control4等。国内部分存活下来的企业也逐渐找到自己的发展方向,例如天津瑞朗,青岛爱尔豪斯,海尔,科道等,用X10,深圳索科特做了空调远程控制,成为工业

智控的厂家。

融合演变期(年)

进入2011年以来,市场明显看到了增长的势头,而且大的行业背景是房地产受到调控。智能家居的放量增长说明智能家居行业进入了一个拐点,由徘徊期进入了新一轮的融合演变期。

接下来的三到五年,智能家居一方面进入一个相对快速的发展阶段,另一方面协议与技术标准开始主动互通和融合,行业并购现象开始出来甚至成为主流。

接下来的五到十年,将是智能家居行业发展极为快速,但也是最不可琢磨的时期,由于住宅家庭成为各行业争夺的焦点市场,智能家居作为一个承接平台成为各方力量首先争夺的目标。谁能最终胜出,我们可以作种种分析,但最终结果,也许只有到时才知。但不管如何发展,这个阶段国内将诞生多家年销售额上百亿元的智能家居企业。

5、爆发期

进入到2014年以来,各大厂商已开始密集布局智能家居,尽管从产业来看,业内还没有特别成功的案例显现,这预示着行业发展仍处于探索阶段,但越来越多的厂商开始介入和参与已使得外界意识到,智能家居未来已不可逆转。

目前来看,智能家居经过一年多产业磨合,已正处爆发前夜。业内人士认为,2015年随着合作企业已普遍进入到出成果时刻,智能家居新品将会层出不穷,业内涌现的新案例也会越来越多。[1]

国内相关政策

截止2013年,全球范围内信息技术创新不断加快,信息领域新产品、新服务、新业态大量涌现,不断激发新的消费需求,成为日益活跃的消费热点。我国市场规模庞大,正处于居民消费升级和信息化、工业化、城镇化、农业现代化加快融合发展的阶段,信息消费具有良好发展基础和巨大发展潜力。我国政府为了推动信息化、智能化城市发展也在2013年8月14日发表了关于促进信息消费扩大内需的若干意见,大力测发展宽带普及、宽带提速,加快推动信息消费持续增长,这都为智能家居、物联网行业的发展打下了坚实的基础。

政策摘要:增强信息产品供给能力

鼓励智能终端产品创新发展。面向移动互联网、云计算、大数据等热点,加快实施智能终端产业化工程,支持研发智能手机、智能电视等终端产品,促进终端与服务一体化发展。支持数字家庭智能终端研发及产业化,大力推进数字家庭示范应用和数字家庭产业基地建设。鼓励整机企业与芯片、器件、软件企业协作,研发各类新型信息消费电子产品。支持电信、广电运营单位和制造企业通过定制、集中采购等方式开展合作,带动智能终端产品竞争力提升,夯实信息消费的产业基础。[3]

国外现状

自从世界上第一幢智能建筑1984年在美国出现后,美国、加拿大、欧洲、澳大利亚和东南亚等经济比较发达的国家先后提出了各种智能家居的方案。智能家居在美国、德国、新加坡、日本等国都有广泛应用。

1998年5月新加坡举办的“98亚洲家庭电器与电子消费品国际展览会”上,通过在场内模拟“未来之家”,推出了新加坡模式的家庭智能化系统。它的系统功能包括三表抄送功能、安防报警功能、可视对讲功能、监控中心功能、家电控制功能、有线电视接入、电话接入、住户信息留言功能、家庭智能控制面板、智能布线箱、宽带网接入和统软件配置等。

根据美国该行业之专业顾问公司PARKS的统计资料显示:1995年,美国一个家庭要安装家庭自动化设备的平均费用在7000至9000美元之间。1995年美国家庭已使用先进家庭自动化设备的比率为0.33%,看来市场真正启动尚需时日。预计这五年内,家庭自动化的市场年平均增长率为8%。PARKS公司的资料亦显示:到2004年,家庭网络市场总额可达57亿美元。据国际专家预测,到2000年底国际智能家居的产品销售额可达24亿美元。2004年可达148亿美元。

发展机遇

智慧家居是今后家居领域发展的必然趋势,虽然市场推广才刚刚开始,但行业的竞争已经很激烈,光是宁波就有不下5家企业专门从事这方面开发。

制造企业在产业调整和转型中,都需要运用到大数据。今后,数据将成为推进社会进步的第四生产力。市场潜力巨大,同时,智慧家居所依托的大数据分析,也是传统制造企业转型升级的重要途径。

总论:

比尔盖茨是国外第一个使用智能家居的家庭,至今快有三十年的历史了,智能家居控制系统也逐渐走进大家的视野。这两年随着wifi的普及,无线智能家居逐渐取代了有线产品,在无线领域国内并不落后于国外,同样使用最新Zigbee智能家居,但目前国内智能家居虽有潜力但发展缓慢,人们的消费观和消费能力并不充分。

根据《中国智能家居设备行业发展环境与市场需求预测分析报告前瞻》分析,目前我国智能家居产品与技术的百花齐放,市场开始明显出现低、中、高不同产品档次的分水岭,行业进入快速成长期。面对中国庞大的需求市场,预计该行业将以年均19.8%的速率增长,在2015年产值达1240亿元。[4] 发展

智能家居最初的发展主要以灯光遥控控制、电器远程控制和电动窗帘控制为主,随着行业的发展,智能控制的功能越来越多,控制的对象不断扩展,控制的联动场景要求更高,其不断延伸到家庭安防报警、背景音乐、可视对讲、门禁指纹控制等领域,可以说智能家居几乎可以涵盖所有传统的弱电行业,市场发展前景诱人,因此和其产业相关的各路品牌不约而同加大力度争夺智能家居业务,市场渐成春秋争霸之势。

(以上图片来自百度的搜索)

1.2本设计所完成的工作

本文根据系统分为6个界面,包括主界面、灯光界面、闹钟界面、窗帘界面、空调及排气界面、安防界面,其中用户最先能看到的是主界面,从主界面可以进入其他的5个二级界面。如图1.1所示

图1-1

主界面除了作为其他界面的入口,还包括当前的温湿度显示,选择在家和外出模式的切换。其中当外出模式切换到在家模式和进入安防设置的时候需要用到RFID 认证。

在灯光界面中的按钮是能够判断灯光的状态的,因此在灯光界面中会不断刷新并上传灯光的状态以便LED 灯和按键的状态保持一致。

闹钟界面中我们提供一个定时闹钟可以设定在24小时内使蜂鸣器动作一

次。并且可以再闹钟发出声响之前取消。

在空调界面中由于也需要用到显示温度,可以通过温度控制空调的开启,另外由于硬件上的限制,空调在演示中也是以LED灯的形式演示。

窗帘界面可以提供两种控制窗帘的方法,包括手动直接控制窗帘和通过光照值控制窗帘的开关,为了方便用户设定合适的光照值,界面中有对当前光感的监控。

安防系统需要通过RFID的认证才能进入,此界面主要提高的安防功能是红外和烟雾警报,警报的方式都分别分为蜂鸣器警报和短信警报,而且此界面也可以对已绑定的手机号码和RFID卡进行更换。

本系统的界面使用Android写成,把用户需要求的数据传到C语言层,最后由C语言层操控硬件。而C语言和JAVA之间的通信侧是通过JNI来完成的。(如图1-2)

图1-2

2 总括

2.1 硬件

本文所用到的主要硬件有:搭载Cortex-A8的GEC210嵌入式开发板,7英寸电阻屏,以及一块硬件拓展版。下面是智能家居系统原理图。

2.1.1 Cortex-A8

本开发板GEC210搭载的主芯片为Cortex-A8,又名“蜂鸟”,是三星推出的一款适用于智能手机和平板计算机等多媒体设备的应用处理器,Cortex-A8和S5PC110功能一样,110小封装适用于智能手机,210封装较大,主要用于平板计算机和上网本。

Cortex-A8采用了ARM CortexTM-A8内核,ARM V7指令集,主频可达1GHZ,

6432位内部总线结构,3232KB的数据指令一级缓存,512KB的二级缓存,可以实现2000DMIPS(每秒运算2亿条指令集)的高性能运算能力。ARM cortex-A8 CPU 原理如图2-1所示。

2.1.2 拓展板

拓展版主要是为了拓展在GEC210上所没有的硬件需求,以满足智能家居的实验需要。具体包括:红外模块、继电器模块、步进电机、直流电机、气体传感器、温湿度传感器、光敏感测器、GPRS模块和RFID模块。原理图及IO引脚分配如图2-2所示:

图2-2

2.1.3 RFID模块芯片

拓展版所用的RFID具体型号为MF RC522 ,是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。

MF RC522 利用了先进的调制和解调概念,完全集成了在13.56MHz 下所有类型的被动非接触式通信方式和协议。支持 ISO14443A 的多层应用。其内部发送器部分可驱动读写器天线与ISO 14443AMIFARE卡和应答机的通信,无需其它的电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理

ISO14443A 兼容的应答器信号。数字部分处理ISO14443A 帧和错误检测(奇偶&CRC)。此外,它还支持快速CRYPTO1 加密算法,用于验证MIFARE 系列产品。MFRC522 支持MIFARE?更高速的非接触式通信,双向数据传输速率高达

424kbits。

2.2 JNI

JNI是Java Native Interface的缩写,中文名JAVA的本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java 代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,只要调用约定受支持就可以了。使用java与本地已编译的

代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java虚拟机实现。JNI在程序中作用的是Java和C的翻译,在本设计中起到的作用是,让C语言层得知Java的调用,以及把各种硬件信息通过实时刷新的方式不断反馈到Java 中。关系如图2-3示:

图2-3

3 功能设计

3.1 主界面

3.1.1 温湿度监控显示

显示温湿度是智能家居的最基本功能,通过荧幕用户可以随时从中获知当前的温度和湿度。由于温湿度显示并不需要触发事件,因此打开程序的时候就会自动触发。

温湿度的显示需要不断地刷新,也为了方便其他数值的传递,我们定义了一个叫cflags的数组,定义clags的[1][2]是用于存放温湿度的数值。另外光感应驱动也在这里打开,方便在同一个地方把需要随时刷新的值都得到并及时更新到cflags里面去。

在监控温湿度的线程中,首先根据驱动给的借口,取得温湿度传感器的档描述符fdtemperature,通过IO控制函数temperature_ioctl(fdtemperature , &cflags[1]);还有emperature_ioctl(fdtemperature , &cflags[0]);不断循环并取得当前的温湿度数值。

在取得数值之后,通过安卓里面的handler随时刷新数值,而C层需要做的就是不断更新数组里面的所有数据并通过JNI传到上层以达到界面层和运算层的实时通信。首先需要在初始化时把HANDLER的属性对象保存起来,先定义两个全局变量jobject g_obj = NULL;和JavaVM *g_vm = NULL;然后在JNI执行初始化是进行环境变量的保存(*env)->GetJavaVM(env,&g_vm);和g_obj= (*env)->NewGlobalRef(env,obj);

在更新线程中释放之前保存的全局变量以便找到JAVA中的对象即对应的JAVA数组并转换上传,具体操作是:

jclass gasdevclazz = (*g_env)->GetObjectClass

(g_env, g_obj);

jfieldID fieldID = (*g_env)->GetFieldID

(g_env, gasdevclazz, "flags", "[I");

jflags = (*g_env)->GetObjectField

(g_env, g_obj,fieldID);

jclass iclass = (*g_env)->GetObjectClass(g_env, g_obj);

jmethodID methodId = (*g_env)->GetMethodID(g_env, iclass,

"HandlerArray", "(I)V");

3.1.2 在家模式和外出模式的切换

由于在出门的时候用户经常需要关闭很多的用电器,整合一个外出模式就能为用户提供极大的便利。外出系统的主要功能是在用户切换到外出功能的10秒后,关闭室内的所有可控制用电器并打开所有可用警报的短信通知。

在家模式和外出模式,根据界面需求,只设置一个触发动作的界面,具体操作是当用户按下外出模式按钮C语言层接受到触发命令,在C语言层通过利用pthread_create创建两个线程:第一个线程首先利用线程分离函数pthread_detach(pthread_self())进行线程的分离,使用sleep(10)等待10秒后,若10秒之内判断到外出模式的标志位cflags[3]依然是1,就通过包装过的驱动界面把用电器关闭,把标志红外入侵警报的cflags[4]和标志有毒气体警报的clags[5]都设置成短信通知,并把所有存储用电器状态值的cflags中的相关数值进行刷新,最后关闭线程;另一个线程则是负责不断监听RFID,也是先通过分离线程,然后使用while(1)不断循环,在循环体内打开rfid驱动,每0.5秒启动一次,用if判断语句当识别到用户绑定的ID卡时切换为在家模式把红外警报和气体警报标志位置成关闭状态,并关闭线程。

工作原理流程图如3-1所示。

3.1.3 进入安防界面

在进入安防界面的时候需要用到RFID卡的认证,为上层界面提供了一个触发界面,具体操作是当接收到界面传来的进入安防界面动作时,在C语言层开辟一个安防进入的线程,利用for循环轮询,每次循环相隔0.5秒,然后用if 语句把存储有绑定的有效rfid卡ID的cfags[17]与rfid识别到的卡号进行比对,当一致时把cfags[6]置成ID卡号表示进入安防界面成功,如果在5秒内未

能识别正确的ID卡号,就把cfags[6]置成1表示进入安防界面失败。

如流程图3-2所示。

图3-2

3.2 闹钟

闹钟是智能家居中一个重要的功能,此闹钟可以设定在24小时内使蜂鸣器发出一次声响,并且能够随时取消并重新设置。

此界面给上层提供的界面是传递一个字符串,通过算法把字符串提取成数字并作为设定时间。若当前时间和设定时间一致则蜂鸣器动作。每次判断蜂鸣器是否动作之前都需要先判断标志位,看看用户是否取消闹钟。是的话就停止减少时间并跳出该段程序。

具体操作是在初始化的时候先建立好闹钟线程(后面会说到闹钟线程还整合

了其他功能),然后分离线程,通过time_t tp;和struct tm *s_tm;定义时间结构体并且通过tp = time(NULL);和s_tm = localtime(&tp);两个函数取得当前时间,同时通过以下if语句判断:

if(((cflags[16]10000)==1)&&((s_tm->tm_)==(cflags[16]%100)))其中cflags[16]中,后面四位是表示用户设定的时间和分钟,第一位是指是否设定闹钟的标志位,如果标志闹钟的clags[16]不为0而当前的时分与用户设定的时分又是一致的话,就直接通过蜂鸣器的包装驱动设置蜂鸣器的合适占空比和周期,并持续动作10秒,之后则把闹钟标志位clags[16]置0。

该流程如图3-3所示:

图3-3

3.3 灯光

灯光的直接控制就是通过用户直接点击上层按钮,传到下层直接打开驱动进行操作,操作完成后刷新标志位。可以每次控制一个LED灯或者是一次控制所有的LED灯,方便用户控制。

在灯光界面我们给上层界面只需要提供一个界面,传进来一个int型数,就可以知道用户的意图,通过if语句判断,当传进来的数是13或者14,我们就把对应的房间或者客厅LED灯取反,如果传进来的数是0,就把所有LED灯关掉,1则是打开所有的LED灯,在开关后必须把标志灯光状态的标志位更新。

另外,出于环保的考虑,我们默认设置了,当光照值大于4000的时候,灯

光会自动关闭。

3.4 窗帘

3.4.1 光感监控

用户在灯光界面可以看到当前的光照值,以便对光感控制窗帘中的光感强度有更具体的概念。

由于这个监控也是不需要任何的触发动作,当用户切换到此页面是就会不断刷新数值,因此也不提供任何界面,而刷新光感的具体动作也是通过同一个HANDLER不断地取得在驱动中获取的当前光照值并上传到上层界面。

3.4.2 控制窗帘

在窗帘界面提供直接窗帘的界面,只需要传递一个整数,0的时候打开,1的时候关闭,用户可以根据当前的光照值设定当光照值大于某设定值时,窗帘进行关闭动作,以及当前光照值少于设定值时,窗帘开启并屋内的灯光。

具体操作也是在初始化的时候就建立并分离线程,用while(1)每隔两秒判断一次,我们把预设光感值cflags[9]初始值设为最大值5000,低于设定值开用语句if((cflags[7]==2)&&(cflags[8]==0)&&(cflags[9]>cflags[10]))进行判断,高于设定值关则用也是用一个类似的语句来判断,具体是:if((cflags[7]==1)&&(cflags[8]==1)&&(cflags[9]

而直接操作窗帘的线程只在用户层有指令传送下来的时候存在,通过一个if语句判断是开还是关,然后直接操作驱动,最后刷新标志位并关闭线程。

需要注意的是,由于步进电机的特性问题,而打开和关闭的动作也需要转动一定的步数,因此在短时间内进行打开和关闭,会导致步进电机的停止动作,为了防止这一情况的发生,我们规定,用信号量去加锁,当完成打开或者关闭动作时,再执行下一个动作,避免了错误的发生。

实际操作是我们在当接收到用户需要操作窗帘时会新建并分离一个线程,用if语句判断如果进行动作与窗帘当前状态一致则不动作,或者当信号量小于0时,利用sem_trywait()函数阻塞,直到上一个动作完成为止。

光感控制窗帘开关原理流程图如图3-4所示。

3.5 空调及排气扇

3.5.1 空调和排气扇的直接控制

空调和排气扇的直接控制是用户对界面进行操作对空调和排气扇直接进行直接的操作。界面传递一个整形数,分别直接控制空调和排气扇的开关。

具体操作是在借口程序里面打开驱动取得表示空调的LED灯和直流电机的描述符,然后通过一个switch语句判断用户动作并执行,最后回收描述符。3.5.2 温度控制空调

用户通过设定一个温度,当当前温度高于用户所设温度的时候空调自动打开。监控程序依附在handler刷新上传flags的线程中,而设定的值则在接口程序里面通过cflags[15]来设定,然后不断用if((cflags[15]100 !=0)&& (cflags[15]%100 < cflags[1]))循环比对,当符合则打开标志空调的LED灯。

流程图如图3-5所示。

3.5.3 短信控制空调

短信控制空调可以通过绑定的号码给本机发送短信对空调进行控制,通过GPRS模块接收短信,在初始化的时候开辟并分离一条用于接收短信的线程,用while(1)不断循环,当识别到号码是绑定号码时对字符串进行解析,短信控制打开空调的命令是“openair”,用if(strcmp(gprs_mesbuf[2],"openair")==0)判断本机接收到信号,操作驱动点亮表示空调的LED灯,并把空调开关的标志位cflags[11]更改为开,最后给回复绑定号码一条短信,内容为:“openair ok。”

3.6 安防

3.6.1 警报

红外入侵警报是通过打开红外传感器,当有物体遮挡时进行用户要求的动作,如蜂鸣器警报和短信警报。

烟雾警报是通过打开烟雾传感器,当有物体遮挡时进行用户要求的动作,如

蜂鸣器警报和短信警报。

在安防设置中为警报提供了一个整形数的传递界面,而其中cflags[4]和clags[5]分别是入侵和气体警报的标志位,数字2代表短信警报,数字1代表蜂鸣器警报,0表示关闭警报。通过switch语句分别判断情况,分别是红外和烟雾警报的短信、蜂鸣器警报或者取消警报。当接受到打开警报的指令,会改变标志位令线程里的该段程序生效。

前面我们说过,为了节省资源,我们把警报的工作也同样放到闹钟的线程里面,其中用if(((cflags[4]!=0)||(cflags[5]!=0))&&((k>=3000)||(j==0)))这一判断语句判断是否打开了蜂鸣器警报并打开蜂鸣器的驱动接口,在其中又有两个判断语句if((j==0)&&(cflags[4]!=0))和if((k>=3000)&&(cflags[5]!=0))分别用来判断硬件的状态,当接受到信号时蜂鸣器动作。而短信警报则需要用if((k>=3000)&&(cflags[5]==2)&&((cflags[18]10000)>=3600 ))和if((j==0)&&(cflags[4]==2)&&((cflags[18]%10000)>=3600 ))来分别判断是否触发短信警报,而每两次相同类型的短息警报,我们也有两个判断体去控制最少间隔10分钟才会再次触发警报以免短信的费用过高。

3.6.2 切换识别ID卡以及电话号码

切换绑定号码会把原来保存的电话号码清除并更新为用户输入的新号码,以在需要发短信的时候使用。提供的界面会在上层界面接受一个字符串,只需通过memset()清空字符串和strcpy()复制字符串两个函数就可以直接把电话号码的字符串内容替换掉。

RFID卡的切换,需要在10秒内将有效的新卡放到RFID传感器上,当切换成功时会有文字框提示。操作是首先在接口程序创建一个换卡的线程,打开RFID 驱动用dowhile循环5次,当识别到有效的新ID卡替换掉掉旧的cflags[17]储存的ID卡号,并把标志换卡状态的cflags[19]置位成表示成功的2,失败的话就把cflags[19]置位成表示失败的1。

4.驱动及界面包装

我们全部驱动采用的驱动模型是字符驱动。字符驱动是linux里面最为简单的一种驱动模型。这里为了使用缩短开发周期,我们注册了比较方便的杂项设备驱动的写法来写led灯的驱动。

杂项设备(misc)是linux里面已经写好的一个设备,我们只要把驱动注册到该设备中,那么不用多余的语句,linux就会帮我们挂在驱动,创建驱动设备节点。

4.1 LED

粗略介绍下led灯设备驱动的编写流程:

1.在把led_ini和led_exit两个函数设定位驱动初始化函数和驱动卸载函数。

2.在led_init函数中,我们要申请led的gpio口并注册,最后我们需要把定义好的杂项设备的结构体(my_misc)注册到杂项设备。

3.定义用界面(用户程控LED亮灭),这里我们使用了ioctl函数控制LED 灯.用户使用ioctl函数讲需要的操作的灯和熄灭信息传进来就能控制led了。

4.定义卸载函数led_exit释放刚刚申请了的gpio,最后我们取消驱动与杂项设备取消关联状态。

相关主题
文本预览
相关文档 最新文档