📄 laneinfo.cpp
字号:
// LaneInfo.cpp: implementation of the CLaneInfo class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "lane_new.h"
#include "LaneInfo.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern CLane_newApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// 以下信息保存到内存(掉电或程序退出后无须恢复)
BOOL CLaneInfo::bFileReadyFlag[FILE_NUMBER];
char CLaneInfo::strErrorInfo[80];
char CLaneInfo::strLaneParam[PARAM_LENGTH];
char * CLaneInfo::strRMB;
char * CLaneInfo::strPlazaCode;
char * CLaneInfo::strDelayList;
char * CLaneInfo::strBlackList;
char * CLaneInfo::strCollectList;
char * CLaneInfo::strRMB_New;
char CLaneInfo::strPlazaName[MAX_PLAZANAME];
char * CLaneInfo::strBlackCarList;
char * CLaneInfo::strMonthCarList;
char * CLaneInfo::strFreeCarList;
CLaneInfo::CLaneInfo()
{
}
// 车道信息初始化:将车道参数及运行参数文件读入内存
// 特别地:本函数必须再网络类初始化前被调用,否则网络类获取的将是
// 错误的信息
void CLaneInfo::Initial()
{
strPlazaCode=strRMB=strCollectList=strBlackList=NULL;
strBlackCarList=strMonthCarList=strFreeCarList=strRMB_New=NULL;
strDelayList=NULL;
memset(strLaneParam,0,PARAM_LENGTH);
ReadLaneParam(); //读车道参数
bFileReadyFlag[TFRMB_INDEX]=CheckRMB_File();
bFileReadyFlag[DELAYS_INDEX]=CheckDelaysFile();
bFileReadyFlag[COLLECOD_INDEX]=CheckCollectFile();
bFileReadyFlag[BLACKCOL_INDEX]=CheckBlackFile();
bFileReadyFlag[TFRMB_NEW_INDEX]=CheckRMB_NEW();
bFileReadyFlag[BLACKCAR_INDEX]=CheckBlackCarFile();
bFileReadyFlag[MONTHCAR_INDEX]=CheckMonthCarFile();
bFileReadyFlag[FREECAR_INDEX]=CheckFreeCarFile();
bFileReadyFlag[PLAZANAM_INDEX]=CheckPlazaName();
}
// 将运行参数文件重新读入内存:收到上位机下发的更新参数文件命令
// 后会调用本函数,首先释放以前分配的内存
void CLaneInfo::RepeatReadFile()
{
FreeMemory();
bFileReadyFlag[TFRMB_INDEX]=CheckRMB_File();
bFileReadyFlag[DELAYS_INDEX]=CheckDelaysFile();
bFileReadyFlag[COLLECOD_INDEX]=CheckCollectFile();
bFileReadyFlag[BLACKCOL_INDEX]=CheckBlackFile();
bFileReadyFlag[TFRMB_NEW_INDEX]=CheckRMB_NEW();
bFileReadyFlag[BLACKCAR_INDEX]=CheckBlackCarFile();
bFileReadyFlag[MONTHCAR_INDEX]=CheckMonthCarFile();
bFileReadyFlag[FREECAR_INDEX]=CheckFreeCarFile();
bFileReadyFlag[PLAZANAM_INDEX]=CheckPlazaName();
}
// 程序退出前释放内存
void CLaneInfo::FreeMemory()
{
if(strRMB!=NULL){
delete [] strRMB;
strRMB=NULL;
}
if(strPlazaCode!=NULL){
delete [] strPlazaCode;
strPlazaCode=NULL;
}
if(strBlackList!=NULL){
delete [] strBlackList;
strBlackList=NULL;
}
if(strBlackCarList!=NULL){
delete [] strBlackCarList;
strBlackCarList=NULL;
}
if(strMonthCarList!=NULL){
delete [] strMonthCarList;
strMonthCarList=NULL;
}
if(strCollectList!=NULL){
delete [] strCollectList;
strCollectList=NULL;
}
if(strDelayList!=NULL){
delete [] strDelayList;
strDelayList=NULL;
}
if(strRMB_New!=NULL){
delete [] strRMB_New;
strRMB_New=NULL;
}
if(strFreeCarList!=NULL){
delete [] strFreeCarList;
strFreeCarList=NULL;
}
}
// 设置视频信号工作模式
void CLaneInfo::DisplayVideo(BOOL value)
{
// strLaneParam[PARAM_DISPLAY_VIDEO]=value;
}
// 设置视频捕获方式
void CLaneInfo::CaptureStatus(BOOL value)
{
// strLaneParam[PARAM_CAPTURE]=value;
}
// 设置字符叠加模式
void CLaneInfo::OverlayStatus(BOOL value)
{
// strLaneParam[PARAM_OVERLAY_SYMBOL]=value;
}
// 设置字符叠加器安装位置
void CLaneInfo::OverlayAtLane(BOOL value)
{
// strLaneParam[PARAM_OVERLAY_AT_LANE]=value;
}
// 设置重打发票模式
void CLaneInfo::RepeatInvoice(BOOL value)
{
strLaneParam[PARAM_REPEAT_INVOICE]=value;
}
// 获取是否允许重打发票
BOOL CLaneInfo::bRepeatInvoice()
{
return strLaneParam[PARAM_REPEAT_INVOICE];
}
// 设置发票号输入模式
void CLaneInfo::InputInvoice(BOOL value)
{
strLaneParam[PARAM_INPUT_INVOICE]=value;
}
// 获取是否输入发票号码
BOOL CLaneInfo::bInputInvoice()
{
return strLaneParam[PARAM_INPUT_INVOICE];
}
// 设置输入班次模式
void CLaneInfo::InputShiftNO(BOOL value)
{
strLaneParam[PARAM_SHIFT_NO]=value;
}
// 获取是否输入班次号
BOOL CLaneInfo::bInputShiftNO()
{
return strLaneParam[PARAM_SHIFT_NO];
}
// 设置自动关机模式
void CLaneInfo::ShutDown(BOOL value)
{
strLaneParam[PARAM_SHUT_DOWN]=value;
}
// 获取是否允许自动关机
BOOL CLaneInfo::bShutDown()
{
return strLaneParam[PARAM_SHUT_DOWN];
}
// 设置图片压缩质量
void CLaneInfo::PictureQuality(char *pStr)
{
memmove(strLaneParam+PARAM_COMPRESS_QUALITY,pStr,3);
}
// 获取希望的图象压缩质量
int CLaneInfo::PictureQuality()
{
if(strLaneParam[PARAM_COMPRESS_QUALITY]==0) return 85;
char tmpStr[4];
memset(tmpStr,0,4);
memmove(tmpStr,strLaneParam+PARAM_COMPRESS_QUALITY,3);
return atoi(tmpStr);
}
// 设置是否检查发票起、止号:设置为是时操作员输入的发票止号必须
// 大于等于发票起号,设置为否时不检查
void CLaneInfo::bCheckInvoice(BOOL value)
{
strLaneParam[PARAM_CHECK_INVOICE]=value;
}
// 返回是否检查发票起、止号
BOOL CLaneInfo::bCheckInvoice()
{
return strLaneParam[PARAM_CHECK_INVOICE];
}
// 设置是否预打印发票:预打印发票可减少车辆在车道停留时间,在操
// 作员输入车辆信息前先将发票的固定部分预先打印出来
void CLaneInfo::bPrePrint(BOOL value)
{
strLaneParam[PARAM_PRE_PRINT]=value;
}
// 是否预打印发票
BOOL CLaneInfo::bPrePrint()
{
return strLaneParam[PARAM_PRE_PRINT];
}
// 设置违章模式
void CLaneInfo::SetViolateModeFlag(BOOL value)
{
strLaneParam[PARAM_VIOLATE_MODE]=value;
}
// 返回违章模式
BOOL CLaneInfo::GetViolateModeFlag()
{
return strLaneParam[PARAM_VIOLATE_MODE];
}
//以下获取四个班次上班交班时间
int CLaneInfo::GetShiftTime(int NO)
{
int i=NO,ShiftTime=0;
if ((i<1)||(i>4)) return -1;
i=(i-1)*2;
char TempNO[2];
memset(TempNO,0,2);
memmove(TempNO,strLaneParam+PARAM_FOUR_SHIFT_TIME+i,2);
ShiftTime=(TempNO[0]-'0')*10+(TempNO[1]-'0');
return ShiftTime;
}
//以下获取月票车是否输入车牌?
BOOL CLaneInfo::GetInputMonthCarNOFlag()
{
return strLaneParam[PARAM_MONTH_CAR_NO];
}
//以下获取收费车图象是否上传?
BOOL CLaneInfo::GetNormalCarPictureFlag()
{
return strLaneParam[PARAM_NORMAL_CAR_PICTURE];
}
//以下获取电脑票收费员是否可修改?
BOOL CLaneInfo::GetChangeComputerInvoiceFlag()
{
return strLaneParam[PARAM_COMPUTER_INVOICE_CHANGE];
}
//以下获取自动栏杆是否自动下落?
BOOL CLaneInfo::GetAutoRailShutDownFlag()
{
return strLaneParam[PARAM_AUTORAIL_AUTO_SHUTDOWN];
}
// 设置车道数据备份时间
void CLaneInfo::BackupTime(char *pStr)
{
memmove(strLaneParam+PARAM_BACKUP_TIME,pStr,2);
}
// 返回车道数据备份时间
UINT CLaneInfo::BackupTime()
{
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strLaneParam+PARAM_BACKUP_TIME,2);
return atoi(tmpStr);
}
// 设置图像服务器IP地址
void CLaneInfo::SetPictureIP(char *pStr)
{
memmove(strLaneParam+PARAM_PICTURE_IP,pStr,15);
}
// 获取图象服务器IP地址
void CLaneInfo::GetPictureIP(char *pRetStr)
{
if(strLaneParam[PARAM_PICTURE_IP]==0)
memmove(pRetStr,"202.202.202.109",15);
else
memmove(pRetStr,strLaneParam+PARAM_PICTURE_IP,15);
}
// 设置消息服务器端口号
void CLaneInfo::MessagePort(char *pStr)
{
memmove(strLaneParam+PARAM_MESSAGE_PORT,pStr,4);
}
// 获取消息服务器端口号
int CLaneInfo::MessagePort()
{
if(strLaneParam[PARAM_MESSAGE_PORT]==0) return 6768;
char tmpStr[5];
memset(tmpStr,0,5);
memmove(tmpStr,strLaneParam+PARAM_MESSAGE_PORT,4);
return atoi(tmpStr);
}
// 设置消息服务器IP地址
void CLaneInfo::SetMessageIP(char *pStr)
{
memmove(strLaneParam+PARAM_MESSAGE_IP,pStr,15);
}
// 获取消息服务器IP地址
void CLaneInfo::GetMessageIP(char *pRetStr)
{
if(strLaneParam[PARAM_MESSAGE_IP]==0){
memmove(pRetStr,"202.202.202.108",15);
} else {
memmove(pRetStr,strLaneParam+PARAM_MESSAGE_IP,15);
}
}
// 设置本地通讯端口号
void CLaneInfo::LocalPort(char *pStr)
{
memmove(strLaneParam+PARAM_LOCAL_PORT,pStr,4);
}
// 获取本地通讯端口号
int CLaneInfo::LocalPort()
{
if(strLaneParam[PARAM_LOCAL_PORT]==0) return 6767;
char tmpStr[5];
memset(tmpStr,0,5);
memmove(tmpStr,strLaneParam+PARAM_LOCAL_PORT,4);
return atoi(tmpStr);
}
// 设置车道地址
void CLaneInfo::LaneAddr(char *pStr)
{
memmove(strLaneParam+PARAM_LANE_ADDR,pStr,2);
}
// 获取车道地址
int CLaneInfo::LaneAddr()
{
if(strLaneParam[PARAM_LANE_ADDR]==0) return 1;
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strLaneParam+PARAM_LANE_ADDR,2);
return atoi(tmpStr);
}
// 设置车道编码
void CLaneInfo::SetLaneNO(char *pStr)
{
memmove(strLaneParam+PARAM_LANE_NO,pStr,2);
}
// 获取本车道编码
UINT CLaneInfo::LaneNO()
{
if(strLaneParam[PARAM_LANE_NO]==0) return 1;
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strLaneParam+PARAM_LANE_NO,2);
return atoi(tmpStr);
}
// 设置业主编码
void CLaneInfo::OwnNO(char *pStr)
{
// memmove(strLaneParam+PARAM_OWN_NO,pStr,2);
}
// 收费站编码(2 byte)
void CLaneInfo::SetPlazaNO(char *pStr)
{
memmove(strLaneParam+PARAM_PLAZA_NO,pStr,2);
}
// 收费站编码(2 byte)
ULONG CLaneInfo::PlazaNO()
{
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strLaneParam+PARAM_PLAZA_NO,2);
return (ULONG)atol(tmpStr);
}
// 设置是否允许使用电子盘
void CLaneInfo::RAM_Disk(BOOL value)
{
strLaneParam[PARAM_RAM_DISK]=value;
}
// 获取是否允许使用电子盘
BOOL CLaneInfo::RAM_Disk()
{
return strLaneParam[PARAM_RAM_DISK];
}
// 获取本车道的车道名称
void CLaneInfo::GetPlazaName(char *pRetStr)
{
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strLaneParam+PARAM_PLAZA_NO,2); //站代码
UINT nIndex=atoi(tmpStr)-1;
if((nIndex>=0)&&(nIndex<MAX_PLAZANAME_NUMBER)&&(strlen(strPlazaName)>nIndex*16)){
memmove(pRetStr,strPlazaName+nIndex*16,16);
} else {
memmove(pRetStr,"陌生站 ",16);
}
// 将回车符转换为空格
for(int i=0;i<16;i++){
if(pRetStr[i]==0xa) pRetStr[i]=0x20;
if(pRetStr[i]==0xd) pRetStr[i]=0x20;
}
}
// 获取通行卡有效期
int CLaneInfo::TicketDelays()
{
if(strDelayList==NULL) return 24;
if(strlen(strDelayList)<DELAY_TICKET+2) return 24;
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strDelayList+DELAY_TICKET,2);
return atoi(tmpStr);
}
// 获取检测线圈占用超时的时间
int CLaneInfo::LeaveLoopDelays()
{
if(strDelayList==NULL) return 30;
if(strlen(strDelayList)<LEAVE_DELAY_LOOP+2) return 30;
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strDelayList+LEAVE_DELAY_LOOP,2);
return atoi(tmpStr);
}
// 获取报警灯报警持续时间
int CLaneInfo::AmberDelays()
{
if(strDelayList==NULL) return 15;
if(strlen(strDelayList)<DELAY_AMBER+2) return 15;
char tmpStr[3];
memset(tmpStr,0,3);
memmove(tmpStr,strDelayList+DELAY_AMBER,2);
return atoi(tmpStr);
}
// 获取抓拍线圈占用超时的时间
int CLaneInfo::PictureLoopDelays()
{
if(strDelayList==NULL) return 99;
if(strlen(strDelayList)<PICTURE_DELAY_LOOP+2) return 99;
char tmpStr[3];
memset(tmpStr,0,3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -