📄 ptz_spd1600.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_spd1600.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 "Techwin SPD1600/2500" ptz model.
...............................................................................
*/
/** ************************************************************************* **
** includes
** ************************************************************************* **/
#include <stdio.h>
#include "pthread_ptzctrl.h"
/** ************************************************************************* **
** defines
** ************************************************************************* **/
/** ************************************************************************* **
** 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_Word1; // STX (Start of Text) : fixed (0xA0)
UNS8 m_Word2; // Receiver Address : (Dome Camera ID number)
UNS8 m_Word3; // Sender Address : Host Controller Address = 0x00
UNS8 m_Word4; // Command 1
UNS8 m_Word5; // Command 2
UNS8 m_Word6; // Data1
UNS8 m_Word7; // Data2
UNS8 m_Word8; // Data3
UNS8 m_Word9; // Data4
UNS8 m_Word10; // ETX (End of Text) : fixed (0xAF)
UNS8 m_Word11; // Check Sum( Sum up the Word2 through Word9 and get complement of one )
/** ************************************************************************* **
** forward declarations
** ************************************************************************* **/
static void GetModelInfo ( PTZInfo* pModelInfo )
{
strcpy ( pModelInfo->PTZModelName, PTZ_SPD1600 );
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 ()
{
// Check SUM : Sum up the Word2 through Word9 and get "complement" of one
UNS16 tmpVal;
UNS8 CheckSum;
tmpVal = m_Word2 + m_Word3 + m_Word4 + m_Word5 + m_Word6 + m_Word7 + m_Word8 + m_Word9;
CheckSum = 0xff&tmpVal;
m_Word11 = ~CheckSum;
}
static BOOL SendCommand ()
{
UNS8 buff[12];
CalcCheckSumByte ();
buff[0] = m_Word1;
buff[1] = m_Word2;
buff[2] = m_Word3;
buff[3] = m_Word4;
buff[4] = m_Word5;
buff[5] = m_Word6;
buff[6] = m_Word7;
buff[7] = m_Word8;
buff[8] = m_Word9;
buff[9] = m_Word10;
buff[10] = m_Word11;
return SendComm(buff, 11, PTZ_SPD1600_ID);
}
//////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------------
// General Functions
static BOOL PanLeft ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x04;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = 0x00;
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL PanRight ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x02;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = 0x00;
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL TiltUp ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x08;
m_Word6 = 0x00;
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL TiltDown ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x10;
m_Word6 = 0x00;
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL ZoomOut ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x40;
m_Word6 = 0x00;
m_Word7 = 0x00;
m_Word8 = (UNS8)(0x08 * str_params->iSpeed / 100.);
return SendCommand ();
}
static BOOL ZoomIn ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x20;
m_Word6 = 0x00;
m_Word7 = 0x00;
m_Word8 = (UNS8)(0x08 * str_params->iSpeed / 100.);
return SendCommand ();
}
static BOOL FocusNear ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x02;
m_Word5 = 0x00;
m_Word6 = 0x00;
m_Word7 = 0x00;
m_Word8 = (UNS8)(0x80 * str_params->iSpeed / 100.);
return SendCommand ();
}
static BOOL FocusFar ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x01;
m_Word5 = 0x00;
m_Word6 = 0x00;
m_Word7 = 0x00;
m_Word8 = (UNS8)(0x80 * str_params->iSpeed / 100.);
return SendCommand ();
}
static BOOL PTZStop ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
// Stop Command
m_Word4 = 0x00;
m_Word5 = 0x00;
m_Word6 = 0x00;
m_Word7 = 0x00;
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL SetPreset ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x03;
m_Word6 = str_params->No - 1;
m_Word7 = 0xFF;
m_Word8 = 0xFF;
return SendCommand ();
}
static BOOL GotoPreset ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x07;
m_Word6 = str_params->No - 1;
m_Word7 = 0xFF;
m_Word8 = 0xFF;
return SendCommand ();
}
static BOOL ClearPreset ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x05;
m_Word6 = str_params->No - 1;
m_Word7 = 0xFF;
m_Word8 = 0xFF;
return SendCommand ();
}
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// Additinal Functions
static BOOL UpLeft ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x0C;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL UpRight ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x0A;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL DownLeft ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x14;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL DownRight ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0x12;
m_Word6 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word7 = (UNS8)(0x40 * str_params->iSpeed / 100.);
m_Word8 = 0x00;
return SendCommand ();
}
static BOOL OSDMenu ( void *args )
{
PTZ_STR *str_params = (PTZ_STR *)args ;
// m_Word2 = str_params->iCamID;
m_Word4 = 0x00;
m_Word5 = 0xB1;
if ( str_params->bEnable )
m_Word6 = 0x00;
else
m_Word6 = 0x01;
m_Word7 = 0xFF;
m_Word8 = 0xFF;
m_Word9 = 0xFF;
return SendCommand ();
}
void CSPD1600()
{
m_bPreset = TRUE;
m_bIris = FALSE;
m_bCamPower = FALSE;
m_bCamLight = FALSE;
m_bCamWiper = FALSE;
m_bCamAutorun = FALSE;
m_bCamAux = FALSE;
m_bAutorunStart = FALSE; // Left Limit
m_bAutorunStop = FALSE; // Right Limit
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_Word1 = 0xA0; // fixed
m_Word2 = 0x01; // Camera ID: 0x01 ~
m_Word3 = 0x00; // fixed (Host Controller Address);
m_Word4 = 0x00; // command 1
m_Word5 = 0x00; // command 2
m_Word6 = 0x00; // data 1
m_Word7 = 0x00; // data 2
m_Word8 = 0x00; // data 3
m_Word9 = 0xFF; // data 4
m_Word10 = 0xAF; // fixed
m_Word11 = 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[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;
ptz_status_struct.isr_table[OSDMENU].isr_ptr = OSDMenu;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -