IRremote
LongUnion.h
Go to the documentation of this file.
1 /*
2  * LongUnion.h
3  *
4  * Copyright (C) 2020-2022 Armin Joachimsmeyer
5  * Email: armin.joachimsmeyer@gmail.com
6  *
7  * This file is part of Arduino-Utils https://github.com/ArminJo/Arduino-Utils.
8  *
9  * Arduino-Utils is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <http://www.gnu.org/licenses/gpl.html>.
21  *
22  */
23 
24 #if !defined(_WORD_UNION_H) || !defined(_LONG_UNION_H) || !defined(_LONG_LONG_UNION_H)
25 
26 #include <stdint.h>
27 
28 #ifndef _WORD_UNION_H
29 #define _WORD_UNION_H
30 
34 union WordUnion {
35  struct {
36  uint8_t LowByte;
37  uint8_t HighByte;
38  } UByte;
39  struct {
40  int8_t LowByte;
41  int8_t HighByte;
42  } Byte;
43  uint8_t UBytes[2]; // UBytes[0] is LowByte
44  int8_t Bytes[2];
45  uint16_t UWord;
46  int16_t Word;
47  uint8_t *BytePointer;
48 };
49 #endif // _WORD_UNION_H
50 
51 #ifndef _LONG_UNION_H
52 #define _LONG_UNION_H
53 
57 union LongUnion {
58  struct {
59  uint8_t LowByte;
60  uint8_t MidLowByte;
61  uint8_t MidHighByte;
62  uint8_t HighByte;
63  } UByte;
64  struct {
65  int8_t LowByte;
66  int8_t MidLowByte;
67  int8_t MidHighByte;
68  int8_t HighByte;
69  } Byte;
70  /* Does not work for STM32
71  struct {
72  uint8_t LowByte;
73  uint16_t MidWord;
74  uint8_t HighByte;
75  } UByteWord;
76  */
77  struct {
78  uint16_t LowWord;
79  uint16_t HighWord;
80  } UWord;
81  struct {
82  int16_t LowWord;
83  int16_t HighWord;
84  } Word;
85  struct {
89  uint8_t UBytes[4]; // seems to have the same code size as using struct UByte
90  int8_t Bytes[4]; // Bytes[0] is LowByte
91  uint16_t UWords[2];
92  int16_t Words[2];
93  uint32_t ULong;
94  int32_t Long;
95 };
96 #endif // _LONG_UNION_H
97 
98 #ifndef _LONG_LONG_UNION_H
99 #define _LONG_LONG_UNION_H
100 
105  struct {
106  uint16_t LowWord;
107  uint16_t MidLowWord;
108  uint16_t MidHighWord;
109  uint16_t HighWord;
110  } UWord;
111  struct {
112  int16_t LowWord;
113  int16_t MidLowWord;
114  int16_t MidHighWord;
115  int16_t HighWord;
116  } Word;
117  struct {
123  struct {
124  uint32_t LowLong;
125  uint32_t HighLong;
126  } ULong;
127  struct {
128  int32_t LowLong;
129  int32_t HighLong;
130  } Long;
131  struct {
135  uint8_t UBytes[8]; // seems to have the same code size as using struct UByte
136  int8_t Bytes[8];
137  uint16_t UWords[4];
138  int16_t Words[4];
139  uint64_t ULongLong;
140  int64_t LongLong;
141 };
142 #endif // _LONG_LONG_UNION_H
143 
144 #endif // !defined(_WORD_UNION_H) || !defined(_LONG_UNION_H) || !defined(_LONG_LONG_UNION_H)
LongLongUnion::UBytes
uint8_t UBytes[8]
Definition: LongUnion.h:135
LongUnion
Union to specify parts / manifestations of a 32 bit Long without casts and shifts.
Definition: LongUnion.h:57
LongLongUnion::MidLowWord
uint16_t MidLowWord
Definition: LongUnion.h:107
LongLongUnion::Word
struct LongLongUnion::@10 Word
WordUnion
Union to specify parts / manifestations of a 16 bit Word without casts and shifts.
Definition: LongUnion.h:34
LongLongUnion::LowWord
int16_t LowWord
Definition: LongUnion.h:112
WordUnion::UByte
struct WordUnion::@2 UByte
LongLongUnion::LongUnion
struct LongLongUnion::@14 LongUnion
WordUnion::HighByte
uint8_t HighByte
Definition: LongUnion.h:37
LongLongUnion::MidHighWord
int16_t MidHighWord
Definition: LongUnion.h:114
LongUnion::UByte
struct LongUnion::@4 UByte
LongLongUnion::HighWord
uint16_t HighWord
Definition: LongUnion.h:109
LongUnion::Byte
struct LongUnion::@5 Byte
WordUnion::LowByte
int8_t LowByte
Definition: LongUnion.h:40
LongLongUnion::Words
int16_t Words[4]
Definition: LongUnion.h:138
LongUnion::UBytes
uint8_t UBytes[4]
Definition: LongUnion.h:89
WordUnion::UBytes
uint8_t UBytes[2]
Definition: LongUnion.h:43
LongUnion::Words
int16_t Words[2]
Definition: LongUnion.h:92
LongUnion::LowByte
uint8_t LowByte
Definition: LongUnion.h:59
LongUnion::HighByte
uint8_t HighByte
Definition: LongUnion.h:62
LongLongUnion::HighWord
WordUnion HighWord
Definition: LongUnion.h:121
LongUnion::LowWord
uint16_t LowWord
Definition: LongUnion.h:78
LongLongUnion
Union to specify parts / manifestations of a 64 bit LongLong without casts and shifts.
Definition: LongUnion.h:104
LongUnion::MidLowByte
uint8_t MidLowByte
Definition: LongUnion.h:60
LongLongUnion::Bytes
int8_t Bytes[8]
Definition: LongUnion.h:136
LongLongUnion::WordUnion
struct LongLongUnion::@11 WordUnion
LongLongUnion::LowLong
LongUnion LowLong
Definition: LongUnion.h:132
LongUnion::HighWord
uint16_t HighWord
Definition: LongUnion.h:79
LongUnion::Word
struct LongUnion::@7 Word
LongLongUnion::ULong
struct LongLongUnion::@12 ULong
LongLongUnion::HighLong
uint32_t HighLong
Definition: LongUnion.h:125
WordUnion::HighByte
int8_t HighByte
Definition: LongUnion.h:41
WordUnion::Byte
struct WordUnion::@3 Byte
LongLongUnion::MidLowWord
WordUnion MidLowWord
Definition: LongUnion.h:119
WordUnion::Bytes
int8_t Bytes[2]
Definition: LongUnion.h:44
LongLongUnion::HighLong
LongUnion HighLong
Definition: LongUnion.h:133
LongLongUnion::LowWord
uint16_t LowWord
Definition: LongUnion.h:106
LongUnion::Long
int32_t Long
Definition: LongUnion.h:94
LongUnion::ULong
uint32_t ULong
Definition: LongUnion.h:93
LongLongUnion::LongLong
int64_t LongLong
Definition: LongUnion.h:140
LongUnion::HighWord
WordUnion HighWord
Definition: LongUnion.h:87
LongUnion::LowWord
WordUnion LowWord
Definition: LongUnion.h:86
LongLongUnion::HighWord
int16_t HighWord
Definition: LongUnion.h:115
LongLongUnion::UWords
uint16_t UWords[4]
Definition: LongUnion.h:137
LongLongUnion::ULongLong
uint64_t ULongLong
Definition: LongUnion.h:139
WordUnion::Word
int16_t Word
Definition: LongUnion.h:46
WordUnion::BytePointer
uint8_t * BytePointer
Definition: LongUnion.h:47
LongLongUnion::UWord
struct LongLongUnion::@9 UWord
LongUnion::Bytes
int8_t Bytes[4]
Definition: LongUnion.h:90
LongLongUnion::MidLowWord
int16_t MidLowWord
Definition: LongUnion.h:113
LongUnion::MidHighByte
uint8_t MidHighByte
Definition: LongUnion.h:61
LongUnion::UWords
uint16_t UWords[2]
Definition: LongUnion.h:91
LongUnion::LowWord
int16_t LowWord
Definition: LongUnion.h:82
LongUnion::UWord
struct LongUnion::@6 UWord
LongLongUnion::Long
struct LongLongUnion::@13 Long
LongUnion::HighByte
int8_t HighByte
Definition: LongUnion.h:68
LongUnion::WordUnion
struct LongUnion::@8 WordUnion
WordUnion::LowByte
uint8_t LowByte
Definition: LongUnion.h:36
LongLongUnion::MidHighWord
WordUnion MidHighWord
Definition: LongUnion.h:120
WordUnion::UWord
uint16_t UWord
Definition: LongUnion.h:45
LongLongUnion::MidHighWord
uint16_t MidHighWord
Definition: LongUnion.h:108
LongLongUnion::LowLong
int32_t LowLong
Definition: LongUnion.h:128
LongLongUnion::LowLong
uint32_t LowLong
Definition: LongUnion.h:124
LongUnion::MidHighByte
int8_t MidHighByte
Definition: LongUnion.h:67
LongUnion::LowByte
int8_t LowByte
Definition: LongUnion.h:65
LongLongUnion::LowWord
WordUnion LowWord
Definition: LongUnion.h:118
LongUnion::HighWord
int16_t HighWord
Definition: LongUnion.h:83
LongUnion::MidLowByte
int8_t MidLowByte
Definition: LongUnion.h:66
LongLongUnion::HighLong
int32_t HighLong
Definition: LongUnion.h:129