IRremoteIDF
Infrared send & receive for ESP-IDF
Loading...
Searching...
No Matches
ir_Mirage.h
Go to the documentation of this file.
1// Copyright 2020-2021 David Conran (crankyoldgit)
6
7
8// Supports:
9// Brand: Mirage, Model: VLU series A/C
10// Brand: Maxell, Model: MX-CH18CF A/C
11// Brand: Maxell, Model: KKG9A-C1 remote
12// Brand: Tronitechnik, Model: Reykir 9000 A/C
13// Brand: Tronitechnik, Model: KKG29A-C1 remote
14
15#ifndef IR_MIRAGE_H_
16#define IR_MIRAGE_H_
17
18#define __STDC_LIMIT_MACROS
19#include <stdint.h>
20#include "IRplatform.h"
21#include "IRremoteESP8266.h"
22#include "IRsend.h"
23#ifdef UNIT_TEST
24#include "IRsend_test.h"
25#endif
26
31 struct { // Common
32 // Byte 0
33 uint8_t Header :8; // Header. (0x56)
34 // Byte 1
35 uint8_t Temp :8; // Celsius minus 0x5C.
36 // Byte 2
37 uint8_t :8; // Unknown / Unused.
38 // Byte 3
39 uint8_t :8; // Unknown / Unused.
40 // Byte 4
41 uint8_t Fan :2; // Fan Speed.
42 uint8_t :2; // Unknown / Unused.
43 uint8_t Mode :4; // Cool, Heat, Dry, Fan, Recycle
44 // Byte 5
45 uint8_t :8;
46 // Byte 6
47 uint8_t :8;
48 // Byte 7
49 uint8_t :8;
50 // Byte 8
51 uint8_t :8;
52 // Byte 9
53 uint8_t :8;
54 // Byte 10
55 uint8_t :8;
56 // Byte 11
57 uint8_t :8;
58 // Byte 12
59 uint8_t :8;
60 // Byte 13
61 uint8_t :8;
62 // Byte 14
63 uint8_t Sum :8; // Sum of all the previous nibbles.
64 };
65 struct { // KKG9AC1 remote
66 // Byte 0
67 uint8_t :8; // Header
68 // Byte 1
69 uint8_t :8; // Temp
70 // Byte 2
71 uint8_t :8; // Unknown / Unused.
72 // Byte 3
73 uint8_t :3; // Unknown / Unused.
74 uint8_t Light_Kkg9ac1 :1; // Aka. Display. Seems linked to Sleep mode.
75 uint8_t :4; // Unknown / Unused.
76 // Byte 4
77 uint8_t :8; // Fan & Mode
78 // Byte 5
79 uint8_t :1; // Unknown
80 uint8_t SwingAndPower :7;
81 // Byte 6
82 uint8_t :7; // Unknown / Unused.
83 uint8_t Sleep_Kkg9ac1 :1; // Sleep mode on or off.
84 // Byte 7
85 uint8_t :3; // Unknown / Unused.
86 uint8_t Turbo_Kkg9ac1 :1; // Turbo mode on or off. Only works in Cool mode.
87 uint8_t :4; // Unknown / Unused.
88 // Byte 8
89 uint8_t :8; // Unknown / Unused.
90 // Byte 9
91 uint8_t :8; // Unknown / Unused.
92 // Byte 10
93 uint8_t :8; // Unknown / Unused.
94 // Byte 11
95 uint8_t Seconds :8; // Nr. of Seconds in BCD.
96 // Byte 12
97 uint8_t Minutes :8; // Nr. of Minutes in BCD.
98 // Byte 13
99 uint8_t Hours :8; // Nr. of Hours in BCD.
100 // Byte 14
101 uint8_t :8; // Sum
102 };
103 struct { // KKG29A-C1 remote
104 // Byte 0
105 uint8_t :8; // Header
106 // Byte 1
107 uint8_t :8; // Temp
108 // Byte 2
109 uint8_t :8;
110 // Byte 3
111 uint8_t Quiet :1;
112 uint8_t :7;
113 // Byte 4
114 uint8_t :2; // Fan
115 uint8_t OffTimerEnable :1;
116 uint8_t OnTimerEnable :1;
117 uint8_t :3; // Mode
118 uint8_t :1;
119 // Byte 5
120 uint8_t SwingH :1;
121 uint8_t SwingV :1;
122 uint8_t LightToggle_Kkg29ac1 :1; // Aka. Display Toggle.
123 uint8_t :3;
124 uint8_t Power :2;
125 // Byte 6
126 uint8_t :1;
127 uint8_t Filter :1; // Aka. UVC
128 uint8_t :1;
129 uint8_t Sleep_Kkg29ac1 :1; // Sleep mode on or off.
130 uint8_t :2;
131 uint8_t RecycleHeat :1;
132 uint8_t :1;
133 // Byte 7
134 uint8_t SensorTemp :6; // Temperature at the remote
135 uint8_t CleanToggle :1;
136 uint8_t IFeel :1;
137 // Byte 8
138 uint8_t OnTimerHours :5;
139 uint8_t :2;
140 uint8_t Turbo_Kkg29ac1 :1; // Turbo mode on or off.
141 // Byte 9
142 uint8_t OnTimerMins :6;
143 uint8_t :2;
144 // Byte 10
145 uint8_t OffTimerHours :5;
146 uint8_t :3;
147 // Byte 11
148 uint8_t OffTimerMins :6;
149 uint8_t :2;
150 // Byte 12
151 uint8_t :8;
152 // Byte 13
153 uint8_t :8;
154 // Byte 14
155 uint8_t :8; // Sum
156 };
157};
158
159// Constants
160const uint8_t kMirageAcHeat = 0b001; // 1
161const uint8_t kMirageAcCool = 0b010; // 2
162const uint8_t kMirageAcDry = 0b011; // 3
163const uint8_t kMirageAcRecycle = 0b100; // 4
164const uint8_t kMirageAcFan = 0b101; // 5
165
166const uint8_t kMirageAcFanAuto = 0b00; // 0
167const uint8_t kMirageAcFanHigh = 0b01; // 1
168const uint8_t kMirageAcFanMed = 0b10; // 2
169const uint8_t kMirageAcFanLow = 0b11; // 3
170const uint8_t kMirageAcKKG29AC1FanAuto = 0b00; // 0
171const uint8_t kMirageAcKKG29AC1FanHigh = 0b01; // 1
172const uint8_t kMirageAcKKG29AC1FanLow = 0b10; // 2
173const uint8_t kMirageAcKKG29AC1FanMed = 0b11; // 3
174
175const uint8_t kMirageAcMinTemp = 16; // 16C
176const uint8_t kMirageAcMaxTemp = 32; // 32C
177const uint8_t kMirageAcTempOffset = 0x5C;
178const uint8_t kMirageAcSensorTempOffset = 20;
179const uint8_t kMirageAcSensorTempMax = 43; // Celsius
180
181const uint8_t kMirageAcPowerOff = 0x5F;
182const uint8_t kMirageAcSwingVOff = 0b0000; // 0
183const uint8_t kMirageAcSwingVLowest = 0b0011; // 3
184const uint8_t kMirageAcSwingVLow = 0b0101; // 5
185const uint8_t kMirageAcSwingVMiddle = 0b0111; // 7
186const uint8_t kMirageAcSwingVHigh = 0b1001; // 9
187const uint8_t kMirageAcSwingVHighest = 0b1011; // 11
188const uint8_t kMirageAcSwingVAuto = 0b1101; // 13
189
190
195 public:
196 explicit IRMirageAc(const uint16_t pin, const bool inverted = false,
197 const bool use_modulation = true);
198 void stateReset(void);
199#if SEND_MIRAGE
200 void send(const uint16_t repeat = kMirageMinRepeat);
205 int8_t calibrate(void) { return _irsend.calibrate(); }
206#endif // SEND_MIRAGE
207 void begin(void);
208 void on(void);
209 void off(void);
210 void setPower(const bool on);
211 bool getPower(void) const;
212 void setTemp(const uint8_t degrees);
213 uint8_t getTemp(void) const;
214 void setFan(const uint8_t speed);
215 uint8_t getFan(void) const;
216 void setMode(const uint8_t mode);
217 uint8_t getMode(void) const;
218 uint8_t* getRaw(void);
219 void setRaw(const uint8_t* data);
220 uint32_t getClock(void) const;
221 void setClock(const uint32_t nr_of_seconds);
222 void setTurbo(const bool on);
223 bool getTurbo(void) const;
224 void setLight(const bool on);
225 bool getLight(void) const;
226 void setSleep(const bool on);
227 bool getSleep(void) const;
228 void setSwingV(const uint8_t position);
229 uint8_t getSwingV(void) const;
230 void setSwingH(const bool on);
231 bool getSwingH(void) const;
232 void setQuiet(const bool on);
233 bool getQuiet(void) const;
234 void setCleanToggle(const bool on);
235 bool getCleanToggle(void) const;
236 void setFilter(const bool on);
237 bool getFilter(void) const;
238 void setIFeel(const bool on);
239 bool getIFeel(void) const;
240 void setSensorTemp(const uint8_t degrees);
241 uint16_t getSensorTemp(void) const;
242 uint16_t getOnTimer(void) const;
243 uint16_t getOffTimer(void) const;
244 void setOnTimer(const uint16_t nr_of_mins);
245 void setOffTimer(const uint16_t nr_of_mins);
246 mirage_ac_remote_model_t getModel(const bool useRaw = false) const;
247 void setModel(const mirage_ac_remote_model_t model);
248 static mirage_ac_remote_model_t getModel(const uint8_t *state);
249 static bool validChecksum(const uint8_t* data);
250 static uint8_t calculateChecksum(const uint8_t* data);
251 static uint8_t convertMode(const stdAc::opmode_t mode);
252 static uint8_t convertFan(const stdAc::fanspeed_t speed,
254 static uint8_t convertSwingV(const stdAc::swingv_t position);
255 static stdAc::opmode_t toCommonMode(const uint8_t mode);
256 static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed,
258 static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
259 stdAc::state_t toCommon(void) const;
260 void fromCommon(const stdAc::state_t state);
261 String toString(void) const;
262#ifndef UNIT_TEST
263
264 private:
266#else // UNIT_TEST
268 IRsendTest _irsend;
270#endif // UNIT_TEST
273 void checksum(void);
274};
275#endif // IR_MIRAGE_H_
std::string String
The protocol code builds human readable output with String. On ESP-IDF that is just std::string.
Definition IRplatform.h:21
const uint16_t kMirageMinRepeat
Definition IRremoteESP8266.h:1338
const uint16_t kMirageStateLength
Definition IRremoteESP8266.h:1336
mirage_ac_remote_model_t
MIRAGE A/C model numbers.
Definition IRsend.h:181
@ KKG9AC1
Definition IRsend.h:182
Class for handling detailed Mirage 120-bit A/C messages.
Definition ir_Mirage.h:194
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition ir_Mirage.cpp:298
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition ir_Mirage.h:205
void on(void)
Set the requested power state of the A/C to on.
Definition ir_Mirage.cpp:220
void setOnTimer(const uint16_t nr_of_mins)
Set the number of minutes for the On Timer.
Definition ir_Mirage.cpp:589
void setLight(const bool on)
Change the Light/Display setting.
Definition ir_Mirage.cpp:352
uint8_t getFan(void) const
Get the current fan speed setting.
Definition ir_Mirage.cpp:304
void setIFeel(const bool on)
Set the IFeel setting of the A/C.
Definition ir_Mirage.cpp:527
uint16_t getOnTimer(void) const
Get the number of minutes the On Timer is currently set for.
Definition ir_Mirage.cpp:578
mirage_ac_remote_model_t _model
Definition ir_Mirage.h:272
String toString(void) const
Convert the internal state into a human readable string.
Definition ir_Mirage.cpp:793
bool getSleep(void) const
Get the value of the current Sleep setting.
Definition ir_Mirage.cpp:342
void setQuiet(const bool on)
Set the Quiet setting of the A/C.
Definition ir_Mirage.cpp:464
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition ir_Mirage.cpp:722
bool getQuiet(void) const
Get the Quiet setting of the A/C.
Definition ir_Mirage.cpp:476
static uint8_t calculateChecksum(const uint8_t *data)
Calculate the checksum for a given state.
Definition ir_Mirage.cpp:215
void off(void)
Set the requested power state of the A/C to off.
Definition ir_Mirage.cpp:223
void setTemp(const uint8_t degrees)
Set the temperature.
Definition ir_Mirage.cpp:286
bool getTurbo(void) const
Get the value of the current Turbo setting.
Definition ir_Mirage.cpp:321
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed, const mirage_ac_remote_model_t model=mirage_ac_remote_model_t::KKG9AC1)
Convert a native fan speed into its stdAc equivalent.
Definition ir_Mirage.cpp:644
void setFilter(const bool on)
Set the Filter setting of the A/C.
Definition ir_Mirage.cpp:506
void setCleanToggle(const bool on)
Set the CleanToggle setting of the A/C.
Definition ir_Mirage.cpp:485
void setOffTimer(const uint16_t nr_of_mins)
Set the number of minutes for the Off Timer.
Definition ir_Mirage.cpp:615
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition ir_Mirage.cpp:203
mirage_ac_remote_model_t getModel(const bool useRaw=false) const
Get the model code of the interal message state.
Definition ir_Mirage.cpp:177
static bool validChecksum(const uint8_t *data)
Verify the checksum is valid for a given state.
Definition ir_Mirage.cpp:208
bool getCleanToggle(void) const
Get the Clean Toggle setting of the A/C.
Definition ir_Mirage.cpp:497
bool getPower(void) const
Get the value of the current power setting.
Definition ir_Mirage.cpp:253
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition ir_Mirage.cpp:631
uint16_t getSensorTemp(void) const
Get the Sensor Temp setting of the A/C's remote.
Definition ir_Mirage.cpp:567
uint16_t getOffTimer(void) const
Get the number of minutes the Off Timer is currently set for.
Definition ir_Mirage.cpp:604
uint8_t getTemp(void) const
Get the current temperature setting.
Definition ir_Mirage.cpp:294
bool getSwingH(void) const
Get the Horizontal Swing setting of the A/C.
Definition ir_Mirage.cpp:455
bool getLight(void) const
Get the value of the current Light/Display setting.
Definition ir_Mirage.cpp:365
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition ir_Mirage.cpp:264
uint8_t getSwingV(void) const
Get the Vertical Swing setting/position of the A/C.
Definition ir_Mirage.cpp:432
void setTurbo(const bool on)
Change the Turbo setting.
Definition ir_Mirage.cpp:308
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition ir_Mirage.cpp:138
static uint8_t convertFan(const stdAc::fanspeed_t speed, const mirage_ac_remote_model_t model=mirage_ac_remote_model_t::KKG9AC1)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition ir_Mirage.cpp:681
uint32_t getClock(void) const
Get the clock time of the A/C unit.
Definition ir_Mirage.cpp:374
void setPower(const bool on)
Change the power setting.
Definition ir_Mirage.cpp:227
void setSwingH(const bool on)
Set the Horizontal Swing setting of the A/C.
Definition ir_Mirage.cpp:443
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition ir_Mirage.cpp:736
IRsend _irsend
Instance of the IR send class.
Definition ir_Mirage.h:265
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition ir_Mirage.cpp:107
Mirage120Protocol _
Definition ir_Mirage.h:271
void begin(void)
Set up hardware to be able to send a message.
Definition ir_Mirage.cpp:117
void setSwingV(const uint8_t position)
Set the Vertical Swing setting/position of the A/C.
Definition ir_Mirage.cpp:405
void fromCommon(const stdAc::state_t state)
Convert & set a stdAc::state_t to its equivalent internal settings.
Definition ir_Mirage.cpp:764
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition ir_Mirage.cpp:668
void send(const uint16_t repeat=kMirageMinRepeat)
Send the current internal state as an IR message.
Definition ir_Mirage.cpp:122
bool getFilter(void) const
Get the Filter setting of the A/C.
Definition ir_Mirage.cpp:518
void setSleep(const bool on)
Change the Sleep setting.
Definition ir_Mirage.cpp:330
void setModel(const mirage_ac_remote_model_t model)
Set the model code of the interal message state.
Definition ir_Mirage.cpp:183
void setSensorTemp(const uint8_t degrees)
Set the Sensor Temp setting of the A/C's remote.
Definition ir_Mirage.cpp:554
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition ir_Mirage.cpp:145
bool getIFeel(void) const
Get the IFeel setting of the A/C.
Definition ir_Mirage.cpp:545
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition ir_Mirage.cpp:268
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition ir_Mirage.cpp:707
void setClock(const uint32_t nr_of_seconds)
Set the clock time on the A/C unit.
Definition ir_Mirage.cpp:386
Class for sending all basic IR protocols.
Definition IRsend.h:256
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition IRsend.cpp:286
const uint8_t kMirageAcFanMed
Definition ir_Mirage.h:168
const uint8_t kMirageAcKKG29AC1FanAuto
Definition ir_Mirage.h:170
const uint8_t kMirageAcSensorTempMax
Definition ir_Mirage.h:179
const uint8_t kMirageAcKKG29AC1FanMed
Definition ir_Mirage.h:173
const uint8_t kMirageAcDry
Definition ir_Mirage.h:162
const uint8_t kMirageAcKKG29AC1FanLow
Definition ir_Mirage.h:172
const uint8_t kMirageAcTempOffset
Definition ir_Mirage.h:177
const uint8_t kMirageAcSensorTempOffset
Definition ir_Mirage.h:178
const uint8_t kMirageAcSwingVHigh
Definition ir_Mirage.h:186
const uint8_t kMirageAcPowerOff
Definition ir_Mirage.h:181
const uint8_t kMirageAcHeat
Definition ir_Mirage.h:160
const uint8_t kMirageAcSwingVOff
Definition ir_Mirage.h:182
const uint8_t kMirageAcFanAuto
Definition ir_Mirage.h:166
const uint8_t kMirageAcSwingVAuto
Definition ir_Mirage.h:188
const uint8_t kMirageAcCool
Definition ir_Mirage.h:161
const uint8_t kMirageAcSwingVLowest
Definition ir_Mirage.h:183
const uint8_t kMirageAcFanLow
Definition ir_Mirage.h:169
const uint8_t kMirageAcKKG29AC1FanHigh
Definition ir_Mirage.h:171
const uint8_t kMirageAcFan
Definition ir_Mirage.h:164
const uint8_t kMirageAcRecycle
Definition ir_Mirage.h:163
const uint8_t kMirageAcMaxTemp
Definition ir_Mirage.h:176
const uint8_t kMirageAcMinTemp
Definition ir_Mirage.h:175
const uint8_t kMirageAcSwingVLow
Definition ir_Mirage.h:184
const uint8_t kMirageAcFanHigh
Definition ir_Mirage.h:167
const uint8_t kMirageAcSwingVMiddle
Definition ir_Mirage.h:185
const uint8_t kMirageAcSwingVHighest
Definition ir_Mirage.h:187
fanspeed_t
Common A/C settings for Fan Speeds.
Definition IRsend.h:67
opmode_t
Common A/C settings for A/C operating modes.
Definition IRsend.h:55
swingv_t
Common A/C settings for Vertical Swing.
Definition IRsend.h:80
Structure to hold a common A/C state.
Definition IRsend.h:120
Native representation of a Mirage 120-bit A/C message.
Definition ir_Mirage.h:29
uint8_t Fan
Definition ir_Mirage.h:41
uint8_t IFeel
Definition ir_Mirage.h:136
uint8_t SensorTemp
Definition ir_Mirage.h:134
uint8_t Quiet
Definition ir_Mirage.h:111
uint8_t Filter
Definition ir_Mirage.h:127
uint8_t SwingV
Definition ir_Mirage.h:121
uint8_t Temp
Definition ir_Mirage.h:35
uint8_t OffTimerHours
Definition ir_Mirage.h:145
uint8_t Power
Definition ir_Mirage.h:124
uint8_t Hours
Definition ir_Mirage.h:99
uint8_t LightToggle_Kkg29ac1
Definition ir_Mirage.h:122
uint8_t Seconds
Definition ir_Mirage.h:95
uint8_t SwingAndPower
Definition ir_Mirage.h:80
uint8_t OnTimerMins
Definition ir_Mirage.h:142
uint8_t OffTimerMins
Definition ir_Mirage.h:148
uint8_t OffTimerEnable
Definition ir_Mirage.h:115
uint8_t Sum
Definition ir_Mirage.h:63
uint8_t Header
Definition ir_Mirage.h:33
uint8_t Sleep_Kkg9ac1
Definition ir_Mirage.h:83
uint8_t CleanToggle
Definition ir_Mirage.h:135
uint8_t RecycleHeat
Definition ir_Mirage.h:131
uint8_t Mode
Definition ir_Mirage.h:43
uint8_t Turbo_Kkg29ac1
Definition ir_Mirage.h:140
uint8_t Minutes
Definition ir_Mirage.h:97
uint8_t raw[kMirageStateLength]
The state in code form.
Definition ir_Mirage.h:30
uint8_t Turbo_Kkg9ac1
Definition ir_Mirage.h:86
uint8_t Light_Kkg9ac1
Definition ir_Mirage.h:74
uint8_t Sleep_Kkg29ac1
Definition ir_Mirage.h:129
uint8_t SwingH
Definition ir_Mirage.h:120
uint8_t OnTimerEnable
Definition ir_Mirage.h:116
uint8_t OnTimerHours
Definition ir_Mirage.h:138