version 1.1, 2010/01/22 00:57:32
|
version 1.2, 2011/05/10 20:26:08
|
Line 5
|
Line 5
|
* $Author$ |
* $Author$ |
* $Id$ |
* $Id$ |
* |
* |
*************************************************************************/ | ************************************************************************** |
| The ELWIX and AITNET software is distributed under the following |
| terms: |
| |
| All of the documentation and software included in the ELWIX and AITNET |
| Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
| |
| Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
| by Michael Pounov <misho@elwix.org>. All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| 1. Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| 2. Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| 3. All advertising materials mentioning features or use of this software |
| must display the following acknowledgement: |
| This product includes software developed by Michael Pounov <misho@elwix.org> |
| ELWIX - Embedded LightWeight unIX and its contributors. |
| 4. Neither the name of AITNET nor the names of its contributors |
| may be used to endorse or promote products derived from this software |
| without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND |
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| SUCH DAMAGE. |
| */ |
#include "global.h" |
#include "global.h" |
|
|
|
|
Line 14
|
Line 51
|
* @p = Packet structure |
* @p = Packet structure |
* return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet |
* return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet |
*/ |
*/ |
inline u_char pelco_GetVersion(void * __restrict p) | inline u_char |
| pelco_GetVersion(void * __restrict p) |
{ |
{ |
u_char *ptr = (u_char *) p; |
u_char *ptr = (u_char *) p; |
|
|
if (!p) { | if (!p || !*ptr) { |
pelcoSetErr(EINVAL, "Error:: invalid argument!\n"); | pelcoSetErr(EINVAL, "invalid argument!\n"); |
return 0; |
return 0; |
} |
} |
|
|
Line 29 inline u_char pelco_GetVersion(void * __restrict p)
|
Line 67 inline u_char pelco_GetVersion(void * __restrict p)
|
case VER_P_STX: |
case VER_P_STX: |
if (VER_P_ETX == ptr[6]) |
if (VER_P_ETX == ptr[6]) |
return 'p'; |
return 'p'; |
pelcoSetErr(ENOEXEC, "Error:: broken Pelco P packet ...\n"); | pelcoSetErr(ENOEXEC, "broken Pelco P packet ...\n"); |
break; |
break; |
default: |
default: |
pelcoSetErr(ENOEXEC, "Error:: unsupported Pelco protocol version!\n"); | pelcoSetErr(ENOEXEC, "unsupported Pelco protocol version!\n"); |
} |
} |
|
|
return 0; |
return 0; |
Line 44 inline u_char pelco_GetVersion(void * __restrict p)
|
Line 82 inline u_char pelco_GetVersion(void * __restrict p)
|
* return: 0xFF and pelco_GetErrno() == ENOEXEC - error, |
* return: 0xFF and pelco_GetErrno() == ENOEXEC - error, |
any number is camera address |
any number is camera address |
*/ |
*/ |
inline u_char pelco_GetCamNo(void * __restrict p) | inline u_char |
| pelco_GetCamNo(void * __restrict p) |
{ |
{ |
u_char ver; |
u_char ver; |
u_char *ptr = (u_char *) p; |
u_char *ptr = (u_char *) p; |
|
|
if (!p) { | if (!p || !*ptr) { |
pelcoSetErr(EINVAL, "Error:: invalid argument!\n"); | pelcoSetErr(EINVAL, "invalid argument!\n"); |
return 0; |
return 0; |
} |
} |
|
|
Line 60 inline u_char pelco_GetCamNo(void * __restrict p)
|
Line 99 inline u_char pelco_GetCamNo(void * __restrict p)
|
if (crcPelco(ver, p) == ptr[6]) |
if (crcPelco(ver, p) == ptr[6]) |
return ptr[1]; |
return ptr[1]; |
|
|
pelcoSetErr(ENOEXEC, "Error:: broken Pelco D packet!!!\n"); | pelcoSetErr(ENOEXEC, "broken Pelco D packet!!!\n"); |
break; |
break; |
case 'p': |
case 'p': |
if (crcPelco(ver, p) == ptr[7]) |
if (crcPelco(ver, p) == ptr[7]) |
return ptr[1] + 1; |
return ptr[1] + 1; |
|
|
pelcoSetErr(ENOEXEC, "Error:: broken Pelco P packet!!!\n"); | pelcoSetErr(ENOEXEC, "broken Pelco P packet!!!\n"); |
break; |
break; |
} |
} |
|
|
Line 81 inline u_char pelco_GetCamNo(void * __restrict p)
|
Line 120 inline u_char pelco_GetCamNo(void * __restrict p)
|
* @data[2] = Output Data for commands 1 & 2 |
* @data[2] = Output Data for commands 1 & 2 |
* return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet |
* return: 'd' - PelcoD, 'p' - PelcoP, 0 - unknown or bad packet |
*/ |
*/ |
inline u_char pelco_GetCamCmdData(void * __restrict p, u_char * __restrict cam, | inline u_char |
| pelco_GetCamCmdData(void * __restrict p, u_char * __restrict cam, |
u_char * __restrict cmd, u_char * __restrict data) |
u_char * __restrict cmd, u_char * __restrict data) |
{ |
{ |
u_char ret; |
u_char ret; |
u_char *ptr = (u_char *) p; |
u_char *ptr = (u_char *) p; |
|
|
if (!p) { | if (!p || !*ptr) { |
pelcoSetErr(EINVAL, "Error:: invalid argument!\n"); | pelcoSetErr(EINVAL, "invalid argument!\n"); |
return 0; |
return 0; |
} |
} |
|
|
Line 96 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
Line 136 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
switch (ret) { |
switch (ret) { |
case 'd': |
case 'd': |
if (crcPelco(ret, p) != ptr[6]) { |
if (crcPelco(ret, p) != ptr[6]) { |
pelcoSetErr(ENOEXEC, "Error:: broken Pelco D packet!!!\n"); | pelcoSetErr(ENOEXEC, "broken Pelco D packet!!!\n"); |
return 0; |
return 0; |
} |
} |
|
|
Line 105 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
Line 145 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
break; |
break; |
case 'p': |
case 'p': |
if (crcPelco(ret, p) != ptr[7]) { |
if (crcPelco(ret, p) != ptr[7]) { |
pelcoSetErr(ENOEXEC, "Error:: broken Pelco P packet!!!\n"); | pelcoSetErr(ENOEXEC, "broken Pelco P packet!!!\n"); |
return 0; |
return 0; |
} |
} |
|
|
Line 128 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
Line 168 inline u_char pelco_GetCamCmdData(void * __restrict p,
|
* @cmd2 = Output typecasted commands 2 |
* @cmd2 = Output typecasted commands 2 |
* return: 0xFF - error, !=0 return number arguments |
* return: 0xFF - error, !=0 return number arguments |
*/ |
*/ |
inline u_char pelco_D_toCmd(u_char * __restrict cmd, | inline u_char |
struct bitD_Cmd1 * __restrict cmd1, struct bitD_Cmd2 * __restrict cmd2) | pelco_D_toCmd(u_char * __restrict cmd, struct bitD_Cmd1 * __restrict cmd1, |
| struct bitD_Cmd2 * __restrict cmd2) |
{ |
{ |
u_char ret = 0; |
u_char ret = 0; |
|
|
if (!cmd) { |
if (!cmd) { |
pelcoSetErr(EINVAL, "Error:: invalid argument!\n"); | pelcoSetErr(EINVAL, "invalid argument!\n"); |
return 0xFF; |
return 0xFF; |
} |
} |
|
|
Line 157 inline u_char pelco_D_toCmd(u_char * __restrict cmd,
|
Line 198 inline u_char pelco_D_toCmd(u_char * __restrict cmd,
|
* @cmd2 = Output typecasted commands 2 |
* @cmd2 = Output typecasted commands 2 |
* return: 0xFF - error, !=0 return number arguments |
* return: 0xFF - error, !=0 return number arguments |
*/ |
*/ |
inline u_char pelco_P_toCmd(u_char * __restrict cmd, | inline u_char |
struct bitP_Cmd1 * __restrict cmd1, struct bitP_Cmd2 * __restrict cmd2) | pelco_P_toCmd(u_char * __restrict cmd, struct bitP_Cmd1 * __restrict cmd1, |
| struct bitP_Cmd2 * __restrict cmd2) |
{ |
{ |
u_char ret = 0; |
u_char ret = 0; |
|
|
if (!cmd) { |
if (!cmd) { |
pelcoSetErr(EINVAL, "Error:: invalid argument!\n"); | pelcoSetErr(EINVAL, "invalid argument!\n"); |
return 0xFF; |
return 0xFF; |
} |
} |
|
|