From f9fe769d5d1996866a9a87670a4fa7d9a0dd3cb3 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 19 Jan 2013 18:26:29 +0100 Subject: digital/ucoolib/ucoolib/utils: add bytes tools --- digital/ucoolib/ucoolib/utils/bytes.hh | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 digital/ucoolib/ucoolib/utils/bytes.hh (limited to 'digital') diff --git a/digital/ucoolib/ucoolib/utils/bytes.hh b/digital/ucoolib/ucoolib/utils/bytes.hh new file mode 100644 index 00000000..05d5c0d6 --- /dev/null +++ b/digital/ucoolib/ucoolib/utils/bytes.hh @@ -0,0 +1,52 @@ +#ifndef ucoolib_ucoolib_utils_bytes_hh +#define ucoolib_ucoolib_utils_bytes_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2013 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// 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. +// +// }}} + +namespace ucoo { + +/// Pack two bytes to one 16 bit word. +static inline uint16_t +bytes_pack (uint8_t b1, uint8_t b0) +{ + return b1 << 8 | b0; +} + +/// Pack four bytes to one 32 bit word. +static inline uint32_t +bytes_pack (uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0) +{ + return b3 << 24 | b2 << 16 | b1 << 8 | b0; +} + +/// Unpack one byte from one 32 bit word. +static inline uint8_t +bytes_unpack (uint32_t w, int n) +{ + return (w >> (n * 8)) & 0xff; +} + +} // namespace ucoo + +#endif // ucoolib_ucoolib_utils_bytes_hh -- cgit v1.2.3