123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- #include "BSP.h"
- #include "TIM1_CAP.h"
- #include "UART_ARM.h"
- #include "TIM6_1MS.h"
- #include "GPIO_LED.h"
- #include "GPIO_SYS.h"
- #include "app_def.h"
- #include "app_msg.h"
- #include "IIC_FM1288.h"
- //#define SIMPLEX 1
- unsigned char DogTime=0;
- unsigned char gVisionInfo[25] ={"$V,WDZHIV71V20250120F#"};
- void BUS_Rev_NewInfo(unsigned char *pInfo);
- void BUS_Rev_146BInfo(unsigned char *pInfo);
- void UART_Rev_NewInfo(unsigned char *pInfo);
- int BinToASC(unsigned char * pSrc, unsigned int nSrcLength, unsigned char *pDst );
- unsigned int AndroidDogTime =0;
- unsigned char AndroidDOGSW=0;
- unsigned char RunMode=0; //工作模式,0表示注册模式,1表示正常呼叫模式
- unsigned char CallMode=0; //通话模式,0;双工 1;单工
- int main(void)
- {
-
- BSP_init();
- OSQInit();
- LED[1]=0; //Andorid看门狗指示灯
- AndroidDOGSW=0;
- AndroidDogTime=LocalTime;
- gtI2cstate = I2C_ON_RESET;
- #ifdef SIMPLEX
- CallMode =1;
- #endif
- while(1)
- {
- //====================
- if(DogTime>0)
- {
- DogTime--;
- }
- else
- {
- DogTime=255;
- WDG_Feed();
- }
-
-
- if(AndroidDOGSW>0)
- {
- if ((LocalTime>AndroidDogTime) && (AndroidDogTime > 50000))
- {
- SYS_Reset();
- AndroidDOGSW=0;
- LED[1]=0;
- LED[0]=0;
- }
- LED[1]=1;
- }
- else
- {
- AndroidDogTime=LocalTime+50000;
- LED[1]=0;
- }
- //====================
- BSP_Tick();
-
- }
- }
- int BinToASC(unsigned char * pSrc, unsigned int nSrcLength, unsigned char *pDst )
- {
- unsigned int i;
- unsigned char const tab[]="0123456789ABCDEF";
- if ( pSrc == 0 || pDst == 0 )
- return 0;
- for(i=0; i<nSrcLength; i++)
- {
- *pDst++ = tab[*pSrc >> 4];
- *pDst++ = tab[*pSrc & 0x0f];
- pSrc++;
- }
- *pDst = ' ';
- return nSrcLength * 2;
- }
- unsigned char HexToInt(unsigned char Txt1,unsigned char Txt2)
- {
- unsigned char i=0;
- if((Txt1>=0x30)&&(Txt1<=0x39))
- i= Txt1-0x30;
- else
- i= Txt1-0x37;
- i=i<<4;
- if((Txt2>=0x30)&&(Txt2<=0x39))
- return i|(Txt2-0x30);
- else
- return i|(Txt2-0x37);
- }
-
- void UART_Rev_NewInfo(unsigned char *pInfo)
- {
- unsigned char Addr[2]={0};
- if (pInfo[1] <0x8) { //分线器协议 230326 230408
- //Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- // Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- gfxq_cmd = pInfo[1];
- OSQPost(BusMsgQueue, BUS_MSG_FXQ1, TO_WORD(pInfo[3], pInfo[4]));
- OSQPost(BusMsgQueue, BUS_MSG_FXQ2, TO_WORD(pInfo[5], pInfo[6]));
- return;
- }
- switch(pInfo[1])
- {
- case '0':
-
- break;
- case '1':
- if(pInfo[3]=='W')
- {
- AndroidDOGSW=0; //关闭看门狗信号
- AndroidDogTime=LocalTime+45000;
- }
- else
- {
- AndroidDOGSW=1; //使用看门狗信号
- AndroidDogTime=LocalTime+45000;
- }
- // UART_Send(gVisionInfo,22);
- break;
- case '2':
- if(pInfo[3]=='0') {
- SYS_Reset();
- } else if(pInfo[3]=='1') {
- Mcu_Reset(1);
- }
- AndroidDOGSW=0;
- LED[1]=0;
- LED[0]=0;
- break;
- case '3': //SIP注册状态 $3,x1# x:0:表示注册中,1表示注册成功,2表示注册失败!
- if(pInfo[3]=='0')
- {
- LED[0]=2;
- }
- else if(pInfo[3]=='1')
- {
- LED[0]=1;
- if(RunMode==0)
- {
- RunMode=1;
- // BUS_SendBuf[0]=0xFF;
- // BUS_SendBuf[1]='Y';
- // BUS_SendBuf[2]=0x0E;
- // BUS_SendData();
- // BUS_SendData();
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, 'Y'));
- }
- }
- else if(pInfo[3]=='2')
- {
- LED[0]=0;
- }
- break;
- case '4': //主机呼叫分机,SIP协议回调 $4,AABB1#
- GPIO_PA12_BroadcastMute(0);
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- // BUS_SendBuf[0]=Addr[0];
- // BUS_SendBuf[1]=Addr[1];
- // BUS_SendBuf[2]=pInfo[1];
- // BUS_SendData();
- if (CallLineMode) { //dwd211202
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, 'Y'));
- } else {
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, 'N'));
- }
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA4, TO_WORD(Addr[0], Addr[1]));
- gtackvalid =2;
- // OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA4, TO_WORD(Addr[0], Addr[1]));
- // OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA4, TO_WORD(Addr[0], Addr[1]));
- break;
- case '5': //主机挂断分机,SIP协议回调 $5,AABB1#
- GPIO_PA12_BroadcastMute(0);
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA5, TO_WORD(Addr[0], Addr[1]));
- gtackvalid =2;
- // OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA5, TO_WORD(Addr[0], Addr[1]));
- // OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA5, TO_WORD(Addr[0], Addr[1]));
- break;
- case '6': //开启广播模式
- GPIO_PA12_BroadcastMute(1);
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA6, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA6, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA6, TO_WORD(Addr[0], Addr[1]));
- break;
-
- case '7': //打开指定门灯
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA7, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA7, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA7, TO_WORD(Addr[0], Addr[1]));
- break;
- case 'G': //打开指定门灯
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA20, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA20, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA20, TO_WORD(Addr[0], Addr[1]));
- break;
- case 'W': //打开指定门灯
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA21, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA21, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA21, TO_WORD(Addr[0], Addr[1]));
- break;
- case '8': //关闭指定门灯
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA8, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA8, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA8, TO_WORD(Addr[0], Addr[1]));
- break;
- case '9': //取消紧急呼叫
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA9, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA9, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EXTENDATA9, TO_WORD(Addr[0], Addr[1]));
- gt_busrxflag =0;
- break;
- case 'D': //设备注册命令
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITQUEST, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITQUEST, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITQUEST, TO_WORD(Addr[0], Addr[1]));
- break;
- case 'E':
- if(pInfo[7]=='Y')
- {
- RunMode=1;
- }
- else
- {
- RunMode=0;
- }
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff, pInfo[7]));
- break;
- case 'F':
- #ifdef SIMPLEX
- pInfo[7]='1' ;
- if ( CallMode ==0) {
- SlaveI2CFM1288Write(0x230c,0x00);
- SlaveI2CFM1288Write(0x230d,0x1000);
- }
- CallMode = 1;
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- #else
- if(pInfo[7]=='1') //单工通话
- {
- if ( CallMode ==0) {
- SlaveI2CFM1288Write(0x230c,0x00);
- SlaveI2CFM1288Write(0x230d,0x1000);
- }
- CallMode = 1;
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- }
- else if(pInfo[7]=='0') //shuang gong
- {
- if ( CallMode ==1) {
- SlaveI2CFM1288Write(0x230c,0x280);
- SlaveI2CFM1288Write(0x230d,0x1000);
- }
- CallMode = 0;
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- OSQPost(BusMsgQueue, BUS_MSG_CALLMODE, TO_WORD(0xff, pInfo[7]));
- }
- #endif
- break;
-
- case 'S': //签到反馈
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_SIGINACK, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_SIGINACK, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_SIGINACK, TO_WORD(Addr[0], Addr[1]));
- break;
- case 'Z': //事件响应
- case 'H':
- case 'Y':
- Addr[0]=HexToInt(pInfo[3],pInfo[4]);
- Addr[1]=HexToInt(pInfo[5],pInfo[6]);
- OSQPost(BusMsgQueue, BUS_MSG_EVEACK, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EVEACK, TO_WORD(Addr[0], Addr[1]));
- OSQPost(BusMsgQueue, BUS_MSG_EVEACK, TO_WORD(Addr[0], Addr[1]));
- break;
- case 'R': //清除所有事件 不需要
- break;
-
- }
- }
- unsigned char SendBufFX[30];
- void BUS_Rev_NewInfo(unsigned char *pInfo)
- {
- unsigned char SendBuf[30];
- static unsigned char SendpreBuf[10]= {0};
- unsigned char i;
- RunMode =1; //dwdtest
-
- if(RunMode==0) //工作模式,0表示注册模式,1表示正常呼叫模式
- {
- UartBusTime = 0;
- SendBuf[0]='$';
- SendBuf[1]='E';
- SendBuf[2]=',';
- BinToASC(pInfo,2,&SendBuf[3]);
- for(i=0;i<15;i++)
- {
- SendBuf[7+i]=pInfo[i+2];
- }
-
- SendBuf[22]='@';
- SendBuf[23]='#';
- UART_Send(SendBuf,24);
- }
- else
- {
-
- if((pInfo[2]==0x0A)||(pInfo[2]==0x0B)||(pInfo[2]==0x0C))
- {
- SendBuf[0]='$';
- //=====================================
- if(pInfo[2]<=0x09)
- SendBuf[1]=pInfo[2]+0x30;
- else
- SendBuf[1]=pInfo[2]+0x37;
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- if (( SendpreBuf[0] != pInfo[0]) || ( SendpreBuf[1] != pInfo[1]) //dwd190815
- || ( SendpreBuf[2] != pInfo[2])) {
- SendpreBuf[0] = pInfo[0];
- SendpreBuf[1] = pInfo[1];
- SendpreBuf[2] = pInfo[2];
- gt_busrxflag =0;
- }
-
- if (pInfo[2]==0x0C) {
- if (!gt_busrxflag ) {
- UART_Send(SendBuf,9);
- }
- gt_busrxflag =1; //停止发串口
- } else {
- UART_Send(SendBuf,9);
- }
- } else if (pInfo[2]==0xE) { //分机接听
- if ( CallMode ==1) {
- SlaveI2CFM1288Write(0x230c,0x00);
- SlaveI2CFM1288Write(0x230d,0x1000);
- }
- } else if (pInfo[2]==0xF) {
- if ( CallMode ==1) {
- SlaveI2CFM1288Write(0x230c,0x280);
- SlaveI2CFM1288Write(0x230d,0x00);
- }
- }
- else if (pInfo[2]==1) { //签到
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='Q';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- }
- else if (pInfo[2]==2) { //增援
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='Z';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- }
- else if (pInfo[2]==3) { //护理
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='H';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- }
- else if (pInfo[2]==4) { //换药
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='Y';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- }
- else if (pInfo[2]==5) { //清除所有事件
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='R';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- }
- else if (pInfo[2]==7) { //紧急按钮取消按键
- SendBuf[0]='$';
- //=====================================
- SendBuf[1]='Z';
- //转换命令字节
- //=====================================
- SendBuf[2]=',';
- //=====================================
- BinToASC(pInfo,2,&SendBuf[3]);
- //转换地址码
- //=====================================
- SendBuf[7]='1';
- SendBuf[8]='#';
- UART_Send(SendBuf,9);
- gt_busrxflag = 0;
- }
- }
- }
- void BUS_Rev_146BInfo(unsigned char *pInfo)
- {
- unsigned char SendBuf[30];
- // 分机发的注册码,还未发完,需等待350MS 发注册指令
- //===================
- // BUS_SendBuf[0]=0xFF;
- // BUS_SendBuf[1]='Y';
- // BUS_SendBuf[2]=0x0E;
- // BUS_SendData();
- // BUS_SendData();
- gt_busrxflag =0;
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff,'Y'));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff,'Y'));
- OSQPost(BusMsgQueue, BUS_MSG_REGEDITSTATE, TO_WORD(0xff,'Y'));
- //=================== //重复广播同步信号
- if((pInfo[0]&0xF0)==0x10) //床头分机
- {
-
- SendBuf[0]='$';
- SendBuf[1]='A';
- SendBuf[2]=',';
- BinToASC(pInfo,2,&SendBuf[3]);
- SendBuf[7]='1';
- SendBuf[8]='#';
- UartBusTime = 0;
- UART_Send(SendBuf,9);
- }
- else if((pInfo[0]&0xF0)==0x30) //紧急按钮
- {
-
- SendBuf[0]='$';
- SendBuf[1]='C';
- SendBuf[2]=',';
- BinToASC(pInfo,2,&SendBuf[3]);
- SendBuf[7]='1';
- SendBuf[8]='#';
- UartBusTime = 0;
- UART_Send(SendBuf,9);
- }
- }
|