智能家居系統(tǒng)方案設(shè)計(jì)樣本_第1頁(yè)
智能家居系統(tǒng)方案設(shè)計(jì)樣本_第2頁(yè)
智能家居系統(tǒng)方案設(shè)計(jì)樣本_第3頁(yè)
智能家居系統(tǒng)方案設(shè)計(jì)樣本_第4頁(yè)
智能家居系統(tǒng)方案設(shè)計(jì)樣本_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

智能家居系統(tǒng)方案設(shè)計(jì)文檔目錄TOC\o"1-3"\h\z0.文檔簡(jiǎn)介 40.1文檔目 40.2文檔范疇 40.3讀者對(duì)象 40.4參照文獻(xiàn) 40.5術(shù)語(yǔ)與縮寫解釋 41.模塊命名規(guī)則 52.模塊匯總 52.1模塊匯總表 52.2模塊關(guān)系圖 53.子系統(tǒng)A模塊設(shè)計(jì) 63.n模塊A-n 64.子系統(tǒng)B模塊設(shè)計(jì) 64.n模塊B-n 65.其她 6

0.文檔簡(jiǎn)介0.1文檔目本文檔旨在詳細(xì)闡明智能家居系統(tǒng)中門禁系統(tǒng)和linux下模塊程序開發(fā)過(guò)程,通過(guò)此文檔描述,但愿可以達(dá)到具備同等技術(shù)開發(fā)人員按此簡(jiǎn)介可以完全重現(xiàn)此技術(shù)。0.2文檔范疇智能控制系統(tǒng),嵌入式linux系統(tǒng)等。0.3讀者對(duì)象嵌入式系統(tǒng)開發(fā)人員0.4參照文獻(xiàn)無(wú)0.5術(shù)語(yǔ)與縮寫解釋縮寫、術(shù)語(yǔ)解釋CPLDCPLD是一種顧客依照各自需要而自行構(gòu)造邏輯功能數(shù)字集成電路。其基本設(shè)計(jì)辦法是借助集成開發(fā)軟件平臺(tái),用原理圖、硬件描述語(yǔ)言等辦法,生成相應(yīng)目的文獻(xiàn),通過(guò)下載電纜(“在系統(tǒng)”編程)將代碼傳送到目的芯片中,實(shí)現(xiàn)設(shè)計(jì)數(shù)字系統(tǒng)。WiegandWiegand合同是國(guó)際上統(tǒng)一原則,有諸多格式,原則26-bit應(yīng)當(dāng)是最慣用格式zigbee紫蜂技術(shù)1.模塊命名規(guī)則本文檔模塊名稱與詳細(xì)實(shí)現(xiàn)功能函數(shù)采用一致表達(dá)辦法。2.模塊匯總設(shè)備管理,方略管理,人員管理,定期管理,設(shè)備底層操作,串口設(shè)備層操作,串口底層操作庫(kù),配備文獻(xiàn)解析,以及UI通訊等模塊。同步涉及門禁控制系統(tǒng)模塊,家居控制模塊和環(huán)境探測(cè)模塊以及人機(jī)交互界面設(shè)計(jì)模塊。2.1模塊匯總表設(shè)備管理(dev.c)模塊名稱功能簡(jiǎn)述init_dev初始化設(shè)備根節(jié)點(diǎn)add_dev添加入網(wǎng)設(shè)備del_dev刪除鏈表中設(shè)備init_dev_policy_table按照設(shè)備類新初始化方略表update_dev_policy_table按照各個(gè)設(shè)備類型,更新鏈表中各個(gè)設(shè)備方略表get_dev_policy_table_size按照設(shè)備節(jié)點(diǎn)類型返回相應(yīng)設(shè)備類型方略表大小方略管理(policy.c)模塊名稱功能簡(jiǎn)述tempmon_policy_table_init初始化溫度計(jì)類型設(shè)備方略表。tempmon_policy_table_set_warn依照參數(shù)傳過(guò)來(lái)狀態(tài)設(shè)立設(shè)備報(bào)警狀態(tài)。tempmon_policy_table_update調(diào)用底層設(shè)備控制獲得當(dāng)前設(shè)備狀態(tài)更新相應(yīng)設(shè)備方略表。設(shè)備底層操作接口(devctl.c)tempmon_get_dev_stat獲得溫度計(jì)設(shè)備狀態(tài)tempmon_get_cur_temp獲得溫度計(jì)設(shè)備溫度tempmon_set_hi_level設(shè)立溫度計(jì)最高報(bào)警溫度tempmon_set_low_levl設(shè)立溫度計(jì)最低報(bào)警溫度顧客認(rèn)證(auth.c)auth_user依照傳來(lái)顧客名和密碼,返回驗(yàn)證成果change_pass依照傳來(lái)顧客名和密碼,更改密碼文獻(xiàn)里相應(yīng)項(xiàng)目。)del_pass依照傳來(lái)顧客名,刪除密碼文獻(xiàn)中相應(yīng)顧客行add_user依照傳來(lái)參數(shù),在密碼文獻(xiàn)中加入相應(yīng)顧客行配備文獻(xiàn)解決(parm.c)load_parm解析器前端,依照解析器成果,拋出相應(yīng)得錯(cuò)誤。do_paser依照傳進(jìn)來(lái)文獻(xiàn)描述符,將文獻(xiàn)中相應(yīng)參數(shù)解析到參數(shù)構(gòu)造體。save_parm將參數(shù)構(gòu)造體按照相應(yīng)格式寫入配備文獻(xiàn)。getnline從文獻(xiàn)中獲得最大長(zhǎng)度為n一行,并將回車翻譯為字符串結(jié)尾符trim刨去傳入字符串開頭和結(jié)尾空格和tab配備文獻(xiàn)參數(shù)解決(parm_handler.c)temp_hi_level設(shè)立參數(shù)構(gòu)造體temp_hi_level參數(shù)temp_low_level設(shè)立參數(shù)構(gòu)造體temp_low_level參數(shù)帶頭節(jié)點(diǎn)雙向鏈表(list.c)移植自linux內(nèi)核list_add_node插入節(jié)點(diǎn)list_del_node刪除節(jié)點(diǎn)is_empty_list判斷鏈表與否為空is_last_node判斷與否為最后一種節(jié)點(diǎn)offsetof宏獲得構(gòu)造體元素相對(duì)于構(gòu)造體開始偏移量container_of宏通過(guò)構(gòu)造體元素指針獲得構(gòu)造體指針循環(huán)緩沖區(qū)(loop_buf.c)移植自linux內(nèi)核min宏返回兩個(gè)數(shù)中最小值init_loop_buf初始化循環(huán)緩沖區(qū)release_loop_buf釋放循環(huán)緩沖區(qū)里線程鎖get_loop_buf從循環(huán)緩沖區(qū)中獲取數(shù)據(jù)put_loop_buf向循環(huán)緩沖區(qū)中放置數(shù)據(jù)lock_buf循環(huán)緩沖區(qū)線程鎖加鎖unlock_buf循環(huán)緩沖區(qū)中線程鎖解鎖loop_buf_reset循環(huán)緩沖區(qū)指針復(fù)位loop_buf_len返回循環(huán)緩沖區(qū)剩余長(zhǎng)度串口設(shè)備層操作(uart.c)init_uart調(diào)用底層串口庫(kù)初始化串口com_monitor串口監(jiān)視線程,負(fù)責(zé)監(jiān)視并接受串口上數(shù)據(jù)。pre_frame_proces對(duì)串口接受數(shù)據(jù)預(yù)解決,調(diào)用相應(yīng)操作函數(shù)read_uart_one_frame從串口讀取完整一楨read_uart_buf從緩沖區(qū)讀取數(shù)據(jù),沒有數(shù)據(jù)則休眠等待下次信號(hào)喚醒。串口操作庫(kù)(uart.c)open_uart打開相應(yīng)串口設(shè)備文獻(xiàn)read_uart讀取串口數(shù)據(jù)。write_uart將數(shù)據(jù)寫入串口set_uart_speed設(shè)立串口工作速度set_uart_parity設(shè)立串口工作特性,例如停止位奇偶流控等。read_uart_timeout帶有超時(shí)串口讀取操作解決。UI通信(commui.c)init_commui初始化ui通信各個(gè)參數(shù)。commui_monitor套接字監(jiān)視線程,監(jiān)視套接字與否有命令數(shù)據(jù)到來(lái)。get_cmd_line從描述符中獲得一行命令行warn_ui向ui發(fā)起報(bào)警命令解決程序(cmd.c)run_cmd命令解析器,調(diào)用相應(yīng)命令解決程序。error依照錯(cuò)誤碼,將返回相應(yīng)得錯(cuò)誤信息。命令解決程序handler(cmd_handler.c)xxx_comand_handler相應(yīng)各個(gè)命令解決程序。門禁控制模塊ReadWiegand讀取顧客卡信息SendWiegand發(fā)送顧客卡信息SendCmd發(fā)送控制指令家居控制系統(tǒng)和環(huán)境探測(cè)模塊GetTem采集環(huán)境信息SendTem封包發(fā)送采集數(shù)據(jù)RecTem解析采集數(shù)據(jù)信息SendLedData發(fā)送led顯示數(shù)據(jù)GetTemFromCDLed模塊收取并解析溫度數(shù)據(jù)DisplayTem發(fā)送并顯示信息OpenLamp打開繼電器CloseLamp關(guān)閉繼電器2.2模塊關(guān)系圖3.設(shè)備管理系統(tǒng)模塊設(shè)計(jì)模塊名稱init_dev功能描述初始化設(shè)備根節(jié)點(diǎn)接口與屬性voidinit_dev(void);數(shù)據(jù)構(gòu)造與算法structdev{pthread_mutex_lockmutex;unsignedintnr_dev;structlistlist;};補(bǔ)充闡明包括設(shè)備編號(hào)和鏈表線程鎖模塊名稱add_dev功能描述向設(shè)備鏈表中添加設(shè)備節(jié)點(diǎn)接口與屬性intadd_dev(chardev_type,chardev_no,char*ieee_addr);數(shù)據(jù)構(gòu)造與算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};補(bǔ)充闡明依照傳來(lái)設(shè)備類型設(shè)備號(hào)及IEEE地址,分派新設(shè)備節(jié)點(diǎn),并填寫相應(yīng)項(xiàng)目然后調(diào)用模塊名稱del_dev功能描述從設(shè)備鏈表中刪除設(shè)備節(jié)點(diǎn)接口與屬性intdel_dev(chardev_type,chardev_no);數(shù)據(jù)構(gòu)造與算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};補(bǔ)充闡明模塊名稱init_dev_policy_table功能描述初始化設(shè)備方略表接口與屬性voidinit_dev_policy_table(structdev_node*node);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱renew_dev_policy_table功能描述將全局參數(shù)表參數(shù)相應(yīng)節(jié)點(diǎn)參數(shù)刷新到設(shè)備方略表里接口與屬性voidrenew_dev_policy_table(structdev_node*node)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱renew_all_dev_policy_table功能描述將全局參數(shù)表參數(shù)刷新到所有設(shè)備方略表里接口與屬性voidrenew_all_dev_policy_table(structdev_node*node)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱update_dev_policy_table功能描述通過(guò)調(diào)用設(shè)備控制層有關(guān)辦法,獲得設(shè)備相應(yīng)狀態(tài),更新相應(yīng)方略表接口與屬性voidupdate_dev_policy_table(structdev_node*node)數(shù)據(jù)構(gòu)造與算法structdev_node{chardev_type;chardev_no;charieee_addr[8];charalive;charfailed;void*policy_table;structlistlist;};補(bǔ)充闡明模塊名稱update_all_dev_policy_table功能描述更新所有設(shè)備方略表接口與屬性voidupdate_all_dev_policy_table(structdev_node*node);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱check_dev_type功能描述檢查設(shè)備類型與否合法接口與屬性intcheck_dev_type(unsignedchardev_type)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱is_dev_exist功能描述檢查設(shè)備與否存在接口與屬性intis_dev_exist(unsignedchardev_type,unsignedchardev_no)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱get_dev_node功能描述依照設(shè)備類型和設(shè)備號(hào)返回設(shè)備節(jié)點(diǎn)指針接口與屬性structdev_node*get_dev_node(unsignedchardev_type,unsignedchardev_no)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明4.方略管理模塊設(shè)計(jì)模塊名稱tempmon_policy_table_init功能描述溫度計(jì)方略表初始化接口與屬性voidtempmon_policy_table_init(structdev_node*node);數(shù)據(jù)構(gòu)造與算法struct__dev_table{ unsignedchardev_type; void(*policy_table_init)(structdev_node*); void(*policy_table_load_parm)(structdev_node*); void(*policy_table_update)(structdev_node*); void(*policy_table_warn)(structdev_node*,char); void(*parm_table_save)(structdev_parm*,F(xiàn)ILE*fp);};structtempmon_policy{charhi_level;charlow_level;charcur_temp;chartemp_warn;};補(bǔ)充闡明為設(shè)備節(jié)點(diǎn)鐘方略表指針?lè)峙蓛?nèi)存,并使用參數(shù)表中值初始化相應(yīng)得設(shè)備。模塊名稱tempmon_policy_table_update功能描述調(diào)用設(shè)備層溫度計(jì)操作函數(shù),更新溫度計(jì)溫度方略表接口與屬性voidtempmon_policy_table_update(structdev_node*node);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱tempmon_policy_table_set_warn功能描述依照傳來(lái)參數(shù),設(shè)立相應(yīng)溫度計(jì)設(shè)備報(bào)警狀態(tài)接口與屬性voidtempmon_policy_table_set_warn(structdev_node*node,charstat);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱tempmon_policy_table_load_parm功能描述將溫度計(jì)參數(shù)表中值填入方略表里接口與屬性voidtempmon_policy_table_load_parm(structdev_node*node)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱tempmon_policy_table_load_default_parm功能描述將溫度計(jì)默認(rèn)參數(shù)填入方略表里接口與屬性voidtempmon_policy_table_load_parm(structdev_node*node)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明5.設(shè)備底層操作接口模塊設(shè)計(jì)模塊名稱tempmon_get_dev_stat功能描述獲得溫度計(jì)設(shè)備狀態(tài)接口與屬性chartempmon_get_dev_stat(structdev_node*node);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明調(diào)用獲得溫度計(jì)溫度判斷與否有返回值,判斷設(shè)備與否依然有響應(yīng),如果設(shè)備沒有響應(yīng),則將設(shè)備節(jié)點(diǎn)中設(shè)備狀態(tài)標(biāo)記為設(shè)備已死并調(diào)用failed_dev_ctl使設(shè)備節(jié)點(diǎn)操作失敗次數(shù)加1(考慮到網(wǎng)絡(luò)延遲等狀況,采用設(shè)備操作失敗計(jì)數(shù),當(dāng)合計(jì)到操作失敗到指定次數(shù),則會(huì)調(diào)用del_dev將設(shè)備從設(shè)備鏈表中刪除。而任何一次成功設(shè)備操作則鑒定設(shè)備再次有響應(yīng),失敗計(jì)數(shù)被清零)。模塊名稱tempmon_get_dev_stat功能描述獲得溫度計(jì)當(dāng)前溫度接口與屬性chartempmon_get_cur_temp(structdev_node*node);數(shù)據(jù)構(gòu)造與算法structgen_frame{unsignedcharhead1;unsignedcharhead2;//always0x550xAAunsignedchartype;//frametypeWARNunsignedcharlen;//framelenunsignedchardev_type;//devicetypeunsignedchardev_no;//devicenocharstatus;};補(bǔ)充闡明按照合同,組裝好設(shè)備查詢數(shù)據(jù)包,從串口發(fā)出,并等待串口回應(yīng)。模塊名稱tempmon_set_hi_level功能描述設(shè)立當(dāng)前溫度計(jì)最高報(bào)警溫度接口與屬性chartempmon_set_hi_level(structdev_node*node,charhigh_level);數(shù)據(jù)構(gòu)造與算法structcon_frame{unsignedcharhead1;unsignedcharhead2;unsignedchartype;unsignedcharlen;unsignedchardev_type;unsignedchardev_no;unsignedcharcon_cmd;charcon_value;};補(bǔ)充闡明按照合同,組裝好設(shè)備控制數(shù)據(jù)包,從串口發(fā)出,并調(diào)用獲得設(shè)備溫度,刷新設(shè)備狀態(tài)。模塊名稱tempmon_set_low_level功能描述設(shè)立當(dāng)前溫度計(jì)最低報(bào)警溫度接口與屬性chartempmon_set_low_level(structdev_node*node,charhigh_level);數(shù)據(jù)構(gòu)造與算法structcon_frame{unsignedcharhead1;unsignedcharhead2;unsignedchartype;unsignedcharlen;unsignedchardev_type;unsignedchardev_no;unsignedcharcon_cmd;charcon_value;};補(bǔ)充闡明按照合同,組裝好設(shè)備控制數(shù)據(jù)包,從串口發(fā)出,并調(diào)用獲得設(shè)備溫度,刷新設(shè)備狀態(tài)。其她設(shè)備以此類類推。5.顧客認(rèn)證模塊設(shè)計(jì)模塊名稱auth_user功能描述依照傳來(lái)顧客名和密碼返回驗(yàn)證成果接口與屬性charauth_user(char*name,char*pass);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱add_user功能描述依照傳來(lái)顧客名和密碼將顧客添加到密碼文獻(xiàn)中接口與屬性charadd_user(char*name,char*pass);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱del_user功能描述依照傳來(lái)顧客名將顧客從密碼文獻(xiàn)中刪除接口與屬性chardel_user(char*name);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明注意此處僅作顧客存在性檢查不做顧客檢查,顧客檢查應(yīng)當(dāng)由UI發(fā)命令使用auth_user檢查通過(guò)后再來(lái)調(diào)用此函數(shù)。功能性模塊盡量在自己被調(diào)用時(shí)提供辦法而不是方略。模塊名稱change_pass功能描述依照傳來(lái)顧客名和密碼將顧客從密碼文獻(xiàn)中修改相應(yīng)記錄接口與屬性charchange_pass(char*name,char*pass);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明注意事項(xiàng)同上。顧客配備文獻(xiàn)格式為顧客名和密碼定長(zhǎng)局限性定長(zhǎng)使用空格補(bǔ)足,分隔符為:防止頻繁修改文獻(xiàn)大小,加劇NandFland讀寫。6.配備文獻(xiàn)解決模塊設(shè)計(jì)模塊名稱Load_parm功能描述解析器前端,依照解析器成果,拋出相應(yīng)得錯(cuò)誤接口與屬性intload_parm(char*fname)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)模塊名稱do_parser功能描述解析器主體,依照傳進(jìn)來(lái)文獻(xiàn)指針,將文獻(xiàn)中相應(yīng)參數(shù)解析到全局參數(shù)表。接口與屬性intdo_parser(FILE*fp);數(shù)據(jù)構(gòu)造與算法structtemp_parm{ inttemp_hi_level; inttemp_low_level;};unionparm{ structtemp_parmtemp_parm;};structdev_parm{ chardev_type; chardev_no; unionparmparm;};structparm_table{ unsignedintnr_parm; structdev_parmdev_parm[NR_MAX_PARM];};structparm_action{ charname[MAX_PARM_NAME_LEN]; void(*func)(structdev_parm*,char*);};示例:structparm_actionparm_action[PARM_ACTION_LEN]={ {"dev_type",load_dev_type}, {"dev_no",load_dev_no}, {"temp_hi_level",load_temp_hi_level}, {"temp_low_level",load_temp_low_level},};補(bǔ)充闡明模塊名稱save_parm功能描述依照傳進(jìn)來(lái)文獻(xiàn)名,將全局參數(shù)表存儲(chǔ)到配備文獻(xiàn)中。接口與屬性intsave_parm(char*fname);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱get_dev_parm功能描述依照傳來(lái)設(shè)備類型和設(shè)備號(hào),返回相應(yīng)設(shè)備參數(shù)指針接口與屬性structdev_parm*get_dev_parm(chardev_type,chardev_no);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱getnline功能描述依照傳進(jìn)來(lái)文獻(xiàn)指針,從中獲得一行,此行最大長(zhǎng)度為count。接口與屬性size_tgetnline(char*buf,size_tcount,F(xiàn)ILE*fp);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明會(huì)將行尾回車符替代為字符串結(jié)束尾零,并且遇到EOF時(shí)停止。返回值為實(shí)際獲得字符數(shù)(含尾零/回車)。模塊名稱trim功能描述將傳進(jìn)來(lái)字符串頭尾空格以及制表符砍去,然后將成果復(fù)制到dst。接口與屬性char*trim(char*dst,constchar*src);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明各個(gè)參數(shù)handler:模塊名稱load_dev_type功能描述將設(shè)備類型填入到傳入dev_parm。接口與屬性voidload_dev_type(structdev_parm*dev_parm,char*value);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱load_dev_no功能描述將設(shè)備號(hào)填入到傳入dev_parm。接口與屬性voidload_dev_type(structdev_parm*dev_parm,char*value);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱load_temp_hi_level功能描述將溫度計(jì)最高報(bào)警溫度填入到傳入dev_parm。接口與屬性voidload_temp_hi_level(structdev_parm*dev_parm,char*value)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱load_temp_low_level功能描述將溫度計(jì)最低報(bào)警溫度填入到傳入dev_parm接口與屬性voidload_temp_low_level(structdev_parm*dev_parm,char*value)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱temp_parm_save功能描述將傳入溫度計(jì)dev_parm按照格式寫入到文獻(xiàn)指針里接口與屬性voidtemp_parm_save(structdev_parm*dev_parm,F(xiàn)ILE*fp)數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明7.帶頭節(jié)點(diǎn)雙向鏈表模塊設(shè)計(jì)模塊名稱init_list功能描述初始化鏈表頭節(jié)點(diǎn)接口與屬性voidinit_list(structlist*list);數(shù)據(jù)構(gòu)造與算法structlist{structlist*prev,*next;};補(bǔ)充闡明模塊名稱list_add_node功能描述將節(jié)點(diǎn)加入鏈表。接口與屬性voidlist_add_node(structlist*new,structlist*node,intlocation);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明可以使用location標(biāo)志指定插入node制定節(jié)點(diǎn)左邊還是右邊,如果node指向頭節(jié)點(diǎn),那么左邊及為鏈表尾部,右邊是鏈表頭。模塊名稱list_del_node功能描述將節(jié)點(diǎn)從量表中刪除接口與屬性voidlist_del_node(structlist*node);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱is_last_node功能描述判斷節(jié)點(diǎn)與否是鏈表尾節(jié)點(diǎn)接口與屬性intis_last_node(structlist*list,structlist*node);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明真為尾節(jié)點(diǎn)模塊名稱is_empty_list功能描述返回鏈表與否為空鏈表接口與屬性intis_empty_list(structlist*list);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明真為空鏈表模塊名稱offsetof宏功能描述返回成員在構(gòu)造體中偏移接口與屬性offsetof(TYPE,MEMBER);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明TYPE為相應(yīng)構(gòu)造體類型,MEMBER為成員在構(gòu)造體中名字模塊名稱get_node_owner宏功能描述傳入指向構(gòu)造體中成員指針,返回指向構(gòu)造體指針。接口與屬性get_node_owner(ptr,type,member);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明type,member定義同offsetof,ptr為指向構(gòu)造體中成員指針。模塊名稱each_node_in_list宏功能描述使用pos指針遍歷構(gòu)造體。接口與屬性each_node_in_list(pos,head);數(shù)據(jù)構(gòu)造與算法#defineeach_node_in_list(pos,head)\for(pos=(head)->next;pos!=(head);pos=pos->next)補(bǔ)充闡明注意不要在循環(huán)中修改pos指針。模塊名稱each_owner_in_list宏功能描述使用pos指針遍歷構(gòu)造體,但是此pos指針類型是鏈表宿主,head節(jié)點(diǎn)類型是鏈表類型。接口與屬性each_owner_in_list(pos,type,member);數(shù)據(jù)構(gòu)造與算法#defineeach_owner_in_list(pos,head,member)\for(pos=get_node_owner((head)->next,typeof(*pos),member);\&pos->member!=(head);\pos=get_node_owner(pos->member.next,typeof(*pos),member))補(bǔ)充闡明同上。8.循環(huán)緩沖區(qū)模塊設(shè)計(jì)模塊名稱init_loop_buf功能描述初始化循環(huán)緩沖區(qū)。接口與屬性intinit_loop_buf(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法structloop_buf{pthread_mutex_tmutex;unsignedcharbuffer[LOOP_BUF_LEN];unsignedintin;unsignedintout;};補(bǔ)充闡明注意緩沖區(qū)大小必要為2平方。模塊名稱release_loop_buf功能描述釋放循環(huán)緩沖區(qū)。接口與屬性voidrelease_loop_buf(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明釋放構(gòu)造體中線程鎖,同步復(fù)位緩沖區(qū)模塊名稱put_loop_buf功能描述將數(shù)據(jù)放入循環(huán)緩沖區(qū)接口與屬性u(píng)nsignedintput_loop_buf(structloop_buf*buf,unsignedchar*buffer,unsignedintlen);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明空間局限性則只放入能放入,返回值為實(shí)際放入數(shù)據(jù)長(zhǎng)度。模塊名稱get_loop_buf功能描述使用pos指針遍歷構(gòu)造體,但是此pos指針類型是鏈表宿主,head節(jié)點(diǎn)類型是鏈表類型。接口與屬性u(píng)nsignedintget_loop_buf(structloop_buf*buf,unsignedchar*buffer,unsignedintlen);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明同上。模塊名稱lock_buf(structloop_buf*buf);功能描述鎖定循環(huán)緩沖區(qū)接口與屬性voidlock_buf(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱unlock_buf功能描述解鎖循環(huán)緩沖區(qū)接口與屬性voidunlock_buf(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱loop_buf_reset功能描述循環(huán)緩沖區(qū)復(fù)位接口與屬性voidloop_buf_reset(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱loop_buf_len功能描述返回循環(huán)緩沖區(qū)長(zhǎng)度接口與屬性u(píng)nsignedintloop_buf_len(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。9.串口操作層模塊設(shè)計(jì)模塊名稱init_uart功能描述按照本程序需要調(diào)用串口庫(kù)初始化串口,并啟動(dòng)監(jiān)聽線程接口與屬性voidinit_uart(void);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱com_monitor功能描述串口監(jiān)聽線程實(shí)例接口與屬性void*com_monitor(void*arg);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明一方面調(diào)用read_uart_one_frame收到完整一楨,然后調(diào)用process_frame_buf解決由協(xié)調(diào)器積極發(fā)起添加設(shè)備楨和報(bào)警楨依照返回值判斷與否已經(jīng)解決,直接進(jìn)入下一種循環(huán)還是放入緩沖區(qū),供發(fā)起查詢函數(shù)獲得回應(yīng)包。模塊名稱read_uart_one_frame功能描述從串口中獲得完整一楨接口與屬性ssize_tread_uart_one_frame(intfd,unsignedchar*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明調(diào)用read_uart_timeout獲得完整楨頭,然后進(jìn)行一系列楨檢查,非法楨直接丟棄返回0,合法楨則放入buf。模塊名稱read_uart_buf功能描述從緩沖區(qū)讀取數(shù)據(jù),沒有數(shù)據(jù)則休眠等待下次信號(hào)喚醒接口與屬性voidunlock_buf(structloop_buf*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。10.串口操作庫(kù)模塊設(shè)計(jì)模塊名稱open_uart功能描述打開串口接口與屬性intopen_uart(char*fname);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱set_uart_speed功能描述設(shè)立串口速度接口與屬性intset_uart_speed(intfd,intspeed);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱set_uart_parity功能描述設(shè)立串口各種工作屬性接口與屬性intset_uart_parity(intfd,intdatabits,intstopbits,intparity);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。模塊名稱read_uart_timeout功能描述在timeout規(guī)定期間內(nèi)讀取指定count字符個(gè)數(shù)接口與屬性ssize_tread_uart_timeout(intfd,void*buf,size_tcount,inttimeout);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明無(wú)。11.UI通信模塊設(shè)計(jì)模塊名稱init_commui功能描述創(chuàng)立與UI通信線程初始化working信號(hào)量接口與屬性voidinit_commui(void);數(shù)據(jù)構(gòu)造與算法structcommui_slot{ pthread_mutex_tworking; intlink_sd; FILE*link_fp;};補(bǔ)充闡明無(wú)。模塊名稱commui_monitor功能描述負(fù)責(zé)與UI通信線程接口與屬性void*commui_monitor(void*arg);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明創(chuàng)立并初始化unix域套接字,監(jiān)聽套接字連接。收到連接后使用get_cmd_line獲得一行命令,將命令及套接字連接描述符(用于命令解決handler返回執(zhí)行成果)一同傳給run_cmd,解析并運(yùn)營(yíng)命令做出相應(yīng)查詢/設(shè)立。模塊名稱get_cmd_line功能描述從文獻(xiàn)指針獲得一行命令接口與屬性intget_cmd_line(FILE*fp,char*buf);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明將結(jié)束符轉(zhuǎn)換為字符串結(jié)束符以便背面解決模塊名稱warn_ui功能描述向ui報(bào)警接口與屬性voidwarn_ui(chardev_type,chardev_no,charstat);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明如果槽里連接描述符可以,則使用槽里面連接描述符向UI發(fā)送報(bào)警返回成果。寫連接描述符此前加鎖,避免與命令返回值相沖突。12.命令解決某些設(shè)計(jì)模塊名稱run_cmd功能描述運(yùn)營(yíng)傳來(lái)命令,使用提供連接返回命令執(zhí)行成果。接口與屬性intrun_cmd(intfd,char*cmd)數(shù)據(jù)構(gòu)造與算法structcmd_action_table{ charname[MAX_CMD_LEN]; void(*func)(FILE*fp,char*sep);};示例:structcmd_action_tablecmd_action_table[]={ {"GET",do_get}, {"SET",do_set}, {"USER",do_user}, {"SAVE",do_save},};補(bǔ)充闡明會(huì)復(fù)制新描述符傳給下面handler,因此handler中關(guān)閉描述符生成文獻(xiàn)指針不會(huì)關(guān)閉當(dāng)前連接。模塊名稱error功能描述依照傳進(jìn)來(lái)錯(cuò)誤號(hào),將出錯(cuò)信息按照原則信息返回格式,返回到描述符上。接口與屬性voiderror(FILE*fp,interrorno);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明不會(huì)關(guān)閉傳入文獻(xiàn)指針。主Handler某些:模塊名稱do_get功能描述解析get動(dòng)詞接口與屬性voiddo_get(FILE*fp,char*sep);數(shù)據(jù)構(gòu)造與算法structsub_cmd_action_table{ charname[MAX_CMD_LEN]; void(*get)(FILE*fp,char*sep); void(*set)(FILE*fp,char*sep);}示例:structsub_cmd_action_tablesub_cmd_action_table[]={ {"CONFIG",cmd_conf_get,cmd_conf_set},//getconfigfilename {"TEMP",cmd_temp_get,cmd_temp_set},};補(bǔ)充闡明依照獲得接下來(lái)命令目的,將剩余拆解字符串傳給目sub_cmd_action_table中相應(yīng)目的get函數(shù)指針?biāo)赶蚝瘮?shù)。模塊名稱do_set功能描述解析set動(dòng)詞接口與屬性voiddo_set(FILE*fp,char*sep);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明依照獲得接下來(lái)命令目的,將剩余拆解字符串傳給目sub_cmd_action_table中相應(yīng)目的set函數(shù)指針?biāo)赶蚝瘮?shù)。模塊名稱do_user功能描述解析user動(dòng)詞接口與屬性voiddo_user(FILE*fp,char*sep)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明依照接下來(lái)命令動(dòng)詞,對(duì)顧客認(rèn)證各個(gè)功能做出響應(yīng),然后將返回成果寫入到傳入文獻(xiàn)指針上。模塊名稱do_save功能描述解析save動(dòng)詞接口與屬性voiddo_save(FILE*fp,char*sep)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明依照接下來(lái)命令動(dòng)詞,將當(dāng)前全局參數(shù)表格存到相應(yīng)文獻(xiàn)里,如不指定文獻(xiàn)名,則存儲(chǔ)到默認(rèn)文獻(xiàn)里,并將成果按照返回格式返回到傳入文獻(xiàn)指針。子handler:模塊名稱cmd_conf_get功能描述解析到GETCONFIG背面目的,遍歷CONFIG文獻(xiàn)夾,將其中配備文獻(xiàn)名按照相應(yīng)格式,返回到傳入文獻(xiàn)指針。接口與屬性voidcmd_conf_get(FILE*fp,char*sep);數(shù)據(jù)構(gòu)造與算法無(wú)補(bǔ)充闡明模塊名稱cmd_conf_set功能描述解析到SETCONFIG背面目的,調(diào)用load_parm解析相應(yīng)配備文獻(xiàn),并renew方略表,將成果返回到傳入文獻(xiàn)指針。接口與屬性voidcmd_conf_get(FILE*fp,char*sep);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱cmd_temp_get功能描述解析到GETTEMP背面設(shè)備號(hào),按照返回格式,返回溫度計(jì)當(dāng)前狀態(tài)(方略表中),如果背面沒有跟設(shè)備號(hào),則依照返回格式,返回當(dāng)前網(wǎng)絡(luò)中所有溫度計(jì)設(shè)備號(hào)。接口與屬性voidcmd_conf_get(FILE*fp,char*sep);數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明模塊名稱cmd_temp_set功能描述解析到SETTEMP背面參數(shù),按照命令格式,獲得當(dāng)前命令中想要設(shè)立最高值和最低值,并且使用修改全局參數(shù)表,如果全局參數(shù)表中沒有此設(shè)備參數(shù)則創(chuàng)立設(shè)備參數(shù)。接口與屬性voidcmd_temp_set(FILE*fp,char*sep)數(shù)據(jù)構(gòu)造與算法同上補(bǔ)充闡明附命令通信合同:設(shè)備操作有關(guān):獲得設(shè)備DEV_NO:UI發(fā)送:GET<分隔符><DEV_TYPE><結(jié)束符>UI接受:<狀態(tài)值><分隔符><DEV_NO><分隔符><DEV_NO><分隔符>……<DEV_NO><分隔符><結(jié)束符>狀態(tài)值DEV_NO_START返還設(shè)備號(hào)開始注意結(jié)束符前有一分隔符,如果無(wú)此類型設(shè)備,則返回格式類似下面:<狀態(tài)值><分隔符><分隔符><結(jié)束符>溫度計(jì)有關(guān)命令:#defineMAX_TEMP125#defineMIN_TEMP-125#defineTEMP_POSION126//如果取到這個(gè)溫度則代表溫度獲取失敗獲得狀態(tài):UI發(fā)送:GET<分隔符><DEV_TYPE><分隔符><DEV_NO><結(jié)束符>UI收到:<狀態(tài)值><分隔符><DEV_TYPE><分隔符><DEV_NO><分隔符><當(dāng)前溫度><分隔符><最高溫度><分隔符><最低溫度><結(jié)束符>狀態(tài)值成功SUCCESS也許失敗狀態(tài)值ERROR_CMD_NOT_FOUND命令不完整ERROR_DEV_NOT_FOUND設(shè)備不存在設(shè)立狀態(tài):SET<分隔符><DEV_TYPE><分隔符><DEV_NO><分隔符><最高溫度><分隔符><最低溫度><結(jié)束符>UI接受到:<狀態(tài)值><分隔符><MESSAGE><結(jié)束符>成功SUCCESS也許失敗狀態(tài)值ERROR_CMD_NOT_FOUND命令不完整ERROR_DEV_NOT_FOUND設(shè)備不存在配備文獻(xiàn)有關(guān)命令:1.獲得可用配備文獻(xiàn)UI發(fā)送:GET<分隔符>CONFIG<結(jié)束符>UI接受:<狀態(tài)值><分隔符><FILENAME><分隔符>……<FILENAME><分隔符><結(jié)束符>成功狀態(tài)值為CONF_NAME_START777也許失敗狀態(tài)ERROR_CONF_DIR_NOT_FOUND板上配備文獻(xiàn)目錄打開失敗注意結(jié)束符前有一分隔符,如果無(wú)此類型設(shè)備,則返回格式類似下面:<狀態(tài)值><分隔符><分隔符><結(jié)束符>2.載入指定配備文獻(xiàn)UI發(fā)送SET<分隔符>CONFIG<分隔符><文獻(xiàn)名><結(jié)束符>UI接受:<狀態(tài)值><分隔符><Message><結(jié)束符>成功狀態(tài)值為SUCCESS也許失敗狀態(tài)值ERROR_CMD_CONFIG_NOT_FOUND配備文獻(xiàn)載入失敗3.保存配備文獻(xiàn)UI發(fā)送SAVE<分隔符>CONFIG<分隔符>[文獻(xiàn)名]<結(jié)束符>如不指定文獻(xiàn)名則配備將保存到默認(rèn)配備文獻(xiàn)defalut中UI返回<狀態(tài)值><分隔符><Message><結(jié)束符>成功狀態(tài)值SUCCESS也許失敗狀態(tài)值:ERROR_SAVE_CONF保存配備文獻(xiàn)失敗顧客認(rèn)證有關(guān)命令:顧客認(rèn)證:UI發(fā)送:USER<分隔符>AUTH<分隔符><USERNAME><分隔符><PASSWORD><結(jié)束符>UI接受:<狀態(tài)值><分隔符><MESSAGE><結(jié)束符>成功狀態(tài)值為USER_AUTH_PASS或USER_AUTH_FAILED也許失敗狀態(tài)ERROR_USER_AUTH密碼文獻(xiàn)打開失敗顧客添加:UI發(fā)送:USER<分隔符>ADD<分隔符><USERNAME><分隔符><PASSWORD><結(jié)束符>UI接受:<狀態(tài)值><分隔符><MESSAGE><結(jié)束符>成功狀態(tài)值為SUCCESS也許失敗狀態(tài)ERROR_USER_ADD添加顧客失敗顧客刪除:UI發(fā)送:USER<分隔符>DEL<顧客名><結(jié)束符>UI接受:<狀態(tài)值><分隔符><MESSAGE><結(jié)束符>成功狀態(tài)值為SUCCESS也許失敗狀態(tài)ERROR_USER_DEL刪除顧客失敗顧客改密UI發(fā)送:USER<分隔符>PASS<顧客名><分隔符><新密碼><結(jié)束符>UI接受:<狀態(tài)值><分隔符><MESSAGE><結(jié)束符>成功狀態(tài)值SUCCESS也許失敗狀態(tài)ERROR_USER_CHANGE_PASS顧客改密失敗、參數(shù):#defineMAX_CMD_LEN10//單個(gè)命令某些最長(zhǎng)值#defineMAX_CMD_LINE_LEN128//命令行最長(zhǎng)值#defineCMD_DELIM""http://分隔符#defineCMD_END"\r\n"http://結(jié)束符#defineSOCKKET_ADDR"/tmp/homecore-socket"socket地址狀態(tài)值列表:#defineSUCCESS0//成功#defineERROR_CMD_NOT_FOUND1//#defineERROR_CMD_PARM_INVAILD2#defineERROR_DEV_NOT_FOUND3#defineCONF_NAME_START4#defineERROR_CMD_CONFIG_NOT_FOUND5#defineERROR_CONF_DIR_NOT_FOUND6#defineUSER_AUTH_PASS7#defineUSER_AUTH_FAILED8#defineERROR_USER_AUTH9#defineERROR_USER_ADD10#defineERROR_USER_DEL11#defineERROR_USER_CHANGE_PASS12#defineERROR_SAVE_CONF13#defineWARN_START14#defineDEV_NO_START1513.驅(qū)動(dòng)程序設(shè)計(jì)1.門禁驅(qū)動(dòng)程序設(shè)計(jì)依照門禁控制系統(tǒng)文檔,修改Linux內(nèi)核源代碼arch/arm下開發(fā)板有關(guān)文獻(xiàn)(依照內(nèi)核版本不同,此處也許為mach-smdk2410或者是mach-s3c2410)中CPLD內(nèi)存物理地址映射到虛擬地址。驅(qū)動(dòng)程序設(shè)計(jì)初步實(shí)現(xiàn)read辦法用于顧客態(tài)程序獲得門禁控制系統(tǒng)返回卡號(hào),ioctl辦法用于顧客態(tài)程序?qū)崿F(xiàn)門打開和關(guān)閉,一種中斷解決程序,負(fù)責(zé)響應(yīng)門禁控制系統(tǒng)中斷。2.LCD驅(qū)動(dòng)移植依照LCD手冊(cè),將適當(dāng)參數(shù)填入到s3c2410fb_mach_info類型構(gòu)造體中并在.int_machine所制定初始化函數(shù)中將構(gòu)造體傳給platform_data(不同內(nèi)核版本此處調(diào)用不同),供驅(qū)動(dòng)程序加載。3.觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)Open,read,release,fasync,poll辦法,probe中設(shè)立相應(yīng)GPIO引腳,注冊(cè)中斷并在devfs中建立相應(yīng)設(shè)備節(jié)點(diǎn),read辦法中從循環(huán)緩沖區(qū)中獲得捕獲數(shù)據(jù)返回個(gè)顧客態(tài)程序。在adc和觸摸屏中斷中捕獲屏幕坐標(biāo),將其放入循環(huán)緩沖區(qū)。4.音頻驅(qū)動(dòng)程序Probe中初始化GPIO引腳功能,申請(qǐng)IRQ注冊(cè),同步初始化uda1341,注冊(cè)聲卡dsp和mixer操作辦法,open辦法打開時(shí)初始化循環(huán)緩沖區(qū),并且初始化iis總線收發(fā)。在dspioctl辦法中實(shí)現(xiàn)音頻流各種參數(shù)解決,在mixerioctl辦法中實(shí)現(xiàn)聲音設(shè)備音量等解決。14.門禁控制系統(tǒng)設(shè)計(jì)教學(xué)用門禁子板接口闡明:

韋根讀卡器接口,DATA0、DATA1、GND和5V0,共4個(gè)讀卡器,占用CPLD8個(gè)I/O,分別為Wiegand1、Wiegand2、Wiegand3、Wiegand4;

4個(gè)按鍵輸入,占用CPLD4個(gè)I/O,為KeyIN2個(gè)門狀態(tài)反饋輸入,占用CPLD2個(gè)I/O,為DoorSta;

2個(gè)繼電器控制輸出,占用CPLD2個(gè)I/O,為ConOut1和ConOut2;

1個(gè)中斷祈求輸出,占用CPLD1個(gè)I/O,為INTR;

1個(gè)片選輸入占用CPLD1個(gè)I/O,為CS5個(gè)地址線,占用CPLD5個(gè)I/O,為Addr(0,4)16個(gè)地址線,占用CPLD16個(gè)I/O,為Data(0,15)1個(gè)讀信號(hào),占用CPLD1個(gè)I/O,為RD1個(gè)寫信號(hào),占用CPLD1個(gè)I/O,為WR1個(gè)復(fù)位信號(hào),占用CPLD1個(gè)I/O,為RESET框圖如下圖所示:B和ARM板接口信號(hào)闡明下圖為ARM板接口信號(hào)示意圖 連接描述如下: DATA0~DATA15連接到Data(0,15) ADDR0~ADDR4連接到Addr(0,4) nOE連接到RD,變低表達(dá)開始讀 nWE連接到WR,變低表達(dá)開始寫 nGCS2連接到CS,ARM輸出低電平,表達(dá)選中CPLD GPA15連接到RESET,ARM輸出低電平,表達(dá)復(fù)位CPLD,工作狀態(tài)始終保持高電平 EINT3連接到INTR,為ARM中斷輸入信號(hào),低電平工作過(guò)程描述數(shù)據(jù)流程如框圖所示:如果有事件發(fā)生(事件也許是四個(gè)讀卡器接口有數(shù)據(jù)輸入或門狀態(tài)異常),CPLD向ARM發(fā)中斷祈求,祈求解決。ARM響應(yīng)后發(fā)讀數(shù)據(jù)命令,CPLD把數(shù)據(jù)傳送給ARM,ARM判斷數(shù)據(jù)后,再把指令送給CPLD,CPLD依照指令與否執(zhí)行開關(guān)門操作。 尚有一種狀況是ARM直接發(fā)指令,讓門打開或關(guān)閉。關(guān)于韋根合同闡明關(guān)于韋根合同闡明:Wiegand合同是國(guó)際上統(tǒng)一原則,有諸多格式,原則26-bit應(yīng)當(dāng)是最慣用格式。此外,尚有34-bit、37-bit等格式。原則26位Wiegand通訊合同原則韋根輸出是由26位二進(jìn)制數(shù)構(gòu)成,每一位含義如下:129102526XXXXXXXXXXXXXXXXXXXXXXXXXX二進(jìn)制 第1位為2—13位偶校驗(yàn)位第2—9位相應(yīng)與電子卡HID碼低8位第10-25位相應(yīng)電子卡PID號(hào)碼第26位為14-25位奇校驗(yàn)位這26位數(shù)據(jù)在讀出器韋根輸出線D0,D1上輸出。數(shù)據(jù)輸出高位在前。因此CPLD支持各種合同Wiegand合同,依托原則合同來(lái)判斷是多少bit格式,因此CPLD接受Wiegan數(shù)據(jù)寄存器設(shè)計(jì)成最大48bit,為區(qū)別各個(gè)合同在每組數(shù)據(jù)包最后三位置成標(biāo)志碼,因此最大支持45bit數(shù)據(jù)。000表達(dá)26-bit原則合同001表達(dá)27-bit合同010表達(dá)32-bit合同011表達(dá)34-bit協(xié)儀100表達(dá)36-bit合同101表達(dá)37-bit合同實(shí)現(xiàn)方案在ARM復(fù)位后,發(fā)復(fù)位信號(hào),置GPA15為低,CPLD進(jìn)入工作狀態(tài)。如果有事件發(fā)生,CPLD發(fā)出中斷祈求,把EINT3置高,ARM響應(yīng)中斷后讀CPLD中數(shù)據(jù),詳細(xì)地址分派如下(reader相應(yīng)圖一Wiegand),數(shù)據(jù)寬度為16bit:Addr[4:0]AccessMode描述Wiegand1接口數(shù)據(jù)地址00000ReadonlyReader1datalow00001ReadonlyReader1datamid00010ReadonlyReader1datahighWiegand2接口數(shù)據(jù)地址00011Reader2datalow00100Reader2datamid00101Reader2datahighWiegand3接口數(shù)據(jù)地址00110Reader3datalow00111Reader3datamid01000Reader3datahighWiegand4接口數(shù)據(jù)地址01001Reader4datalow01010Reader4datamid01011Reader4datahigh狀態(tài)寄存器01100Readonly控制寄存器(門控制等信息)01101WriteonlyControlDoor由于公用一條中斷祈求,因此ARM分不出是哪個(gè)中斷祈求,因此ARM每次讀時(shí)候把00000~01011地址數(shù)據(jù)所有讀出,從而做出開關(guān)門判斷。如果有一組數(shù)據(jù)為全0,表達(dá)這一組沒有卡號(hào)輸入。讀出數(shù)據(jù)后,ARM寫控制寄存器命令即向地址01101寫入有關(guān)數(shù)據(jù)。Wiegand1和Wiegand2共同相應(yīng)ConOut1(1#door),Wiegand3和Wiegand4共同相應(yīng)ConOut2(2#door),狀態(tài)寄存器詳細(xì)描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8KS4KS3Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0KS2KS1WS4WS3WS2WS1DS2DS1DS1:1#doorstatus(0=正常1=異常)DS2:2#doorstatus(0=正常1=異常)WS1:Wiegand1status1號(hào)韋根對(duì)卡器狀況(0=讀卡器正常,1=讀卡器異常)WS2:Wiegand2status2號(hào)韋根對(duì)卡器狀況WS3:Wiegand3status3號(hào)韋根對(duì)卡器狀況WS4:Wiegand4status4號(hào)韋根對(duì)卡器狀況KS1:1#Keystatus1號(hào)鍵狀態(tài)(0=未按鍵,1=有按鍵)KS2:2#Keystatus2號(hào)鍵狀態(tài)(0=未按鍵,1=有按鍵)KS3:3#Keystatus3號(hào)鍵狀態(tài)(0=未按鍵,1=有按鍵)KS4:4#Keystatus4號(hào)鍵狀態(tài)(0=未按鍵,1=有按鍵)控制寄存器詳細(xì)描述Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0DO2DO1DO11#dooropen0=關(guān)1=開DO22#dooropen0=關(guān)1=開六:詳細(xì)模塊重要函數(shù)闡明模塊名稱ReadWiegand功能描述從讀卡器讀取顧客信息,并提供后續(xù)解決接口與屬性BoolReadWiegand(void)補(bǔ)充闡明當(dāng)讀取成功時(shí)候,函數(shù)返回非0值,失敗返回-1模塊名稱SendWiegand功能描述向顧客接口發(fā)送數(shù)據(jù),接口與屬性UnsignedcharSendWiegand(unsignedchar*data,unsignedcharlen)補(bǔ)充闡明此函數(shù)發(fā)送成功,返回發(fā)送字節(jié)數(shù)模塊名稱SendCmd功能描述直接發(fā)送控制門開和關(guān)接口與屬性VoidSendCmd(unsignedchardoor,unsignedcharstate)補(bǔ)充闡明此函數(shù)指定控制幾號(hào)門(door)和門狀態(tài)(開或關(guān))15.家居控制系統(tǒng)和環(huán)境探測(cè)模塊環(huán)境探測(cè)采用zigbee無(wú)線通訊技術(shù),通過(guò)溫度傳感器采集環(huán)境溫度,上報(bào)到家庭網(wǎng)關(guān),網(wǎng)關(guān)解析溫度數(shù)據(jù),實(shí)時(shí)顯示溫度到led顯示屏幕,其構(gòu)造圖如下:家居控制重要涉及對(duì)繼電器控制,通過(guò)繼電器通或者斷來(lái)控制照明設(shè)備開或者關(guān)。模塊重要涉及功能函數(shù)闡明如下:模塊名稱GetTem功能描述負(fù)責(zé)溫度采集接口與屬性VoidGetTem(unsignedchar*tmp)補(bǔ)充闡明此功能函數(shù)負(fù)責(zé)采集溫度數(shù)據(jù)并封裝采集數(shù)據(jù)溫度值用兩個(gè)字節(jié)來(lái)存儲(chǔ)模塊名稱SendTem功能描述上報(bào)采集溫度數(shù)據(jù)接口與屬性VoidSendTem(unsignedinttem)補(bǔ)充闡明此函數(shù)運(yùn)用zigbee無(wú)線網(wǎng)絡(luò)傳遞溫度信息到家庭網(wǎng)關(guān)解決模塊名稱RecTem功能描述網(wǎng)關(guān)解析溫度數(shù)據(jù)包接口與屬性VoidRecTem(void)補(bǔ)充闡明此函數(shù)解析接受包括了溫度值無(wú)線數(shù)據(jù)包模塊名稱SendLedData功能描述網(wǎng)關(guān)封裝溫度數(shù)據(jù)幀并發(fā)送溫度顯示命令到led顯示模塊接口與屬性UnsignedcharSendLedData(unsignedchar*leddata,unsignedcharlen)補(bǔ)充闡明無(wú)模塊名稱GetTemFromCD功能描述LED顯示模塊接受并解析溫度數(shù)據(jù)幀接口與屬性VoidGetTemFromCD(VOID)補(bǔ)充闡明無(wú)模塊名稱DisplayTem功能描述Led顯示模塊控制led屏幕顯示溫度值接口與屬性UnsignedcharDisplayTem(unsignedchartem[],unsignedcharlen)補(bǔ)充闡明函數(shù)執(zhí)行成功返回非0值,失敗返回-1模塊名稱OpenLamp功能描述打開繼電器控制照明設(shè)備接口與屬性VoidOpenLamp(void)補(bǔ)充闡明實(shí)現(xiàn)照明設(shè)備打開模塊名稱CloseLamp功能描述關(guān)閉繼電器控制照明設(shè)備接口與屬性VoidCloseLamp(void)補(bǔ)充闡明實(shí)現(xiàn)照明設(shè)備關(guān)斷16.人機(jī)交互界面模塊設(shè)計(jì)人機(jī)交互模塊采用基于Armlinux下GUI-Qt應(yīng)用程序開發(fā)來(lái)完畢,顧客通過(guò)在LCD上顯示軟件界面,輔助觸摸屏來(lái)完畢各項(xiàng)操作,其構(gòu)造圖如下:主界面主界面煤氣子界面火警子界面門窗磁子界面開關(guān)子界面模式子界面溫度計(jì)子界面遙控器子界面主界面視圖;煤氣煤氣報(bào)警信息顯示溫度計(jì)窗磁開關(guān)門磁火警模式遙控器退出主界面中所有對(duì)象功能和操作方式;煤氣煤氣名稱:煤氣監(jiān)測(cè)器按鈕功能;當(dāng)有煤氣監(jiān)測(cè)設(shè)備報(bào)警信息傳來(lái)時(shí),此按鈕顯示“煤氣報(bào)警??!”文字,并且在報(bào)警信息顯示欄顯示報(bào)警信息,當(dāng)點(diǎn)擊此按鈕時(shí),進(jìn)入煤氣監(jiān)測(cè)設(shè)備界面。當(dāng)煤氣濃度正常時(shí),此按鈕文字顯示“煤氣”。操作方式:點(diǎn)擊進(jìn)入煤氣監(jiān)測(cè)設(shè)備界面。火警火警名稱:火警監(jiān)測(cè)器按鈕功能;當(dāng)有火警監(jiān)測(cè)設(shè)備報(bào)警信息傳來(lái)時(shí),此按鈕顯示“火警報(bào)警!!”文字,并且在報(bào)警信息顯示欄顯示報(bào)警信息,當(dāng)點(diǎn)擊此按鈕時(shí),進(jìn)入火警監(jiān)測(cè)設(shè)備界面。當(dāng)無(wú)火警時(shí),此按鈕文字顯示為“火警”。操作方式:點(diǎn)擊進(jìn)入火

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論