summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/endian.h
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-05-05 12:50:43 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-05-05 12:50:43 +0000
commitb074e80e192a4ef8b6b9ef540c1185f1f7154dbe (patch)
tree28d55b1e8406a9658841d4c553c198b592ef482c /cpukit/include/rtems/endian.h
parentRegenerate. (diff)
downloadrtems-b074e80e192a4ef8b6b9ef540c1185f1f7154dbe.tar.bz2
Added functions to translate integers to/from byte streams.
Diffstat (limited to 'cpukit/include/rtems/endian.h')
-rw-r--r--cpukit/include/rtems/endian.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/cpukit/include/rtems/endian.h b/cpukit/include/rtems/endian.h
index 678b8bad3b..1321d244c2 100644
--- a/cpukit/include/rtems/endian.h
+++ b/cpukit/include/rtems/endian.h
@@ -89,4 +89,136 @@ static inline uint16_t htons( uint16_t _x )
#error "Unknown endian-ness for this cpu"
#endif
+static inline uint16_t rtems_uint16_from_little_endian( const uint8_t *data)
+{
+ uint16_t value = 0;
+ ssize_t i = 0;
+
+ for (i = 1; i >= 0; --i) {
+ value = (uint16_t) ((value << 8) + data [i]);
+ }
+
+ return value;
+}
+
+static inline uint32_t rtems_uint32_from_little_endian( const uint8_t *data)
+{
+ uint32_t value = 0;
+ ssize_t i = 0;
+
+ for (i = 3; i >= 0; --i) {
+ value = (value << 8) + data [i];
+ }
+
+ return value;
+}
+
+static inline uint64_t rtems_uint64_from_little_endian( const uint8_t *data)
+{
+ uint64_t value = 0;
+ ssize_t i = 0;
+
+ for (i = 7; i >= 0; --i) {
+ value = (value << 8) + (uint64_t) data [i];
+ }
+
+ return value;
+}
+
+static inline uint16_t rtems_uint16_from_big_endian( const uint8_t *data)
+{
+ uint16_t value = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 2; ++i) {
+ value = (uint16_t) ((value << 8) + data [i]);
+ }
+
+ return value;
+}
+
+static inline uint32_t rtems_uint32_from_big_endian( const uint8_t *data)
+{
+ uint32_t value = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 4; ++i) {
+ value = (value << 8) + (uint32_t) data [i];
+ }
+
+ return value;
+}
+
+static inline uint64_t rtems_uint64_from_big_endian( const uint8_t *data)
+{
+ uint64_t value = 0;
+ size_t i = 0;
+
+ for (i = 0; i < 8; ++i) {
+ value = (value << 8) + (uint64_t) data [i];
+ }
+
+ return value;
+}
+
+static inline void rtems_uint16_to_little_endian( uint16_t value, uint8_t *data)
+{
+ size_t i = 0;
+
+ for (i = 0; i < 2; ++i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
+static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data)
+{
+ size_t i = 0;
+
+ for (i = 0; i < 4; ++i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
+static inline void rtems_uint64_to_little_endian( uint64_t value, uint8_t *data)
+{
+ size_t i = 0;
+
+ for (i = 0; i < 8; ++i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
+static inline void rtems_uint16_to_big_endian( uint16_t value, uint8_t *data)
+{
+ ssize_t i = 0;
+
+ for (i = 1; i >= 0; --i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
+static inline void rtems_uint32_to_big_endian( uint32_t value, uint8_t *data)
+{
+ ssize_t i = 0;
+
+ for (i = 3; i >= 0; --i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
+static inline void rtems_uint64_to_big_endian( uint64_t value, uint8_t *data)
+{
+ ssize_t i = 0;
+
+ for (i = 7; i >= 0; --i) {
+ data [i] = (uint8_t) value;
+ value >>= 8;
+ }
+}
+
#endif /* _RTEMS_ENDIAN_H */