📄 canon_vcc4_ptz.cpp
字号:
//#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 + -