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

📄 canon_vcc4_ptz.cpp

📁 Canno vcc4控制碼,可透過com port控制 vcc4
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//#define __CANNO_VCC4_PTZ_MOUDLE_C__
#include "windows.h"
#include "Canon_vcc4_ptz.h"




C_CanonVCC4PTZ::C_CanonVCC4PTZ()
{
	m_CameraNumber = 0;
	m_hComPort = NULL;
	m_HostControl = false;

	m_MaxPanSpeed	= 0;
	m_MinPanSpeed	= 0;
	m_MaxTiltSpeed	= 0;
	m_MinTiltSpeed	= 0;
	m_MaxZoom		= 0;
	m_MinZoom		= 0;
    m_Iris = IRIS_MIN;
}

C_CanonVCC4PTZ::~C_CanonVCC4PTZ()
{
	if(m_hComPort != NULL)
		CloseHandle(m_hComPort);
}

BOOL C_CanonVCC4PTZ::Init(void)
{
	DCB dcb;
	BYTE rcv_data[20];
	COMMTIMEOUTS timeout;
	DWORD dNum;
	long	temp;

	m_hComPort = CreateFile("COM1:.", GENERIC_READ | GENERIC_WRITE,
                           FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
                           NULL, OPEN_EXISTING, 0, NULL);

   if(m_hComPort == INVALID_HANDLE_VALUE)
	   return -1;

   //dNum = SetFilePointer( m_hComPort, 0, &temp, FILE_BEGIN);


   memset(&dcb, 0, sizeof(dcb));          //1/ 砞﹚ com port
   dcb.DCBlength = 28;                    //2/
   dcb.BaudRate = CBR_9600;               //3/
   dcb.fBinary = true;                    //4/
   dcb.fDtrControl = true;                //5/
   dcb.XonLim = 2048;                     //6/
   dcb.XoffLim = 512;                     //7/
   dcb.ByteSize = 8;                      //8/
   dcb.XonChar = 17;                      //9/
   dcb.XoffChar = 19;                     //10/
   dcb.EofChar = 26;                      //11/
   if(SetCommState(m_hComPort, &dcb) == 0)	//12/
   {
	   CloseHandle(m_hComPort);
	   return -1;
   }
   timeout.ReadIntervalTimeout = 100;
   timeout.ReadTotalTimeoutMultiplier = 100;
   timeout.ReadTotalTimeoutConstant = 100;
   timeout.WriteTotalTimeoutMultiplier = 100;
   timeout.WriteTotalTimeoutConstant = 100;
   if(SetCommTimeouts(m_hComPort, &timeout) == 0)
   {
	   CloseHandle(m_hComPort);
	   return -1;
   }

	// 睲埃 pipe
	//i = 0;
        
	do
	{
		ReadFile(m_hComPort, rcv_data, 1, &dNum, NULL);
		//i++;
	}while(dNum);


        //Command(CAMERA_OFF);
        //Command(CAMERA_ON);
	if(!Command(HOST_CONTROL)) return false;

	if(!SpeedRequest(PAN_FASTEST_SPEED_REQUEST, &m_MaxPanSpeed)) return false;
	if(!SpeedRequest(PAN_SLOWEST_SPEED_REQUEST, &m_MinPanSpeed)) return false;
	if(!SpeedRequest(TILT_FASTEST_SPEED_REQUEST, &m_MaxTiltSpeed)) return false;
	if(!SpeedRequest(TILT_SLOWEST_SPEED_REQUEST, &m_MinTiltSpeed)) return false;
	
	if(!ZoomMaxRequest(&m_MaxZoom)) return false;
	m_MinZoom		= 0;
    m_MaxPanSpeed /= 2;
    m_MaxTiltSpeed /= 2;

    if(!Command(EXPOSURE_MANUAL)) return false;
    Sleep(1000);
	if(!IrisRequest(&m_Iris)) return false;

    // for test
    //BYTE answer[20];
    //BYTE len = 20;
    //RequestCommand(STATUS_REQUEST, answer, &len);

	return true;
}

BOOL C_CanonVCC4PTZ::SelectCamera(BYTE number)
{
	if(number > 9) return false;
	m_CameraNumber = number;
	return true;
}

BOOL C_CanonVCC4PTZ::ReadAnswer(BYTE *answer, BYTE *answer_len)
{
	if(answer_len == 0)
		return false;

	BYTE ans_buf_size = *answer_len;
	DWORD dNum;
	do
	{
		if(!ReadFile(m_hComPort, answer, 1, &dNum, NULL))
			return false;
                if(dNum == 0)
                	return false;
	}
	while(answer[0] != 0xfe);

	int i = 0;
	do
	{
		i++;
		if(i == ans_buf_size)
			return false;
		if(!ReadFile(m_hComPort, answer + i, 1, &dNum, NULL))
			return false;
                if(dNum == 0)
                	return false;
	}
	while(answer[i] != 0xef);
	*answer_len = i + 1;
	return true;
}

BOOL C_CanonVCC4PTZ::SendCommand(C4COMMAND cmd, BYTE *param, BYTE param_len,
								 BYTE *answer, BYTE *answer_len)
{
	DWORD dNum;
	if(m_hComPort == NULL)
		return false;
	switch(cmd)
	{
		case HOST_CONTROL:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x90\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case LOCAL_CONTROL:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x90\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case CAMERA_OFF:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa0\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case CAMERA_ON:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa0\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case CASCADE_OFF:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x8f\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case CASCADE_ON:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x8f\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case FACUS_AUTO:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa1\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case REMOTE_CONTROL_ON:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x80\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case REMOTE_CONTROL_OFF:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x80\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case EXPOSURE_AUTO:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa5\x32\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case EXPOSURE_MANUAL:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa5\x33\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case IRIS_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa5\x3a\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_TILT_STOP:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x53\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_LEFT_START:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x53\x32\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_RIGHT_START:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x53\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case TILT_UP_START:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x53\x33\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case TILT_DOWN_START:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x53\x34\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case ZOOM_STOP:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa2\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case ZOOM_WIDE:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa2\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case ZOOM_TELT:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa2\x32\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case HOME_POSITION:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x57\xef", 6, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case IRIS_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xa5\x39", 6, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 2, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_TILT_ANGLE_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x62", 5, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 8, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case ZOOM_POSITION2_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xb3", 5, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 4, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_SPEED_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x50", 5, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 3, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case TILT_SPEED_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x51", 5, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 3, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case ZOOM_SPEED_ASSIGN:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\xb4\x31", 6, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, param, 1, &dNum, NULL)) return false;
			if(!WriteFile(m_hComPort, "\xef", 1, &dNum, NULL)) return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

        case STATUS_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x86\xef", 6, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
        	return true;

		case PAN_SLOWEST_SPEED_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x59\x30\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case PAN_FASTEST_SPEED_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x59\x31\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case TILT_SLOWEST_SPEED_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x59\x32\xef", 7, &dNum, NULL))
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

		case TILT_FASTEST_SPEED_REQUEST:
			if(!WriteFile(m_hComPort, "\xff\x30\x30\x00\x59\x33\xef", 7, &dNum, NULL))

⌨️ 快捷键说明

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