资源描述
攀枝花学院本科毕业设计(论文) 目录本科毕业设计(论文)智能家居系统学生姓名: X X X 学生学号: XXXXXXXXXXXX 院(系): 数学与计算机学院 年级专业:2009级信息与计算科学 指导教师: XXXX 硕士助教 二一三年六月摘 要随着经济的高速增长。建立一个低成本、高效率的智能家居系统已成为当今世界的一个热点话题。目前越来越多的智能家居产品出现在市场上,其中以基于电话网的智能安防系统居多。目前在我国,使用家庭电话的用户越来越少,而且电话线路受地域的影响严重容易损坏,所以这类产品局限性很大。随着电信GSM网络覆盖范围的无缝化、广阔化以及手机的日益普及为基于GSM网络的智能家居系统提供了巨大的应用空间。本文设计了一种基于GSM网络的智能家居系统。本系统采用cortexA8为系统控制核心,对家庭中出现的意外情况使用各种传感器进行采集,然后通过GSM模块把采集到的信息发送给管理人员,管理员根据收到的信息发送相关指令给GSM模块来控制现场执行机构,完成意外情况的排除。关键词:智能家居,GSM,传感器,远程控制AbstractWith the rapid economic growth, the life of fast rhythm state that allows people pay more and more attention to the quality of life and grade. How to build a high efficient, low cost of intelligent household system has become a hot spot in the world today. At present, the domestic and foreign various types of intelligent household products more and more, much of which is based on the network security control system. But in our country, family telephone users are reduced gradually, and telephone lines Louis is destroyed, so this kind of product has a certain limitation. With the telecommunications GSM network coverage of the broad, seamless change, and the increasing popularity of mobile phone based on GSM network intelligent household system provide great application space. This paper introduces a design based on GSM network of intelligent home control system of the working principles and main function. The SCM system control core STC, to family of possible accidents with all kinds of sensors for acquisition, through the GSM module gathering the information sent to management personnel, administrator according to receive sending the information related instructions to GSM module to control peripherals, including control specified electrical appliances, switch electronic door multiple functions. Practice shows that this system reliable performance, cost is not high, suitable for the general public use, can be widely used in modern residence, has a broad market prospect. Keywords:smart home,GSM,sensor, remote control目 录摘 要IAbstractII1 绪论11.1 智能家居概述11.2 智能家居网络构成21.2.1 家居网络控制平台21.2.2 智能家居子系统31.3 智能家居网络的信号传输介质31.3.1 电力线31.3.2 电话线31.3.3 双绞线同轴电缆31.3.4 无线方式41.4 远程控制技术概括41.5 智能家居控制系统的国内外发展现状52 系统需求分析及方案72.1 应用程序功能需求分析72.2 开发环境需求分析72.2.1 硬件环境72.2.2 软件环境73 硬件模块及其驱动设计实现93.1 主控模块93.2 通信模块93.2.1 TC35模块简介93.2.2 TC35模块与cortexA8连接方式93.3 传感器模块103.3.1 led103.3.2 蜂鸣器143.3.3 lm75温度传感器183.4 视屏模块233.4.1 打开视频设备233.4.2 设定属性及采集方式243.4.3 设置视频捕获格式243.4.4 分配内存263.4.5 得到视频缓存的内存空间263.4.6 视频采集方式273.4.7 处理采集数据273.4.8 关闭视频设备283.4.9 视频格式的转换283.5 lcd模块333.5.1 函数接口343.5.2 封装给应用层的函数354 系统软件部分374.1 主程序及大致流程374.1.1 温度监测线程384.1.2 视频监测线程394.1.3 报警流程394.2 短消息程序设计404.2.1 AT指令介绍404.2.2 PDU编码规则424.2.3 短信模式设置434.2.4短信的发送方法435 测试及结论445.1 测试原则445.2 测试方案445.3 结论45参 考 文 献4645攀枝花学院本科毕业设计(论文) 1 绪论1 绪论21世纪是信息化的时代,物联网新技术推动了人类文明的进步。随着人们生活水平的提高以及科技的高速发展,智能化家居已成为一种必然趋势而深入千家万户。智能化家居是利用电力自动化、计算机、网络通信、信息、结构化布线、无线等技术将多种设备应用和综合功能组成一个强大的完善的系统1。它以住房为平台,同时兼备网络家电、家电设备自动化、建筑、通信、远程医疗、家庭办公、娱乐等功能,集结构、服务、系统、管理为一体的舒适、节能、安全、便利、高效、娱乐、环保的居住环境1。本文介绍的智能化家居控制系统可以使得人们通过手机在任何时候、任意地点对家中的任意电器(例如:热水器、空调、电饭煲、灯光等)进行远程控制。你可以在下班途中,预先将家中的空调打开、电饭煲煮好香喷喷的米饭、让热水器提前烧好热水,而这一切的实现都仅仅是靠一条短信完成。本系统采用cortexA8作为主控器件,远程控制是基于GSM网络短消息通信方式,AT指令作为系统控制命令,cortexA8通过对收到的信息进行解码来识别控制信号,用户只需向TC35模块发送相应指令即可实现远程控制操作。温度传感器完成现场信息的采集,cortexA8对数据进行及时的处理,实现实时测控;短消息发送部分采用基于GSM模块TC35和IT公司的电平转换芯片MAX232等器件构成的移动终端的硬件电路,完成短消息收发功能。1.1 智能家居概述进入21世纪,科学技术与生产力加速了社会的发展创造能力,随之而来的也是人类对于物质水平的大力需求,而居住的环境要求也成为了人们关注的领域,所以“智能化”这一概念也促使科技工作者们将其引入智能家居民应用方面的小区住宅以及小区建筑技术之中。由于计算机控制系统发展迅速,以及电子信息行业的发展成长快速,也大力促进了智能家居控制系统的产生。因为固定电话和互联网技术基本上是传统智能家居控制系统的技术核心,所以安装固定电话以及互联网成为了达到家庭用户传统智能家居控制系统的产生的根本硬件技术、以及硬件要求。但是随着电子技术、智能通信技术以及网络技术发展日新月异的今天,基于GSM网络通讯体统的低成本无限制智能家居控制系统成为广大居民以及中国居民享受新一代智能家居控制系统的变革捷径。智能家居系统成为一种新兴的综合技术学科。智能家居系统也可被定义为一个控制过程,或者控制系统,利用现在被大多数科技人员已掌握的计算机技术、网络布线技术、网络通信系统将其糅合,使之成为融合在家居控制中的多个子系统,并使其智能的结合在一起。目前相比较其他时分多址技术手段而言,更加完美、成熟、应用更广泛的一种普及率很高的系统是GSM(Global System for Mobile communication)系统。在我国,已建成的基本覆盖全国的GSM数字蜂窝移动技术信息网,早已成为我国公众移动生活密不可分的一种技术之一。在GSM短信服务的基础上,智能家居控制系统是在移动网络通讯技术的短信应用功能的技术运用。由于GSM网络通讯系统在全国范围实现了联网以及漫游能力,所以它的网络功能很强大,用户无需另外搭建网络,因此,在GSM网络覆盖率达到全国范围的情况下,为客户省下了昂贵的网络搭建费用以及维护网络费用。同时,它对用户数量的限制也十分少,也为客户克服了一般智能家居控制系统中系统成本高、维护艰难、并且网络覆盖范围小以及用户组数量少的缺点。相比传统网络智能家居控制系统在网络通信覆盖率上具有较大的优势,加之GSM本身就具有数据的输送功能,这也促成了GSM应用在广大生活中得到迅速普及。基于GSM的无线通讯智能系统还具有双线传送数据的功能、性能稳定。为客户在远程操控以及用户控制设备提供了强大技术平台。远程操控系统应用广泛,遍及中国经济生活发展的各大领域。而且目前人们正在使用中的操控系统从成本、性能、稳定性、便捷性以及维护的难易方面基本都不能使人们最大程度的满意。所以,GSM网络通信技术的提出大大的提升了智能家居控制系统的完善程度。1.2 智能家居网络构成1.2.1 家居网络控制平台智能家居主控制平台是智能家居控制系统的“心脏”部分,等效的可以说是智能家居的核心。对方可以通过手机短信的方式接受用户命令并实时操作,或者对对用户手机发送控制电器运转情况,对家庭总线和各个网络子系统实施连接,完成智能家居控制系统平台的链接构成。1.2.2 智能家居子系统智能家居系统的连接一般均为家电网络中的耗电类型的家电电器。例如冰箱、空调、电磁炉、热水器、电饭煲、电灯等家用电器。这些消耗电类型的家庭电器可以在现场立即布线互联构成智能家居系统,与主控家居智能平台相连接,再进行现场网络综合布线连接智能家居子系统,就可以由用户利用协议中的操作指令短信操作家庭中电器设备了。1.3 智能家居网络的信号传输介质智能家居网络通讯形式多彩多样,可以采用不同的传输介质传输网络通讯信号,大体上有电力线、电话线、双绞线、无线方式。1.3.1 电力线基于电力线为传输介质的通信网络可以说是最方便的,因为现在家庭基本都已铺设供电源的电源线而且家中的电源线已经延伸到家庭生活的每个角落。而且,现在大部分家用电器设备都离不开电源。所以利用家中的电力线完成智能家居控制系统网络方案方便而且经济便宜。在国际上,首个实现家庭电器智能化的方案便是通过电力线作为信息传输载体的而达成的。1.3.2 电话线利用电话线作为网络信息传输载体起步虽然相较于电力线稍微晚一些,但是因为它具有布局简单、使用方便、安全性能好和易于大规模推广等优点,而且近期电话线的传输速率也完成了大幅度提升,所以它的应用和发展非常快,在美国已有成熟的产品。其中包括:3COM、Advanced MicroDevices、AT&T、Compaq、HewlettPackard、Intel、IBM和Lucent Technologies等发起成立了“电话线家居网络协会”,至今己有100多个成员。1.3.3 双绞线同轴电缆目前最通用的传输介质是用双绞线同轴电缆。可是在基于双绞线同轴电缆实际操作中最大的困难是需要另外铺设24根专用的传输线。但是它拥有通信可靠性和总线接口相对简单等优点,其仍然可以受到广泛用户的大批量应用。1.3.4 无线方式无线方式通过射频载波或者红外线等形式传输用户信息,“蓝牙技术”是最近发展最火热的无线通信方式。音频和视频信号、计算机网络信号、控制信号均可以利用蓝牙技术传输家庭用户信号。而且用无线方式传输信息时无需架设任何线路且实现极其方便灵活,非常适合在家庭网络中应用。由于无线方式简单方便,易于架设,所以本论文便是使用的GSM无线技术平台操作的智能家居平台系统。1.4 远程控制技术概括本论文研究立于一个对于家居电器进行远程控制,以便于实现家居智能化的系统。远程控制指的是远端的家居控制者通过通信系统对现场的家居电器系统进行控制,其目的在于解除地域和环境对控制的限制,实现高集中的远程控制,最终实现生产资料和社会资源与通讯资源的优化配置。现代远程控制技术是计算机技术、通信技术、网络技术的集合,也是信息技术和控制技术的结合。从用户角度来讲,需要的是一种方便、安全、可靠的一种传输方式。可以利用公共数据网或者通过架设专线来实现有线传输,然而在大多数情况下,传输距离、架线环境等条件限制了有线传输2。无线传输也有很多途径,如架设微波线路、(超)短波电台等都是通过自建的无线发射接收系统。然而无线传输架设成本高、频率资源的限制、容易受到地形地貌的影响、系统的架设和维护工作繁重,在业务量小、用户数量大、位置分散等应用场合中也受到很大限制。目前,经过三代发展的移动通信,移动通信体制中的时分多址技术中最完善、最成熟、应用最广的一种移动通信系统就是GSM系统2。在数据采集、远距离监控、GPS定位、缴费通知、无线报警等领域GMS都有着广泛的应用。在全国范围内GSM网络实现了联网和漫游,用户无需另外组网,GMS具有很强的网络能力,网络覆盖范围广阔,用户不必再花费节昂贵的建网费用和维护费用2。比传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普及2。GSM短信息系统性能稳定还可进行双向数据传输,为监控设备和远程数据传送通信提供了一个可靠、安全的支持平台。短消息发送一般采用其专用控制信道(DCCH)来发送,短信息的服务端可以实时的了解到对方是否接收到短信息,一旦信息传送失败,短信中心实时得知被叫用户没有回复信息,网络管理端则会继续发送消息,以保证被叫方能收到短信息。所以,在GSM网络的一些主要的电信业务当中,此类短消息业务的信息传递是实时安全的2。每个短消息的信息量都是140个八位组(7比特编码,160个字符)不会超过140个字节,绝对可以满足单方面监测用户指标的信息量。综上所述,智能家居控制系统选用GSM的短消息控制方式,来实现智能家居设备的远程控制是可行的。1.5 智能家居控制系统的国内外发展现状目前,我国每年竣工的建筑面积达到20亿平米,智能家居/建筑的产值至少在1-2万亿元以上。智能家居的发展分为三个阶段:首先是家庭电子化(Home Electronics)阶段,这个时期主要是面向单个的电器,家庭电器之间并没有形成网络,亦没有大的联系。其次是住宅自动化(Home Automation)阶段,这个时期是面向功能的阶段,一部分的家庭电器之间形成了简单的网络,主要是为了实现某个特定单一的功能,例如单一的自动抄表功能。最后是家居智能化(欧洲称为Smart Home,美国称为 Wise House)阶段,这个时期是面向系统设计的阶段,系统通过家庭分布总线把住宅内各种与信息相关的通信设备、家用电器、报警装置并到网络节点中进行集中的监控、管理,保持家电与环境的协调,提供生活、工作、学习以及娱乐的各种优质服务,营造一种温馨舒适的家庭氛围。智能家居控制系统提供高效、舒适的家居环境,确保住户的生命财产安全;集中或远程监控家居环境的温度、湿度以及风速等,空气中成分也可检验,为空气质量的提高提供依据;电视机、CD等娱乐设施也不再需要人们近距离调节;周围环境以及太阳光的强弱变化都可以合理利用,使能耗降低,资源合理利用,保护环境;提供现代化的通信、信息服务12。在智能家居系统研发中,美国和欧洲一些发达国家一直处于领先地位。近年来,一大批国外知名企业先后挤身于智能家居的研发中尤其以美国微软公司及摩托罗拉公司等为首12。摩托罗拉公司开发的“居所之门”、IBM公司开发的“家庭主任”、微软公司开发的“梦幻之家”等均已日趋成熟12。在亚洲,日本韩国新等一些经济发达国家的主要企业也进军智能化家居系统的开发,对家居市场更是跃跃欲试。经过哥本哈根会议,我国更加明确了节能减排,绿色建筑的目标,这就使住宅智能化凸显出了其合理规划,最大限度的节约能源的优势。如果我国大力推广绿色建筑,仅在铺设智能化系统上所需的新设备的生产上就有2000亿到3000亿人民币的新市场。而中国“智能家居网络”必在“智能化住宅”的框架下形成一个新型IT产业,而这一切必将对未来几十年我国房地产的健康有效发展起着深远的影响。由于智能家居系统还缺乏统一明确的国际标准,许多公司开发出的产品都是基于自己组的网络和信息交换协议,很多产品是针对特定的组网环境开发的,部分核心技术没有对外公布,技术复杂,直接导致了使用范围的局限性。再者,缺乏对应的第三方产品,各个接入设备之间不能兼容、互操作性差、不利于产品的扩充,因而进一步局限了产品的发展。再加上,有的系统成本过高,严重影响了产品的普及。因此设计一个符合国家国情和规范的集远程控制和本地控制为一体的智能家居控制系统是非常具有现实意义的,且势在必行。作为智能家居的核心系统的智能家居的控制系统,它的设计功能的完善必将推动住宅智能化的发展。而系统功能的集成化、用户使用的傻瓜化以及市场的平民化将是智能家居控制器的发展趋势,系统也将逐步迈向绿色化。最终,我想全人类的梦想是智能家居控制系统将囊括所有的家事杂物,让我们真正的享受舒适温馨的家庭生活。攀枝花学院本科毕业设计(论文) 2 系统需求分析及方案2 系统需求分析及方案物联网智能家居要将各成体系、互不相连的子系统协调起来,就必须有一个兼容性强的中央家居处理平台,接受并处理控制设施发出的信息,然后传送信号给你希望控制的家电或者其他家居子系统。2.1 应用程序功能需求分析本设计采用模块化设计,整个系统由通信模块、视频采集模块、传感器模块、Lcd模块组成。cortexA8通过对传感器模块传送来的信息进行判断,如果信息异常,则利用蜂鸣器以及LED实现报警,并通过GSM模块向用户发送报警信息。同时用户也可以根据需要,发送短信给GSM模块来控制相应的家电。实现对现场图像实时监控及工作位置实时控制。2.2 开发环境需求分析2.2.1 硬件环境(1)硬件配置原则具有可靠性,可用性和安全性,在满足软件需求的条件下,具有完善的技术支持,能够满足个人学习和设计需要。(2)运行本软件所需的硬件资源CPU: 800M及以上;内存容量: 内存达128M以上。本系统采用cortexA8为中央处理平台。 2.2.2 软件环境(1)系统软件配置规则 能够在指定的运行环境下,满足该软件的可靠性、安全性和可用性的要求。(2)系统软件的配置方案配置有持续工作能力、高稳定性、高度可集成的开放式标准的操作系统,如Windows NT 、Windows2000、UNIX,Linux等。熟悉C+高级程序设计语言。本系统采用Linux为操作系统。攀枝花学院本科毕业设计(论文) 3 硬件模块及其驱动设计实现3 硬件模块及其驱动设计实现3.1 主控模块本系统采用cortexA8为控制核心,cortexA8不断监测有没有异常信息,当发现异常信息时,则进入相应中断,利用cortexA8通过UART串口向GSM模块发送一系列AT指令并启动GSM模块发送报警短信给用户。再根据用户发送回来的指令打开相应的继电器来控制家用电器,完成现场控制和监测任务。3.2 通信模块3.2.1 TC35模块简介TC35是西门子公司推出的一种完整的无线GSM模块,主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口、SIM卡支架七部分组成。它可以快速、安全可靠地实现系统方案中的数据传输、短消息服务(Short Message Service)。模块的工作电压为3.34.8V。该模块有AT指令集接口,支持文本和PDU模式的短消息第三组的二类传真等。此外,TC35还拥有多方通话、电话簿功能、漫游检测等功能。TC35具有TALK、IDLE、省电模式三种常用工作模式。通过它的40管脚的ZIF连接器实现指令、数据、语音信号、控制信号的双向传输以及电源连接。TC35的核心是基带处理器,主要处理GSM终端内的语音、数据信号,蜂窝射频设备中所有的模拟和数字功能它也拥有。可支持EFR、FR和语音编码而不需要额外硬件电路。3.2.2 TC35模块与cortexA8连接方式TC35模块主要通过串口与cortexA8进行连接,从而cortexA8实现对TC35模块的控制。考虑到系统设计接口的简单性并且与cortexA8的UART进行连接,所以只采用TC35的串口提供了的两线(TXD、RXD)控制线连接。系统采用软件对TC35模块通信模块进行控制非常灵活,过多硬件信号的检测也很好地避免了。对于TC35的其它管脚在不使用的时候,如果该管脚为输出时,一般将该管脚悬空;如果该管脚为输入管脚,则需要将该管脚通过10的电阻上拉。另外需要将IGT管脚上拉因为IGT管脚是控制TC35模块工作的管脚。并且cortexA8与该管脚进行连接,因此我们可以利用cortexA8来控制TC35模块的工作模式。由于TC35模块功能健全,TC35模块的电源管脚是并连在一起的,因此这里不需要做任何的射频处理和信号处理。此外,IGT管脚是TC35模快的启动脚,与cortexA8的ALE管脚相连接。系统加电后为使TC35i进入工作状态,必须在ALE管脚加一个大于100ms的低脉冲,电平下降持续时间不可超过1ms。以下为TC35模块的接口设计。3.3 传感器模块linux2.6内核的设备驱动模型中关心总线、设备和驱动这三个实体,总线将设备和驱动绑定。SOC系统中集成的独立的外设控制器、挂接在soc内存空间的外设不依附于PCI、USB、I2C、SPI等。基于这个背景linux发明了一种虚拟的总线,称为platform总线,相应的设备platform_device,而驱动称为platform_driver。3.3.1 led图3.1 led电路采用platform框架 自动获取设备号,生成设备节点。led驱动:struct file_operations fops = .owner = THIS_MODULE,.read = led_read,.ioctl = led_ioctl,.release = led_release,.open = led_open,.write = led_write,;static int led_probe(struct platform_device *devices)struct resource *r;int ret;dev_t dev = MKDEV(led_major, led_minor);if(led_major)ret = register_chrdev_region(dev, count, devname);elseret = alloc_chrdev_region(&dev, led_minor, count, devname);led_major = MAJOR(dev);if(ret)return ret;cdev_init(&cdev, &fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_unreg_chrdev;atomic_set(&num, 0);myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev, NULL, %s%d, devname, led_minor);r = platform_get_resource(devices, IORESOURCE_MEM, 0);if (r = NULL) goto out_class_destroy;GPG3_CON=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 1);if (r = NULL) goto out_class_destroy;GPG3_DAT=r-start;return 0;out_class_destroy:device_destroy(myclass, dev);class_destroy(myclass);out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(dev, count);return -EINVAL;int led_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)unsigned int m=0x0;int tmp;if(cmd=CMDINIT)if(atomic_sub_and_test(1,&num)gpg3con = ioremap(GPG3_CON, 4);if(NULL = gpg3con)return -ENOMEM;gpg3dat = ioremap(GPG3_DAT, 4);if(NULL = gpg3dat)return -ENOMEM;tmp=ioread32(gpg3con);tmp=tmp&(0xffff);iowrite32(0x1111|tmp, gpg3con);tmp=ioread32(gpg3dat);tmp=tmp&(0xf);iowrite32(0x0|tmp, gpg3dat);atomic_inc(&num);return 0;else m=cmd & 0xf;tmp=ioread32(gpg3dat);tmp=tmp&(0xf);iowrite32(m, gpg3dat);return 0;led应用程序设计(1)void led_init(void); 函数功能:打开led设备并(2) int led_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) 函数功能:LED报警 输入参数:cmd 参数表示那个灯亮(3)void led_exit(void); 函数功能:关闭led设备3.3.2 蜂鸣器图3.2 pwm电路图采用platform框架 自动获取设备号,生成设备节点。由于这个蜂鸣器是无源的,所以要想使其产生声音必须给他提供一个有一定频率的高低电平。所以这里我们采用S5PC100的PWM定时器来使蜂鸣器发出声音。static int pwm_probe(struct platform_device *devices)struct resource *r;int ret;dev_t dev = MKDEV(pwm_major, pwm_minor);if(pwm_major)ret = register_chrdev_region(dev, count, devname);elseret = alloc_chrdev_region(&dev, pwm_minor, count, devname);pwm_major = MAJOR(dev);if(ret)return ret;cdev_init(&cdev, &fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_unreg_chrdev;atomic_set(&num, 0);myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev, NULL, %s%d, devname, pwm_minor);r = platform_get_resource(devices, IORESOURCE_MEM, 0);if (r = NULL) goto out_class_destroy;GPD_CON1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 1);if (r = NULL) goto out_class_destroy;TCFG0=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 2);if (r = NULL) goto out_class_destroy;TCFG1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 3);if (r = NULL) goto out_class_destroy;TCNTB1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 4);if (r = NULL) goto out_class_destroy;TCMPB1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 5);if (r = NULL) goto out_class_destroy;TCON=r-start;return 0;out_class_destroy:device_destroy(myclass, dev);class_destroy(myclass);out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(dev, count);return -EINVAL;int pwm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)int tmp;if(cmd=CMDINIT)if(atomic_sub_and_test(1,&num)gpdcon1 = ioremap(GPD_CON1, 4);if(NULL = gpdcon1)return -ENOMEM;tcfg0 = ioremap(TCFG0, 4);if(NULL = tcfg0)return -ENOMEM;tcfg1 = ioremap(TCFG1, 4);if(NULL = tcfg1)return -ENOMEM;tcntb1 = ioremap(TCNTB1, 4);if(NULL = tcntb1)return -ENOMEM;tcmpb1 = ioremap(TCMPB1, 4);if(NULL = tcmpb1)return -ENOMEM;gtcon = ioremap(TCON, 4);if(NULL = gtcon)return -ENOMEM;tmp=ioread32(gpdcon1);tmp=tmp&(0xf4);tmp=tmp|(0x24);iowrite32(tmp, gpdcon1);tmp=ioread32(tcfg0);tmp=tmp&0xff;tmp=tmp|0xfe;iowrite32(tmp, tcfg0);tmp=ioread32(tcfg1);tmp=tmp&(0xf4);tmp=tmp|(0x14);iowrite32(tmp, tcfg1);iowrite32(300, tcntb1);iowrite32(150, tcmpb1);tmp=ioread32(gtcon);tmp=tmp|0x0e8;tmp=tmp&(0x018);iowrite32(tmp, gtcon);atomic_inc(&num);return 0;else if(cmd=CMDGO)tmp=ioread32(gtcon);tmp=tmp|(0x0d8);tmp=tmp&(0x028);iowrite32(tmp, gtcon);else if(cmd=CMDSTOP)tmp=ioread32(gtcon);tmp=tmp&(0x0fadapter,I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA)return -EIO;data = kzalloc(sizeof(struct lm75_data), GFP_KERNEL);if (!data)return -ENOMEM;i2c_set_clientdata(client, data);mutex_init(&data-update_lock);set_mask = 0;clr_mask = (1 0)| (1 6) | (1 5);status = lm75_read_value(client, LM75_REG_CONF);if (status dev, Cant read config? %dn, status);goto exit_free;data-orig_conf = status;new = status & clr_mask;new |= set_mask;if (status != new)lm75_write_value(client, LM75_REG_CONF, new);dev_dbg(&client-dev, Config %02xn, new);devn = MKDEV(lm75_major, lm75_minor);if(lm75_major)status = register_chrdev_region(devn, count, devname);elsestatus = alloc_chrdev_region(&devn, lm75_minor, count, devname);lm75_major = MAJOR(devn);if(status)return status;cdev_init(&cdev, &lm75_fops);status=cdev_add(&cdev, devn, 1);if(status)goto out_unreg_chrdev;myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, devn, NULL, %s%d, devname, lm75_minor);goto out;out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(devn, count);exit_free:kfree(data);out:return status;static int lm75_read_value(struct i2c_client *client, u8 reg)int value;if (reg = LM75_REG_CONF)return i2c_smbus_read_byte_data(client, reg);value = i2c_smbus_read_word_data(client, reg);return (value 7; n=n-1;n=n; n=n&0xfe;n=-n; elsen=n7;tmp=n*0.5;3.4 视屏模块图3.4 V4L2流程V4L2采用流水线的方式,操作更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现。3.4.1 打开视频设备在Linux中,设备被看做一个文件。使用open函数打开视频设备。打开设备有两种方式:1、用非阻塞模式打开int Fd;Fd = open(/dev/video2, O_RDWR | O_NONBLOCK, 0);2用阻塞模式打开:Fd = open(/dev/video2, O_RDWR, 0);应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。3.4.2 设定属性及采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行管理: int ioctl (int _fd, unsigned long int _request, ./*args*/) ;在进行V4L2开发中,常用的命令标志符如下(some are optional): VIDIOC_REQBUFS: 分配内存 VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址 VIDIOC_QUERYCAP:查询驱动功能 VIDIOC_ENUM_FMT:得到视频设备支持的视频格式 VIDIOC_S_FMT: 设置视频设备的频捕获格式 VIDIOC_G_FMT: 得到视频设备的频捕获格式 VIDIOC_TRY_FMT: 视频设备支持的显示格式 VIDIOC_QBUF: 从缓存中读取数据 VIDIOC_DQBUF: 数据重新进入缓存队列 VIDIOC_STREAMON:开始视频获取VIDIOC_STREAMOFF:结束视频获取 VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。 在亚洲,一般使用PAL(720X576)制式的摄像头,而欧洲一般使用NTSC(720X480),使用VIDIOC_QUERYSTD来检测:v4l2_std_id std;do ret = ioctl(fd, VIDIOC_QUERYSTD, &std); while (ret = -1 & errno = EAGAIN);switch (std) case V4L2_STD_NTSC: / case V4L2_STD_PAL: /3.4.3 设置视频捕获格式当检测完视频设备支持的标准后,还需要设定视频捕获格式,结构如下:struct v4l2_format fmmt;memset ( & fmmt, 0, sizeof(fmmt) );fmmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmmt.fmt.pix.width
展开阅读全文