📄 deviceclass.h
字号:
// 本文件所定义类均为硬件设备边界类。对功能较复杂的硬件设备,
// 在文件DeviceInfo.h中存储该设备的信息;对功能较简单的设备,
// 设备信息直接在本文件中存储
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DEVICECLASS_H__5F44F897_AF38_4C9D_8E1C_011B274AD570__INCLUDED_)
#define AFX_DEVICECLASS_H__5F44F897_AF38_4C9D_8E1C_011B274AD570__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// 以下定义输出外设名称
const int AUTO_RAIL_OPEN =0; //自动栏杆开
const int AUTO_RAIL_CLOSE =1; //自动栏杆关
const int INDICATION_RED =2; //交通指示红灯
const int INDICATION_GREEN =3; //交通指示绿灯
const int RAIN_RED =8; //雨棚红灯
const int RAIN_GREEN =9; //雨棚绿灯
const int AMBER_DEVICE =10; //报警灯
// 以下定义输入外设名称
const int LEAVE_LOOP_DEVICE =0; //检测线圈状态
const int PICTURE_LOOP_DEVICE =1; //抓拍线圈状态
const int SPARE1_INPUT_DEVICE =2; //备用输入外设1
const int SPARE2_INPUT_DEVICE =3; //备用输入外设2
const int SPARE3_INPUT_DEVICE =4; //备用输入外设3
const int SPARE4_INPUT_DEVICE =5; //备用输入外设4
// 通讯协议:9600bps、Odd校验、8位数据位、1位停止位
// 车道软件 ---> CXP板
// 1、请求输入外设的状态:0A E 0D
// 2、命令输出继电器状态:0A X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 0D
// X1:自动栏杆开 X2:自动栏杆关
// X3:备用输出开关信号1 X4:备用输出开关信号2
// X5:有源输出开关信号1.1 X6:有源输出开关信号1.2
// X7:有源输出开关信号2 X8:有源输出开关信号3
// X9:雨棚红灯 X10:雨棚绿灯
// X11:备用输出交流开关信号1 X12:备用输出交流开关信号2
// CXP板 ---> 车道软件
// 1、请求输出继电器状态: 0A S 0D
// 2、报告当前输入外设状态: 0A E X1 X2 X3 X4 X5 X6 0D
// X1:#2 线圈(离开线圈) X2:#1 线圈(抓拍线圈)
// X3:备用输入1 X4:备用输入2
// X5:手动栏杆 X6:脚踏开关
// 类CCxp为输入、输出控制板的设备边界类,主要负责和CCxp板的
// 通讯。本类存储和通讯协议有关的数据,但不存储实际外设的状
// 态。例如:每个外设在通讯协议中的位置保存在本类中,但该外
// 设的实际状态存储在CCxpInfo类中。
class CCxp
{
public:
CCxp();
void TestOutputDevice(char *pStr);
void ProcessInputData(char *pStr);
void AskIoStatusTimerOut();
void AmberTimerOut();
void PictureLoopTimerOut();
void LeaveLoopTimerOut();
void DefineAutoRailStatus(char status);
void DefineAmberStatus(char status);
void DefineIndicationStatus(char status);
// void DefineRainStatus(char status);
void Initial();
private:
CCxpInfo m_clsCxp;
void SendCxpData();
void SendCxpData(char *pStr,int nLen);
static BOOL bNormalFlag;
};
/*
5字条屏软件协议
;一、波特率
2400,N,8,1
二、通讯格式
1、发送时间:
55H,AAH,01H, 年低位,月,日,时,分,秒 ,星期
例如:发日期时间 :2003年1月17日20时20分21秒,星期4
到显示屏
共发10个字节 :
55H, AAH, 01H, 03H, 01H, 11H, 14H, 14H, 15H, 04H
2、发送数据:
55H,AAH,02H, 15H, “字符串”,0DH
超过5字左移
例如:发日“大型车45元” 到显示屏并停留15秒钟
共发下列数据 :
55H,AAH,02H,15H, “大型车45元”,0DH
*/
class CTfi
{
public:
CTfi();
void Initial();
void DisplayTFI();
void ClearTFI();
void AdjustVolume(UCHAR nDirect);
void ShowDay();
void ShowNight();
void AutoTestTfi();
void ProcessTimerOut();
private:
void SendTFIData(char *param1,int length);
static BOOL bAutoTestFlag; //自动测试TFI标志
static BOOL bNormalFlag;
};
// 声卡设备边界类,负责将合成后的声音文件送到声卡进行播放。
// 语音文件的合成不包含在此类中
class CSound
{
public:
CSound();
void Initial();
void ProcessTimerOut();
void StopPlay();
void PlayThankYou();
void PlayFare();
void ReleaseDevice();
private:
void AssembleSound(char *pSrc,char *pObj);
UINT GetSoundLen(char *pFileName);
BOOL LoadSound(char *pFileName,char *pPointer,UINT nLen);
DWORD ByteToDWORD(char *pStr);
static char *pSoundImage; //存储要播放声音数据
// 以下指针指向基准声音文件,基准声音文件位于车道软件安装
// 目录下
static char *pClass; //存储“车型”声音文件
static UINT nClass; //存储“车型”声音文件长度
static char *pRMB; //存储“圆”声音文件
static UINT nRMB; //存储“圆”声音文件长度
static char *pNumber[14]; //存储数字声音文件
static UINT nNumber[14]; //存储数字声音文件长度
// 存储数字,顺序为0、1、2、3、4、5、6、7、8、9、十、百、千、两
static char *pThankYou; //存储“谢谢”
static char *pFree; //存储“免费”声音文件
static UINT nFree; //存储“免费”声音文件长度
static char *pSpace; //存储间隔声音文件
static UINT nSpace; //存储间隔声音文件长度
};
// 票据打印机设备边界类,负责控制票据打印机动作并提供打印机
// 状态接口。要打印的信息从CTransInfo类及CTimeInfo类中获取
class CPrinter
{
public:
CPrinter();
void Initial();
void ProcessPrinterInfo(char Status);
void PrePrintInvoice();
BOOL PrintInvoice();
void ClearBuff();
void Feed();
BOOL NormalFlag();
void NormalFlag(BOOL value);
private:
BOOL SendPrintData(char *pBuff,int iLen);
void ConvertMoney(UINT iData,char *chData);
static BOOL bNormalFlag;
static char chPrinterStatus;
};
/*
字符叠加器通讯协议
1、 波特率 2400
由 PC 主动发命令,采用 ASCII 码
格式: 8 位奇偶检验位, 1 停止位
2、 命令表
A、 显示信息命令
*0A1#
* # 为起始码、结束码
0 为功能码 功能:显示信息
A1 为车道号( 0-9 )
B、 字符位置命令
*1n#
1 为功能码
n : 1 ,, 9 , abcd (对应 1-13 个位置, 1 最上)
C、 字符显示延时
*2n#
2 功能码
n : 0 , 1 ,,, A
1 ,, 9 , A 为 1-10 秒
0 为长延时,直到下一个数据为止
D、 修改时钟
*3Y1Y2M1M2D1D2H1H2F1F2S1S2#
3 功能码
Y , M , D , H , F , S 对应年月日时分秒
年份中 2001 年的 20 固定
E、 显示信息命令
*4C1D1D2D3#
4 功能码
C1 车型( 0 , 1 ,,, 9 , abcd ,, z )
D1d2d3 金额( 000-999 ),如为空格字符则屏幕不显示
F、 显示信息命令
*5b1b2b3b4#
5 功能码
b1b2b3b4 工号( 0000-9999 ),如为空格字符则屏幕不显示
*/
const UCHAR OVERLAY_HEAD =0x2A; // 起始码 *(42)
const UCHAR OVERLAY_TAIL =0x23; // 结束码 #(35)
const UCHAR OVERLAY_DISPLAY_LANE =0x30; //显示车道号 0
const UCHAR OVERLAY_POSITION =0x31; //字符位置
const UCHAR OVERLAY_DELAY =0x32; //字符显示延时
const UCHAR OVERLAY_TIME =0x33; //时钟
const UCHAR OVERLAY_CLASS_MONEY =0x34; //显示车型金额
const UCHAR OVERLAY_COLLECT_NO =0x35; //显示收费员工号
const char LINE ='1'; //字符位置
const char DISPLAY_TIME ='3'; //字符显示延时时间
/*
const UCHAR OVERLAY_WORD =0x60; //发送显示字符
const UCHAR OVERLAY_ON =0x61; //字符叠加开
const UCHAR OVERLAY_OFF =0x62; //字符叠加关
const UCHAR OVERLAY_LARGE =0x63; //大字符显示
const UCHAR OVERLAY_SMALL =0x64; //小字符显示
const UCHAR OVERLAY_ATTRIBUTE =0x65; //设置字符属性
// BIT 7:置1闪烁 BIT 5:置1黑底
const UCHAR OVERLAY_CANCEL =0x66; //取消字符属性
// BIT 7:置1闪烁 BIT 5:置1黑底
const UCHAR OVERLAY_VERSION =0x67; //获取机器版本号
const UCHAR OVERLAY_CLEAR =0x68; //清屏
const UCHAR OVERLAY_SET_TIME =0x80; //设置日期、时间
const UCHAR OVERLAY_POSITION =0x82; //设置时间显示位置
const UCHAR OVERLAY_TIME_ON =0x85; //显示时间开
const UCHAR OVERLAY_TIME_OFF =0x86; //显示时间关
const UCHAR OVERLAY_LIGHT_1 =0x87; //字符亮度设置为暗
const UCHAR OVERLAY_LIGHT_2 =0x88; //字符亮度设置为亮
// 字符叠加器通讯协议:9600bps、8位数据位、无校验、1位停止位
// 起始码0xff、0xfe、40字节定长
// 命令格式:起始码(2 byte) + 机器地址(1 byte) + 命令方式字
// (1 byte) + [命令内容(35 byte)] + 校验和(1 byte),其中起始
// 码固定为0xff、0xfe,机器地址由叠加器上的拨动开关设置,我们
// 总使用地址0,详细说明如下:
// 类型 长度 内容 说明
// 起始码 2 0xff 0xfe
// 机器地址 1 0 目前总使用地址0
// 命令 1 下面定义的命令常量
// 行号 1 字符显示位置的行号-1
// 列号 1 字符显示位置的列号-1
// 通道选择 1 0x00:双路叠加
// 0x10:第一路叠加
// 0x20:第二路叠加
// 数据 32 叠加汉字直接使用汉字代码(每个汉字占2字节)
// 叠加英文使用ASCII,必须占用偶数字节
// 校验和 1 除起始字节外其他所有字节的异或和
// 字符叠加器设备边界类,负责将文字信息叠加到视频信号上。要叠
// 加的信息从CLaneInfo类及CTransInfo类中获取
const char LINE_1 =3; //车道信息行位置(第4行)
const char LINE_2 =5; //交易信息行位置(第6行)
const char COL_1 =5; //车道信息列位置(第6列)
const char COL_2 =6; //交易信息列位置(第7列)
*/
class COverlay
{
#define PLAZA_NO 0
#define LANE_NO_BUFF 2
#define COLLECT_NO_BUFF 4
#define TIME_BUFF 9
#define BUS_CLASS_BUFF 13
#define MONEY_BUFF 14
#define EVENT_TYPE_BUFF 17
public:
COverlay();
void Initial();
void InitialTimerOut();
void ProcessTimerOut();
void OverlaySetStatus(char Line);
void OverlayLaneInfo();
void OverLayCollectNo();
void OverlayTransInfo();
void OverlaySetTime();
void OverlayDelay(char Second);
//void ProcessOverlayData(unsigned char Status);
private:
void SendOverlayData(UCHAR *pStr,int nLen);
static BOOL bNormalFlag;
static unsigned char pDataBuff[30];
static int iCollectNO;
static int iLaneNO;
static BOOL bNewDataFlag;
static BOOL bNewPositionFlag;
static char pCommandBuff[2];
};
// 读/发卡机通讯协议:9600bps 1位起始位 8位数据位 1位停止位 无校验
#endif // !defined(AFX_DEVICECLASS_H__5F44F897_AF38_4C9D_8E1C_011B274AD570__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -