IRremoteESP8266
ir_Carrier.h
Go to the documentation of this file.
1 // Copyright 2020-2022 David Conran
7 
8 // Supports:
9 // Brand: Carrier/Surrey, Model: 42QG5A55970 remote
10 // Brand: Carrier/Surrey, Model: 619EGX0090E0 A/C
11 // Brand: Carrier/Surrey, Model: 619EGX0120E0 A/C
12 // Brand: Carrier/Surrey, Model: 619EGX0180E0 A/C
13 // Brand: Carrier/Surrey, Model: 619EGX0220E0 A/C
14 // Brand: Carrier/Surrey, Model: 53NGK009/012 Inverter
15 // Brand: Carrier, Model: 40GKX0E2006 remote (CARRIER_AC128)
16 
17 #ifndef IR_CARRIER_H_
18 #define IR_CARRIER_H_
19 
20 #define __STDC_LIMIT_MACROS
21 #include <stdint.h>
22 #ifndef UNIT_TEST
23 #include <Arduino.h>
24 #endif
25 #include "IRremoteESP8266.h"
26 #include "IRsend.h"
27 #ifdef UNIT_TEST
28 #include "IRsend_test.h"
29 #endif
30 
33  uint64_t raw;
34  struct {
35  // Byte 0
36  uint8_t :8;
37  // Byte 1
38  uint8_t :8;
39  // Byte 2
40  uint8_t Sum:4;
41  uint8_t Mode:2;
42  uint8_t Fan:2;
43  // Byte 3
44  uint8_t Temp:4;
45  uint8_t :1;
46  uint8_t SwingV:1;
47  uint8_t :2;
48  // Byte 4
49  uint8_t :4;
50  uint8_t Power:1;
51  uint8_t OffTimerEnable:1;
52  uint8_t OnTimerEnable:1;
53  uint8_t Sleep:1;
54  // Byte 5
55  uint8_t :8;
56  // Byte 6
57  uint8_t :4;
58  uint8_t OnTimer:4;
59  // Byte 7
60  uint8_t :4;
61  uint8_t OffTimer:4;
62  };
63 };
64 
65 // Constants
66 
67 // CARRIER_AC64
68 const uint8_t kCarrierAc64ChecksumOffset = 16;
69 const uint8_t kCarrierAc64ChecksumSize = 4;
70 const uint8_t kCarrierAc64Heat = 0b01; // 1
71 const uint8_t kCarrierAc64Cool = 0b10; // 2
72 const uint8_t kCarrierAc64Fan = 0b11; // 3
73 const uint8_t kCarrierAc64FanAuto = 0b00; // 0
74 const uint8_t kCarrierAc64FanLow = 0b01; // 1
75 const uint8_t kCarrierAc64FanMedium = 0b10; // 2
76 const uint8_t kCarrierAc64FanHigh = 0b11; // 3
77 const uint8_t kCarrierAc64MinTemp = 16; // Celsius
78 const uint8_t kCarrierAc64MaxTemp = 30; // Celsius
79 const uint8_t kCarrierAc64TimerMax = 9; // Hours.
80 const uint8_t kCarrierAc64TimerMin = 1; // Hours.
81 
82 
83 // Classes
84 
87  public:
88  explicit IRCarrierAc64(const uint16_t pin, const bool inverted = false,
89  const bool use_modulation = true);
90 
91  void stateReset();
92 #if SEND_CARRIER_AC64
93  void send(const uint16_t repeat = kCarrierAc64MinRepeat);
98  int8_t calibrate(void) { return _irsend.calibrate(); }
99 #endif // SEND_CARRIER_AC64
100  void begin();
101  static uint8_t calcChecksum(const uint64_t state);
102  static bool validChecksum(const uint64_t state);
103  void setPower(const bool on);
104  bool getPower(void) const;
105  void on(void);
106  void off(void);
107  void setTemp(const uint8_t temp);
108  uint8_t getTemp(void) const;
109  void setSwingV(const bool on);
110  bool getSwingV(void) const;
111  void setSleep(const bool on);
112  bool getSleep(void) const;
113  void setFan(const uint8_t speed);
114  uint8_t getFan(void) const;
115  void setMode(const uint8_t mode);
116  uint8_t getMode(void) const;
117  void setOnTimer(const uint16_t nr_of_mins);
118  uint16_t getOnTimer(void) const;
119  void setOffTimer(const uint16_t nr_of_mins);
120  uint16_t getOffTimer(void) const;
121  uint64_t getRaw(void);
122  void setRaw(const uint64_t state);
123  static uint8_t convertMode(const stdAc::opmode_t mode);
124  static uint8_t convertFan(const stdAc::fanspeed_t speed);
125  static stdAc::opmode_t toCommonMode(const uint8_t mode);
126  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
127  stdAc::state_t toCommon(void) const;
128  String toString(void) const;
129 #ifndef UNIT_TEST
130 
131  private:
133 #else
134  IRsendTest _irsend;
136 #endif
139  void checksum(void);
140  void _cancelOnTimer(void);
141  void _cancelOffTimer(void);
142 };
143 #endif // IR_CARRIER_H_
kCarrierAc64MinTemp
const uint8_t kCarrierAc64MinTemp
Definition: ir_Carrier.h:77
kCarrierAc64TimerMin
const uint8_t kCarrierAc64TimerMin
Definition: ir_Carrier.h:80
IRCarrierAc64::on
void on(void)
Change the power setting to On.
Definition: ir_Carrier.cpp:321
IRCarrierAc64::setPower
void setPower(const bool on)
Change the power setting.
Definition: ir_Carrier.cpp:310
CarrierProtocol::Sleep
uint8_t Sleep
Definition: ir_Carrier.h:53
IRCarrierAc64::getTemp
uint8_t getTemp(void) const
Get the current temperature from the internal state.
Definition: ir_Carrier.cpp:304
IRCarrierAc64::checksum
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Carrier.cpp:268
IRCarrierAc64::toCommon
stdAc::state_t toCommon(void) const
Convert the A/C state to it's common stdAc::state_t equivalent.
Definition: ir_Carrier.cpp:524
IRCarrierAc64::IRCarrierAc64
IRCarrierAc64(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Carrier.cpp:237
CarrierProtocol::Fan
uint8_t Fan
Definition: ir_Carrier.h:42
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
CarrierProtocol::OnTimer
uint8_t OnTimer
Definition: ir_Carrier.h:58
CarrierProtocol::OffTimerEnable
uint8_t OffTimerEnable
Definition: ir_Carrier.h:51
kCarrierAc64Heat
const uint8_t kCarrierAc64Heat
Definition: ir_Carrier.h:70
IRsend.h
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:212
IRCarrierAc64::_cancelOnTimer
void _cancelOnTimer(void)
Clear the On Timer enable bit.
Definition: ir_Carrier.cpp:441
IRCarrierAc64::begin
void begin()
Set up hardware to be able to send a message.
Definition: ir_Carrier.cpp:273
kCarrierAc64Cool
const uint8_t kCarrierAc64Cool
Definition: ir_Carrier.h:71
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
IRCarrierAc64::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Carrier.cpp:360
String
std::string String
Definition: IRremoteESP8266.h:1472
IRCarrierAc64::getOffTimer
uint16_t getOffTimer(void) const
Get the current Off Timer time.
Definition: ir_Carrier.cpp:477
IRCarrierAc64::setTemp
void setTemp(const uint8_t temp)
Set the temp in deg C.
Definition: ir_Carrier.cpp:296
IRCarrierAc64::send
void send(const uint16_t repeat=kCarrierAc64MinRepeat)
Send the current internal state as an IR message.
Definition: ir_Carrier.cpp:278
IRCarrierAc64::convertFan
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Carrier.cpp:386
IRCarrierAc64::setOffTimer
void setOffTimer(const uint16_t nr_of_mins)
Set the Off Timer time.
Definition: ir_Carrier.cpp:488
kCarrierAc64TimerMax
const uint8_t kCarrierAc64TimerMax
Definition: ir_Carrier.h:79
kCarrierAc64FanHigh
const uint8_t kCarrierAc64FanHigh
Definition: ir_Carrier.h:76
IRremoteESP8266.h
CarrierProtocol
Native representation of a Carrier A/C message.
Definition: ir_Carrier.h:32
IRCarrierAc64::_
CarrierProtocol _
Definition: ir_Carrier.h:138
IRCarrierAc64::validChecksum
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Carrier.cpp:261
CarrierProtocol::Mode
uint8_t Mode
Definition: ir_Carrier.h:41
kCarrierAc64FanMedium
const uint8_t kCarrierAc64FanMedium
Definition: ir_Carrier.h:75
kCarrierAc64MaxTemp
const uint8_t kCarrierAc64MaxTemp
Definition: ir_Carrier.h:78
IRCarrierAc64
Class for handling detailed Carrier 64 bit A/C messages.
Definition: ir_Carrier.h:86
IRCarrierAc64::getMode
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Carrier.cpp:328
IRCarrierAc64::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Carrier.h:132
IRCarrierAc64::stateReset
void stateReset()
Reset the internal state to a fixed known good state.
Definition: ir_Carrier.cpp:243
IRCarrierAc64::off
void off(void)
Change the power setting to Off.
Definition: ir_Carrier.cpp:324
CarrierProtocol::OffTimer
uint8_t OffTimer
Definition: ir_Carrier.h:61
IRCarrierAc64::calcChecksum
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Carrier.cpp:248
IRCarrierAc64::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Carrier.h:98
CarrierProtocol::Sum
uint8_t Sum
Definition: ir_Carrier.h:40
IRCarrierAc64::setRaw
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Carrier.cpp:292
CarrierProtocol::Power
uint8_t Power
Definition: ir_Carrier.h:50
IRCarrierAc64::getSwingV
bool getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Carrier.cpp:417
IRCarrierAc64::getPower
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Carrier.cpp:316
kCarrierAc64Fan
const uint8_t kCarrierAc64Fan
Definition: ir_Carrier.h:72
kCarrierAc64ChecksumSize
const uint8_t kCarrierAc64ChecksumSize
Definition: ir_Carrier.h:69
CarrierProtocol::SwingV
uint8_t SwingV
Definition: ir_Carrier.h:46
IRCarrierAc64::setOnTimer
void setOnTimer(const uint16_t nr_of_mins)
Set the On Timer time.
Definition: ir_Carrier.cpp:459
IRCarrierAc64::getRaw
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Carrier.cpp:285
IRCarrierAc64::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Carrier.cpp:349
kCarrierAc64MinRepeat
const uint16_t kCarrierAc64MinRepeat
Definition: IRremoteESP8266.h:1139
kCarrierAc64FanLow
const uint8_t kCarrierAc64FanLow
Definition: ir_Carrier.h:74
kCarrierAc64FanAuto
const uint8_t kCarrierAc64FanAuto
Definition: ir_Carrier.h:73
IRCarrierAc64::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Carrier.cpp:400
CarrierProtocol::raw
uint64_t raw
The state of the IR remote.
Definition: ir_Carrier.h:33
IRCarrierAc64::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Carrier.cpp:376
IRCarrierAc64::setMode
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Carrier.cpp:334
IRCarrierAc64::setSwingV
void setSwingV(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Carrier.cpp:411
IRCarrierAc64::setSleep
void setSleep(const bool on)
Set the Sleep mode of the A/C.
Definition: ir_Carrier.cpp:423
IRCarrierAc64::_cancelOffTimer
void _cancelOffTimer(void)
Clear the Off Timer enable bit.
Definition: ir_Carrier.cpp:470
IRCarrierAc64::toString
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Carrier.cpp:501
IRCarrierAc64::getSleep
bool getSleep(void) const
Get the Sleep mode of the A/C.
Definition: ir_Carrier.cpp:436
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
CarrierProtocol::Temp
uint8_t Temp
Definition: ir_Carrier.h:44
CarrierProtocol::OnTimerEnable
uint8_t OnTimerEnable
Definition: ir_Carrier.h:52
IRCarrierAc64::getFan
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Carrier.cpp:370
IRCarrierAc64::getOnTimer
uint16_t getOnTimer(void) const
Get the current On Timer time.
Definition: ir_Carrier.cpp:448
kCarrierAc64ChecksumOffset
const uint8_t kCarrierAc64ChecksumOffset
Definition: ir_Carrier.h:68
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46