📄 ptz_mrx1000.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 + -