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

📄 pelco_d.cpp

📁 串口的读写
💻 CPP
字号:
#include "stdafx.h"
//#include <windows.h>
//#include <stdlib.h>
//#include <string.h>
#include "Pelco_D.h"

namespace Pelco_D_Protocol {
// Extended Command Set
BYTE * CPelco_D::Preset(UINT deviceAddress, BYTE preset, PresetAction action)
{
	BYTE m_action;
	switch (action)
	{
		case PresetAction_Set:
			m_action = 0x03;
			break;
		case PresetAction_Clear:
			m_action = 0x05;
			break;
		case PresetAction_Goto:
			m_action = 0x07;
			break;
		default:
			m_action = 0x03;
			break;
	}
	return Package(deviceAddress,0x00,m_action,0x00,preset);
}

BYTE * CPelco_D::Flip(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x07,0x00,0x21);
}

BYTE * CPelco_D::ZeroPanPosition(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x07,0x00,0x22);
}

BYTE * CPelco_D::SetAuxiliary(UINT deviceAddress,BYTE auxiliaryID, AuxAction action)
{
	if(auxiliaryID<0x00)
		auxiliaryID = 0x00;
	else if(auxiliaryID>0x08)
		auxiliaryID = 0x08;
	return Package(deviceAddress,0x00,(BYTE)action,0x00,auxiliaryID);
}

BYTE * CPelco_D::RemoteReset(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x0F,0x00,0x00);
}

BYTE * CPelco_D::Zone(UINT deviceAddress,BYTE zone, Action action)
{
/*	if(zone<0x01 && zone>0x08)
		throw new Exception("Zone value should be between 0x01 and 0x08 include");
*/
	if(zone<0x01 || zone>0x08) {
		return Package(deviceAddress,0x00,0x00,0x00,0x00);
	}
	BYTE m_action;
	if(action == Action_Start)
		m_action = 0x11;
	else
		m_action = 0x13;

	return Package(deviceAddress,0x00,m_action,0x00,zone);
}

/*
BYTE * CPelco_D::WriteToScreen(UINT deviceAddress,string text)
{
	if(text.Length > 40)
		text = text.Remove(40,text.Length-40);
	System.Text.Encoding encoding = System.Text.Encoding.ASCII;
	BYTE[] m_bytes = new BYTE[encoding.GetByteCount(text)*7];
	int i = 0;
	BYTE m_scrPosition;
	BYTE m_ASCIIchr;
			
			foreach(char ch in text)
			{
				m_scrPosition = Convert.ToByte(i/7);
				m_ASCIIchr = Convert.ToByte(ch);
				Array.Copy(Message.GetMessage(deviceAddress,0x00,0x15,m_scrPosition,m_ASCIIchr),0,m_bytes,i,7);
				i = i + 7;
			}

			return m_bytes;
}
*/
BYTE * CPelco_D::WriteToScreen(UINT deviceAddress, char * text)
{
	if(strlen(text) > 40)
		text[40] = '\0';
	int i = 0;
	UINT m_scrPosition;
	BYTE m_ASCIIchr;
	int len;
	BYTE * Message;
	len = strlen(text);
	*((UINT*)MessageBuffer) = strlen(text)*MessageLen;
	for(i=0; i<len; i++) {
		m_scrPosition = i;
		m_ASCIIchr = text[i];
		Message = Package(deviceAddress,0x00,0x15,m_scrPosition,m_ASCIIchr);
		memcpy(MessageBuffer+i*MessageLen+MessageHead,Message+MessageHead, MessageLen);
	}
	return MessageBuffer;
}

BYTE * CPelco_D::ClearScreen(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x17,0x00,0x00);
}

BYTE * CPelco_D::AlarmAcknowledge(UINT deviceAddress, UINT alarmID)
{
//	if(alarmID < 1 & alarmID>8)
//		throw new Exception("Only 8 alarms allowed for Pelco P implementation");
/*	if(alarmID < 1)
		alarmID = 1;
	else if(alarmID>8)
		alarmID = 8; */
	if(alarmID < 1 && alarmID>8) {
		return Package(deviceAddress,0x00,0x00,0x00,0x00);
	} else {
		return Package(deviceAddress,0x00,0x19,0x00,(BYTE)alarmID);
	}
}

BYTE * CPelco_D::ZoneScan(UINT deviceAddress,Action action)
{
	BYTE m_action;
	if(action == Action_Start)
		m_action = 0x1B;
	else
		m_action = 0x1D;
	return Package(deviceAddress,0x00,m_action,0x00,0x00);
}

BYTE * CPelco_D::Pattern(UINT deviceAddress,PatternAction action)
{
	BYTE m_action;
	switch (action) {
		case PatternAction_Start:
				m_action = 0x1F;
				break;
		case PatternAction_Stop:
				m_action = 0x21;
				break;
		case PatternAction_Run:
				m_action = 0x23;
				break;
		default:
				m_action = 0x23;
				break;
	}
	return Package(deviceAddress,0x00,m_action,0x00,0x00);
}

BYTE * CPelco_D::SetZoomLensSpeed(UINT deviceAddress, LensSpeed speed)
{
	return Package(deviceAddress,0x00,0x25,0x00,(BYTE)speed);
}

BYTE * CPelco_D::SetFocusLensSpeed(UINT deviceAddress, LensSpeed speed)
{
	return Package(deviceAddress,0x00,0x27,0x00,(BYTE)speed);
}

BYTE * CPelco_D::ResetCamera(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x29,0x00,0x00);
}

BYTE * CPelco_D::AutoFocus(UINT deviceAddress, SwitchAction action)
{
	return Package(deviceAddress,0x00,0x2B,0x00,(BYTE)action);
}

BYTE * CPelco_D::AutoIris(UINT deviceAddress, SwitchAction action)
{
	return Package(deviceAddress,0x00,0x2D,0x00,(BYTE)action);
}

BYTE * CPelco_D::AGC(UINT deviceAddress, SwitchAction action)
{
	return Package(deviceAddress,0x00,0x2F,0x00,(BYTE)action);
}

BYTE * CPelco_D::BackLightCompensation(UINT deviceAddress, Switch action)
{
	return Package(deviceAddress,0x00,0x31,0x00,(BYTE)action);
}

BYTE * CPelco_D::AutoWhiteBalance(UINT deviceAddress, Switch action)
{
	return Package(deviceAddress,0x00,0x33,0x00,(BYTE)action);
}

BYTE * CPelco_D::EnableDevicePhaseDelayMode(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x35,0x00,0x00);
}

BYTE * CPelco_D::SetShutterSpeed(UINT deviceAddress,BYTE speed)
{
	return Package(deviceAddress,0x00,0x37,speed,speed);//Not sure about
}

BYTE * CPelco_D::AdjustLineLockPhaseDelay(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x39,0x00,0x00);
}

BYTE * CPelco_D::AdjustWhiteBalanceRB(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x3B,0x00,0x00);
}

BYTE * CPelco_D::AdjustWhiteBalanceMG(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x3D,0x00,0x00);
}

BYTE * CPelco_D::AdjustGain(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x3F,0x00,0x00);
}

BYTE * CPelco_D::AdjustAutoIrisLevel(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x41,0x00,0x00);
}

BYTE * CPelco_D::AdjustAutoIrisPeakValue(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x43,0x00,0x00);
}

BYTE * CPelco_D::Query(UINT deviceAddress)
{
//	throw new Exception("Did not implemented");
	return Package(deviceAddress,0x00,0x45,0x00,0x00);
}

// Base Command Set

BYTE * CPelco_D::CameraSwitch(UINT deviceAddress,Switch action)
{
	BYTE m_action = CameraOnOff;
	if(action == Switch_On)
		m_action = CameraOnOff + Sense;
	return Package(deviceAddress,m_action,0x00,0x00,0x00);
}

BYTE * CPelco_D::CameraIrisSwitch(UINT deviceAddress,Iris action)
{
	return Package(deviceAddress,(BYTE)action,0x00,0x00,0x00);
}

BYTE * CPelco_D::CameraFocus(UINT deviceAddress,Focus action)
{
	if(action == Near)
		return Package(deviceAddress,(BYTE)action,0x00,0x00,0x00);
	else
		return Package(deviceAddress,0x00,(BYTE)action,0x00,0x00);
}

BYTE * CPelco_D::CameraZoom(UINT deviceAddress,Zoom action)
{
	return Package(deviceAddress,0x00,(BYTE)action,0x00,0x00);
}

BYTE * CPelco_D::CameraTilt(UINT deviceAddress,Tilt action, UINT speed)
{
	if(speed<TiltSpeedMin)
		speed = TiltSpeedMin;
	if(speed>TiltSpeedMax)	// <
		speed = TiltSpeedMax;

	return Package(deviceAddress,0x00,(BYTE)action,0x00,(BYTE)speed);
}

BYTE * CPelco_D::CameraPan(UINT deviceAddress,Pan action, UINT speed)
{
	if(speed<PanSpeedMin)
		speed = PanSpeedMin;
	if(speed>PanSpeedMax)	// <
		speed = PanSpeedMax;

	return Package(deviceAddress,0x00,(BYTE)action,(BYTE)speed,0x00);
}

BYTE * CPelco_D::CameraPanTilt(UINT deviceAddress,Pan panAction, UINT panSpeed, Tilt tiltAction, UINT tiltSpeed)
{
	BYTE PanCmd, TiltCmd, PanSpeed, TiltSpeed;
	BYTE * m_tiltMessage = CameraTilt(deviceAddress,tiltAction,tiltSpeed);
	TiltCmd = m_tiltMessage[MessageHead+3];
	TiltSpeed = m_tiltMessage[MessageHead+5];
	BYTE * m_panMessage = CameraPan(deviceAddress,panAction,panSpeed);
	PanCmd = m_panMessage[MessageHead+3];
	PanSpeed = m_panMessage[MessageHead+4];
	return Package(deviceAddress,0x00,(BYTE)(TiltCmd|PanCmd), PanSpeed, TiltSpeed);
			/*m_bytes[0] = m_tiltMessage[0];
			m_bytes[1] = m_tiltMessage[1];
			m_bytes[2] = m_tiltMessage[2];
			m_bytes[3] = (BYTE)(m_tiltMessage[3]+m_panMessage[3]);
			m_bytes[4] = (BYTE)(m_tiltMessage[4]+m_panMessage[4]);
			m_bytes[5] = (BYTE)(m_tiltMessage[5]+m_panMessage[5]);
			m_bytes[6] = m_tiltMessage[6];
			m_bytes[7] = m_tiltMessage[7];*/
		//	m_bytes = Message.GetMessage(deviceAddress,0x00,(BYTE)(m_tiltMessage[3]+m_panMessage[3]),
		//		m_panMessage[4],m_tiltMessage[5]);
		//	return m_bytes;

}

BYTE * CPelco_D::CameraStop(UINT deviceAddress)
{
	return Package(deviceAddress,0x00,0x00,0x00,0x00);
}

BYTE * CPelco_D::CameraScan(UINT deviceAddress,Scan scan)
{
	BYTE m_byte = 0x00; //AutoManualScan;
	if(scan == Scan_Auto)
		m_byte = AutoManualScan+Sense;
	return Package(deviceAddress,m_byte,0x00,0x00,0x00);
}

BYTE * CPelco_D::Noop(UINT deviceAddress)
{
		return Package(deviceAddress,0x00,0x00,0x00,0x00);
}
BYTE * CPelco_D::Package(BYTE Address, BYTE Command1, BYTE Command2, BYTE Data1, BYTE Data2)
{
	Pelco_D.Sync = SYNC;
	Pelco_D.Address = Address;
	Pelco_D.Command1 = Command1;
	Pelco_D.Command2 = Command2;
	Pelco_D.Data1 = Data1;
	Pelco_D.Data2 = Data2;
	Pelco_D.CheckSum = (BYTE)(Pelco_D.Address + Pelco_D.Command1 + Pelco_D.Command2 + Pelco_D.Data1 + Pelco_D.Data2);
	
	*((UINT*)Message) = (UINT)MessageLen;
	Message[MessageHead+0] = Pelco_D.Sync;
	Message[MessageHead+1] = Pelco_D.Address;
	Message[MessageHead+2] = Pelco_D.Command1;
	Message[MessageHead+3] = Pelco_D.Command2;
	Message[MessageHead+4] = Pelco_D.Data1;
	Message[MessageHead+5] = Pelco_D.Data2;
	Message[MessageHead+6] = Pelco_D.CheckSum;
	return Message;
}

};

⌨️ 快捷键说明

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