Annotation of libaitpelco/src/set.c, revision 1.1.1.1.2.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 $
1.1.1.1.2.1! misho 6: * $Id: set.c,v 1.1.1.1 2010/01/22 00:57:32 misho Exp $
1.1 misho 7: *
8: *************************************************************************/
9: #include "global.h"
10:
11:
12: /*
13: * pelco_D_fromCmd() Convert from Pelco D commands
14: * @cmd1 = Input typecasted commands 1
15: * @cmd2 = Input typecasted commands 2
16: * @cmd[2] = Output Commands 1 & 2
17: * return: 0xFF - error, 0 - ok
18: */
19: inline u_char pelco_D_fromCmd(struct bitD_Cmd1 cmd1, struct bitD_Cmd2 cmd2,
20: u_char * __restrict cmd)
21: {
22: u_char ret = 0;
23:
24: if (!cmd) {
1.1.1.1.2.1! misho 25: pelcoSetErr(EINVAL, "invalid argument!\n");
1.1 misho 26: return 0xFF;
27: }
28:
29: memcpy(&cmd[0], &cmd1, 1);
30: memcpy(&cmd[1], &cmd2, 1);
31:
32: return ret;
33: }
34:
35: /*
36: * pelco_P_fromCmd() Convert from Pelco P commands
37: * @cmd1 = Input typecasted commands 1
38: * @cmd2 = Input typecasted commands 2
39: * @cmd[2] = Output Commands 1 & 2
40: * return: 0xFF - error, 0 - ok
41: */
42: inline u_char pelco_P_fromCmd(struct bitP_Cmd1 cmd1, struct bitP_Cmd2 cmd2,
43: u_char * __restrict cmd)
44: {
45: u_char ret = 0;
46:
47: if (!cmd) {
1.1.1.1.2.1! misho 48: pelcoSetErr(EINVAL, "invalid argument!\n");
1.1 misho 49: return 0xFF;
50: }
51:
52: memcpy(&cmd[0], &cmd1, 1);
53: memcpy(&cmd[1], &cmd2, 1);
54:
55: return ret;
56: }
57:
58: /*
59: * pelco_SetCamCmdData() Set Camera commands and datas
60: * @ver = Input Pelco (d | p) version
61: * @cam = Input camera number
62: * @cmd[2] = Input Commands 1 & 2
63: * @data[2] = Input Data for commands 1 & 2
64: * @p = Output Packet structure
65: * return: 0xFF - error, 0 - ok
66: */
67: inline u_char pelco_SetCamCmdData(u_char ver, u_char __restrict cam,
68: u_char * __restrict cmd, u_char * __restrict data, void * __restrict p)
69: {
70: u_char ret = 0;
71: pelco_d_t *pd = (pelco_d_t*) p;
72: pelco_p_t *pp = (pelco_p_t*) p;
73:
74: if (!p) {
1.1.1.1.2.1! misho 75: pelcoSetErr(EINVAL, "invalid argument!\n");
1.1 misho 76: return 0xFF;
77: }
78:
79: switch (ver) {
80: case 'D':
81: case 'd':
82: memset(pd, 0, sizeof(pelco_d_t));
83: pd->d_sync = VER_D_SYNC;
84: pd->d_cam = cam;
85: if (cmd)
86: memcpy(&pd->d_cmd1, cmd, 2);
87: if (data)
88: memcpy(&pd->d_data, data, 2);
89: pd->d_crc = crcPelco(ver, p);
90: break;
91: case 'P':
92: case 'p':
93: memset(pp, 0, sizeof(pelco_p_t));
94: pp->p_stx = VER_P_STX;
95: pp->p_cam = !cam ? cam : cam - 1;
96: if (cmd)
97: memcpy(&pp->p_cmd1, cmd, 2);
98: if (data)
99: memcpy(&pp->p_data, data, 2);
100: pp->p_etx = VER_P_ETX;
101: pp->p_crc = crcPelco(ver, p);
102: break;
103: default:
1.1.1.1.2.1! misho 104: pelcoSetErr(ENOEXEC, "Invalid protocol!\n");
1.1 misho 105: return 0xFF;
106: }
107:
108: return ret;
109: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>