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

📄 devicecontrol.cpp

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 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 + -