📄 hstsmon.c
字号:
/**************************
** FILE: HSTSMON.C *
** By : QZC 2004.1.7 *
**************************/
#define HSTSMON_GLOBALS
#include "includes.h"
#include "bsp.h"
#include "tools.h"
#include "timetask.h"
#include "Public.h"
#include "Printer.h"
#include "Stream.h"
#include "SYSFrame.h"
#include "gprsdrv.h"
#include "winstack.h"
#include "HstCtl.h"
#include "keyboard.h"
#include "Prompt.h"
#include "itemmenu.h"
#include "VirPhone.h"
#include "PhoneDrv.h"
#include "HstSmon.h"
#if EN_HANDSET > 0
#if EN_HSTSMON > 0
#define DEBUG_HSTSMON 0//1
static KEY_STRUCT curkey;
static TMR_TSK *WaitTmr;
static STREAM *Smonstrm;
static PROMPT_STRUCT InfoPrompt;
void GetKeyMsg(KEY_STRUCT *key);
static BOOLEAN INAnswer=FALSE;
static INT8U CarInfoBuf[100];
static INT8U AckBuf[5];
#if DEBUG_HSTSMON > 0
static INT8S curstack;
#endif
static void WaitTmrProc(void)
{
StopTmr(WaitTmr);
RemoveTmr(WaitTmr);
CancelRing();
ActivateLowestWinStack();
INAnswer=FALSE;
}
static void Informer_054c(INT8U result)
{
if(result==_SUCCESS)
{
GuestSmon.INSMON=FALSE;
ActivateStringPrompt("抢答发送成功");
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack5:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
}
else ActivateStringPrompt("抢答发送失败");
INAnswer=FALSE;
}
static void SendSmonAck(void)
{
INT8U tellen;
INT16U attrib;
Smonstrm=GetSYSFrameStream();
ASMSYSFrameHead_MODE2(Smonstrm,EgCode.egcode,0x057c);
if(PubParaValid(ATTEMPERTEL_)) tellen=AttemperTel.len;
else tellen=0;
attrib = GetServiceAttrib(SER_ATTEMPER);
if(!SendSYSFrame_MODE2(Smonstrm,AttemperTel.tel,tellen,SM_ATTR_SUCCESS|attrib,Informer_054c))
Informer_054c(_FAILURE);
}
static void KeyAck1(void)
{
GetKeyMsg(&curkey);
switch(curkey.key)
{
case KEY_ACK:
StopTmr(WaitTmr);
RemoveTmr(WaitTmr);
CancelRing();
PopWinStack();
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack4:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
SendSmonAck();
break;
case KEY_NAK:
StopTmr(WaitTmr);
RemoveTmr(WaitTmr);
CancelRing();
PopWinStack();
INAnswer=FALSE;
break;
default: break;
}
}
static void InitProc1(void)
{
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack2:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
WaitTmr=CreateTimer(WaitTmrProc,0);
StartTmr(WaitTmr,SECOND,30);
ActivateStringPrompt_TIME_KEY("电召抢答?",30,KeyAck1);
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack3:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
}
static void HdlKeyProc1(void)
{
PopWinStack();
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack6:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
}
static WINSTACKENTRY_STRUCT WinStackEntry1 = {InitProc1,0,0,0,HdlKeyProc1};
void HdlHstSmon(void)
{
if(INAnswer) return;
else INAnswer=TRUE;
#if DEBUG_HSTSMON > 0
PrintFromUART(0x01,"\nHdlHstSmon");
curstack=GetCurstack();
PrintFromUART(0x01,"\ncurstack1:");
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
RequestRing(0x03);
PushWinStack(&WinStackEntry1);
}
static void SendCarInfoToGuest(void)
{
INT8U *Ptr,Len,TelLen;
Ptr=CarInfoBuf;
if(GuestSmon.GuestTel[0]=='1'&&GuestSmon.GuestTel[1]=='3')
{
Len=strlen("您好,召车成功!车牌号:");
memcpy(Ptr,"您好,召车成功!车牌号:",Len);
Ptr+=Len;
Len=DecodeTel(Ptr,GuestSmon.CarNo,sizeof(GuestSmon.CarNo));
Ptr+=Len;
Len=strlen("车载电话:");
memcpy(Ptr,"车载电话:",Len);
Ptr+=Len;
memcpy(Ptr,MyTel.tel,MyTel.len);
Ptr+=MyTel.len;
Len=strlen("车随后就到。谢谢使用!");
memcpy(Ptr,"车随后就到。谢谢使用!",Len);
Ptr+=Len;
#if DEBUG_HSTSMON > 0
PrintFromUART(0x01,"\nSendCarInfoToGuest");
FormatPrintDataBlock(FORMAT_HEX,0x01,CarInfoBuf,Ptr-CarInfoBuf);
#endif
TelLen=DecodeTellen(GuestSmon.GuestTel,sizeof(GuestSmon.GuestTel));
SendSM(SM_ATTR_COMMON | SM_ATTR_DISCODE6 | SM_ATTR_AUTOCODE,
GuestSmon.GuestTel,TelLen,CarInfoBuf,Ptr-CarInfoBuf,0);
}
else return;
}
static void KeyAck2(void)
{
GetKeyMsg(&curkey);
switch(curkey.key)
{
case KEY_ACK:
case KEY_NAK:
CancelRing();
PopWinStack();
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
ActivateStringPrompt_TIME("请到电召菜单查看详细信息",0);
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
break;
default: break;
}
}
static void InitProc2(void)
{
RequestRing(0x03);
ActivateStringPrompt_TIME_KEY("电召确认信息",0,KeyAck2);
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
}
static void HdlKeyProc2(void)
{
GetKeyMsg(&curkey);
switch(curkey.key)
{
case KEY_ACK:
PopWinStack();
InfoPrompt.Mode = 0;
InfoPrompt.LiveTime = 0;
InfoPrompt.TextPtr = (INT8U *)GuestSmon.GuestInfo;
InfoPrompt.TextLen = DecodeTellen(GuestSmon.GuestInfo,50);
InfoPrompt.ExitProc = 0;
InfoPrompt.ExitKeyProc = 0;
ActivatePrompt(&InfoPrompt);
break;
case KEY_NAK:
PopWinStack();
break;
default: break;
}
}
static WINSTACKENTRY_STRUCT WinStackEntry2 = {InitProc2,0,0,0,HdlKeyProc2};
void HdlCenterAck(INT8U *data,INT8U len)
{
#if DEBUG_HSTSMON > 0
PrintFromUART(0x01,"\nHdlCenterAck");
curstack=GetCurstack();
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
memcpy(GuestSmon.GuestTel,data,len);
GuestSmon.INSMON=TRUE;
StorePubPara(GUESTSMONINFO_);
SendCarInfoToGuest();
PushWinStack(&WinStackEntry2);
#if DEBUG_HSTSMON > 0
curstack=GetCurstack();
FormatPrintDataBlock(FORMAT_HEX,0x01,(INT8U *)&curstack,1);
#endif
}
static void DailGuest(void)
{
INT8U tellen;
if(GuestSmon.INSMON)
{
tellen=DecodeTellen(GuestSmon.GuestTel,15);
ActivateVirPhone_Dial(FALSE,tellen,GuestSmon.GuestTel);
}
else ActivateStringPrompt("当前无电召");
}
static void ShowInfo(void)
{
if(GuestSmon.INSMON) //显示信息
{
InfoPrompt.Mode = 0;
InfoPrompt.LiveTime = 0;
InfoPrompt.TextPtr = (INT8U *)GuestSmon.GuestInfo;
InfoPrompt.TextLen = DecodeTellen(GuestSmon.GuestInfo,50);
InfoPrompt.ExitProc = 0;
InfoPrompt.ExitKeyProc = 0;
ActivatePrompt(&InfoPrompt);
}
else ActivateStringPrompt("当前无信息");
}
static void Informer_Report(INT8U result)
{
if(result==_SUCCESS)
{
ActivateStringPrompt("发送成功");
GuestSmon.INSMON=FALSE;
StorePubPara(GUESTSMONINFO_);
}
else ActivateStringPrompt("发送失败");
}
static void SendSuccess(void)
{
INT8U tellen;
INT16U attrib;
INT16U TempLen;
INT8U Temp=0x01;
Smonstrm=GetSYSFrameStream();
ASMSYSFrameHead_MODE2(Smonstrm,EgCode.egcode,0x057e);
TempLen=CodeX_To_Code6(MODE_CODE8,AckBuf,&Temp,1,sizeof(AckBuf));
#if DEBUG_HSTSMON > 0
PrintFromUART(0x01,"\nACK:");
FormatPrintDataBlock(FORMAT_HEX,0x01,AckBuf,2);
#endif
WriteDATA_Strm(Smonstrm,AckBuf,TempLen);
if(PubParaValid(ATTEMPERTEL_)) tellen=AttemperTel.len;
else tellen=0;
attrib = GetServiceAttrib(SER_ATTEMPER);
if(!SendSYSFrame_MODE2(Smonstrm,AttemperTel.tel,tellen,SM_ATTR_SUCCESS|attrib,Informer_Report))
Informer_Report(_FAILURE);
}
static void SendLost(void)
{
INT8U tellen;
INT16U attrib;
INT16U TempLen;
INT8U Temp=0x00;
Smonstrm=GetSYSFrameStream();
ASMSYSFrameHead_MODE2(Smonstrm,EgCode.egcode,0x057e);
TempLen=CodeX_To_Code6(MODE_CODE8,AckBuf,&Temp,1,sizeof(AckBuf));
WriteDATA_Strm(Smonstrm,AckBuf,TempLen);
if(PubParaValid(ATTEMPERTEL_)) tellen=AttemperTel.len;
else tellen=0;
attrib = GetServiceAttrib(SER_ATTEMPER);
if(!SendSYSFrame_MODE2(Smonstrm,AttemperTel.tel,tellen,SM_ATTR_SUCCESS|attrib,Informer_Report))
Informer_Report(_FAILURE);
}
static ITEMMENU_STRUCT MENU_SMONREPORT_SUCCESS = {ITEM_FCN,"成功接到客人",SendSuccess,0,0};
static ITEMMENU_STRUCT MENU_SMONREPORT_LOST = {ITEM_FCN,"没有接到客人",SendLost, 0,0};
static ITEMMENU_STRUCT *MENU_SMONREPORT_CHILD[]= {&MENU_SMONREPORT_SUCCESS,&MENU_SMONREPORT_LOST};
static ITEMMENU_STRUCT MENU_GUESTTEL = {ITEM_FCN, "拨打乘客电话",DailGuest,0,0};
static ITEMMENU_STRUCT MENU_GUESTINFO = {ITEM_FCN, "召车乘客信息" ,ShowInfo ,0,0};
static ITEMMENU_STRUCT MENU_SMONREPORT = {ITEM_FMENU,"电召结果报告" ,0 ,2,MENU_SMONREPORT_CHILD};
static ITEMMENU_STRUCT *MENU_GUESTSMON_CHILD[] ={&MENU_GUESTTEL,&MENU_GUESTINFO,&MENU_SMONREPORT};
ITEMMENU_STRUCT MENU_GUESTSMON = {ITEM_FMENU," 电召菜单",0,3,MENU_GUESTSMON_CHILD};
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -