3.2 管理主机软件设计
管理主机软件部分选用uC/OS-II 操作系统,将其移植到LPC2114 处理器上,移植过程在此不作讨论。主程序流程框图如图3-2 所示。
图 3-2 管理主机主程序流程图
根据功能要求,划分系统任务为:液晶显示任务、按键检测任务、设置/查询任务、信号音检测任务、号码分析任务、系统自检任务及通话任务等七个任务。 1) 液晶显示任务
每隔1 秒从时钟芯片DS1302 读取当前时钟,根据当前状态指示液晶显示不同内容,待机状态下显示系统日期和时钟,通话状态下显示通话时间。 2) 按键检测任务
键盘扫描任务不断扫描按键,如果检测到按键,记录键值并延时20 毫秒,20 毫秒后仍有按键并且键值与之前相同时判断为有效按键,通过调用OSMboxPost(KeyMbox,0,&err)函数将有效键值发送到键值消息邮箱KeyMbox,由其他任务取用。 3) 设置/查询任务
当按下SET 键时,产生外部中断EINT1,其中断服务程序唤醒设置/查询任务。根据系统输入的号码,可分别进入系统时钟设置、远程呼叫中心专线电话设置、自动转外线延时时间设置、系统自动监测范围设置。
进入预置状态后,设置/查询任务调用OSMboxPend(KeyMbox,20, &err),等待按键, 根据输入的首位按键,进入相应设置功能的子程序。如按下“8”键,进入设置转外线呼叫延时子程序;按“9” 键进入设置远程监控中心号码子程序;按“0” 键进入设置系统时间子程序;按“1” 键进入设置自检范围子程序;按“上翻/下翻”键进入查询通话记录子程序;按“查询”键进入查询未接电话子程序;长按“查询”键3 秒进入自检结果查询子程序。 4) 信号音检测任务
当有公共电话网外线呼入或内部网络转拨远程监控中心时,通话任务唤醒信号音检测任务。任务通过采集LM567 芯片的输出引脚,并根据信号音的信号标准判断是否忙音及回铃音,以事件标志的形式反馈给通话任务,使其进行自动挂机处理及记录通话时间。 5) 号码分析任务
当有电梯分机呼叫时,管理主机的MT8870 芯片接收DTMF 信号,并产生EINT3 外部中断。根据内部通信约定,一帧数据包括起始码、分机号、校验码及结束码。在EINT3 的中断服务程序中,将收到的数据存入数组,如果收到结束码就表示一帧数据接收完毕,通过OSMboxPost()函数将数组首地址发送到已创建好的InCallMbox 消息邮箱,并且唤醒号码分析任务。
在号码分析任务中,通过调用OSMboxPend(InC allMbox,0,&err)来取得先前中断中存入的数组数据,对号码进行检查并校验,如号码正确则发送给通话任务,最后挂起自身任务。6) 通话任务
当用户摘机或有公网外线呼入时会产生摘机中断和振铃中断,在各自的中断服务程序中调用OSFlagPost()函数以事件标志的形式通知通话任务。
在通话任务中,任务不断查询当前的事件标志,根据有无摘机、是否有振铃、有无内部呼叫等,来判断主机当前的状态,进入相应处理子程序。如收到内线呼叫码并且通过号码分析任务检验,则表示有内线呼叫请求,进入内线呼叫本机处理程序;如有振铃中断,表示有外线呼入请求,进入外线呼叫本机处理程序;如果本机未通话且处于摘机状态,则进入本地呼叫内外线处理程序。这里给出了内线呼叫主机处理程序的流程图,如图3-3 所示。