From 583f00e0b8efe2832f63efb478a51d3ad35e92ed Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 7 Oct 2007 22:16:03 +0200 Subject: Included SI2E avr modules. Well, this need more works... --- digital/avr/modules/proto/proto_inline.c | 303 +++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 digital/avr/modules/proto/proto_inline.c (limited to 'digital/avr/modules/proto/proto_inline.c') diff --git a/digital/avr/modules/proto/proto_inline.c b/digital/avr/modules/proto/proto_inline.c new file mode 100644 index 00000000..1a9e9406 --- /dev/null +++ b/digital/avr/modules/proto/proto_inline.c @@ -0,0 +1,303 @@ +/* proto_inline.c */ +/* {{{ + * + * Copyright (C) 2005 Nicolas Schodet + * + * Robot APB Team/Efrei 2005. + * Web: http://assos.efrei.fr/robot/ + * Email: robot AT efrei DOT fr + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "modules/utils/byte.h" + +/** Send a command with no argument. */ +extern inline void +proto_send0 (uint8_t cmd) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 1 byte argument. */ +extern inline void +proto_send1b (uint8_t cmd, uint8_t arg0) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 1 word argument. */ +extern inline void +proto_send1w (uint8_t cmd, uint16_t arg0) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v16_to_v8 (arg0, 1)); + proto_arg (v16_to_v8 (arg0, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 1 double word argument. */ +extern inline void +proto_send1d (uint8_t cmd, uint32_t arg0) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v32_to_v8 (arg0, 3)); + proto_arg (v32_to_v8 (arg0, 2)); + proto_arg (v32_to_v8 (arg0, 1)); + proto_arg (v32_to_v8 (arg0, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 2 bytes arguments. */ +extern inline void +proto_send2b (uint8_t cmd, uint8_t arg0, uint8_t arg1) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 2 words arguments. */ +extern inline void +proto_send2w (uint8_t cmd, uint16_t arg0, uint16_t arg1) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v16_to_v8 (arg0, 1)); + proto_arg (v16_to_v8 (arg0, 0)); + proto_arg (v16_to_v8 (arg1, 1)); + proto_arg (v16_to_v8 (arg1, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 2 double words arguments. */ +extern inline void +proto_send2d (uint8_t cmd, uint32_t arg0, uint32_t arg1) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v32_to_v8 (arg0, 3)); + proto_arg (v32_to_v8 (arg0, 2)); + proto_arg (v32_to_v8 (arg0, 1)); + proto_arg (v32_to_v8 (arg0, 0)); + proto_arg (v32_to_v8 (arg1, 3)); + proto_arg (v32_to_v8 (arg1, 2)); + proto_arg (v32_to_v8 (arg1, 1)); + proto_arg (v32_to_v8 (arg1, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 3 bytes arguments. */ +extern inline void +proto_send3b (uint8_t cmd, uint8_t arg0, uint8_t arg1, uint8_t arg2) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 3 words arguments. */ +extern inline void +proto_send3w (uint8_t cmd, uint16_t arg0, uint16_t arg1, uint16_t arg2) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v16_to_v8 (arg0, 1)); + proto_arg (v16_to_v8 (arg0, 0)); + proto_arg (v16_to_v8 (arg1, 1)); + proto_arg (v16_to_v8 (arg1, 0)); + proto_arg (v16_to_v8 (arg2, 1)); + proto_arg (v16_to_v8 (arg2, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 3 double words arguments. */ +extern inline void +proto_send3d (uint8_t cmd, uint32_t arg0, uint32_t arg1, uint32_t arg2) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v32_to_v8 (arg0, 3)); + proto_arg (v32_to_v8 (arg0, 2)); + proto_arg (v32_to_v8 (arg0, 1)); + proto_arg (v32_to_v8 (arg0, 0)); + proto_arg (v32_to_v8 (arg1, 3)); + proto_arg (v32_to_v8 (arg1, 2)); + proto_arg (v32_to_v8 (arg1, 1)); + proto_arg (v32_to_v8 (arg1, 0)); + proto_arg (v32_to_v8 (arg2, 3)); + proto_arg (v32_to_v8 (arg2, 2)); + proto_arg (v32_to_v8 (arg2, 1)); + proto_arg (v32_to_v8 (arg2, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 4 bytes arguments. */ +extern inline void +proto_send4b (uint8_t cmd, uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t + arg3) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + proto_arg (arg3); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 4 words arguments. */ +extern inline void +proto_send4w (uint8_t cmd, uint16_t arg0, uint16_t arg1, uint16_t arg2, + uint16_t arg3) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v16_to_v8 (arg0, 1)); + proto_arg (v16_to_v8 (arg0, 0)); + proto_arg (v16_to_v8 (arg1, 1)); + proto_arg (v16_to_v8 (arg1, 0)); + proto_arg (v16_to_v8 (arg2, 1)); + proto_arg (v16_to_v8 (arg2, 0)); + proto_arg (v16_to_v8 (arg3, 1)); + proto_arg (v16_to_v8 (arg3, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 4 double words arguments. */ +extern inline void +proto_send4d (uint8_t cmd, uint32_t arg0, uint32_t arg1, uint32_t arg2, + uint32_t arg3) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v32_to_v8 (arg0, 3)); + proto_arg (v32_to_v8 (arg0, 2)); + proto_arg (v32_to_v8 (arg0, 1)); + proto_arg (v32_to_v8 (arg0, 0)); + proto_arg (v32_to_v8 (arg1, 3)); + proto_arg (v32_to_v8 (arg1, 2)); + proto_arg (v32_to_v8 (arg1, 1)); + proto_arg (v32_to_v8 (arg1, 0)); + proto_arg (v32_to_v8 (arg2, 3)); + proto_arg (v32_to_v8 (arg2, 2)); + proto_arg (v32_to_v8 (arg2, 1)); + proto_arg (v32_to_v8 (arg2, 0)); + proto_arg (v32_to_v8 (arg3, 3)); + proto_arg (v32_to_v8 (arg3, 2)); + proto_arg (v32_to_v8 (arg3, 1)); + proto_arg (v32_to_v8 (arg3, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 5 bytes arguments. */ +extern inline void +proto_send5b (uint8_t cmd, uint8_t arg0, uint8_t arg1, uint8_t arg2, + uint8_t arg3, uint8_t arg4) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + proto_arg (arg3); + proto_arg (arg4); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 5 words arguments. */ +extern inline void +proto_send5w (uint8_t cmd, uint16_t arg0, uint16_t arg1, uint16_t arg2, + uint16_t arg3, uint16_t arg4) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (v16_to_v8 (arg0, 1)); + proto_arg (v16_to_v8 (arg0, 0)); + proto_arg (v16_to_v8 (arg1, 1)); + proto_arg (v16_to_v8 (arg1, 0)); + proto_arg (v16_to_v8 (arg2, 1)); + proto_arg (v16_to_v8 (arg2, 0)); + proto_arg (v16_to_v8 (arg3, 1)); + proto_arg (v16_to_v8 (arg3, 0)); + proto_arg (v16_to_v8 (arg4, 1)); + proto_arg (v16_to_v8 (arg4, 0)); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 6 bytes arguments. */ +extern inline void +proto_send6b (uint8_t cmd, uint8_t arg0, uint8_t arg1, uint8_t arg2, + uint8_t arg3, uint8_t arg4, uint8_t arg5) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + proto_arg (arg3); + proto_arg (arg4); + proto_arg (arg5); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 7 bytes arguments. */ +extern inline void +proto_send7b (uint8_t cmd, uint8_t arg0, uint8_t arg1, uint8_t arg2, + uint8_t arg3, uint8_t arg4, uint8_t arg5, uint8_t arg6) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + proto_arg (arg3); + proto_arg (arg4); + proto_arg (arg5); + proto_arg (arg6); + AC_PROTO_PUTC ('\r'); +} + +/** Send a command with 8 bytes arguments. */ +extern inline void +proto_send8b (uint8_t cmd, + uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t arg3, + uint8_t arg4, uint8_t arg5, uint8_t arg6, uint8_t arg7) +{ + AC_PROTO_PUTC ('!'); + AC_PROTO_PUTC (cmd); + proto_arg (arg0); + proto_arg (arg1); + proto_arg (arg2); + proto_arg (arg3); + proto_arg (arg4); + proto_arg (arg5); + proto_arg (arg6); + proto_arg (arg7); + AC_PROTO_PUTC ('\r'); +} + -- cgit v1.2.3