--- libaitpelco/src/aitpelco.c 2010/01/22 00:57:32 1.1.1.1 +++ libaitpelco/src/aitpelco.c 2010/03/12 14:57:18 1.1.1.1.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitpelco.c,v 1.1.1.1 2010/01/22 00:57:32 misho Exp $ +* $Id: aitpelco.c,v 1.1.1.1.2.2 2010/03/12 14:57:18 misho Exp $ * *************************************************************************/ #include "global.h" @@ -108,7 +108,51 @@ inline void pelcoClose(void * __restrict p) free(p); } +/* + * pelcoLoad() Load packet from input buffer + * @buffer = Pelco packet from input buffer + * return: NULL error, !=NULL ok, allocated memory for packet + */ +inline void *pelcoLoad(u_char *buffer) +{ + pelco_d_t *pd; + pelco_p_t *pp; + void *p = NULL; + switch (pelco_GetVersion(buffer)) { + case 'd': + if (pelco_GetCamNo(buffer) < FIRST_CAM_D) { + pelcoSetErr(ENOEXEC, "Error:: unsupported camera number %d!\n", + pelco_GetCamNo(buffer)); + return NULL; + } + + pd = malloc(sizeof(pelco_d_t)); + if (!pd) { + SETERR; + return NULL; + } else + memcpy(pd, buffer, sizeof(pelco_d_t)); + + p = pd; + break; + case 'p': + pp = malloc(sizeof(pelco_p_t)); + if (!pp) { + SETERR; + return NULL; + } else + memcpy(pp, buffer, sizeof(pelco_p_t)); + + p = pp; + break; + default: + pelcoSetErr(ENOEXEC, "Error:: unsupported Pelco protocol version!\n"); + } + + return p; +} + /* * pelcoAddCmdData() Add commands and datas for already opened packet * @p = Input Packet structure @@ -159,4 +203,16 @@ inline u_char pelcoAddCmdData(void * __restrict p, u_c } return ret; +} + +/* + * pelcoGetCmdData() Get from packet commands and datas with verify packet + * @p = Input Packet structure + * @cmd[2] = Output Commands 1 & 2 + * @data[2] = Output Data for commands 1 & 2 + * return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet + */ +inline u_char pelcoGetCmdData(void * __restrict p, u_char * __restrict cmd, u_char * __restrict data) +{ + return pelco_GetCamCmdData(p, NULL, cmd, data); }