基于PSTN 的城市電梯安全呼叫系統(tǒng)設(shè)計(jì)
3.2 管理主機(jī)軟件設(shè)計(jì)
管理主機(jī)軟件部分選用uC/OS-II 操作系統(tǒng),將其移植到LPC2114 處理器上,移植過(guò)程在此不作討論。主程序流程框圖如圖3-2 所示。
圖 3-2 管理主機(jī)主程序流程圖
根據(jù)功能要求,劃分系統(tǒng)任務(wù)為:液晶顯示任務(wù)、按鍵檢測(cè)任務(wù)、設(shè)置/查詢?nèi)蝿?wù)、信號(hào)音檢測(cè)任務(wù)、號(hào)碼分析任務(wù)、系統(tǒng)自檢任務(wù)及通話任務(wù)等七個(gè)任務(wù)。 1) 液晶顯示任務(wù)
每隔1 秒從時(shí)鐘芯片DS1302 讀取當(dāng)前時(shí)鐘,根據(jù)當(dāng)前狀態(tài)指示液晶顯示不同內(nèi)容,待機(jī)狀態(tài)下顯示系統(tǒng)日期和時(shí)鐘,通話狀態(tài)下顯示通話時(shí)間。 2) 按鍵檢測(cè)任務(wù)
鍵盤(pán)掃描任務(wù)不斷掃描按鍵,如果檢測(cè)到按鍵,記錄鍵值并延時(shí)20 毫秒,20 毫秒后仍有按鍵并且鍵值與之前相同時(shí)判斷為有效按鍵,通過(guò)調(diào)用OSMboxPost(KeyMbox,0,err)函數(shù)將有效鍵值發(fā)送到鍵值消息郵箱KeyMbox,由其他任務(wù)取用。 3) 設(shè)置/查詢?nèi)蝿?wù)
當(dāng)按下SET 鍵時(shí),產(chǎn)生外部中斷EINT1,其中斷服務(wù)程序喚醒設(shè)置/查詢?nèi)蝿?wù)。根據(jù)系統(tǒng)輸入的號(hào)碼,可分別進(jìn)入系統(tǒng)時(shí)鐘設(shè)置、遠(yuǎn)程呼叫中心專線電話設(shè)置、自動(dòng)轉(zhuǎn)外線延時(shí)時(shí)間設(shè)置、系統(tǒng)自動(dòng)監(jiān)測(cè)范圍設(shè)置。
進(jìn)入預(yù)置狀態(tài)后,設(shè)置/查詢?nèi)蝿?wù)調(diào)用OSMboxPend(KeyMbox,20, err),等待按鍵, 根據(jù)輸入的首位按鍵,進(jìn)入相應(yīng)設(shè)置功能的子程序。如按下“8”鍵,進(jìn)入設(shè)置轉(zhuǎn)外線呼叫延時(shí)子程序;按“9” 鍵進(jìn)入設(shè)置遠(yuǎn)程監(jiān)控中心號(hào)碼子程序;按“0” 鍵進(jìn)入設(shè)置系統(tǒng)時(shí)間子程序;按“1” 鍵進(jìn)入設(shè)置自檢范圍子程序;按“上翻/下翻”鍵進(jìn)入查詢通話記錄子程序;按“查詢”鍵進(jìn)入查詢未接電話子程序;長(zhǎng)按“查詢”鍵3 秒進(jìn)入自檢結(jié)果查詢子程序。 4) 信號(hào)音檢測(cè)任務(wù)
當(dāng)有公共電話網(wǎng)外線呼入或內(nèi)部網(wǎng)絡(luò)轉(zhuǎn)撥遠(yuǎn)程監(jiān)控中心時(shí),通話任務(wù)喚醒信號(hào)音檢測(cè)任務(wù)。任務(wù)通過(guò)采集LM567 芯片的輸出引腳,并根據(jù)信號(hào)音的信號(hào)標(biāo)準(zhǔn)判斷是否忙音及回鈴音,以事件標(biāo)志的形式反饋給通話任務(wù),使其進(jìn)行自動(dòng)掛機(jī)處理及記錄通話時(shí)間。 5) 號(hào)碼分析任務(wù)
當(dāng)有電梯分機(jī)呼叫時(shí),管理主機(jī)的MT8870 芯片接收DTMF 信號(hào),并產(chǎn)生EINT3 外部中斷。根據(jù)內(nèi)部通信約定,一幀數(shù)據(jù)包括起始碼、分機(jī)號(hào)、校驗(yàn)碼及結(jié)束碼。在EINT3 的中斷服務(wù)程序中,將收到的數(shù)據(jù)存入數(shù)組,如果收到結(jié)束碼就表示一幀數(shù)據(jù)接收完畢,通過(guò)OSMboxPost()函數(shù)將數(shù)組首地址發(fā)送到已創(chuàng)建好的InCallMbox 消息郵箱,并且喚醒號(hào)碼分析任務(wù)。
在號(hào)碼分析任務(wù)中,通過(guò)調(diào)用OSMboxPend(InC allMbox,0,err)來(lái)取得先前中斷中存入的數(shù)組數(shù)據(jù),對(duì)號(hào)碼進(jìn)行檢查并校驗(yàn),如號(hào)碼正確則發(fā)送給通話任務(wù),最后掛起自身任務(wù)。6) 通話任務(wù)
當(dāng)用戶摘機(jī)或有公網(wǎng)外線呼入時(shí)會(huì)產(chǎn)生摘機(jī)中斷和振鈴中斷,在各自的中斷服務(wù)程序中調(diào)用OSFlagPost()函數(shù)以事件標(biāo)志的形式通知通話任務(wù)。
在通話任務(wù)中,任務(wù)不斷查詢當(dāng)前的事件標(biāo)志,根據(jù)有無(wú)摘機(jī)、是否有振鈴、有無(wú)內(nèi)部呼叫等,來(lái)判斷主機(jī)當(dāng)前的狀態(tài),進(jìn)入相應(yīng)處理子程序。如收到內(nèi)線呼叫碼并且通過(guò)號(hào)碼分析任務(wù)檢驗(yàn),則表示有內(nèi)線呼叫請(qǐng)求,進(jìn)入內(nèi)線呼叫本機(jī)處理程序;如有振鈴中斷,表示有外線呼入請(qǐng)求,進(jìn)入外線呼叫本機(jī)處理程序;如果本機(jī)未通話且處于摘機(jī)狀態(tài),則進(jìn)入本地呼叫內(nèi)外線處理程序。這里給出了內(nèi)線呼叫主機(jī)處理程序的流程圖,如圖3-3 所示。
評(píng)論