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

📄 测试程序dlg.cpp

📁 GPRS协议解析示例。该示例演示里使用GPRS控件实现客户端程序向车载GPS终端发送点名、监听等指令
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	PhoneNumber[14] = dlg.m_PhoneNumber15;
	
	PermitNumber.vehicle_ID = atoi(tempID);
	PermitNumber.groupnum	= groupnum;
	PermitNumber.num		= num;
	PermitNumber.restrictstatus[0] = restrictstatus[0];
	PermitNumber.restrictstatus[1] = restrictstatus[1];
	BYTE PhoneNumberLength = 0;
	for (int i=0; i<15; i++)
	{
		PhoneNumberLength = PhoneNumber[i].GetLength();
		PermitNumber.phonenum[i].len = PhoneNumberLength;
		memcpy(PermitNumber.phonenum[i].num,PhoneNumber[i],PhoneNumberLength);
	}

	BOOL result = m_active.SetPermitPhonenumber ((VARIANT*)&PermitNumber);

	UpdateData(FALSE);
}

//设置超速报警门限
void CMyDlg::OnSuperSpeed() 
{
	UpdateData(TRUE);
	CSuperSpeed dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	OVERSPEEDALARMBOUND SpeedAlarm;
	memset(&SpeedAlarm,0,sizeof(SpeedAlarm));
	
	CString tempID = m_ID;
	CString tempAlarState = dlg.m_AlarmState;
	BYTE	AlarmState = 0;
	tempID.Delete(0,1);

	//报警状态是一个十六进制的数,长度必须为2
	if (tempAlarState.GetAllocLength() < 2)
	{
		return;
	}
	AlarmState = atoi(tempAlarState)/10;
	AlarmState <<= 4;
	AlarmState += atoi(tempAlarState)%10;
	
	SpeedAlarm.vehicle_ID	= atoi(tempID);
	SpeedAlarm.boundvalue	= dlg.m_SuperSpeed;
	SpeedAlarm.alarmstatus	= AlarmState;

//	TRANSE_TO_VARIANT(((LPOVERSPEEDALARMBOUND)&SpeedAlarm));
	BOOL result = m_active.SetOverspeedAlarmbound((VARIANT*)&SpeedAlarm);
//	DELETE_VARIANT;
}

//设置车辆运行方向
void CMyDlg::OnRunWay() 
{
	UpdateData(TRUE);

	CRunWay dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	MOVINGDIRECTION MovingDirection;
	memset(&MovingDirection,0,sizeof(MovingDirection));

	CString tempID = m_ID;
	tempID.Delete(0,1);
//	MovingDirection.busno = 3;
	MovingDirection.direction = dlg.RunWay;
	MovingDirection.controlmode = dlg.Contrl;
	MovingDirection.vehicle_ID = atoi(tempID);

//	TRANSE_TO_VARIANT((LPMOVINGDIRECTION)&MovingDirection);
	BOOL result = m_active.SetMovingDirection((VARIANT*)&MovingDirection);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置自动报站控制方式
void CMyDlg::OnAutoReport() 
{
	UpdateData(TRUE);

	CAutoReport dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}
	
	AUTOREPORTCONTROL AutoReport;
	memset(&AutoReport,0,sizeof(AutoReport));
	CString tempID = m_ID;
	tempID.Delete(0,1);

	AutoReport.vehicle_ID = atoi(tempID);
	AutoReport.controlmode = dlg.ContrlType;

//	TRANSE_TO_VARIANT((LPAUTOREPORTCONTROL)&AutoReport);
	BOOL result = m_active.SetAutoreportControl((VARIANT*)&AutoReport);  
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置语音播报信息
void CMyDlg::OnVoiceReport() 
{
	UpdateData(TRUE);

	CMessage dlg;
	dlg.WindowCaption = "语音播报";
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	VOICEREPORT VoiceReport;
	memset(&VoiceReport,0,sizeof(VoiceReport));

	CString Message = dlg.m_Message;
	CString tempID = m_ID;
	tempID.Delete(0,1);

	BYTE MessLen = Message.GetLength();
	VoiceReport.len = MessLen;
	VoiceReport.vehicle_ID = atoi(tempID);
	memcpy(VoiceReport.voicecontent,Message,MessLen);

//	TRANSE_TO_VARIANT((LPVOICEREPORT)&VoiceReport);
	BOOL result = m_active.SetVoiceReport((VARIANT*)&VoiceReport);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//中心向车台下发的确认信息
void CMyDlg::OnConfirm() 
{
	CENTERVERIFY Confirm;
	memset(&Confirm,0,sizeof(Confirm));

	Confirm.vehicle_ID = 3366193004;
	BYTE confirmMess[12] = {0x00, 0x00, 0x23, 0x12, 0x23, 0x11, 
							0x00, 0x00, 0x00, 0x00, 0x10, 0x1c};
	memcpy(Confirm.content,confirmMess,12);

//	TRANSE_TO_VARIANT((LPCENTERVERIFY)&Confirm);
	m_active.CenterVerify((VARIANT*)&Confirm);
//	DELETE_VARIANT;
}

BEGIN_EVENTSINK_MAP(CMyDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CMyDlg)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 1 /* SendUnpressOrient */, OnSendUnpressOrientGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 2 /* SendPressOrient */, OnSendPressOrientGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 25 /* UpShortMessage */, OnUpShortMessageGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 3 /* SendVerifyMessage */, OnSendVerifyMessageGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 4 /* WrongOrderMessage */, OnWrongOrderMessageGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 24 /* TestNetwork */, OnTestNetworkGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 5 /* ElecRailAlarm */, OnElecRailAlarmGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 6 /* RequestRailPosition */, OnRequestRailPositionGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 7 /* UrgentAlarm */, OnUrgentAlarmGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 8 /* CallingOrient */, OnCallingOrientGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 9 /* RequestDirection */, OnRequestDirectionGprscontrolctrl1, VTS_PVARIANT)
	ON_EVENT(CMyDlg, IDC_GPRSCONTROLCTRL1, 10 /* BlindCompensate */, OnBlindCompensateGprscontrolctrl1, VTS_PVARIANT)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

//非压缩定位信息
void CMyDlg::OnSendUnpressOrientGprscontrolctrl1(VARIANT FAR* unpressorient) 
{
	UNPRESSORIENT *UnComData;
	UnComData = (UNPRESSORIENT*)unpressorient;
	
	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u上传定位数据:",UnComData->vehicle_ID);
	tempstring.Format("                时间:%d-%d-%d %d:%d:%d",UnComData->year,\
						UnComData->month,UnComData->day,UnComData->hour,		\
						UnComData->minute,UnComData->second);
	RecvdData += tempstring;
	ADDView(RecvdData);
	
	tempstring.Format("纬度:%0.6f, 经度:%0.6f;",UnComData->latitudenet,UnComData->longitudenet);
	RecvdData = tempstring;
	tempstring.Format("速度:%d KM/H,方向:%d度",UnComData->speed,UnComData->direction);
	RecvdData += tempstring;
	tempstring.Format("时间间隔:%d秒,状态位:%04x",UnComData->interval,UnComData->status);
	RecvdData += tempstring;
	ADDView(RecvdData);
	ADDView("");
}

//压缩定位信息
void CMyDlg::OnSendPressOrientGprscontrolctrl1(VARIANT FAR* pressorient) 
{
	LPPRESSORIENT ComData = (LPPRESSORIENT)pressorient;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u上传数据:",ComData->vehicle_ID);
	tempstring.Format("                 时间:%d-%02d-%02d %02d:%02d:%02d		\
                                        时间间隔:%d秒,",						\
						ComData->year,ComData->month,ComData->day,ComData->hour,\
						ComData->minute,ComData->second,ComData->interval);
	RecvdData += tempstring;
	ADDView(RecvdData);
	
	for (int i=0; i<10; i++)
	{
		tempstring.Format("%2d: 纬度:%0.6f, 经度:%0.6f;",i+1,ComData->latitudenet[i],	\
															ComData->longitudenet[i]);
		RecvdData = tempstring;
		tempstring.Format("速度:%d KM/H,方向:%d度",ComData->speed[i],\
														ComData->direction[i]);
		RecvdData += tempstring;
		tempstring.Format("状态位:%04x",ComData->status[i]);
		RecvdData += tempstring;
		ADDView(RecvdData);
	}
	ADDView("");
}

//短消息
void CMyDlg::OnUpShortMessageGprscontrolctrl1(VARIANT FAR* UpShortMessage) 
{
	LPUPSHORTMESSAGE MessData = (LPUPSHORTMESSAGE)UpShortMessage;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u上传短消息:",MessData->vehicle_ID);
	RecvdData += tempstring;
	ADDView(RecvdData);

	int messlen = MessData->len;
	RecvdData = "消息内容:";
	for ( int i=0; i<messlen; i++)
	{
		RecvdData += MessData->message[i];
	}
	ADDView(RecvdData);
	ADDView("");
}

//车台上传接收到正确命令的确认消息
void CMyDlg::OnSendVerifyMessageGprscontrolctrl1(VARIANT FAR* verifymessage) 
{
	LPVERIFYMESSAGE Verify = (LPVERIFYMESSAGE)verifymessage;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u接收到正确的命令:",Verify->vehicle_ID);
	switch(Verify->message[10]) 
	{
	case 0x30:
		tempstring = "设置定位数据发送时间间隔命令。";
		break;
	case 0x31:
		tempstring = "设置灯的状态命令";
	case 0x32:
		tempstring = "下传短消息命令";
		break;
	case 0x33:
		tempstring = "修改固定短消息命令";
		break;
	case 0x34:
		tempstring = "设置IP地址命令";
		break;
	case 0x35:
		tempstring = "设置车台ID号码命令";
		break;
	case 0x36:
		tempstring = "设置电子围栏命令";
		break;
	case 0x37:
		tempstring = "设置允许通话号码命令";
		break;
	case 0x39:
		tempstring = "监听命令";
		break;
	case 0x3A:
		tempstring = "设置超速报警门限值命令";
		break;
	case 0x3B:
		tempstring = "设置车辆运行方向命令";
		break;
	case 0x3C:
		tempstring = "设置自动控制方式命令";
		break;
	case 0X3D:
		tempstring = "设置语音信息命令";
		break;
	default:
		break;
	}
	RecvdData += tempstring;
	ADDView(RecvdData);

	RecvdData.Format("信息内容:");
	for (int i=0; i<Verify->len; i++)
	{
		tempstring.Format("%02x",Verify->message[i]);
		RecvdData += tempstring;
	}
	ADDView(RecvdData);
	ADDView("");
}

//车台上传接收到错误命令的信息
void CMyDlg::OnWrongOrderMessageGprscontrolctrl1(VARIANT FAR* wrongmessage) 
{
	LPWRONGMESSAGE Wrongmess = (LPWRONGMESSAGE)wrongmessage;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u接收到错误命令:",Wrongmess->vehicle_ID);
	switch(Wrongmess->wrong_number) 
	{
	case 0x01:
		tempstring = "校验错";
		break;
	case 0x02:
		tempstring = "长度错";
		break;
	case 0x04:
		tempstring = "头尾错误";
		break;
	case 0x08:
		tempstring = "非法命令(无法识别的协议号)";
		break;
	case 0x10:
		tempstring = "车载ID号码错误";
		break;
	case 0xFF:
		tempstring = "未知错误";
		break;
	default:
		break;
	}
	RecvdData += tempstring;
	ADDView(RecvdData);
	ADDView("");
}

//测试网络状态
void CMyDlg::OnTestNetworkGprscontrolctrl1(VARIANT FAR* networkstatus) 
{
	LPTESTWORK NetCheck = (LPTESTWORK)networkstatus;

	//显示
	CString RecvdData = "";
	RecvdData.Format("车台1%u上传网络测试包",NetCheck->vehicle_ID);
	ADDView(RecvdData);
	ADDView("");
}

//上传电子围栏信息
void CMyDlg::OnElecRailAlarmGprscontrolctrl1(VARIANT FAR* ElecRailAlarm) 
{
	LPRAILALARM AlarmData = (LPRAILALARM)ElecRailAlarm;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	CTime	time = CTime::GetCurrentTime();
	RecvdData.Format("车台1%u上传围栏报警。",AlarmData->vehicle_ID);
	tempstring.Format("                 时间:%d-%02d-%02d %02d:%02d:%02d",			\
						time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),\
						time.GetMinute(),time.GetSecond());
	RecvdData += tempstring;
	ADDView(RecvdData);

	RecvdData.Format("围栏号:%d",AlarmData->railnum);
	switch(AlarmData->alarmstatus)
	{
	case 0x00:
		tempstring = "上行出围栏";
		break;
	case 0x01:
		tempstring = "上行进入围栏";
		break;
	case 0x10:
		tempstring = "下行出围栏";
		break;
	case 0x11:
		tempstring = "下行进入围栏";
		break;
	default:
		break;
	}
	RecvdData += tempstring;
	ADDView(RecvdData);
	ADDView("");
}

//车台向中心要围栏的位置信息
void CMyDlg::OnRequestRailPositionGprscontrolctrl1(VARIANT FAR* RequestRailPosition) 
{
	LPRAILPOSITION ReailPosition = (LPRAILPOSITION)RequestRailPosition;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	CTime	time = CTime::GetCurrentTime();
	RecvdData.Format("车台1%u要围栏信息。",ReailPosition->vehicle_ID);
	tempstring.Format("                 时间:%d-%02d-%02d %02d:%02d:%02d",			\
						time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),\
						time.GetMinute(),time.GetSecond());
	RecvdData += tempstring;
	ADDView(RecvdData);

	RecvdData = "";

	if (ReailPosition->framenum > 0)
	{
		RecvdData.Format("帧数:%d, 帧号:%d",ReailPosition->framenum,	\
												ReailPosition->frameNO);
	}
	else if (ReailPosition->framenum == 0)
	{
		RecvdData.Format("需要全部围栏数据");
	}
	
	ADDView(RecvdData);
	ADDView("");
}

//车台向中心发送的紧急报警信息
void CMyDlg::OnUrgentAlarmGprscontrolctrl1(VARIANT FAR* UrgentAlarm) 
{
	LPURGENTALARM UrgAlam = (LPURGENTALARM)UrgentAlarm;
	
	//显示
	CString RecvdData = "";
	CString tempstring = "";
	CTime	time = CTime::GetCurrentTime();
	RecvdData.Format("车台1%u上传紧急报警。",UrgAlam->vehicle_ID);
	tempstring.Format("                 时间:%d-%02d-%02d %02d:%02d:%02d",			\
						time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),\
						time.GetMinute(),time.GetSecond());
	RecvdData += tempstring;
	ADDView(RecvdData);

	RecvdData = "";
	if (UrgAlam->alarmtype == 0x00)
	{
		RecvdData.Format("紧急报警");
	}
	else if (UrgAlam->alarmtype == 0x01)
	{
		RecvdData.Format("超速报警");
	}
	ADDView(RecvdData);
	ADDView("");
}

//提取点名定位信息
void CMyDlg::OnCallingOrientGprscontrolctrl1(VARIANT FAR* callingorientinfo) 
{
	LPCALLINGORIENT CallingData = (LPCALLINGORIENT)callingorientinfo;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u上传点名定位数据:",CallingData->vehicle_ID);
	tempstring.Format("                 时间:%d-%d-%d %d:%d:%d",					\
						CallingData->year,CallingData->month,CallingData->day,		\
						CallingData->hour,CallingData->minute,CallingData->second);
	RecvdData += tempstring;
	ADDView(RecvdData);
	
	tempstring.Format("纬度:%0.6f, 经度:%0.6f;",CallingData->latitudenet,		\
													CallingData->longitudenet);
	RecvdData = tempstring;
	tempstring.Format("速度:%d KM/H,方向:%d度",CallingData->speed,				\
													CallingData->direction);
	RecvdData += tempstring;
	tempstring.Format("时间间隔:%d秒,状态位:%04x",CallingData->interval,			\
														CallingData->status);
	RecvdData += tempstring;
	ADDView(RecvdData);
	ADDView("");
}

//车台向中心请求设置运行方向
void CMyDlg::OnRequestDirectionGprscontrolctrl1(VARIANT FAR* RequestDirection) 
{
	LPREQUESTDRIECTION ReuestDirection = (LPREQUESTDRIECTION)RequestDirection;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	CTime	time = CTime::GetCurrentTime();
	RecvdData.Format("车台1%u请求设置运行方向:",ReuestDirection->vehicle_ID);
	tempstring.Format("                 时间:%d-%d-%d %d:%d:%d",					\
						time.GetYear(),time.GetMonth(),time.GetDay(),				\
						time.GetHour(),time.GetMinute(),time.GetSecond());
	RecvdData += tempstring;
	ADDView(RecvdData);
	ADDView("");
}

//车台向中心上传的盲区补偿数据包
void CMyDlg::OnBlindCompensateGprscontrolctrl1(VARIANT FAR* blindcompensatedata) 
{
	LPBLINDCOMPENSATE BlindData = (LPBLINDCOMPENSATE)blindcompensatedata;

	//显示
	CString RecvdData = "";
	CString tempstring = "";
	RecvdData.Format("车台1%u上传数据:",BlindData->vehicle_ID);
	tempstring.Format("                 时间:%d-%02d-%02d %02d:%02d:%02d		\
                                        时间间隔:%d秒,",						\
						BlindData->year,BlindData->month,BlindData->day,BlindData->hour,\
						BlindData->minute,BlindData->second,BlindData->interval);
	RecvdData += tempstring;
	ADDView(RecvdData);
	
	for (int i=0; i<10; i++)
	{
		tempstring.Format("%2d:	纬度:%0.6f, 经度:%0.6f;",i+1,BlindData->latitudenet[i],	\
															BlindData->longitudenet[i]);
		RecvdData = tempstring;
		tempstring.Format("速度:%d KM/H,方向:%d度",BlindData->speed[i],\
														BlindData->direction[i]);
		RecvdData += tempstring;
		tempstring.Format("状态位:%04x",BlindData->status[i]);
		RecvdData += tempstring;
		ADDView(RecvdData);
	}
	ADDView("");
}

//在列表中显示数据
void CMyDlg::ADDView(CString Data)
{
	UpdateData(TRUE);

	m_List.InsertItem(ViewCount++,Data);
	m_List.Scroll(sizes);

	UpdateData(FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -