1 // Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2 // This Source Code Form is subject to the terms of the Mozilla Public 3 // License, v. 2.0. If a copy of the MPL was not distributed with this 4 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6 #ifndef VSOMEIP_V3_BYTEORDER_HPP 7 #define VSOMEIP_V3_BYTEORDER_HPP 8 9 #if defined(LINUX) 10 #include <endian.h> 11 #elif defined(FREEBSD) 12 #include <sys/endian.h> 13 #else 14 // TEST IF THERE COULD BE AN ERROR! 15 //#error "Undefined OS (only Linux/FreeBSD are currently supported)" 16 #endif 17 18 #if __BYTE_ORDER == __LITTLE_ENDIAN 19 20 #define VSOMEIP_BYTES_TO_WORD(x0, x1) (uint16_t((x0) << 8 | (x1))) 21 #define VSOMEIP_BYTES_TO_LONG(x0, x1, x2, x3) (uint32_t((x0) << 24 | (x1) << 16 | (x2) << 8 | (x3))) 22 23 #define VSOMEIP_WORDS_TO_LONG(x0, x1) (uint32_t((x0) << 16 | (x1))) 24 25 #define VSOMEIP_WORD_BYTE0(x) (uint8_t((x) & 0xFF)) 26 #define VSOMEIP_WORD_BYTE1(x) (uint8_t((x) >> 8)) 27 28 #define VSOMEIP_LONG_BYTE0(x) (uint8_t((x) & 0xFF)) 29 #define VSOMEIP_LONG_BYTE1(x) (uint8_t(((x) >> 8) & 0xFF)) 30 #define VSOMEIP_LONG_BYTE2(x) (uint8_t(((x) >> 16) & 0xFF)) 31 #define VSOMEIP_LONG_BYTE3(x) (uint8_t(((x) >> 24) & 0xFF)) 32 33 #define VSOMEIP_LONG_WORD0(x) (uint16_t((x) & 0xFFFF)) 34 #define VSOMEIP_LONG_WORD1(x) (uint16_t(((x) >> 16) & 0xFFFF)) 35 36 #elif __BYTE_ORDER == __BIG_ENDIAN 37 38 #define VSOMEIP_BYTES_TO_WORD(x0, x1) (uint16_t((x1) << 8 | (x0))) 39 #define VSOMEIP_BYTES_TO_LONG(x0, x1, x2, x3) (uint32_t((x3) << 24 | (x2) << 16 | (x1) << 8 | (x0))) 40 41 #define VSOMEIP_WORDS_TO_LONG(x0, x1) (uint32_t((x1) << 16 | (x0))) 42 43 #define VSOMEIP_WORD_BYTE0(x) (uint8_t((x) >> 8)) 44 #define VSOMEIP_WORD_BYTE1(x) (uint8_t((x) & 0xFF)) 45 46 #define VSOMEIP_LONG_BYTE0(x) (uint8_t(((x) >> 24) & 0xFF)) 47 #define VSOMEIP_LONG_BYTE1(x) (uint8_t(((x) >> 16) & 0xFF)) 48 #define VSOMEIP_LONG_BYTE2(x) (uint8_t(((x) >> 8) & 0xFF)) 49 #define VSOMEIP_LONG_BYTE3(x) (uint8_t((x) & 0xFF)) 50 51 #define VSOMEIP_LONG_WORD0(x) (uint16_t(((x) >> 16) & 0xFFFF)) 52 #define VSOMEIP_LONG_WORD1(x) (uint16_t((x) & 0xFFFF)) 53 54 #else 55 56 #error "__BYTE_ORDER is not defined!" 57 58 #endif 59 60 #endif // VSOMEIP_V3_BYTEORDER_HPP_ 61