IRremoteESP8266
Namespaces | Functions | Variables
IRutils.h File Reference

Go to the source code of this file.

Namespaces

 irutils
 Namespace for covering common functions & procedures for advancd protocol handlers.
 

Functions

uint64_t reverseBits (uint64_t input, uint16_t nbits)
 Reverse the order of the requested least significant nr. of bits. More...
 
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 printing 64 bit values. More...
 
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 printing 64 bit values. More...
 
String typeToString (const decode_type_t protocol, const bool isRepeat=false)
 Convert a protocol type (enum etc) to a human readable string. More...
 
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 longs. (uint64_t) More...
 
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. More...
 
String resultToTimingInfo (const decode_results *const results)
 Dump out the decode_results structure. More...
 
String resultToHumanReadableBasic (const decode_results *const results)
 Dump out the decode_results structure into a human readable format. More...
 
String resultToHexidecimal (const decode_results *const result)
 Convert the decode_results structure's value/state to simple hexadecimal. More...
 
bool hasACState (const decode_type_t protocol)
 Does the given protocol use a complex state as part of the decode? More...
 
uint16_t getCorrectedRawLength (const decode_results *const results)
 Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries. More...
 
uint16_t * resultToRawArray (const decode_results *const decode)
 Convert a decode_results into an array suitable for sendRaw(). More...
 
uint8_t sumBytes (const uint8_t *const start, const uint16_t length, const uint8_t init=0)
 Sum all the bytes of an array and return the least significant 8-bits of the result. More...
 
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. More...
 
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. More...
 
uint16_t countBits (const uint64_t data, const uint8_t length, const bool ones=true, const uint16_t init=0)
 Count the number of bits of a certain type in an Integer. More...
 
uint64_t invertBits (const uint64_t data, const uint16_t nbits)
 Invert/Flip the bits in an Integer. More...
 
decode_type_t strToDecodeType (const char *str)
 Convert a C-style string to a decode_type_t. More...
 
float celsiusToFahrenheit (const float deg)
 Convert degrees Celsius to degrees Fahrenheit. More...
 
float fahrenheitToCelsius (const float deg)
 Convert degrees Fahrenheit to degrees Celsius. More...
 
String irutils::addBoolToString (const bool value, const String label, const bool precomma)
 Create a String with a colon separated flag suitable for Humans. e.g. "Power: On". More...
 
String irutils::addToggleToString (const bool toggle, const String label, const bool precomma)
 Create a String with a colon separated toggle flag suitable for Humans. e.g. "Light: Toggle", "Light: -". More...
 
String irutils::addIntToString (const uint16_t value, const String label, const bool precomma)
 Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23". More...
 
String irutils::addSignedIntToString (const int16_t value, const String label, const bool precomma)
 Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23". More...
 
String irutils::modelToStr (const decode_type_t protocol, const int16_t model)
 Generate the model string for a given Protocol/Model pair. More...
 
String irutils::addModelToString (const decode_type_t protocol, const int16_t model, const bool precomma)
 Create a String of human output for a given protocol model number. e.g. "Model: JKE". More...
 
String irutils::addLabeledString (const String value, const String label, const bool precomma)
 Create a String with a colon separated "label: value" pair suitable for Humans. More...
 
String irutils::addTempToString (const uint16_t degrees, const bool celsius, const bool precomma, const bool isSensorTemp)
 Create a String of human output for a given temperature. e.g. "Temp: 25C". More...
 
String irutils::addTempFloatToString (const float degrees, const bool celsius, const bool precomma, const bool isSensorTemp)
 Create a String of human output for a given temperature. e.g. "Temp: 25.5C". More...
 
String irutils::addModeToString (const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan)
 Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)". More...
 
String irutils::addFanToString (const uint8_t speed, const uint8_t high, const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum, const uint8_t medium_high)
 Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)". More...
 
String irutils::addSwingHToString (const uint8_t position, const uint8_t automatic, const uint8_t maxleft, const uint8_t left, const uint8_t middle, const uint8_t right, const uint8_t maxright, const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide)
 Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)". More...
 
String irutils::addSwingVToString (const uint8_t position, const uint8_t automatic, const uint8_t highest, const uint8_t high, const uint8_t uppermiddle, const uint8_t middle, const uint8_t lowermiddle, const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate)
 Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)". More...
 
String irutils::addDayToString (const uint8_t day_of_week, const int8_t offset, const bool precomma)
 Create a String of the 3-letter day of the week from a numerical day of the week. e.g. "Day: 1 (Mon)". More...
 
String irutils::addTimerModeToString (const uint8_t timerMode, const uint8_t noTimer, const uint8_t delayTimer, const uint8_t schedule1, const uint8_t schedule2, const uint8_t schedule3, const bool precomma)
 Create a String of human output for the given timer setting. e.g. "Timer Mode: 2 (Schedule 1)". More...
 
String irutils::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". More...
 
String irutils::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.g. "Mon". More...
 
String irutils::daysBitmaskToString (uint8_t daysBitmap, uint8_t offset)
 Create a String of the 3-letter day of the week bitmap. More...
 
String irutils::channelToString (const uint8_t channel)
 Create a String of human output for the given channel e.g. "[CH#0]". More...
 
String irutils::htmlEscape (const String unescaped)
 Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS. More...
 
String irutils::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". More...
 
String irutils::minsToString (const uint16_t mins)
 Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59". More...
 
uint8_t irutils::sumNibbles (const uint8_t *const start, const uint16_t length, const uint8_t init)
 Sum all the nibbles together in a series of bytes. More...
 
uint8_t irutils::sumNibbles (const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)
 Sum all the nibbles together in an integer. More...
 
uint16_t irutils::sumBytes (const uint64_t data, const uint8_t count, const uint8_t init, const bool byteonly)
 Sum all the bytes together in an integer. More...
 
uint8_t irutils::bcdToUint8 (const uint8_t bcd)
 Convert a byte of Binary Coded Decimal(BCD) into an Integer. More...
 
uint8_t irutils::uint8ToBcd (const uint8_t integer)
 Convert an Integer into a byte of Binary Coded Decimal(BCD). More...
 
bool irutils::getBit (const uint64_t data, const uint8_t position, const uint8_t size)
 Return the value of positionth bit of an Integer. More...
 
bool irutils::getBit (const uint8_t data, const uint8_t position)
 Return the value of positionth bit of an Integer. More...
 
uint64_t irutils::setBit (const uint64_t data, const uint8_t position, const bool on, const uint8_t size)
 Return the value of an Integer with the positionth bit changed. More...
 
uint8_t irutils::setBit (const uint8_t data, const uint8_t position, const bool on)
 Return the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint8_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint32_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint64_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBits (uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)
 Alter an uint8_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)
 Alter an uint32_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)
 Alter an uint64_t value by overwriting an arbitrary given number of bits. More...
 
uint8_t * irutils::invertBytePairs (uint8_t *ptr, const uint16_t length)
 Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
bool irutils::checkInvertedBytePairs (const uint8_t *const ptr, const uint16_t length)
 Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
uint8_t irutils::lowLevelSanityCheck (void)
 Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler operation. Calls to this should return 0 if everything is as expected, anything else means the library won't work as expected. More...
 

Variables

const uint8_t kNibbleSize = 4
 
const uint8_t kLowNibble = 0
 
const uint8_t kHighNibble = 4
 
const uint8_t kModeBitsSize = 3
 

Function Documentation

◆ celsiusToFahrenheit()

float celsiusToFahrenheit ( const float  deg)

Convert degrees Celsius to degrees Fahrenheit.

◆ countBits() [1/2]

uint16_t countBits ( const uint64_t  data,
const uint8_t  length,
const bool  ones,
const uint16_t  init 
)

Count the number of bits of a certain type in an Integer.

Parameters
[in]dataThe value you want bits counted for. Starting from the LSB.
[in]lengthHow many bits to use in the calculation? Starts at the LSB
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
Returns
The nr. of bits found of the given type found in the Integer.

◆ countBits() [2/2]

uint16_t countBits ( const uint8_t *const  start,
const uint16_t  length,
const bool  ones,
const uint16_t  init 
)

Count the number of bits of a certain type in an array.

Parameters
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
Returns
The nr. of bits found of the given type found in the array.

◆ fahrenheitToCelsius()

float fahrenheitToCelsius ( const float  deg)

Convert degrees Fahrenheit to degrees Celsius.

◆ getCorrectedRawLength()

uint16_t getCorrectedRawLength ( const decode_results *const  results)

Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries.

Parameters
[in]resultsA ptr to a decode_results structure.
Returns
The corrected length.

◆ hasACState()

bool hasACState ( const decode_type_t  protocol)

Does the given protocol use a complex state as part of the decode?

Parameters
[in]protocolThe decode_type_t protocol we are enquiring about.
Returns
True if the protocol uses a state array. False if just an integer.

◆ int64ToString()

String int64ToString ( int64_t  input,
uint8_t  base 
)

Convert a int64_t (signed long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values.

Parameters
[in]inputThe value to print
[in]baseThe output base.
Returns
A String representation of the integer.
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1639#issuecomment-944906016

◆ invertBits()

uint64_t invertBits ( const uint64_t  data,
const uint16_t  nbits 
)

Invert/Flip the bits in an Integer.

Parameters
[in]dataThe Integer that will be inverted.
[in]nbitsHow many bits are to be inverted. Starting from the LSB.
Returns
An Integer with the appropriate bits inverted/flipped.

◆ resultToHexidecimal()

String resultToHexidecimal ( const decode_results *const  result)

Convert the decode_results structure's value/state to simple hexadecimal.

Parameters
[in]resultA ptr to a decode_results structure.
Returns
A String containing the output.

◆ resultToHumanReadableBasic()

String resultToHumanReadableBasic ( const decode_results *const  results)

Dump out the decode_results structure into a human readable format.

Parameters
[in]resultsA ptr to a decode_results structure.
Returns
A String containing the output.

◆ resultToRawArray()

uint16_t* resultToRawArray ( const decode_results *const  decode)

Convert a decode_results into an array suitable for sendRaw().

Parameters
[in]decodeA ptr to a decode_results structure that contains a mesg.
Returns
A PTR to a dynamically allocated uint16_t sendRaw compatible array.
Note
The returned array needs to be delete[]'ed/free()'ed (deallocated) after use by caller.

◆ resultToSourceCode()

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.

Parameters
[in]resultsA ptr to a decode_results structure.
Returns
A String containing the code-ified result.

◆ resultToTimingInfo()

String resultToTimingInfo ( const decode_results *const  results)

Dump out the decode_results structure.

Parameters
[in]resultsA ptr to a decode_results structure.
Returns
A String containing the legacy information format.
Deprecated:
This is only for those that want this legacy format.

◆ reverseBits()

uint64_t reverseBits ( uint64_t  input,
uint16_t  nbits 
)

Reverse the order of the requested least significant nr. of bits.

Parameters
[in]inputBit pattern/integer to reverse.
[in]nbitsNr. of bits to reverse. (LSB -> MSB)
Returns
The reversed bit pattern.

◆ serialPrintUint64()

void serialPrintUint64 ( uint64_t  input,
uint8_t  base 
)

Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long longs. (uint64_t)

Parameters
[in]inputThe value to print
[in]baseThe output base.

◆ strToDecodeType()

decode_type_t strToDecodeType ( const char *const  str)

Convert a C-style string to a decode_type_t.

Parameters
[in]strA C-style string containing a protocol name or number.
Returns
A decode_type_t enum. (decode_type_t::UNKNOWN if no match.)

◆ sumBytes()

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.

Parameters
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
Returns
The 8-bit calculated result of all the bytes and init value.

◆ typeToString()

String typeToString ( const decode_type_t  protocol,
const bool  isRepeat 
)

Convert a protocol type (enum etc) to a human readable string.

Parameters
[in]protocolNr. (enum) of the protocol.
[in]isRepeatA flag indicating if it is a repeat message.
Returns
A String containing the protocol name. kUnknownStr if no match.

◆ uint64ToString()

String uint64ToString ( uint64_t  input,
uint8_t  base 
)

Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values.

Parameters
[in]inputThe value to print
[in]baseThe output base.
Returns
A String representation of the integer.
Note
Based on Arduino's Print::printNumber()

◆ xorBytes()

uint8_t xorBytes ( const uint8_t *const  start,
const uint16_t  length,
const uint8_t  init 
)

Calculate a rolling XOR of all the bytes of an array.

Parameters
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
Returns
The 8-bit calculated result of all the bytes and init value.

Variable Documentation

◆ kHighNibble

const uint8_t kHighNibble = 4

◆ kLowNibble

const uint8_t kLowNibble = 0

◆ kModeBitsSize

const uint8_t kModeBitsSize = 3

◆ kNibbleSize

const uint8_t kNibbleSize = 4