File:  [ELWIX - Embedded LightWeight unIX -] / libaitpelco / src / set.c
Revision 1.1.1.1.2.2: download - view: text, annotated - select for diffs - revision graph
Thu Mar 17 08:36:14 2011 UTC (13 years, 3 months ago) by misho
Branches: pelco1_0
Diff to: branchpoint 1.1.1.1: preferred, unified
fix unwanted restrict

    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: set.c,v 1.1.1.1.2.2 2011/03/17 08:36:14 misho Exp $
    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) {
   25: 		pelcoSetErr(EINVAL, "invalid argument!\n");
   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) {
   48: 		pelcoSetErr(EINVAL, "invalid argument!\n");
   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 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) {
   75: 		pelcoSetErr(EINVAL, "invalid argument!\n");
   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:
  104: 			pelcoSetErr(ENOEXEC, "Invalid protocol!\n");
  105: 			return 0xFF;
  106: 	}
  107: 
  108: 	return ret;
  109: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>