IRremoteESP8266
ir_Kelvinator.h
Go to the documentation of this file.
1 // Copyright 2016 David Conran
4 
5 // Supports:
6 // Brand: Kelvinator, Model: YALIF Remote
7 // Brand: Kelvinator, Model: KSV26CRC A/C
8 // Brand: Kelvinator, Model: KSV26HRC A/C
9 // Brand: Kelvinator, Model: KSV35CRC A/C
10 // Brand: Kelvinator, Model: KSV35HRC A/C
11 // Brand: Kelvinator, Model: KSV53HRC A/C
12 // Brand: Kelvinator, Model: KSV62HRC A/C
13 // Brand: Kelvinator, Model: KSV70CRC A/C
14 // Brand: Kelvinator, Model: KSV70HRC A/C
15 // Brand: Kelvinator, Model: KSV80HRC A/C
16 // Brand: Green, Model: YAPOF3 remote
17 // Brand: Sharp, Model: YB1FA remote
18 // Brand: Sharp, Model: A5VEY A/C
19 
20 #ifndef IR_KELVINATOR_H_
21 #define IR_KELVINATOR_H_
22 
23 #define __STDC_LIMIT_MACROS
24 #include <stdint.h>
25 #ifndef UNIT_TEST
26 #include <Arduino.h>
27 #endif
28 #include "IRremoteESP8266.h"
29 #include "IRsend.h"
30 #ifdef UNIT_TEST
31 #include "IRsend_test.h"
32 #endif
33 
37  struct {
38  // Byte 0
39  uint8_t Mode :3;
40  uint8_t Power :1;
41  uint8_t BasicFan :2;
42  uint8_t VentSwing :1;
43  uint8_t :1; // Sleep Modes 1 & 3 (1 = On, 0 = Off)
44  // Byte 1
45  uint8_t Temp :4; // Degrees C.
46  uint8_t :4;
47  // Byte 2
48  uint8_t :4;
49  uint8_t Turbo :1;
50  uint8_t Light :1;
51  uint8_t IonFilter :1;
52  uint8_t XFan :1;
53  // Byte 3
54  uint8_t :4;
55  uint8_t :2; // (possibly timer related) (Typically 0b01)
56  uint8_t :2; // End of command block (B01)
57  // (B010 marker and a gap of 20ms)
58  // Byte 4
59  uint8_t SwingV :1;
60  uint8_t :3;
61  uint8_t SwingH :1;
62  uint8_t :3;
63  // Byte 5~6
64  uint8_t pad0[2]; // Timer related. Typically 0 except when timer in use.
65  // Byte 7
66  uint8_t :4; // (Used in Timer mode)
67  uint8_t Sum1 :4; // checksum of the previous bytes (0-6)
68  // (gap of 40ms)
69  // (header mark and space)
70  // Byte 8~10
71  uint8_t pad1[3]; // Repeat of byte 0~2
72  // Byte 11
73  uint8_t :4;
74  uint8_t :2; // (possibly timer related) (Typically 0b11)
75  uint8_t :2; // End of command block (B01)
76  // (B010 marker and a gap of 20ms)
77  // Byte 12
78  uint8_t :1; // Sleep mode 2 (1 = On, 0=Off)
79  uint8_t :6; // (Used in Sleep Mode 3, Typically 0b000000)
80  uint8_t Quiet :1;
81  // Byte 13
82  uint8_t :8; // (Sleep Mode 3 related, Typically 0x00)
83  // Byte 14
84  uint8_t :4; // (Sleep Mode 3 related, Typically 0b0000)
85  uint8_t Fan :3;
86  // Byte 15
87  uint8_t :4;
88  uint8_t Sum2 :4; // checksum of the previous bytes (8-14)
89  };
90 };
91 
92 // Constants
93 const uint8_t kKelvinatorAuto = 0; // (temp = 25C)
94 const uint8_t kKelvinatorCool = 1;
95 const uint8_t kKelvinatorDry = 2; // (temp = 25C, but not shown)
96 const uint8_t kKelvinatorFan = 3;
97 const uint8_t kKelvinatorHeat = 4;
98 const uint8_t kKelvinatorBasicFanMax = 3;
99 const uint8_t kKelvinatorFanAuto = 0;
100 const uint8_t kKelvinatorFanMin = 1;
101 const uint8_t kKelvinatorFanMax = 5;
102 const uint8_t kKelvinatorMinTemp = 16; // 16C
103 const uint8_t kKelvinatorMaxTemp = 30; // 30C
104 const uint8_t kKelvinatorAutoTemp = 25; // 25C
105 
106 // Legacy defines (Deprecated)
107 #define KELVINATOR_MIN_TEMP kKelvinatorMinTemp
108 #define KELVINATOR_MAX_TEMP kKelvinatorMaxTemp
109 #define KELVINATOR_HEAT kKelvinatorHeat
110 #define KELVINATOR_FAN_MAX kKelvinatorFanMax
111 #define KELVINATOR_FAN_AUTO kKelvinatorFanAuto
112 #define KELVINATOR_FAN kKelvinatorFan
113 #define KELVINATOR_DRY kKelvinatorDry
114 #define KELVINATOR_COOL kKelvinatorCool
115 #define KELVINATOR_BASIC_FAN_MAX kKelvinatorBasicFanMax
116 #define KELVINATOR_AUTO_TEMP kKelvinatorAutoTemp
117 #define KELVINATOR_AUTO kKelvinatorAuto
118 
119 // Classes
122  public:
123  explicit IRKelvinatorAC(const uint16_t pin, const bool inverted = false,
124  const bool use_modulation = true);
125  void stateReset(void);
126 #if SEND_KELVINATOR
127  void send(const uint16_t repeat = kKelvinatorDefaultRepeat);
132  int8_t calibrate(void) { return _irsend.calibrate(); }
133 #endif // SEND_KELVINATOR
134  void begin(void);
135  void on(void);
136  void off(void);
137  void setPower(const bool on);
138  bool getPower(void) const;
139  void setTemp(const uint8_t degrees);
140  uint8_t getTemp(void) const;
141  void setFan(const uint8_t speed);
142  uint8_t getFan(void) const;
143  void setMode(const uint8_t mode);
144  uint8_t getMode(void) const;
145  void setSwingVertical(const bool on);
146  bool getSwingVertical(void) const;
147  void setSwingHorizontal(const bool on);
148  bool getSwingHorizontal(void) const;
149  void setQuiet(const bool on);
150  bool getQuiet(void) const;
151  void setIonFilter(const bool on);
152  bool getIonFilter(void) const;
153  void setLight(const bool on);
154  bool getLight(void) const;
155  void setXFan(const bool on);
156  bool getXFan(void) const;
157  void setTurbo(const bool on);
158  bool getTurbo(void) const;
159  uint8_t* getRaw(void);
160  void setRaw(const uint8_t new_code[]);
161  static uint8_t calcBlockChecksum(
162  const uint8_t* block, const uint16_t length = kKelvinatorStateLength / 2);
163  static bool validChecksum(const uint8_t state[],
164  const uint16_t length = kKelvinatorStateLength);
165  static uint8_t convertMode(const stdAc::opmode_t mode);
166  static stdAc::opmode_t toCommonMode(const uint8_t mode);
167  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
168  stdAc::state_t toCommon(void) const;
169  String toString(void) const;
170 #ifndef UNIT_TEST
171 
172  private:
174 #else // UNIT_TEST
175  IRsendTest _irsend;
177 #endif // UNIT_TEST
180  void checksum(void);
181  void fixup(void);
182 };
183 
184 #endif // IR_KELVINATOR_H_
IRKelvinatorAC::setSwingHorizontal
void setSwingHorizontal(const bool on)
Control the current horizontal swing setting.
Definition: ir_Kelvinator.cpp:292
IRKelvinatorAC::stateReset
void stateReset(void)
Reset the internals of the object to a known good state.
Definition: ir_Kelvinator.cpp:114
IRKelvinatorAC::setTurbo
void setTurbo(const bool on)
Control the current Turbo setting.
Definition: ir_Kelvinator.cpp:358
kKelvinatorFanAuto
const uint8_t kKelvinatorFanAuto
Definition: ir_Kelvinator.h:99
IRKelvinatorAC::on
void on(void)
Set the internal state to have the power on.
Definition: ir_Kelvinator.cpp:196
kKelvinatorFanMax
const uint8_t kKelvinatorFanMax
Definition: ir_Kelvinator.h:101
kKelvinatorCool
const uint8_t kKelvinatorCool
Definition: ir_Kelvinator.h:94
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
IRKelvinatorAC::setLight
void setLight(const bool on)
Control the current Light setting. i.e. The LED display on the A/C unit that shows the basic settings...
Definition: ir_Kelvinator.cpp:330
KelvinatorProtocol::IonFilter
uint8_t IonFilter
Definition: ir_Kelvinator.h:51
KelvinatorProtocol::SwingV
uint8_t SwingV
Definition: ir_Kelvinator.h:59
KelvinatorProtocol::pad0
uint8_t pad0[2]
Definition: ir_Kelvinator.h:64
IRKelvinatorAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed to it's stdAc::fanspeed_t equivalent.
Definition: ir_Kelvinator.cpp:397
kKelvinatorAutoTemp
const uint8_t kKelvinatorAutoTemp
Definition: ir_Kelvinator.h:104
KelvinatorProtocol::VentSwing
uint8_t VentSwing
Definition: ir_Kelvinator.h:42
IRKelvinatorAC::getRaw
uint8_t * getRaw(void)
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Kelvinator.cpp:146
IRsend.h
IRKelvinatorAC::getLight
bool getLight(void) const
Is the Light (Display) setting on?
Definition: ir_Kelvinator.cpp:336
KelvinatorProtocol::XFan
uint8_t XFan
Definition: ir_Kelvinator.h:52
IRKelvinatorAC::setIonFilter
void setIonFilter(const bool on)
Control the current Ion Filter setting.
Definition: ir_Kelvinator.cpp:317
IRKelvinatorAC::getTemp
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Kelvinator.cpp:223
IRKelvinatorAC::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Kelvinator.cpp:229
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:182
kKelvinatorMinTemp
const uint8_t kKelvinatorMinTemp
Definition: ir_Kelvinator.h:102
IRKelvinatorAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Kelvinator.h:132
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
String
std::string String
Definition: IRremoteESP8266.h:1178
IRKelvinatorAC::getSwingHorizontal
bool getSwingHorizontal(void) const
Is the horizontal swing setting on?
Definition: ir_Kelvinator.cpp:299
IRKelvinatorAC::setPower
void setPower(const bool on)
Set the internal state to have the desired power.
Definition: ir_Kelvinator.cpp:203
IRKelvinatorAC::setMode
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Kelvinator.cpp:257
IRKelvinatorAC::send
void send(const uint16_t repeat=kKelvinatorDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Kelvinator.cpp:138
IRKelvinatorAC::setRaw
void setRaw(const uint8_t new_code[])
Set the raw state of the object.
Definition: ir_Kelvinator.cpp:153
IRKelvinatorAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Kelvinator.cpp:121
IRKelvinatorAC::calcBlockChecksum
static uint8_t calcBlockChecksum(const uint8_t *block, const uint16_t length=kKelvinatorStateLength/2)
Calculate the checksum for a given block of state.
Definition: ir_Kelvinator.cpp:162
KelvinatorProtocol::Power
uint8_t Power
Definition: ir_Kelvinator.h:40
IRremoteESP8266.h
IRKelvinatorAC::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_Kelvinator.h:173
KelvinatorProtocol::Light
uint8_t Light
Definition: ir_Kelvinator.h:50
KelvinatorProtocol::raw
uint8_t raw[kKelvinatorStateLength]
The state in IR code form.
Definition: ir_Kelvinator.h:36
IRKelvinatorAC::getPower
bool getPower(void) const
Get the power setting from the internal state.
Definition: ir_Kelvinator.cpp:209
IRKelvinatorAC::validChecksum
static bool validChecksum(const uint8_t state[], const uint16_t length=kKelvinatorStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Kelvinator.cpp:184
IRKelvinatorAC
Class for handling detailed Kelvinator A/C messages.
Definition: ir_Kelvinator.h:121
kKelvinatorMaxTemp
const uint8_t kKelvinatorMaxTemp
Definition: ir_Kelvinator.h:103
IRKelvinatorAC::getSwingVertical
bool getSwingVertical(void) const
Is the vertical swing setting on?
Definition: ir_Kelvinator.cpp:286
KelvinatorProtocol::Mode
uint8_t Mode
Definition: ir_Kelvinator.h:39
KelvinatorProtocol::Sum1
uint8_t Sum1
Definition: ir_Kelvinator.h:67
IRKelvinatorAC::checksum
void checksum(void)
Calculate the checksum for the internal state.
Definition: ir_Kelvinator.cpp:175
IRKelvinatorAC::fixup
void fixup(void)
Fix up any odd conditions for the current state.
Definition: ir_Kelvinator.cpp:124
KelvinatorProtocol::pad1
uint8_t pad1[3]
Definition: ir_Kelvinator.h:71
kKelvinatorStateLength
const uint16_t kKelvinatorStateLength
Definition: IRremoteESP8266.h:979
IRKelvinatorAC::toCommon
stdAc::state_t toCommon(void) const
Convert the internal A/C object state to it's stdAc::state_t equivalent.
Definition: ir_Kelvinator.cpp:403
IRKelvinatorAC::setQuiet
void setQuiet(const bool on)
Control the current Quiet setting.
Definition: ir_Kelvinator.cpp:305
IRKelvinatorAC::setXFan
void setXFan(const bool on)
Control the current XFan setting. This setting will cause the unit blow air after power off to dry ou...
Definition: ir_Kelvinator.cpp:345
KelvinatorProtocol::SwingH
uint8_t SwingH
Definition: ir_Kelvinator.h:61
kKelvinatorFan
const uint8_t kKelvinatorFan
Definition: ir_Kelvinator.h:96
IRKelvinatorAC::toString
String toString(void) const
Convert the internal settings into a human readable string.
Definition: ir_Kelvinator.cpp:429
IRKelvinatorAC::setTemp
void setTemp(const uint8_t degrees)
Set the temperature setting.
Definition: ir_Kelvinator.cpp:215
KelvinatorProtocol::Sum2
uint8_t Sum2
Definition: ir_Kelvinator.h:88
kKelvinatorBasicFanMax
const uint8_t kKelvinatorBasicFanMax
Definition: ir_Kelvinator.h:98
kKelvinatorFanMin
const uint8_t kKelvinatorFanMin
Definition: ir_Kelvinator.h:100
IRKelvinatorAC::getTurbo
bool getTurbo(void) const
Is the Turbo setting on?
Definition: ir_Kelvinator.cpp:364
IRKelvinatorAC::_
KelvinatorProtocol _
Definition: ir_Kelvinator.h:179
IRKelvinatorAC::getMode
uint8_t getMode(void) const
Get the current operation mode setting.
Definition: ir_Kelvinator.cpp:251
KelvinatorProtocol::BasicFan
uint8_t BasicFan
Definition: ir_Kelvinator.h:41
kKelvinatorHeat
const uint8_t kKelvinatorHeat
Definition: ir_Kelvinator.h:97
IRKelvinatorAC::getQuiet
bool getQuiet(void) const
Is the Quiet setting on?
Definition: ir_Kelvinator.cpp:311
IRKelvinatorAC::IRKelvinatorAC
IRKelvinatorAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Kelvinator.cpp:109
IRKelvinatorAC::off
void off(void)
Set the internal state to have the power off.
Definition: ir_Kelvinator.cpp:199
kKelvinatorDefaultRepeat
const uint16_t kKelvinatorDefaultRepeat
Definition: IRremoteESP8266.h:981
IRKelvinatorAC::setSwingVertical
void setSwingVertical(const bool on)
Control the current vertical swing setting.
Definition: ir_Kelvinator.cpp:279
IRKelvinatorAC::getFan
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Kelvinator.cpp:245
kKelvinatorDry
const uint8_t kKelvinatorDry
Definition: ir_Kelvinator.h:95
KelvinatorProtocol::Quiet
uint8_t Quiet
Definition: ir_Kelvinator.h:80
IRKelvinatorAC::getXFan
bool getXFan(void) const
Is the XFan setting on?
Definition: ir_Kelvinator.cpp:351
KelvinatorProtocol
Native representation of a Kelvinator A/C message.
Definition: ir_Kelvinator.h:35
IRKelvinatorAC::getIonFilter
bool getIonFilter(void) const
Is the Ion Filter setting on?
Definition: ir_Kelvinator.cpp:323
IRKelvinatorAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's stdAc::opmode_t equivalent.
Definition: ir_Kelvinator.cpp:384
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
KelvinatorProtocol::Turbo
uint8_t Turbo
Definition: ir_Kelvinator.h:49
KelvinatorProtocol::Temp
uint8_t Temp
Definition: ir_Kelvinator.h:45
KelvinatorProtocol::Fan
uint8_t Fan
Definition: ir_Kelvinator.h:85
kKelvinatorAuto
const uint8_t kKelvinatorAuto
Definition: ir_Kelvinator.h:93
IRKelvinatorAC::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode (stdAc::opmode_t) into it a native mode.
Definition: ir_Kelvinator.cpp:371
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46