Annotation of libaitpelco/inc/aitpelco.h, revision 1.1
1.1 ! misho 1: /*************************************************************************
! 2: * (C) 2010 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
! 3: * by Michael Pounov <misho@openbsd-bg.org>
! 4: *
! 5: * $Author: misho $
! 6: * $Id: aitcrc.h,v 1.1.1.1.2.1 2008/11/05 17:29:19 misho Exp $
! 7: *
! 8: *************************************************************************/
! 9: #ifndef __AITPELCO_H
! 10: #define __AITPELCO_H
! 11:
! 12:
! 13: #include <sys/types.h>
! 14:
! 15:
! 16: #define PELCO_D_LEN 7
! 17: #define PELCO_P_LEN 8
! 18:
! 19: #define FIXED_ZERO 0
! 20:
! 21: #define VER_D_SYNC 0xFF
! 22: #define VER_P_STX 0xA0
! 23: #define VER_P_ETX 0xAF
! 24:
! 25: #define FIRST_CAM_D 1
! 26: #define FIRST_CAM_P 0
! 27:
! 28: #define SPEED_MIN 0x00
! 29: #define SPEED_HI 0x3F
! 30: #define SPEED_MAX 0x40
! 31:
! 32: #define PAN_STOP SPEED_MIN
! 33: #define PAN_FAST SPEED_HI
! 34: #define PAN_TURBO SPEED_MAX
! 35: #define TILT_STOP SPEED_MIN
! 36: #define TILT_FAST SPEED_HI
! 37:
! 38:
! 39: /* Pelco-D protocol */
! 40:
! 41: // Helper Command bitField structures
! 42:
! 43: struct bitD_Cmd1 {
! 44: u_char focus_near:1;
! 45: u_char iris_open:1;
! 46: u_char iris_close:1;
! 47: u_char cam_on:1;
! 48: u_char auto_scan:1;
! 49: u_char reserved:2;
! 50: u_char sense:1;
! 51: };
! 52:
! 53: struct bitD_Cmd2 {
! 54: u_char fixed:1;
! 55: u_char pan_right:1;
! 56: u_char pan_left:1;
! 57: u_char tilt_up:1;
! 58: u_char tilt_down:1;
! 59: u_char zoom_tele:1;
! 60: u_char zoom_wide:1;
! 61: u_char focus_far:1;
! 62: };
! 63:
! 64: typedef struct tagPelcoD {
! 65: u_char d_sync;
! 66: u_char d_cam;
! 67: struct bitD_Cmd1 d_cmd1;
! 68: struct bitD_Cmd2 d_cmd2;
! 69: u_char d_data[2];
! 70: u_char d_crc;
! 71: } pelco_d_t; // 7 bytes packet
! 72:
! 73:
! 74: /* Pelco-P protocol */
! 75:
! 76: // Helper Data bitField structures
! 77:
! 78: struct bitP_Cmd1 {
! 79: u_char focus_far:1;
! 80: u_char focus_near:1;
! 81: u_char iris_open:1;
! 82: u_char iris_close:1;
! 83: u_char cam_on:1;
! 84: u_char auto_scan:1;
! 85: u_char camera:1;
! 86: u_char fixed:1;
! 87: };
! 88:
! 89: struct bitP_Cmd2 {
! 90: u_char for_pan_tilt:1;
! 91: u_char pan_right:1;
! 92: u_char pan_left:1;
! 93: u_char tilt_up:1;
! 94: u_char tilt_down:1;
! 95: u_char zoom_tele:1;
! 96: u_char zoom_wide:1;
! 97: u_char fixed:1;
! 98: };
! 99:
! 100: typedef struct tagPelcoP {
! 101: u_char p_stx;
! 102: u_char p_cam;
! 103: struct bitP_Cmd1 p_cmd1;
! 104: struct bitP_Cmd2 p_cmd2;
! 105: u_char p_data[2];
! 106: u_char p_etx;
! 107: u_char p_crc;
! 108: } pelco_p_t; // 8 bytes packet
! 109:
! 110:
! 111: // -------------------------------------------------------
! 112: // pelco_GetErrno() Get error code of last operation
! 113: inline int pelco_GetErrno();
! 114: // pelco_GetError() Get error text of last operation
! 115: inline const char *pelco_GetError();
! 116: // -------------------------------------------------------
! 117:
! 118:
! 119: /*
! 120: * pelcoOpen() Open packet record for camera number with Pelco version D/P
! 121: * @pelcoVer = Pelco protocol version Dd | Pp
! 122: * @camNo = Packet for camera number address
! 123: * return: NULL error, !=NULL ok, allocated memory for packet
! 124: */
! 125: inline void *pelcoOpen(u_char pelcoVer, u_char camNo);
! 126:
! 127: /*
! 128: * pelcoClose() Close packet record and free memory
! 129: * @p = Packet structure for close
! 130: */
! 131: inline void pelcoClose(void * __restrict p);
! 132:
! 133: /*
! 134: * pelcoAddCmdData() Add commands and datas for already opened packet
! 135: * @p = Input Packet structure
! 136: * @cmd[2] = Input Commands 1 & 2
! 137: * @data[2] = Input Data for commands 1 & 2
! 138: * return: 0xFF - error, 0 - ok
! 139: */
! 140: inline u_char pelcoAddCmdData(void * __restrict p, u_char * __restrict cmd, u_char * __restrict data);
! 141:
! 142:
! 143: /*
! 144: * pelco_GetVersion() Return Pelco protocol version
! 145: * @p = Packet structure
! 146: * return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet
! 147: */
! 148: inline u_char pelco_GetVersion(void * __restrict p);
! 149:
! 150: /*
! 151: * pelco_GetCamNo() Get Camera number and check for valid packet
! 152: * @p = Packet structure
! 153: * return: 0xFF and pelco_GetErrno() == ENOEXEC - error,
! 154: any number is camera address
! 155: */
! 156: inline u_char pelco_GetCamNo(void * __restrict p);
! 157:
! 158: /*
! 159: * pelco_GetCamCmdData() Get from Camera commands and datas with verify packet
! 160: * @p = Input Packet structure
! 161: * @cam = Output camera number
! 162: * @cmd[2] = Output Commands 1 & 2
! 163: * @data[2] = Output Data for commands 1 & 2
! 164: * return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet
! 165: */
! 166: inline u_char pelco_GetCamCmdData(void * __restrict p, u_char * __restrict cam,
! 167: u_char * __restrict cmd, u_char * __restrict data);
! 168:
! 169:
! 170: /*
! 171: * pelco_D_toCmd() Convert to Pelco D commands
! 172: * @cmd[2] = Input Commands 1 & 2
! 173: * @cmd1 = Output typecasted commands 1
! 174: * @cmd2 = Output typecasted commands 2
! 175: * return: 0xFF - error, !=0 return number arguments
! 176: */
! 177: inline u_char pelco_D_toCmd(u_char * __restrict cmd,
! 178: struct bitD_Cmd1 * __restrict cmd1, struct bitD_Cmd2 * __restrict cmd2);
! 179:
! 180: /*
! 181: * pelco_P_toCmd() Convert to Pelco P commands
! 182: * @cmd[2] = Input Commands 1 & 2
! 183: * @cmd1 = Output typecasted commands 1
! 184: * @cmd2 = Output typecasted commands 2
! 185: * return: 0xFF - error, !=0 return number arguments
! 186: */
! 187: inline u_char pelco_P_toCmd(u_char * __restrict cmd,
! 188: struct bitP_Cmd1 * __restrict cmd1, struct bitP_Cmd2 * __restrict cmd2);
! 189:
! 190: /*
! 191: * pelco_D_fromCmd() Convert from Pelco D commands
! 192: * @cmd1 = Input typecasted commands 1
! 193: * @cmd2 = Input typecasted commands 2
! 194: * @cmd[2] = Output Commands 1 & 2
! 195: * return: 0xFF - error, 0 - ok
! 196: */
! 197: inline u_char pelco_D_fromCmd(struct bitD_Cmd1 cmd1, struct bitD_Cmd2 cmd2,
! 198: u_char * __restrict cmd);
! 199:
! 200: /*
! 201: * pelco_P_fromCmd() Convert from Pelco P commands
! 202: * @cmd1 = Input typecasted commands 1
! 203: * @cmd2 = Input typecasted commands 2
! 204: * @cmd[2] = Output Commands 1 & 2
! 205: * return: 0xFF - error, 0 - ok
! 206: */
! 207: inline u_char pelco_P_fromCmd(struct bitP_Cmd1 cmd1, struct bitP_Cmd2 cmd2,
! 208: u_char * __restrict cmd);
! 209:
! 210: /*
! 211: * pelco_SetCamCmdData() Set Camera commands and datas
! 212: * @ver = Input Pelco (d | p) version
! 213: * @cam = Input camera number
! 214: * @cmd[2] = Input Commands 1 & 2
! 215: * @data[2] = Input Data for commands 1 & 2
! 216: * @p = Output Packet structure
! 217: * return: 0xFF - error, 0 - ok
! 218: */
! 219: inline u_char pelco_SetCamCmdData(u_char ver, u_char __restrict cam,
! 220: u_char * __restrict cmd, u_char * __restrict data, void * __restrict p);
! 221:
! 222:
! 223: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>