《Android智能家居详细设计52.docx》由会员分享,可在线阅读,更多相关《Android智能家居详细设计52.docx(52页珍藏版)》请在课桌文档上搜索。
1、基于AndrOid的智能家居三个火枪手2013年5月第1章工程概述11.1 工程背景11.2 术语定义2第2章技术方案32.1系统描述32.2功能描述32.3工程功能图32.4所涉及的系统、工具1第3章前制数据中心(A8)总体设计53.1 程序设计流程图53.2 线程定义53.3 所用类定义5第4章前端A8模块设计74.18AwoiDAPp1.ICIn1.oN层设计74.1.1数据流分析74.1.2APPIiCt1.tion层详细设计与实现91.2 A8数据传递架构模块151.2.1 层次接口表151.2.2 IIA1.层161.2.3 JN1.层181.2.4 FraineWOrk层191.
2、2.5 整体流程201.2.6 关横代码分析211.3 传输协议模块设计314. 3.1A8接收数据格式315. 3.2Mo接收命令数据结构32第5章终端MO模块设计345.1 终端设备方案描述345.2 终端设篝工作流程345. 3功能模块描述355. 3.1温湿度传感器DHTK)355. 3.2ZigBce通信局部366. 3.3RF1.D读卡模块385.3.4HC接口局部39第6章系统测试437. 1工程演示43随着社会电子信息化的不断开展,人们在家居中使用的电器越来越多,由此带来的平安随忠也有了明显的增多。在这些电器中一旦出现一些异常,便会给人们带来很大的损失。为了降低电器的不合理使用
3、带来的异常怙况,就要求在异常发生时用户能及时得到信息,并通过实时监控采取一定的操作排除异常。因此,远程监控系统的作用是非常巨大的.90年代末,随着多媒体技术、视频压缩编码技术、网络通讯技术的开展,数字视须监控系统迅速幅起,现今市场上由两种数字视频监控系统类型,一种是以数字录像设备为核心的视频监控系统,另一种是以嵌入式视频Web效劳器为核心的视频监控系统。以数字录像设备为核心的视频监控系统采用PC机作为多媒体监控主机,综合了视频矩阵、图像分割器、录像机等众多的功能,使系统结构大为简化,采用计兑机网络技术,数字多媒体远程网络监控不受距离限制,采用大容量磁就阵列存盘器或光盘存储器,可以节省大量的磁盘
4、介质,同时有利系统实现多媒体信息查询.但随若基于PC机的视顽监控录像系统的开展,在实际使用过程中,也暴露出些缺乏,主要是系统工作的不稳定性。以嵌入式视频Web效劳曙为核心的视频监控系统,采用嵌入式实时多任务操作系统。摄像头采集到的图片信息经过压缩,通过内部总线送到内优的Web效劳器,网络上的用户可以直接用浏览器观看web效劳器上的由摄像头采集的图像。由于把图片采集和Web功能集中到一个体积很小的设备内,可以直接连入局域网,用户无需安装任何硬件设备,仅用浏览器即可观看。同时还具有以下优点:布控区域广阔,战入式视领WCb效劳器监控系统Web效劳器直接连入网络,没有线缆长度和信号衰减的限制,同时网络
5、是没有距离概念的,彻底抛弃了地域的概念,扩展布控的区域。系统具有几乎无限的无健扩展能力。所以设备都以IP地址进行标示,增加设备只是意味着IP地址的扩充。性能稳定可靠,无需专人管理。嵌入式Web效劳器实际上是基于嵌入式微处理器技术,采用嵌入式实时多任务操作系统,对于用户来讲,上网进行登陆,便可时家中情况进行监控.除了WEB效劳器实时控制之外,当前解能手机的开展趋势已经愈加明显。智能手机(SInarIPhOnc),是指“像个人电脑样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方效劳商提供的程序,通过此类程序来不断对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类手
6、机的总称”。而当前应用在智能手机上的操作系统中Rndmid操作系统占有相当大的比例。Android(中文名:安卓)是基于1.inUX平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终湍打造的真正开放和完整的移动软件.随君AndrOid应用的更见广泛,了解并能使用AndrOid来完成我们对智能家居的控制已经显得愈加重要。现在监控系统开展到第三代,前端体化、视频十字化、监控网络化、系统集成化成为视嫉监控系统公认的开展方向,它以网络为依托,以数字视频的压缩、传输、存放和播放为核心,以智能实用的图像分析为特点,并为报警系统、门禁系统完美的整合到一个使用平台上
7、,引发了视频控制行业的一次技术革命。Android:Android是一种以1.inUX为基础的开放源码操作系统,主要使用于便携设备,HA1.:硬件抽象层.JNI:JN1.是JaVaNativ。Interface的缩写,中文为JAvA本地调用.RFID:射频识别即RFID(RadioFrequencyIDentification)技术,乂称电了标签、无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。8:ARMCorteX-A8处理器是第一款基于ARMM架构的应用处理器,并且是有史以来ARM开发的性能最高、最具功率效率的处理器
8、.MO:COrtCX-MO处理器,是市场上现有的最小、能耗最低、最节能的ARM处理器“第2章技术方案2.1 系统描述Android是一个开放源码的操作系统专门为移动电话而设计的系统。Android手机将开辟新的应用,使家居智能化运用于普通家庭。Android界面显示(Cor1.eXA8)来自于ConeXm模拟量,并可对COr1.eXm进行控制或操作。本系统做为裁减工程,实现/HO采集房间信息,通过无线方式发送到A8进行监控、控制“A8即可作为移动终端设备(如PhOne、Pad等),亦可作中央监控效劳器设备。本工程采用后拧方案,即作中央监控。若需作移动设备,只需将程序移植到移动设备上,再在中央端
9、移植Vreb效劳罂,移动设备登陆效劳器即可杳看房屋信息。2.2 功能描述1 .检测室内温度、湿度、光感、电压情况(通过COrIeXm采集的信息)。2 .通过温度、湿度的情况来对应调节风扇开关(控制COr1.eXinO).工根据光敏传感器情况对应调节Ied灯亮灭(控制CorteXJn0)。4 .根据三轴加速度情况对应调节蛭鸣器开关(控制Cortex,m)a5 .显示Rfid信息等功能(通过CorteXJnO采集Z2.3 工程功能图图21工程功能图2.4 所涉及的系统、工具*2.1系统与工具系统名称系统版本备注1.inux内核1.inux3.0.8Android文件系统Android4.0版本工具
10、链ar11rnoneTinu-gnueabi-gcc1i.!;Ec1.ipse第3章前端数据中心(A8)总体设计3.1 程序设计流程图S3.1程序设计流程图3.2 线程定义1. SnartHomeActivity.程序主ACtiVity界面,翻开程序首先运行。2. NodeInfoActivity,从界面ACtivity,用来显示详细设备采集信息和控制按键。3. MainReadThread,读数据主线程,该线程只负货对通过Zigbee获取的数据转发给读进程,不进行数据操作。4. MainHand1.erThread,处理数据线程,该线程对从读进程传来的数据进行数据校验并转发.5. NodeW
11、riteThread,控制级程,该线程负员处理由用户对设备的操作.3.3 所用类定义1. Data,用来存储和处理设备的采集数据。2. NodeC1.nd,定义操作方法,实现对设备的读操作和控制操作。3. NodeInfo,定义设备的所有采集信息,控制器状态和WatehDOg。4. Node1.ist,使用链表存储设备信息。5. MyUartService:提供与底层的接口,以读写申口。第4章前端A8模块设计4.1 A8-AndroidAPPIiCatiOn层设计4.1.1 数据流分析4.1.1.1 NEWN0DE,新节点参加1.数据处理流程图MainReadThreadZigbeeMainH
12、and1.erThread介NewNodeSmarcHomeAct1.vityad-de0CtXfe1.fSJinSertNode)UpdaS1.avOut1.Add()Sdd1.匚011()SZZigbeeCortex-A8Cortex-MOBH4.1NE1N0DE数拐流程图2.数据格式NEWNODE数据格式格式NEWNODES4FnI1.3.数据处理详细描述Cortex-MO开启,通过Zigbcc发送NEWNODE数据给Cortc-8.程序通过MainRcadThread线程读取到数据,交由MainHandIerThrcad线程处理。MainHand1.erThread对NOEWNODE进
13、行校验,判断是否合法,如果数据无误,通过发送Hand1.er消息交由S1.nartHOIneACtiVity主界面UI线程,SniarinoineAc1.ivi1.y判断链表是否已经存在该节点,不存在则参加链表并创立节点。4.1.1.2NODEINFO,节点信息更新.1 .数据处理流程图NODEnvoftXXfiBB图4.22 .数据格式NoDE1.NFo数据9M格式NODEINFOS23Fi11T24H301.6V220XIY1.Z603 .数据处理详细描述CortexYo开启,通过Zigbee发送NEWNoDE数据给COr1.eX-A8,程序通过MainReadThread线程读取到数据,
14、交由NkiinHand1.erThread线程处理.MainHand1.erThread对NODEINFO进行校验,判断是否合法,如果数据无误,通过发送HandIer消息交由SmartHo1.n。AetiVity主界面U1.线程,SmartHomeActivity判断链表是否已经存在该节点,存在则更新该链表信息,并判断是否进入该节点从界面,如果进入发送Broadcast通知从界面更新数据。4.1.1.3RFID,用户登录或退出.1.数据处理流程图数据流程图图4.3RFID4 .数据格式RFID数据格式格式RFIDS1.IFrIIRIO31325 .数据处理详细描述CortexMO开启,通过Zi
15、gbee发送NEWNoDE数据给CorIeX-A8,程序通过MainReadThread线程读取到数据,交由MainHand1.erThread线程处理.MainHandIQrThread对RFID进行校验,判断是否合法,如果数据无误,通过发送Hand1.er消息交由SmartHomcActivity主界面UI线程,SmartHoineActivity发送BroadCaSt通知从界面,从界面判断是否为自己设备,是则更新数据。4.1.2App1.ication层详细设计与实现4.1.2.1 类对象详细描述1 .Data类,负货对接受来数据进行处理4.1Data成员属性表属性类型描述Seria1.
16、VersionUID1.ong序列化时保持版本的兼容性,即在版本升微时反序列化仍保持对象的唯一性.dataStrin存储从串口的数据4.2Data成员方法表雌越回值描述getIyataSizeVoidStrin从传来的数据获取数据大小isVo1.idDataVoidb1.ean数据有效性校验,包括数据足为为空,完整等getDataTyeVoidint从传来的数据获取数据类型gctDataTargetVoidString从传来的数据获取数据的设符号g。IRfidVoidString从传来的数据获取Rfid信息getTe11peratureVoidString从传来的数据获取温度get1.1.um
17、i(iityVoidString从传来的数据获取j度KCt1.ightVoidString从传来的数据获取光礴getdVoidString传来的数掘获取ADfgetXVoidString从传来的数据获取三轴加速度X值KeIYVoidS1.rinR从传来的数据获取三轴加速度y值getZVoidString从传来的数据获取三轴加速度Z值2 ModcCmd类,负贵与底层进行交互,实现对硬件设备读,写操作。表43NOdectod成员属性表H性类型据述DcvCmdenum使用枚举符命令声明一组命名的常数,方便函数调用。myUrtServiceMy1.rtService串口操作所使用框架4.4NOdeCh
18、d成员方法表参数描述devContro1.int.DevCmdString向申口发送数据readNieVoidS1.rinR从审获取数据3 .NodcInfo类,负货存储个设备的信息。表4.5NOde1.nf。成员属性衰属性类型据述Seria1.VersionUID1.on序列化时保持版本的兼容性,即在版本升拨时反序列化仍保持对象的唯一性.temperatureString存储节点对象的温度值humidityString存储节点对望的湿度1.ightString存储节点对象的光第值XString存储节点对象的三轴加速度X值yString存:他打点对软的奉加速度y值ZString存储节点对思的-
19、:轴加速度z值adString存偌节点对象的ad(I1.1.edint存谛节点对象的Ied灯状态0,灭:1.亮funint存储节点对双的风扇状态(0,关:1,开:2,加速)beepint存储节点对望的报警器状态0,关:1.开nixietubint存储节点对象的数码音状态0,为;1,开rfidrfid存饰节点对象的rfid信息devNumint存储节点对软的设备号nextNode1.nfo便于生成链表WinChDoXint看门狗,监控节点生命值表4.6NOdeInf。成员方法裳神致返回值据述NodcInfuvoidvoid构造函数.初始化节点对象NodeInfovoidint有参数内造函数.参数
20、为节点设备号getNextvoidXiadr1.ntaSOtNextNodeInfovoidgetTeHperaturevoidString获取该对象温傻值SetTeBperatureStringvoid设置该对象温度值gctHunidiIyvoidString获取该对象湿度值Set1.1.unidityStringvoid设置该对象湿度值get1.ightvoidString快取该对软光感(ftSet1.ightStringvoid设置该对象光华值KCtAdvoidString获取该对象ADtfiSetAdStringvoid设置该对象ADfftctXvoidString获取该对象三轴加速度
21、X值SGtXStringvoid设置该对象三轴加速度XtfigetYvoidString快取该对望三轴加速度y(AsetYStringvoid设置该对象二:轴加速度ytfigetZvoidString获取该对象三轴加速度Z(ftsetZStringvoid设置该对象:.轴加速度Z值ge1.1.edvoidint按取该对象1.ed状态值set1.edintvoid设置该对象1.ed状态值getFunvoidint获取该对象FUn状态(ftSe1.FUnintvoid设设该对象FUn状态值KctBcepvoidint获取该对象BvCP状态值setBeepintvoid设置该对象叩状态值getNix
22、ietubvoidint换取该对象NiXietUb状态伯SetNixietubintvoid设置该对象NiXietub状态值getDevNumvoidint获取该对象DevNun1.值SetDevNumintvoid设置该对象DeVNUmtf1.getRfidvoidString抉取该对象Rfid值setRfiStringvoid设置该对象Rfid值getWatchDogvoidint获取该对象QatChDOg值SetIatchDogintvoid设以该对象必tchDogftIcdOnvoidvoid开灯IedOffvoidvoid关灯funnvoidvoid开风扇FunOn1.voidvoi
23、d风崩加速fuffvoidvoid关风扇beep()nvoidvoid开蜂鸣器beepffvoidvoid关蜂呜SBnixie1.ubcnvoidvoid开数码管nixietubeffvoidvoid关数码管4 .Nodc1.ist类,存储所仃连接设备的信息,便于进行界面节点的更新.删除和添加操作。表4.7NOde1.ist成员属性表类型描述headNodeInfo锥表头结点Ien1.ong腔表长度表4.8?XIeust成员方法表瓶IMIIiifgetHeadNodeInfovoid获取链表头站点Se1.HeadvoidNodeInfo设置琏表头结点CreateNode1.istvoidvoi
24、d创立设备节点傩表insertNodeNodeInfovoid插入节点deINodeNodcInfovoid删除节点a1.INodevoidvoid遍历鞋表所有丫,点findByDevNumintNodeInfo通过设备号找到节点nodeISNotExistedintboo1.ean通过设备号杳找节点是否存在于链表deIByDevNumintvoid通过设备号刷除节点a1.INodeSetWatchDogvoidString所有设备节点专门狗减一OneNodeFeedWatchOogintvoid通过设备号找到设备节点并喂狗findNodcDogDievoidint遍历设备15点,查看是否有节
25、点生命结束get1.envoidint得到鞋表长度fIndNodeByPosintNodeInfo通过在椎役中位置在找到设备节点4.1.2.2 线程类详细描述1 .MainReadThread类当后动MainReadThread线程,执行run方法,run方法先通过running判断是否执行读操作,如果running为true,进行对设备读操作,判断MainHand1.erThrcad处理线程是否创立,未创立则创立并将读出的数据传给MainHandICrThread,并启动线程,循环执行。S4.4MainRa11readRUN流程图2 .MainHand1.erThread类当MainRead
26、Thread线程将读取的数据传到MainHandIerThread后,先对数据进行有效性认证,如果数据有误,使用hand1.er传递发送给SmartHOACtiVity即主界面U1.线程,进行处理:如果数据无误,判断数据类型并使用hand1.er传递,发送给SmartHOmcActivity进行处理。图4.5MaiItfiand1.erTIireadRUNMSff1.3 .NOdeRriteThread类只负贲执行设备控制的命令,使用战程可以使程序屡次独立畿程执行,不被影响。94.6NodeIriteThreadRUNMSK4.1.2.3 UI类详细描述(1) .SinartHOneACtiV
27、ity类(2) OnCreutea)初始化节点列表node1.ist.。b)设置从界面标题,setTit1.e。c)设.用视图,SetContentView,d)获取主界面控件的引用,findViewBy1.d.C)设置GridView和使用的适配器BaseAdapter4f)设四选项被单击的监听罂,SetOnItcmC1.ick1.istcner0g)设置线程的HandIer,重写hand1.eMessage方法。h)翻开程序读线程。i)注册返回播送接收器。(3) OnDestroya)一栽播送接收器,UnregisterReceiver.b)关闭读线程,nainReadThread.sto
28、p.c)关闭主界面ACtiVity,this,finish(4) Updata1.ayOuta)设置所有节点的看门狗减一,a1.INodeSetWatchDog,b)判断是否有节点看门狗死亡,CindNodeDogDie.如果存在,删除Node节点链表,dc1.ByDcNum,并判断是否进入该节点从界面,如果进入则发送播送使其退出。最后,向该死亡设备发送确认命令ISEX1.T,如果未死亡,重新发送添加节点NeWNod。的数据。c)更新适配器notifyDataSetChanged。(5) BaCkReCeiVer播送接受器a)从节点列表删除从界面返回的节点的原对象,node1.ist,deIB
29、yDevNumOb)向节点列表插入从界面返回的新节点对象,n1.e1.ist.inser1.Node()c)关闭从界面ACIiViIy.CinishRc1.ivi1.yOo2.NOdeInfoACti,ity类(1) OnCreatea)创立从节点对象NOde1.nfo。b)设置视图,SetContontViewoc)获取从界面控件的引用,findViewBy1.d.d)通过Intent对象,获取从主界面传来的nodeinfo对象并赋给从界面对象。e)设置从界面标题,SetTit1.e.D聘主界面获取的nodeinfo对象反应到界面,Se1.TeXI。B)注册播送接收器h)设置返【可镀监听器i
30、)设置风扇监听器,设困1.Od监听罂,设置蛭鸣器监听器,设置数码管监听器(2) OnDestroy卸载播送接收器,unrgiSterReceiver4.1.2.4 数据库详细描述1 .RfidRCCOrdDBHCIPer类继承SQ1.iteOpenHe1.per类,重写OnCreate方法。,表新建使用SQ1.i1.eDUIabHSe对象的execSQ1.方法去添加表。命令如.卜:createtab1.eifnotexistsrfidTab1.e(idINTEGERprimarykeyautoincrement,devIdhar.rf1.dvarchar)增加使用SQ1.iteDatabiis
31、e对象的execSQ1.方法去增加数据。命令如下:insertintorfidTab1.e(devId,rf1.d)va1.ues(?,?)删除使用SQ1.iteDatabaSe对象的CXeCSQ1.方法去删除数据。命令如下:de1.etefromrfidTab1.ewhererf1.d=?2 .数据库表设计4.9rfidTab1.e数据率表字段名属性描述idINTEGERprimarykeyautoincrementID主键devidVRCI1.RNu1.1.设备号rf1.dVRCHARNu1.1.RF1.D号4.1.2.5 框架详细描述My1.IartService类1J川栽库,Syste
32、m.Ioad1.ibraryC*,uart-runtime*)2 .重写构造函数,调用本地_init方法,对设备进行初始化。3 .通过调用本地方法实现java方法1.1.1 A8-数据传递架构模块4.2.1层次接口表数据传也(申口镇作)速KW联1腹HHI星福闻S4.6.1接口层次图HardwareAbstraction1.ayerApp1.icationsMEOUVIMAUrmO1M&va1.Mf4jF1.r*oxf(App1.icationFrameworkA-ajWrM1.rC0rn9rtVmNotfotteoM*MferEeA8/M*m*mcaxccNartatrWRO*wr图4.6.2
33、结构图1.1.2 HA1.层1、宏表4.10HA1.层宏定义表名称内容功能UARTI1.RDIREMOD1.1.EID*uart*定义ha1.的模块idSTAKOxAA数据包的开始符NEWOxO1.新节点金加发的包INFO0x02采集的信息包RFID0x04刷卡时发的包2、全局变量名称在上11JUTB1.料功能Ifdint操作设备的文件描述符3、结构体表4.12HA1.层结构体表structuart_0du1.e_t成员名美,功能commonstructhw_modu1.e_t记录木Su1.b的根本信息和入口structUarjContrO1.dCyice_1.成员名功能commonstruc
34、thw_device_t记录本StUb操作设备时需要包括的接11uart_read_ha1.函数指针指向实际读串口的函数uart_write_ha1.函数指针指向实际写申口的函数4、潦程图上层读串口图4.7HA1.层结构图1.1.3 JN1.层1、宏名称内容UARTHARDIAREj1.OD(J1.E_ID*uart*定义IiA1.的模块ID2、全局变量SUartDeviceuart_contro1._device_t*保存通过调用stub中的open接口后得到的deviceshand1.eSUartModu1.euart.modu1.e-t保存通过调用AndroidHA1.标准函数hwget
35、muduIe.传入UARTHARDWARE_MODaE1.I)后得到的UARTstub的句柄3、流程图JN1.层主要实现了JaVa与cc+之间的过渡,不涉及发杂的逻辑,只根据规则为上层函数调用相应的下层接口,参见整体流程。1.1.4 Frame1.rOrk层表4.15Ffaaevork层类表pub1.icc1.assMyUartSerrice功能System.Ioad1.ibrary装段编洋好的JN1.层的共享库pub1.icMy1.artService构造函数.翻开并初始化串口pub1.icStringUartData1.pdate读取当前串口信息数据包pub1.iciniUartScndC
36、md向串口传送命令数据包4.2.5整体流程IM5rtseece|static(System,IaxX7sytm1ib1.ibuartru11time.jo);!11钛加1俯功AWUartSendCmdO*兴方雄内中U及也命令Uart.writ)Urt.modu1.e-rwthod-opesUartD9KPurtreadha1.(sUartDcvke,s.butsizef(sbut);/闻肺。】疑注射他战力aSUartDevicouartwrrte_hS(jUartDece.cmmand):U1.用肥注册的”力域F续:ha1.层S4.8整体流程图4.2.6关键代码分析1. NodeCmd.jav
37、astaticMyUartServiceInyUartService=newMyUartServiceO;/新建对象,初始化Strings=InyUartSerYiCe.UartDataUpdateO;更新采第数据ByUartService.UartSendCmd(1,1.EDON);点亮1号设备的灯2. MyUartService.javaPaCkU.SmarIhOnw.uar1.;importandroid,uti1.1.og:pub1.icc1.assMyUartService(/* 1.oadnativeservice./staticSystem.Ioad1.ibrary(uartru
38、ntime*):/装载库)pub1.icMy1.ar1.ServiceO(init();注册本地方法,翻开串口并初始化)/* uartnativemethods.* /pub1.icStringUartDataUpdateOStri11S=uar1.dataupdateO:returns:v/更新采集的数据pub1.icintUartSendCmd(intn,intc)(Uart_Sen(1.Cmd(n,c):return0:)发送命令控制MO板privatestaticnativeboo1.eaninit();/声明jni库可以提供的方法privatestaticnativeString一U
39、arJdata_UPdate();privatestaticnativeintuartsend_cmd(intn,intc);3. uart_stubinc1.udeuart.hstructuartmodu1.e_tsIruethwmodu1.eIcommon;1.H1.规定不能直接使用hwmodu1.et结构,因此需要做这么个继承。structuartcontro1.device,t/自定义的一个针对Uart控制的结构,包含hwdeviceI和支持的AP1.操作structhwdevice-tcommon:/attributes+/*supportingcontro1.APIsgohere*
40、/int(*uartreadha1.)(structuartcontro1.devicet*dev,char*buf,intcount):int(*uartwriteha1.)(structuartcontro1.devicet*dev,constchar*cmd):);UdefineUARTHARDWAREMODU1.EDuart定义个MoDU1.EID,H1.层可以根据这个ID找到们这个HA1.stub_can_snarthoee_uart_MyUartService.CpPdefine1.oGjrAGVyUartServicc”*uti1.s1.og.h*Sinc1.udeinc1.ude#inc1.udeinc1.udeunistassert,h力inc1.udeuartSinc1.udeJfinc1.udeFindC