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

📄 ptz_mrx1000.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 C
字号:
/* set tabstop=4 */
/********************************************************************************
 *                                                                              *
 * Copyright(C) 2004  Penta-Micro                                               *
 *                                                                              *
 * ALL RIGHT RESERVED                                                           *
 *                                                                              *
 * This software is the property of Penta-Micro and is furnished under          *
 * license by Penta-Micro. This software may be used only in accordance         *	
 * with the terms of said license. This copyright notice may not be             *
 * removed, modified or obliterated without the prior written permission        *
 * of Penta-Micro.                                                              *
 *                                                                              *
 * This software may not be copyed, transmitted, provided to or otherwise       *
 * made available to any other person, company, corporation	or other entity     *
 * except as specified in the terms of said license.                            *
 *                                                                              *
 * No right, title, ownership or other interest in the software is hereby       *
 * granted or transferred.                                                      *
 *                                                                              *
 * The information contained herein is subject to change without notice and     *
 * should not be construed as a commitment by Penta-Micro.                      *
 *                                                                              *
 ********************************************************************************
 
  MODULE NAME:  ptz_mrx1000.c
  
  REVISION HISTORY:
  
  Date       Ver Name                  Description
  ---------- --- --------------------- -----------------------------------------
  07/09/2003 1.0 Mhpark                Created   
  02/01/2005 1.1 JiGwanKang(xchannel)  Modify(arrangement) 
 ...............................................................................
 
  DESCRIPTION:
  
  This Module contains functions for "Samsung MRX-1000" ptz model.
  
 ...............................................................................
*/  

/** ************************************************************************* ** 
 ** includes
 ** ************************************************************************* **/
#include <stdio.h>

#include "pthread_ptzctrl.h"

/** ************************************************************************* ** 
 ** defines
 ** ************************************************************************* **/
#define MRX_PAN_SPEED		0xF0
#define MRX_TILT_SPEED		0xF0

/** ************************************************************************* ** 
 ** typedefs
 ** ************************************************************************* **/

/** ************************************************************************* ** 
 ** globals
 ** ************************************************************************* **/

/** ************************************************************************* ** 
 ** locals
 ** ************************************************************************* **/
BOOL	m_bPreset;
BOOL	m_bIris;
BOOL	m_bCamPower;
BOOL	m_bCamLight;
BOOL	m_bCamWiper;
BOOL	m_bCamAutorun;
BOOL	m_bCamAux;

BOOL	m_bAutorunStart;
BOOL	m_bAutorunStop;
BOOL	m_bPresetSpeed;
BOOL	m_bPTZSpeed;

BOOL	m_bMenu;
BOOL	m_bMenuUp;
BOOL	m_bMenuDown;
BOOL	m_bMenuValueUp;
BOOL	m_bMenuValueDown;

BOOL	m_bPatternSet;
BOOL	m_bPatternRun;

BOOL	m_bReset;

UNS8	m_Byte1;	// Start Code : 0xA0 fixec
UNS8	m_Byte2;	// Sender Address
UNS8	m_Byte3;	// Target Address
UNS8	m_Byte4;
UNS8	m_Byte5;
UNS8	m_Byte6;
UNS8	m_Byte7;
UNS8	m_Byte8;
UNS8	m_Byte9;	// Check Sum

/** ************************************************************************* ** 
 ** forward declarations
 ** ************************************************************************* **/

static void GetModelInfo ( PTZInfo* pModelInfo )
{
	strcpy ( pModelInfo->PTZModelName, PTZ_MRX1000 );
	pModelInfo->bPreset			= m_bPreset;
	pModelInfo->bIris			= m_bIris;
	pModelInfo->bCamAux			= m_bCamAux;
	pModelInfo->bMenu			= m_bMenu;
	pModelInfo->bCamPower		= m_bCamPower;
	pModelInfo->bCamLight		= m_bCamLight;
	pModelInfo->bCamWiper		= m_bCamWiper;
	pModelInfo->bCamAutorun		= m_bCamAutorun;
	pModelInfo->bAutorunStart	= m_bAutorunStart;
	pModelInfo->bAutorunStop	= m_bAutorunStop;
	pModelInfo->bPresetSpeed	= m_bPresetSpeed;
	pModelInfo->bPTZSpeed		= m_bPTZSpeed;
	pModelInfo->bMenuUp			= m_bMenuUp;
	pModelInfo->bMenuDown		= m_bMenuDown;
	pModelInfo->bMenuValueUp	= m_bMenuValueUp;
	pModelInfo->bMenuValueDown	= m_bMenuValueDown;
	pModelInfo->bPatternSet		= m_bPatternSet;
	pModelInfo->bPatternRun		= m_bPatternRun;
	pModelInfo->bReset			= m_bReset;
}

static void CalcCheckSumByte ()
{
	UNS16 val = m_Byte2 + m_Byte3 + m_Byte4 + m_Byte5 + m_Byte6 + m_Byte7 + m_Byte8;

	m_Byte9 = 0xff&(val ^ 0xFFFF);
}

static BOOL SendCommand ()
{
	UNS8 buff[10];

	CalcCheckSumByte ();
		
	buff[0]  = m_Byte1;
	buff[1]  = m_Byte2;
	buff[2]  = m_Byte3;
	buff[3]  = m_Byte4;
	buff[4]  = m_Byte5;
	buff[5]  = m_Byte6;
	buff[6]  = m_Byte7;
	buff[7]  = m_Byte8;
	buff[8]  = m_Byte9;
	
	
	return SendComm(buff, 9, PTZ_MRX1000_ID);
}

	
// ----------------------------------------------------------------------------------
// General Functions
static BOOL PanRight	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x02;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL PanLeft ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x01;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL TiltUp ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x04;
	m_Byte7 = 0x00;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;

	return SendCommand ();
}
static BOOL TiltDown ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x08;
	m_Byte7 = 0x00;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;

	return SendCommand ();
}
static BOOL UpLeft		( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x05;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;;

	return SendCommand ();
}
static BOOL DownLeft		( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x09;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;;

	return SendCommand ();
}
static BOOL UpRight		( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x06;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;;

	return SendCommand ();
}
static BOOL DownRight	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x0A;
	m_Byte7 = (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;
	m_Byte8	= (UNS8)(0xFF * str_params->iSpeed / 100.);	// 0x00 ~ 0xFF;;

	return SendCommand ();
}
static BOOL ZoomIn ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x20;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL ZoomOut ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x40;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL FocusNear ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x02;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL FocusFar	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x01;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL IrisOpen	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x08;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL IrisClose	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x10;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL PTZStop ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x01;
	m_Byte5 = 0x00;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL SetPreset ( void *args )	// 1 ~ 12
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x1F;
	m_Byte6 = str_params->No;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL GotoPreset ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x19;
	m_Byte6 = str_params->No;
	m_Byte7 = 0x00;
	m_Byte8 = 0x00;

	return SendCommand ();
}
static BOOL ClearPreset ( void *args )
{
	return SendCommand ();
}
static BOOL CameraPower ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x0D;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8 = 0x00;
	
	return SendCommand ();
}
static BOOL CameraLight ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x0E;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8 = 0x00;

	return SendCommand ();
}
static BOOL AutoPan ( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x1A;
	if ( str_params->bEnable )
		m_Byte6 = 0x01;
	else
		m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;

	return SendCommand ();
}
static BOOL Aux3	( void *args )
{
	PTZ_STR *str_params = (PTZ_STR *)args ;
	
//	m_Byte3 = str_params->iCamID;
	m_Byte4 = 0x03;
	m_Byte5 = 0x0F;
	m_Byte6 = 0x00;
	m_Byte7 = 0x00;
	m_Byte8	= 0x00;
	
	return SendCommand ();
}
void CMRX1000()
{
	m_bPreset		= FALSE;	// document绰 乐栏唱 厚沥惑 悼累窍骨肺...
	m_bIris			= TRUE;
	m_bCamPower		= TRUE;
	m_bCamLight		= TRUE;
	m_bCamWiper		= FALSE;
	m_bCamAutorun	= TRUE;
	m_bCamAux		= TRUE;

	m_bAutorunStart	= FALSE;
	m_bAutorunStop	= FALSE;
	m_bPresetSpeed	= FALSE;
	m_bPTZSpeed		= TRUE;

	m_bMenu			= FALSE;
	m_bMenuUp		= FALSE;
	m_bMenuDown		= FALSE;
	m_bMenuValueUp	= FALSE;
	m_bMenuValueDown= FALSE;

	m_bPatternSet	= FALSE;
	m_bPatternRun	= FALSE;

	m_bReset		= FALSE;

	m_Byte1		= 0xA0;	// Start Code : 0xA0 fixec
	m_Byte2		= 0x01;	// Sender Address
	m_Byte3		= 0x01;	// Target Address
	m_Byte4		= 0x00;
	m_Byte5		= 0x00;
	m_Byte6		= 0x00;
	m_Byte7		= 0x00;
	m_Byte8		= 0x00;
	m_Byte9		= 0x00;	// Check Sum
	
	ptz_status_struct.isr_table[PTZFSTOP].isr_ptr = PTZStop;
	ptz_status_struct.isr_table[PTUP].isr_ptr = TiltUp;
	ptz_status_struct.isr_table[PTDOWN].isr_ptr = TiltDown;
	ptz_status_struct.isr_table[PTZFSTOP].isr_ptr = PTZStop;
	ptz_status_struct.isr_table[PTLEFT].isr_ptr = PanLeft;
	ptz_status_struct.isr_table[PTRIGHT].isr_ptr = PanRight;
	ptz_status_struct.isr_table[PTZFSTOP].isr_ptr = PTZStop;
	ptz_status_struct.isr_table[ZIN].isr_ptr = ZoomIn;
	ptz_status_struct.isr_table[ZOUT].isr_ptr = ZoomOut;
	ptz_status_struct.isr_table[PTZFSTOP].isr_ptr = PTZStop;
	ptz_status_struct.isr_table[FIN].isr_ptr = FocusNear;
	ptz_status_struct.isr_table[FOUT].isr_ptr = FocusFar;
	ptz_status_struct.isr_table[SETPRESET].isr_ptr = SetPreset;
	ptz_status_struct.isr_table[GOTOPRESET].isr_ptr = GotoPreset;
	ptz_status_struct.isr_table[CLEARPRESET].isr_ptr = ClearPreset;
	ptz_status_struct.isr_table[IRISOPEN].isr_ptr = IrisOpen;
	ptz_status_struct.isr_table[IRISCLOSE].isr_ptr = IrisClose;
	ptz_status_struct.isr_table[AUTOPAN].isr_ptr = AutoPan;
	ptz_status_struct.isr_table[UPLEFT].isr_ptr = UpLeft;
	ptz_status_struct.isr_table[UPRIGHT].isr_ptr = UpRight;
	ptz_status_struct.isr_table[DOWNLEFT].isr_ptr = DownLeft;
	ptz_status_struct.isr_table[DOWNRIGHT].isr_ptr = DownRight;
}

⌨️ 快捷键说明

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