IRremoteESP8266
Loading...
Searching...
No Matches
IRutils.h
Go to the documentation of this file.
1#ifndef IRUTILS_H_
2#define IRUTILS_H_
3
4// Copyright 2017 David Conran
5
6#ifndef UNIT_TEST
7#include <Arduino.h>
8#endif
9#define __STDC_LIMIT_MACROS
10#include <stdint.h>
11#ifndef ARDUINO
12#include <string>
13#endif
14#include "IRremoteESP8266.h"
15#include "IRrecv.h"
16
17const uint8_t kNibbleSize = 4;
18const uint8_t kLowNibble = 0;
19const uint8_t kHighNibble = 4;
20const uint8_t kModeBitsSize = 3;
21uint64_t reverseBits(uint64_t input, uint16_t nbits);
22String uint64ToString(uint64_t input, uint8_t base = 10);
23String int64ToString(int64_t input, uint8_t base = 10);
24String typeToString(const decode_type_t protocol,
25 const bool isRepeat = false);
26void serialPrintUint64(uint64_t input, uint8_t base = 10);
27String resultToSourceCode(const decode_results * const results);
28String resultToTimingInfo(const decode_results * const results);
30String resultToHexidecimal(const decode_results * const result);
31bool hasACState(const decode_type_t protocol);
32uint16_t getCorrectedRawLength(const decode_results * const results);
33uint16_t *resultToRawArray(const decode_results * const decode);
34uint8_t sumBytes(const uint8_t * const start, const uint16_t length,
35 const uint8_t init = 0);
36uint8_t xorBytes(const uint8_t * const start, const uint16_t length,
37 const uint8_t init = 0);
38uint16_t countBits(const uint8_t * const start, const uint16_t length,
39 const bool ones = true, const uint16_t init = 0);
40uint16_t countBits(const uint64_t data, const uint8_t length,
41 const bool ones = true, const uint16_t init = 0);
42uint64_t invertBits(const uint64_t data, const uint16_t nbits);
43decode_type_t strToDecodeType(const char *str);
44float celsiusToFahrenheit(const float deg);
45float fahrenheitToCelsius(const float deg);
48namespace irutils {
49String addBoolToString(const bool value, const String label,
50 const bool precomma = true);
51String addToggleToString(const bool toggle, const String label,
52 const bool precomma = true);
53String addIntToString(const uint16_t value, const String label,
54 const bool precomma = true);
55String addSignedIntToString(const int16_t value, const String label,
56 const bool precomma = true);
57String modelToStr(const decode_type_t protocol, const int16_t model);
58String addModelToString(const decode_type_t protocol, const int16_t model,
59 const bool precomma = true);
60String addLabeledString(const String value, const String label,
61 const bool precomma = true);
62String addTempToString(const uint16_t degrees, const bool celsius = true,
63 const bool precomma = true,
64 const bool isSensorTemp = false);
65String addTempFloatToString(const float degrees, const bool celsius = true,
66 const bool precomma = true,
67 const bool isSensorTemp = false);
68String addModeToString(const uint8_t mode, const uint8_t automatic,
69 const uint8_t cool, const uint8_t heat,
70 const uint8_t dry, const uint8_t fan);
71String addFanToString(const uint8_t speed, const uint8_t high,
72 const uint8_t low, const uint8_t automatic,
73 const uint8_t quiet, const uint8_t medium,
74 const uint8_t maximum = 0xFF,
75 const uint8_t medium_high = 0xFF);
76String addSwingHToString(const uint8_t position, const uint8_t automatic,
77 const uint8_t maxleft, const uint8_t left,
78 const uint8_t middle,
79 const uint8_t right, const uint8_t maxright,
80 const uint8_t off,
81 const uint8_t leftright, const uint8_t rightleft,
82 const uint8_t threed, const uint8_t wide);
83String addSwingVToString(const uint8_t position, const uint8_t automatic,
84 const uint8_t highest, const uint8_t high,
85 const uint8_t uppermiddle,
86 const uint8_t middle,
87 const uint8_t lowermiddle,
88 const uint8_t low, const uint8_t lowest,
89 const uint8_t off, const uint8_t swing,
90 const uint8_t breeze, const uint8_t circulate);
91String addDayToString(const uint8_t day_of_week, const int8_t offset = 0,
92 const bool precomma = true);
93String addTimerModeToString(const uint8_t timerType, const uint8_t noTimer,
94 const uint8_t delayTimer,
95 const uint8_t schedule1 = 0xFF,
96 const uint8_t schedule2 = 0xFF,
97 const uint8_t schedule3 = 0xFF,
98 const bool precomma = true);
99String irCommandTypeToString(uint8_t commandType, uint8_t acControlCmd,
100 uint8_t iFeelReportCmd = 0xFF,
101 uint8_t timerCmd = 0xFF,
102 uint8_t configCmd = 0xFF);
103String dayToString(const uint8_t day_of_week, const int8_t offset = 0);
104String daysBitmaskToString(uint8_t daysBitmap, uint8_t offset = 0);
105String channelToString(const uint8_t channel);
106String htmlEscape(const String unescaped);
107String msToString(uint32_t const msecs);
108String minsToString(const uint16_t mins);
109uint8_t sumNibbles(const uint8_t * const start, const uint16_t length,
110 const uint8_t init = 0);
111uint8_t sumNibbles(const uint64_t data, const uint8_t count = 16,
112 const uint8_t init = 0, const bool nibbleonly = true);
113uint16_t sumBytes(const uint64_t data, const uint8_t count = 8,
114 const uint8_t init = 0, const bool byteonly = true);
115uint8_t bcdToUint8(const uint8_t bcd);
116uint8_t uint8ToBcd(const uint8_t integer);
117bool getBit(const uint64_t data, const uint8_t position,
118 const uint8_t size = 64);
119bool getBit(const uint8_t data, const uint8_t position);
120#define GETBIT8(a, b) ((a) & (static_cast<uint8_t>(1) << (b)))
121#define GETBIT16(a, b) ((a) & (static_cast<uint16_t>(1) << (b)))
122#define GETBIT32(a, b) ((a) & (static_cast<uint32_t>(1) << (b)))
123#define GETBIT64(a, b) ((a) & (static_cast<uint64_t>(1) << (b)))
124#define GETBITS8(data, offset, size) \
125 (((data) & ((static_cast<uint8_t>(UINT8_MAX) >> (8 - (size))) << \
126 (offset))) >> (offset))
127#define GETBITS16(data, offset, size) \
128 (((data) & ((static_cast<uint16_t>(UINT16_MAX) >> (16 - (size))) << \
129 (offset))) >> (offset))
130#define GETBITS32(data, offset, size) \
131 (((data) & ((static_cast<uint32_t>(UINT32_MAX) >> (32 - (size))) << \
132 (offset))) >> (offset))
133#define GETBITS64(data, offset, size) \
134 (((data) & ((static_cast<uint64_t>(UINT64_MAX) >> (64 - (size))) << \
135 (offset))) >> (offset))
136uint64_t setBit(const uint64_t data, const uint8_t position,
137 const bool on = true, const uint8_t size = 64);
138uint8_t setBit(const uint8_t data, const uint8_t position,
139 const bool on = true);
140void setBit(uint8_t * const data, const uint8_t position,
141 const bool on = true);
142void setBit(uint32_t * const data, const uint8_t position,
143 const bool on = true);
144void setBit(uint64_t * const data, const uint8_t position,
145 const bool on = true);
146void setBits(uint8_t * const dst, const uint8_t offset, const uint8_t nbits,
147 const uint8_t data);
148void setBits(uint32_t * const dst, const uint8_t offset, const uint8_t nbits,
149 const uint32_t data);
150void setBits(uint64_t * const dst, const uint8_t offset, const uint8_t nbits,
151 const uint64_t data);
152uint8_t * invertBytePairs(uint8_t *ptr, const uint16_t length);
153bool checkInvertedBytePairs(const uint8_t * const ptr, const uint16_t length);
154uint8_t lowLevelSanityCheck(void);
155} // namespace irutils
156#endif // IRUTILS_H_
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition IRremoteESP8266.h:1036
std::string String
Definition IRremoteESP8266.h:1564
uint8_t sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init)
Sum all the bytes of an array and return the least significant 8-bits of the result.
Definition IRutils.cpp:451
String resultToHumanReadableBasic(const decode_results *const results)
Dump out the decode_results structure into a human readable format.
Definition IRutils.cpp:398
decode_type_t strToDecodeType(const char *str)
Convert a C-style string to a decode_type_t.
Definition IRutils.cpp:120
String resultToSourceCode(const decode_results *const results)
Return a String containing the key values of a decode_results structure in a C/C++ code style format.
Definition IRutils.cpp:252
float celsiusToFahrenheit(const float deg)
Convert degrees Celsius to degrees Fahrenheit.
Definition IRutils.cpp:526
uint64_t invertBits(const uint64_t data, const uint16_t nbits)
Invert/Flip the bits in an Integer.
Definition IRutils.cpp:515
String int64ToString(int64_t input, uint8_t base=10)
Convert a int64_t (signed long long) to a string. Arduino String/toInt/Serial.print() can't handle pr...
Definition IRutils.cpp:97
String resultToHexidecimal(const decode_results *const result)
Convert the decode_results structure's value/state to simple hexadecimal.
Definition IRutils.cpp:378
const uint8_t kHighNibble
Definition IRutils.h:19
uint16_t countBits(const uint8_t *const start, const uint16_t length, const bool ones=true, const uint16_t init=0)
Count the number of bits of a certain type in an array.
Definition IRutils.cpp:478
void serialPrintUint64(uint64_t input, uint8_t base=10)
Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long long...
Definition IRutils.cpp:112
uint64_t reverseBits(uint64_t input, uint16_t nbits)
Reverse the order of the requested least significant nr. of bits.
Definition IRutils.cpp:46
uint16_t * resultToRawArray(const decode_results *const decode)
Convert a decode_results into an array suitable for sendRaw().
Definition IRutils.cpp:427
const uint8_t kModeBitsSize
Definition IRutils.h:20
bool hasACState(const decode_type_t protocol)
Does the given protocol use a complex state as part of the decode?
Definition IRutils.cpp:167
String uint64ToString(uint64_t input, uint8_t base=10)
Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle...
Definition IRutils.cpp:66
String typeToString(const decode_type_t protocol, const bool isRepeat=false)
Convert a protocol type (enum etc) to a human readable string.
Definition IRutils.cpp:141
float fahrenheitToCelsius(const float deg)
Convert degrees Fahrenheit to degrees Celsius.
Definition IRutils.cpp:529
const uint8_t kNibbleSize
Definition IRutils.h:17
uint16_t getCorrectedRawLength(const decode_results *const results)
Return the corrected length of a 'raw' format array structure after over-large values are converted i...
Definition IRutils.cpp:238
uint8_t xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0)
Calculate a rolling XOR of all the bytes of an array.
Definition IRutils.cpp:464
const uint8_t kLowNibble
Definition IRutils.h:18
String resultToTimingInfo(const decode_results *const results)
Dump out the decode_results structure.
Definition IRutils.cpp:346
Results returned from the decoder.
Definition IRrecv.h:101
Namespace for covering common functions & procedures for advancd protocol handlers.
Definition IRutils.cpp:531
String channelToString(const uint8_t channel)
Create a String of human output for the given channel e.g. "[CH#0]".
Definition IRutils.cpp:1030
String htmlEscape(const String unescaped)
Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS.
Definition IRutils.cpp:1092
String msToString(uint32_t const msecs)
Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds...
Definition IRutils.cpp:1124
String irCommandTypeToString(uint8_t irCommandType, uint8_t acControlCmd, uint8_t iFeelReportCmd, uint8_t timerCmd, uint8_t configCmd)
Create a String of human output for the given command type e.g. "IFeel Report".
Definition IRutils.cpp:1048
bool getBit(const uint64_t data, const uint8_t position, const uint8_t size)
Return the value of positionth bit of an Integer.
Definition IRutils.cpp:1236
String dayToString(const uint8_t day_of_week, const int8_t offset)
Create a String of the 3-letter day of the week from a numerical day of the week. e....
Definition IRutils.cpp:824
String modelToStr(const decode_type_t protocol, const int16_t model)
Generate the model string for a given Protocol/Model pair.
Definition IRutils.cpp:601
uint8_t lowLevelSanityCheck(void)
Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler ope...
Definition IRutils.cpp:1410