⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarmer.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  Alarmer.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : Cyb 2006.11.25                                          *
****************************************************************/
#include "includes.h"
#include "errcode.h"
#include "errtask.h"
#include "message.h"
#include "tools.h"
#include "public.h"
#include "timetask.h"
#include "sensor.h"
#include "portdrv.h"
#include "systask.h"
#include "almtask.h"
#include "alarmer.h"
#include "uart_drv.h"
#include "recorder.h"
#include "systask.h"
#include "audio.h" 
#include "UartSer.h"
#include "SimuSteer.h"
#include "Predictor.h"
#include "DisplayTask.h"
#include "VolumeControl.h"
#include "PredicTools.h"


/*
********************************************************************************
*                  DEFINE CONFIG PARAMETERS
********************************************************************************
*/

#define PERIOD_TEST                             MINUTE, 5
#define PEIROD_DELAY                            SECOND, 10

#define LEDPARA_TRIGGER                         PORT_LEDWARN, 10,  2,  3, 0
#define LEDPARA_RESPOND                         PORT_LEDWARN,  8, 20, 20, 0
#define LEDPARA_INDICATE                        PORT_LEDRED,  15,  1,  1, 0




static INT16U GetVoiceID(INT16U stanum)
{
       INT8U   i;
       INT8U   nums;
       INT16U  id;
       
       nums = Curstation_Tbl.nums_up + Curstation_Tbl.nums_down;
       
       for(i=0;i< nums;i++)
       {
            if (stanum == Curstation_Tbl.sta_line[i].Stanum)
            {
                 id = Curstation_Tbl.sta_line[i].AD_id;
                 break;
            }
       } 
       
       return id;
}

static BOOLEAN IsOpenAdPos_Voice(void)
{
       if(AdVoiceIDPara.status_pos == OPEN_)
       {
             return TRUE;
       }
       else 
       {
             return FALSE;
       }
}

static BOOLEAN IsOpenAdTime_Voice(void)
{
      if(AdVoiceIDPara.status_time == OPEN_)
      {
             return TRUE;
      }
      else 
      {
             return FALSE;
      }
}


static void  PlayerLineNumber(INT16U linenum)
{
        
     PlayerNumbers(linenum);        
        
}

static void PlayerTime_hour(INT8U hour)
{
       if (hour >=20)
       {
           Player_A_Number(hour/10);
           PlaySingleAudio(FALSE,TRUE,AD_ten);
          
           if((hour%10)>0)
           {
              Player_A_Number(hour%10);
           }
       }
       else if (hour >=10)
       {
           PlaySingleAudio(FALSE,TRUE,AD_ten);
           
           if((hour%10)>0)
           {
              Player_A_Number(hour%10);
           }
       }
       else
       {
             Player_A_Number(hour);
       }
       
       PlaySingleAudio(FALSE,TRUE,AD_dian);
}

static void  PlayerStationFd( INT16U stanum)
{
      INT16U id;
      INT16U AD_id;
      INT16U AV_id;
      
      id = GetVoiceID(stanum);
      AD_id = AD_ZHANDIAN + id;
      
      PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音
       
      if(IsOpenAdPos_Voice())
      {
           AV_id = AD_ADVOICE1 + AdVoiceIDPara.Adid_pos;
           PlaySingleAudio(FALSE,TRUE,AV_id);
           PlaySingleAudio(FALSE,TRUE,AD_tixingnin);     // 提醒您
      }
      
      if(( stanum == SpecailStation.end_sta1) || (stanum == SpecailStation.end_sta1))
      {
           PlaySingleAudio(FALSE,TRUE,AD_zhongdianzhan);     // 终点站
      }
      
      PlaySingleAudio(FALSE,TRUE,AD_id);
      PlaySingleAudio(FALSE,TRUE,AD_jijiangdaoda);        // 即将到达
      PlaySingleAudio(FALSE,TRUE,AD_yaoxiachedechengke);  // 要下车的乘客
      PlaySingleAudio(FALSE,TRUE,AD_zuohaozhunbei);       // 请做好准备
}

static void PlayerStationArived(INT16U cursta,INT16U nextsta)
{
      INT16U id1,id2;
      INT16U AD_id1,AD_id2;
      
      id1 = GetVoiceID(cursta);
      AD_id1 = AD_ZHANDIAN + id1;
      id2 = GetVoiceID(nextsta);
      AD_id2 = AD_ZHANDIAN + id2;
      
      PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音
      
      if((cursta == SpecailStation.end_sta1) || (cursta == SpecailStation.end_sta1))
      {
           PlaySingleAudio(FALSE,TRUE,AD_zhongdianzhan);     // 终点站
      }
      
      PlaySingleAudio(FALSE,TRUE,AD_id1);
      PlaySingleAudio(FALSE,TRUE,AD_daole);                   // 到了
      PlaySingleAudio(FALSE,TRUE,AD_yaoxiachedechengke);      // 要下车的乘客
      PlaySingleAudio(FALSE,TRUE,AD_daichetingwenhouxiache);  // 待车停稳后下车
      
      if((cursta != SpecailStation.end_sta1) && (cursta != SpecailStation.end_sta1))
      {  
           PlaySingleAudio(FALSE,TRUE,AD_xiayizhan);               //下一站
           PlaySingleAudio(FALSE,TRUE,AD_id2);
      }
    
  
}

static void PlayerStationStart(INT16U nextsta,INT16U endsta)
{
      INT16U id1,id2;
      INT16U AD_id1,AD_id2;
      INT16U AV_id;
      
      id1 = GetVoiceID(nextsta);
      id2 = GetVoiceID(endsta);
      AD_id1 = AD_ZHANDIAN + id1;
      AD_id2 = AD_ZHANDIAN + id2;
      
      PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音
      PlaySingleAudio(FALSE,TRUE,AD_huanyingchengzuo);   //欢迎乘座
      PlayerLineNumber(LineNumPara.linenumber);
      PlaySingleAudio(FALSE,TRUE,AD_lu);                 //路
      PlaySingleAudio(FALSE,TRUE,AD_gongjiaoche);        //公交车
      PlaySingleAudio(FALSE,TRUE,AD_benbanzhongdianzhan);//本班终点站 
      PlaySingleAudio(FALSE,TRUE,AD_id2);
      
      if(IsOpenAdPos_Voice())
      {
           AV_id = AD_ADVOICE1 + AdVoiceIDPara.Adid_pos;
           PlaySingleAudio(FALSE,TRUE,AV_id);
           PlaySingleAudio(FALSE,TRUE,AD_tixingnin);     // 提醒您
      }
      
      PlaySingleAudio(FALSE,TRUE,AD_xiayizhan);          //下一站
      PlaySingleAudio(FALSE,TRUE,AD_id1);
      PlaySingleAudio(FALSE,TRUE,AD_yaoxiachedechengke);  // 要下车的乘客
      PlaySingleAudio(FALSE,TRUE,AD_zuohaozhunbei);  // 请做好准备
      
}
static void PlayerBusStart(void)
{
      PlaySingleAudio(FALSE,TRUE,AD_cheliangqibu);       //车辆起步
      PlaySingleAudio(FALSE,TRUE,AD_qinglahaofushou);    //请拉好扶手
}
static void PlayerSimuBegin(void)
{ 
     PlaySingleAudio(FALSE,TRUE,AD_huanyingshiyong);         // 欢迎使用
     PlaySingleAudio(FALSE,TRUE,AD_qidong);
}

static void PlayerSimuEnd(void)
{
     PlaySingleAudio(FALSE,TRUE,AD_xiexieshiyong);          // 谢谢使用
     PlaySingleAudio(FALSE,TRUE,AD_qidong);
}

static void PlayerWandaoFd(void)
{
     //PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音 
     PlaySingleAudio(FALSE,TRUE,AD_cheliangzhuanwan);          // 车辆即将转弯
     PlaySingleAudio(FALSE,TRUE,AD_qinglahaofushou);           // 请拉好扶手
}
static void PlayerShangPoFd(void)
{ 
     //PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音 

     PlaySingleAudio(FALSE,TRUE,AD_shangpo);         //车辆即将上坡
     PlaySingleAudio(FALSE,TRUE,AD_qinglahaofushou); // 请拉好扶手
     
}

static void PlayerXiaPoFd(void)
{
     PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音 
     PlaySingleAudio(FALSE,TRUE,AD_xiapo);        // 车辆即将下坡
     PlaySingleAudio(FALSE,TRUE,AD_qinglahaofushou); // 请拉好扶手
     
}

static void PlayerAdObjFd(INT8U ad_id)
{
     INT8U adid;
     PlaySingleAudio(FALSE,TRUE,AD_TISHIYIN+HitChoicePara.Hit_id);           //提示音
     
     
     adid = AD_ADVOICE2 + ad_id;
     
     PlaySingleAudio(FALSE,TRUE, adid);
     
}

static void PlayerTimePrompt(INT8U hour)
{
    
    INT16U AV_id;
    INT8U  i;
    
    for(i=0;i<3;i++)
    {
        PlaySingleAudio(FALSE,TRUE,AD_tishiyin4);
    }
    
    
    if(IsOpenAdTime_Voice())
    {
         AV_id = AD_ADVOICE1 + AdVoiceIDPara.Adid_time;
         PlaySingleAudio(FALSE,TRUE,AV_id);
         PlaySingleAudio(FALSE,TRUE,AD_weininzhengtianbaoshi);     // 为您整点报时
    }
    
    PlaySingleAudio(FALSE,TRUE,AD_xianzaishibeijing);                     // 现在是北京时间  
    PlayerTime_hour(hour);
    PlaySingleAudio(FALSE,TRUE,AD_zheng);                           //整
     
}

static void PlayerRangzuo(void)
{
    PlaySingleAudio(FALSE,TRUE,AD_chengkepengyou);
    PlaySingleAudio(FALSE,TRUE,AD_rangzuo);
}

static void PlayerRongji(void)
{
    PlaySingleAudio(FALSE,TRUE,AD_chengkepengyou);
    PlaySingleAudio(FALSE,TRUE,AD_yongji);
    PlaySingleAudio(FALSE,TRUE, AD_xiexiehezuo);
}

static void PlayerLayoutSuccess(void)
{
    PlaySingleAudio(FALSE,TRUE,AD_guihuachenggong);
    PlayerLineNumber(AlmCurMsg.LMsgPara);
    PlaySingleAudio(FALSE,TRUE,AD_lu);
}

static void PlayerLayoutNosta(void)
{
    PlaySingleAudio(FALSE,TRUE,AD_havewrongstation);
}

static void PlayerLayoutNoline(void)
{
    PlaySingleAudio(FALSE,TRUE,AD_wuxianlu);
}

static void HdlStationFd(void)
{
    
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_STATIONFD, AlmCurMsg.LMsgPara, 0);
#endif 
     PlayerStationFd(AlmCurMsg.LMsgPara);
     
}

static void HdlStationArived(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_STATIONARIVED, AlmCurMsg.LMsgPara, 0);
#endif
          
     PlayerStationArived(AlmCurMsg.LMsgPara,AlmCurMsg.HMsgPara);    
}

static void HdlStationStart(void)
{
 #if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_STATIONSTART, AlmCurMsg.LMsgPara, 0);
#endif
     PlayerStationStart(AlmCurMsg.LMsgPara,AlmCurMsg.HMsgPara);
}

static void HdlSimuBegin(void)
{
     PlayerSimuBegin();
}
static void HdlSimuEnd(void)
{
     PlayerSimuEnd();
}

static void HdlWandaoFd(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_WANDAOFD, 0, 0);
#endif
     PlayerWandaoFd();
      
} 

static void  HdlShangPoFd(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_SHANGPOFD, 0, 0);
#endif 
    PlayerShangPoFd();   
}

static void HdlXiaPoFd(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_XIAPOFD, 0, 0);
#endif 
    PlayerXiaPoFd();
}

static void HdlAdObjFd(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     OSQPost(SysTaskMsgQue, MSG_DEBUG_ADOBJ, 0, 0);
#endif
    PlayerAdObjFd(AlmCurMsg.LMsgPara);    
}

static void HdlTimePrompt(void)
{

     PlayerTimePrompt(AlmCurMsg.LMsgPara);
}

static void HdlRangzuo(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     PrintFromUART( DEBUG_UARTNo_ALARMER, "女士们,先生们,现在车上有乘客需要帮助,请为其让座!\n");
#endif
     PlayerRangzuo();
}

static void HdlRongji(void)
{
#if DEBUG_UARTNo_ALARMER <=1
     PrintFromUART( DEBUG_UARTNo_ALARMER, "女士们,先生们,现在是乘车高峰,车辆很拥挤,为了大家的方便,请主动往后门移动!\n");
#endif
     PlayerRongji();
} 
static void HdlReceiveRECCON(void)
{
     if(SensorValid_FILTER(_RECCON))
     {  
         ActivateRecorder();
     }
     else
     {
         ExitRecorder();
     }
}

static void HdlBusStart(void)
{
     PlayerBusStart();
}

static void HdlMSG_LAYOUT_SUCCESS(void)
{
     PlayerLayoutSuccess();
}

static void HdlMSG_LAYOUT_NOSTA(void)
{
     PlayerLayoutNosta();
}

static void HdlMSG_LAYOUT_NOLINE(void)
{
     PlayerLayoutNoline();
}

static void HdlMSG_TIMESEC_CHANGE(void)
{
     ChangeVolumeInTimeSec();
}

static void HdlMSG_VOLUME_STEPDOWN(void)
{
     VolumeStepDown(AlmCurMsg.LMsgPara);
}

static void HdlMSG_VOLUME_STEPUP(void)
{
     VolumeStepUp(AlmCurMsg.LMsgPara);
} 
static FUNCENTRY_STRUCT functionentry[] = { 
                                                     MSG_BUSSTATION_STATIONFD,           HdlStationFd,
                                                     MSG_BUSSTATION_STATIONARIVED,       HdlStationArived,
                                                     MSG_BUSSTATION_STATIONSTART,        HdlStationStart,
                                                     MSG_UARTSER_SIMUBEGIN,              HdlSimuBegin,
                                                     MSG_UARTSER_SIMUEND,                HdlSimuEnd,
                                                     MSG_OBJECT_SHANGPOFD,               HdlShangPoFd,
                                                     MSG_OBJECT_WANDAOFD,                HdlWandaoFd,
                                                     MSG_OBJECT_XIAPOFD,                 HdlXiaPoFd,
                                                     MSG_OBJECT_ADOBJ,                   HdlAdObjFd,
                                                     MSG_TIME_PROMPT,                    HdlTimePrompt,
                                                     MSG_BUSSWORDS_RANGZUO,              HdlRangzuo,
                                                     MSG_BUSSWORDS_RONGJI,               HdlRongji,
                                                     MSG_SENSOR_TRIGGERECCON,            HdlReceiveRECCON,
                                                     MSG_BUSSWORDS_BUSSTART,             HdlBusStart,
                                                     MSG_LAYOUT_SUCCESS,                 HdlMSG_LAYOUT_SUCCESS,
                                                     MSG_LAYOUT_NOSTA,                   HdlMSG_LAYOUT_NOSTA,
                                                     MSG_LAYOUT_NOLINE,                  HdlMSG_LAYOUT_NOLINE,
                                                     MSG_TIMESEC_CHANGE,                 HdlMSG_TIMESEC_CHANGE,
                                                     MSG_VOLUME_STEPDOWN,                HdlMSG_VOLUME_STEPDOWN,
                                                     MSG_VOLUME_STEPUP,                  HdlMSG_VOLUME_STEPUP
                                          };


FUNCENTRY_STRUCT *GetAlarmerEntry(void)
{
    return functionentry;
}

INT16U GetAlarmerEntryNum(void)
{
    return sizeof(functionentry)/sizeof(functionentry[0]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -