📄 devicecontrol.cpp
字号:
// FlewControl.cpp: implementation of the CFlewControl class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "lane_new.h"
#include "DeviceControl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern CLane_newApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// 特别地:车道软件通过定义不同的状态来控制设备的动作,因此对
// 状态的值及先后顺序非常敏感,而用SendMessage()发送消息
// 时只有等消息处理函数处理完成后才返回,因此必须注意改变
// nCurrentStatus值和使用SendMessage()发送消息的先后顺序
// 一般地:如果SendMessage()处理函数中可能会改变nCurrentStatus的值,
// 则应先改变nCurrentStatus的值,然后再调用SendMessage()
CDeviceControl::CDeviceControl()
{
}
// 负责初始化所有外设、产生视频窗口
void CDeviceControl::Initial()
{
m_clsCxp.Initial();
m_clsTfi.Initial();
m_clsSound.Initial();
m_clsPrinter.Initial();
m_clsOverlay.Initial();
SendMessage(theApp.m_pMainWnd->m_hWnd,WM_CAPTURE_WINDOW,POWER_ON_CAPTURE,0);
}
// 释放设备所占用资源
void CDeviceControl::ReleaseDevice()
{
m_clsSound.ReleaseDevice();
}
// 将发送到CXP的消息转发给CXP
void CDeviceControl::ProcessCxpInput(char *pStr)
{
m_clsCxp.ProcessInputData(pStr);
}
/*
//将字符叠加器的信息转到COverlay处理
void CDeviceControl::ProcessOverlayData(unsigned char Status)
{
m_clsOverlay.ProcessOverlayData(Status);
}
*/
// 将发送到票据打印机的消息转发给票据打印机
void CDeviceControl::ProcessPrinter(char status)
{
m_clsPrinter.ProcessPrinterInfo(status);
}
// 处理定时器超时消息。本函数只处理和本类有关的定时器消息,
// 和本类无关的定时器消息不做处理
void CDeviceControl::ProcessTimerOut(UINT nIndex)
{
CLaneInfo m_clsLane;
switch(nIndex){
case LEAVE_LOOP_TIMER:
m_clsCxp.LeaveLoopTimerOut();
break;
case PICTURE_LOOP_TIMER:
m_clsCxp.PictureLoopTimerOut();
break;
case AMBER_LIGHT_TIMER:
m_clsCxp.AmberTimerOut();
break;
case ASK_IO_STATUS_TIMER:
m_clsCxp.AskIoStatusTimerOut();
break;
case SECOND_TIMER:
UpdateTime();
break;
case WORK_WINDOW_TIMER:
break;
case PICTURE_QUERY_TIMER:
break;
case PICTURE_SEND_TIMER:
break;
case PICTURE_RESET_TIMER:
break;
case TFI_TIMER:
m_clsTfi.ProcessTimerOut();
break;
case SOUND_TIMER:
m_clsSound.ProcessTimerOut();
break;
case OVERLAY_TIMER:
m_clsOverlay.ProcessTimerOut();
break;
case INITIAL_TIMER:
m_clsOverlay.InitialTimerOut();
break;
case ALARM_INFO_TIMER:
break;
}
}
// 播放语音报价
void CDeviceControl::PlayFare()
{
m_clsTfi.DisplayTFI();
m_clsSound.PlayFare();
}
// 播放“谢谢”
void CDeviceControl::PlayThankYou()
{
m_clsSound.PlayThankYou();
}
// 清除TFI显示内容
void CDeviceControl::ClearTfi()
{
m_clsTfi.ClearTFI();
}
// 调整语音报价器音量
void CDeviceControl::AdjustVolume(UINT nDirect)
{
m_clsTfi.AdjustVolume(nDirect);
}
// 叠加交易信息
void CDeviceControl::OverlayTransInfo()
{
m_clsOverlay.OverlayTransInfo();
}
// 打印发票
BOOL CDeviceControl::PrintInvoice()
{
// 如果要打印金额为0,不打印
CTransInfo m_clsTrans;
if(m_clsTrans.Fare()==0) return FALSE;
return m_clsPrinter.PrintInvoice();
}
// 定义交通指示灯状态
void CDeviceControl::DefineIndicationStatus(char status)
{
m_clsCxp.DefineIndicationStatus(status);
}
// 定义报警灯状态
void CDeviceControl::DefineAmberStatus(char status)
{
m_clsCxp.DefineAmberStatus(status);
}
// 定义自动栏杆状态
void CDeviceControl::DefineAutoRailStatus(char status)
{
if(status=='F'){
// 为了防止砸车,如果检测线圈上有车,自动栏杆并不关闭
CCxpInfo m_clsCxpInfo;
if(m_clsCxpInfo.LeaveStatus()=='1') return;
}
m_clsCxp.DefineAutoRailStatus(status);
}
// 测试完毕后设备恢复初始状态
void CDeviceControl::ResetDevice()
{
m_clsCxp.DefineIndicationStatus('R');
m_clsCxp.DefineAmberStatus('0');
m_clsCxp.DefineAutoRailStatus('F');
m_clsTfi.ClearTFI();
}
// 测试CXP设备(实际上是测试CXP设备中的输出设备)
void CDeviceControl::TestCxpDevice(char *pStr)
{
m_clsCxp.TestOutputDevice(pStr);
}
// 测试费额显示牌
void CDeviceControl::TestTfi(UCHAR chCmd)
{
switch(chCmd){
case TEST_TFI_AUTO: //自动测试TFI
m_clsTfi.AutoTestTfi();
break;
case TEST_TFI_OPEN: //测试背景灯开
m_clsTfi.ShowDay();
break;
case TEST_TFI_CLOSE: //测试背景灯关闭
m_clsTfi.ShowNight();
break;
case TEST_TFI_OFF: //全黑测试
m_clsTfi.ClearTFI();
break;
}
}
// 测试票据打印机
void CDeviceControl::TestPrinter(UCHAR chCmd)
{
switch(chCmd){
case TEST_PRINTER_CLEAR:
m_clsPrinter.ClearBuff();
break;
case TEST_PRINTER_FEED:
m_clsPrinter.Feed();
break;
case TEST_PRINTER_INFO:
// 测试票据打印机时打印出的发票车型和金额都为0
CTransInfo m_clsTrans;
m_clsTrans.BusClass('0');
m_clsTrans.Fare(0);
m_clsPrinter.PrintInvoice();
break;
}
}
// 测试字符叠加器
void CDeviceControl::TestOverlay(UCHAR chCmd)
{
switch(chCmd){
case TEST_OVERLAY_TIME:
m_clsOverlay.OverlaySetTime();
break;
case TEST_OVERLAY_LANE:
m_clsOverlay.OverlayLaneInfo();
break;
case TEST_OVERLAY_INFO:
m_clsOverlay.OverlayTransInfo();
break;
}
}
// 更新视频信号上叠加的车道信息
void CDeviceControl::UpdateLaneInfo()
{
m_clsOverlay.OverLayCollectNo();
}
// 更新视频信号上叠加的交易信息
void CDeviceControl::UpdateTransInfo()
{
m_clsOverlay.OverlayTransInfo();
}
// 更新视频信号上叠加的时间信息:每天零点更新时间
void CDeviceControl::UpdateTime()
{
static ULONG nHasRecordDate=0xffffffff;
CTimeInfo m_clsTime;
ULONG nNowDate=(m_clsTime.GetYear()%100)*1000+m_clsTime.GetDayCount();
if((m_clsTime.GetMinute()==0)&&(m_clsTime.GetHour()==0)&&(nNowDate!=nHasRecordDate)){
m_clsOverlay.OverlaySetTime();
nHasRecordDate=nNowDate;
}
}
// 通知打印机预先打印发票
void CDeviceControl::PrePrintInvoice()
{
CPrinter m_clsPrinter;
m_clsPrinter.PrePrintInvoice();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -