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

📄 canon_vcc4_ptz.cpp

📁 Canno vcc4控制碼,可透過com port控制 vcc4
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				return false;
			if(!ReadAnswer(answer, answer_len))
				return false;
			return true;

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

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

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

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

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

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

	}
	return false;
}

BOOL C_CanonVCC4PTZ::Command(C4COMMAND cmd)
{
	BYTE answer[20];
	BYTE answer_len = 20;

	if(!SendCommand(cmd, NULL, 0, answer, &answer_len))
		return false;

	if(answer[3] == 0x30 && answer[4] == 0x30)
		return true;
	else
		return false;
}

BOOL C_CanonVCC4PTZ::RequestCommand(C4COMMAND cmd, BYTE *answer, BYTE *answer_len)
{
	if(!SendCommand(cmd, NULL, 0, answer, answer_len))
		return false;

	if(answer[3] == 0x30 && answer[4] == 0x30)
		return true;
	else
		return false;
}

BOOL C_CanonVCC4PTZ::AssignCommand(C4COMMAND cmd, BYTE *assign, BYTE len)
{
	BYTE answer[20];
	BYTE answer_len = 20;
	if(!SendCommand(cmd, assign, answer_len, answer, &answer_len))
		return false;

   	if(answer[3] == 0x30 && answer[4] == 0x30)
		return true;
	else
		return false;
}

BOOL C_CanonVCC4PTZ::SpeedRequest(C4COMMAND cmd, DWORD *speed)
{
	BYTE request[20];
	BYTE len = 20;


	//HexStringToDWORD("0AF3B33C", &dNum, 8);
	//DWORDToHexString((char *)rcv_data, dNum, 8);

	switch(cmd)
	{
	case PAN_SLOWEST_SPEED_REQUEST:
	case PAN_FASTEST_SPEED_REQUEST:
	case TILT_SLOWEST_SPEED_REQUEST:
	case TILT_FASTEST_SPEED_REQUEST:
	case PAN_SPEED_REQUEST:
	case TILT_SPEED_REQUEST:
		if(!RequestCommand(cmd, request, &len))
			return false;
		request[8] = 0;
		HexStringToDWORD((char *)request + 5, speed, 3);
		return true;

	case ZOOM_SPEED_REQUEST:
		if(!RequestCommand(cmd, request, &len))
			return false;
		request[6] = 0;
		HexStringToDWORD((char *)request + 5, speed, 1);
		return true;

	default:
		return false;
	}
}

BOOL C_CanonVCC4PTZ::PanSpeedAssign(DWORD speed)
{
	BYTE assign[20];

	DWORDToHexString((char *)assign, speed, 3);

	if(!AssignCommand(PAN_SPEED_ASSIGN, assign, 3))
		return false;
	return true;
}

BOOL C_CanonVCC4PTZ::TiltSpeedAssign(DWORD speed)
{
	BYTE assign[20];

	DWORDToHexString((char *)assign, speed, 3);

	if(!AssignCommand(TILT_SPEED_ASSIGN, assign, 3))
		return false;
	return true;
}

BOOL C_CanonVCC4PTZ::IrisRequest(DWORD *iris)
{
	BYTE request[20];
	BYTE len = 20;
	if(!RequestCommand(IRIS_REQUEST, request, &len))
			return false;
	HexStringToDWORD((char *)request + 5, iris, 2);

	return true;
}

BOOL C_CanonVCC4PTZ::IrisAssign(DWORD iris)
{
	BYTE assign[20];

	DWORDToHexString((char *)assign, iris, 2);

	if(!AssignCommand(IRIS_ASSIGN, assign, 2))
		return false;
	return true;
}

BOOL C_CanonVCC4PTZ::PanTiltAngleRequest(DWORD *pan, DWORD *tilt)
{
	BYTE request[20];
	BYTE len = 20;
	if(!RequestCommand(PAN_TILT_ANGLE_REQUEST, request, &len))
			return false;
	HexStringToDWORD((char *)request + 5, pan, 4);
	HexStringToDWORD((char *)request + 9, tilt, 4);

	return true;
}

BOOL C_CanonVCC4PTZ::PanTiltAngleAssign(DWORD pan, DWORD tilt)
{
	BYTE assign[20];

	DWORDToHexString((char *)assign, pan, 4);
	DWORDToHexString((char *)assign + 4, tilt, 4);

	if(!AssignCommand(PAN_TILT_ANGLE_ASSIGN, assign, 8))
		return false;
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomPositionRequest(DWORD *zoom)
{
	BYTE request[20];
	BYTE len = 20;
	if(!RequestCommand(ZOOM_POSITION2_REQUEST, request, &len))
		return false;
	HexStringToDWORD((char *)request + 5, zoom, 4);
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomPositionAssign(DWORD zoom)
{
	BYTE assign[20];
	DWORDToHexString((char *)assign, zoom, 4);
	if(!AssignCommand(ZOOM_POSITION2_ASSIGN, assign, 4))
		return false;
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomMaxRequest(DWORD *zoom)
{
	BYTE request[20];
	BYTE len = 20;
	if(!RequestCommand(ZOOM_MAX_REQUEST, request, &len))
		return false;
	HexStringToDWORD((char *)request + 5, zoom, 4);
	return true;
}



BOOL C_CanonVCC4PTZ::HexStringToDWORD(char *str, DWORD *number, BYTE cnt)
{
	int digit;
	DWORD sum;

	sum = 0;
	for(int i=0; i<cnt; i++)
	{
		if(str[i] >= '0' && str[i] <='9')
			digit = str[i] - '0';
		else if(str[i] >= 'a' && str[i] <= 'f')
			digit = str[i] - 'a' + 10;
		else if(str[i] >= 'A' && str[i] <= 'F')
			digit = str[i] - 'A' + 10;
		else return false;

		sum <<= 4;
		sum += digit;
	}
	*number = sum;
	return true;
}

BOOL C_CanonVCC4PTZ::DWORDToHexString(char *str, DWORD number, BYTE cnt)
{
	int digit;
	int i, j;
	for(i=0, j=cnt-1; i< cnt; i++, j--)
	{
		digit = number % 16;
		if(digit >= 0 && digit <= 9)
			str[j] = digit + '0';
		else
			str[j] = digit - 10 + 'A';
		number /= 16;
	}
	return true;
}

BOOL C_CanonVCC4PTZ::PanLeftSmartly(void)
{
	DWORD zoom;
	DWORD speed;

    //if(!Command(HOST_CONTROL)) return false;
	if(!ZoomPositionRequest(&zoom)) return false;
	speed = (m_MaxPanSpeed - m_MinPanSpeed) * (m_MaxZoom - zoom) / (m_MaxZoom - m_MinZoom) + m_MinPanSpeed;
	if(!PanSpeedAssign(speed)) return false;
	if(!Command(PAN_LEFT_START)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::PanRightSmartly(void)
{
	DWORD zoom;
	DWORD speed;

    //if(!Command(HOST_CONTROL)) return false;
	if(!ZoomPositionRequest(&zoom)) return false;
	speed = (m_MaxPanSpeed - m_MinPanSpeed) * (m_MaxZoom - zoom) / (m_MaxZoom - m_MinZoom) + m_MinPanSpeed;
	if(!PanSpeedAssign(speed)) return false;
	if(!Command(PAN_RIGHT_START)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::TiltUpSmartly(void)
{
	DWORD zoom;
	DWORD speed;

    //if(!Command(HOST_CONTROL)) return false;
	if(!ZoomPositionRequest(&zoom)) return false;
	speed = (m_MaxTiltSpeed - m_MinTiltSpeed) * (m_MaxZoom - zoom) / (m_MaxZoom - m_MinZoom) + m_MinTiltSpeed;
	if(!TiltSpeedAssign(speed)) return false;
	if(!Command(TILT_UP_START)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::TiltDownSmartly(void)
{
	DWORD zoom;
	DWORD speed;

    //if(!Command(HOST_CONTROL)) return false;
	if(!ZoomPositionRequest(&zoom)) return false;
	speed = (m_MaxTiltSpeed - m_MinTiltSpeed) * (m_MaxZoom - zoom) / (m_MaxZoom - m_MinZoom) + m_MinTiltSpeed;
	if(!TiltSpeedAssign(speed)) return false;
	if(!Command(TILT_DOWN_START)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::PanTiltStop(void)
{
	if(!Command(PAN_TILT_STOP)) return false;
    //if(!Command(LOCAL_CONTROL)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomIn(void)
{
	//if(!Command(HOST_CONTROL)) return false;
	if(!Command(ZOOM_TELT)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomOut(void)
{
	//if(!Command(HOST_CONTROL)) return false;
	if(!Command(ZOOM_WIDE)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::ZoomStop(void)
{
	if(!Command(ZOOM_STOP)) return false;
    //if(!Command(LOCAL_CONTROL)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::Home(void)
{
	//if(!Command(HOST_CONTROL)) return false;
	if(!Command(HOME_POSITION)) return false;
    //if(!Command(LOCAL_CONTROL)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::IrisUp(void)
{
	DWORD iris;

    //if(!Command(EXPOSURE_MANUAL)) return false;
	if(!IrisRequest(&iris)) return false;
    if(iris >= IRIS_MAX)
    	return false;
    iris++;
    if(!IrisAssign(iris)) return false;
	return true;
}
BOOL C_CanonVCC4PTZ::IrisDown(void)
{
	DWORD iris = IRIS_MAX;

    //if(!Command(EXPOSURE_MANUAL)) return false;
	if(!IrisRequest(&iris)) return false;
    if(iris <= IRIS_MIN)
    	return false;
    iris--;
    if(!IrisAssign(iris)) return false;
	return true;
}

BOOL C_CanonVCC4PTZ::AutoExposure(void)
{
	if(!Command(EXPOSURE_AUTO)) return false;
    return true;
}

⌨️ 快捷键说明

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