IRremoteIDF
Infrared send & receive for ESP-IDF
Loading...
Searching...
No Matches
ir_Whirlpool.h
Go to the documentation of this file.
1// Copyright 2018 David Conran
2
10
11// Supports:
12// Brand: Whirlpool, Model: DG11J1-3A remote
13// Brand: Whirlpool, Model: DG11J1-04 remote
14// Brand: Whirlpool, Model: DG11J1-91 remote
15// Brand: Whirlpool, Model: SPIS409L A/C
16// Brand: Whirlpool, Model: SPIS412L A/C
17// Brand: Whirlpool, Model: SPIW409L A/C
18// Brand: Whirlpool, Model: SPIW412L A/C
19// Brand: Whirlpool, Model: SPIW418L A/C
20
21#ifndef IR_WHIRLPOOL_H_
22#define IR_WHIRLPOOL_H_
23
24#define __STDC_LIMIT_MACROS
25#include <stdint.h>
26#include "IRplatform.h"
27#include "IRremoteESP8266.h"
28#include "IRsend.h"
29#ifdef UNIT_TEST
30#include "IRsend_test.h"
31#endif
32
36 struct {
37 // Byte 0~1
38 uint8_t pad0[2];
39 // Byte 2
40 uint8_t Fan :2;
41 uint8_t Power :1;
42 uint8_t Sleep :1;
43 uint8_t :3;
44 uint8_t Swing1 :1;
45 // Byte 3
46 uint8_t Mode :3;
47 uint8_t :1;
48 uint8_t Temp :4;
49 // Byte 4
50 uint8_t :8;
51 // Byte 5
52 uint8_t :4;
53 uint8_t Super1 :1;
54 uint8_t :2;
55 uint8_t Super2 :1;
56 // Byte 6
57 uint8_t ClockHours :5;
58 uint8_t LightOff :1;
59 uint8_t :2;
60 // Byte 7
61 uint8_t ClockMins :6;
62 uint8_t :1;
63 uint8_t OffTimerEnabled :1;
64 // Byte 8
65 uint8_t OffHours :5;
66 uint8_t :1;
67 uint8_t Swing2 :1;
68 uint8_t :1;
69 // Byte 9
70 uint8_t OffMins :6;
71 uint8_t :1;
72 uint8_t OnTimerEnabled :1;
73 // Byte 10
74 uint8_t OnHours :5;
75 uint8_t :3;
76 // Byte 11
77 uint8_t OnMins :6;
78 uint8_t :2;
79 // Byte 12
80 uint8_t :8;
81 // Byte 13
82 uint8_t Sum1 :8;
83 // Byte 14
84 uint8_t :8;
85 // Byte 15
86 uint8_t Cmd :8;
87 // Byte 16~17
88 uint8_t pad1[2];
89 // Byte 18
90 uint8_t :3;
91 uint8_t J191 :1;
92 uint8_t :4;
93 // Byte 19
94 uint8_t :8;
95 // Byte 20
96 uint8_t Sum2 :8;
97 };
98};
99
100// Constants
101const uint8_t kWhirlpoolAcChecksumByte1 = 13;
103const uint8_t kWhirlpoolAcHeat = 0;
104const uint8_t kWhirlpoolAcAuto = 1;
105const uint8_t kWhirlpoolAcCool = 2;
106const uint8_t kWhirlpoolAcDry = 3;
107const uint8_t kWhirlpoolAcFan = 4;
108const uint8_t kWhirlpoolAcFanAuto = 0;
109const uint8_t kWhirlpoolAcFanHigh = 1;
110const uint8_t kWhirlpoolAcFanMedium = 2;
111const uint8_t kWhirlpoolAcFanLow = 3;
112const uint8_t kWhirlpoolAcMinTemp = 18; // 18C (DG11J1-3A), 16C (DG11J1-91)
113const uint8_t kWhirlpoolAcMaxTemp = 32; // 32C (DG11J1-3A), 30C (DG11J1-91)
114const uint8_t kWhirlpoolAcAutoTemp = 23; // 23C
115const uint8_t kWhirlpoolAcCommandLight = 0x00;
116const uint8_t kWhirlpoolAcCommandPower = 0x01;
117const uint8_t kWhirlpoolAcCommandTemp = 0x02;
118const uint8_t kWhirlpoolAcCommandSleep = 0x03;
119const uint8_t kWhirlpoolAcCommandSuper = 0x04;
120const uint8_t kWhirlpoolAcCommandOnTimer = 0x05;
121const uint8_t kWhirlpoolAcCommandMode = 0x06;
122const uint8_t kWhirlpoolAcCommandSwing = 0x07;
123const uint8_t kWhirlpoolAcCommandIFeel = 0x0D;
124const uint8_t kWhirlpoolAcCommandFanSpeed = 0x11;
125const uint8_t kWhirlpoolAcCommand6thSense = 0x17;
126const uint8_t kWhirlpoolAcCommandOffTimer = 0x1D;
127
128// Classes
131 public:
132 explicit IRWhirlpoolAc(const uint16_t pin, const bool inverted = false,
133 const bool use_modulation = true);
134 void stateReset(void);
135#if SEND_WHIRLPOOL_AC
136 void send(const uint16_t repeat = kWhirlpoolAcDefaultRepeat,
137 const bool calcchecksum = true);
142 int8_t calibrate(void) { return _irsend.calibrate(); }
143#endif // SEND_WHIRLPOOL_AC
144 void begin(void);
145 void setPowerToggle(const bool on);
146 bool getPowerToggle(void) const;
147 void setSleep(const bool on);
148 bool getSleep(void) const;
149 void setSuper(const bool on);
150 bool getSuper(void) const;
151 void setTemp(const uint8_t temp);
152 uint8_t getTemp(void) const;
153 void setFan(const uint8_t speed);
154 uint8_t getFan(void) const;
155 void setMode(const uint8_t mode);
156 uint8_t getMode(void) const;
157 void setSwing(const bool on);
158 bool getSwing(void) const;
159 void setLight(const bool on);
160 bool getLight(void) const;
161 uint16_t getClock(void) const;
162 void setClock(const uint16_t minspastmidnight);
163 uint16_t getOnTimer(void) const;
164 void setOnTimer(const uint16_t minspastmidnight);
165 void enableOnTimer(const bool on);
166 bool isOnTimerEnabled(void) const;
167 uint16_t getOffTimer(void) const;
168 void setOffTimer(const uint16_t minspastmidnight);
169 void enableOffTimer(const bool on);
170 bool isOffTimerEnabled(void) const;
171 void setCommand(const uint8_t code);
172 uint8_t getCommand(void) const;
174 void setModel(const whirlpool_ac_remote_model_t model);
175 uint8_t* getRaw(const bool calcchecksum = true);
176 void setRaw(const uint8_t new_code[],
177 const uint16_t length = kWhirlpoolAcStateLength);
178 static bool validChecksum(const uint8_t state[],
179 const uint16_t length = kWhirlpoolAcStateLength);
180 static uint8_t convertMode(const stdAc::opmode_t mode);
181 static uint8_t convertFan(const stdAc::fanspeed_t speed);
182 static stdAc::opmode_t toCommonMode(const uint8_t mode);
183 static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
184 stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
185 String toString(void) const;
186#ifndef UNIT_TEST
187
188 private:
190#else // UNIT_TEST
192 IRsendTest _irsend;
194#endif // UNIT_TEST
196 uint8_t _desiredtemp;
197 void checksum(const uint16_t length = kWhirlpoolAcStateLength);
198 void _setTemp(const uint8_t temp, const bool remember = true);
199 void _setMode(const uint8_t mode);
200 int8_t getTempOffset(void) const;
201};
202
203#endif // IR_WHIRLPOOL_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 kWhirlpoolAcStateLength
Definition IRremoteESP8266.h:1445
const uint16_t kWhirlpoolAcDefaultRepeat
Definition IRremoteESP8266.h:1447
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition IRsend.h:217
Class for handling detailed Whirlpool A/C messages.
Definition ir_Whirlpool.h:130
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition ir_Whirlpool.h:142
bool isOffTimerEnabled(void) const
Is the Off timer enabled?
Definition ir_Whirlpool.cpp:332
void send(const uint16_t repeat=kWhirlpoolAcDefaultRepeat, const bool calcchecksum=true)
Send the current internal state as an IR message.
Definition ir_Whirlpool.cpp:142
void setSuper(const bool on)
Set the Super (Turbo/Jet) setting of the A/C.
Definition ir_Whirlpool.cpp:404
void setOnTimer(const uint16_t minspastmidnight)
Set the On Timer time.
Definition ir_Whirlpool.cpp:345
void begin(void)
Set up hardware to be able to send a message.
Definition ir_Whirlpool.cpp:103
bool getPowerToggle(void) const
Get the value of the current power toggle setting.
Definition ir_Whirlpool.cpp:378
String toString(void) const
Convert the current internal state into a human readable string.
Definition ir_Whirlpool.cpp:530
static bool validChecksum(const uint8_t state[], const uint16_t length=kWhirlpoolAcStateLength)
Verify the checksum is valid for a given state.
Definition ir_Whirlpool.cpp:109
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition ir_Whirlpool.cpp:456
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition ir_Whirlpool.cpp:94
uint16_t getOnTimer(void) const
Get the On Timer time..
Definition ir_Whirlpool.cpp:351
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition ir_Whirlpool.cpp:495
bool getLight(void) const
Get the Light (Display/LED) setting of the A/C.
Definition ir_Whirlpool.cpp:302
uint16_t getOffTimer(void) const
Get the Off Timer time..
Definition ir_Whirlpool.cpp:326
bool isOnTimerEnabled(void) const
Is the On timer enabled?
Definition ir_Whirlpool.cpp:357
void _setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition ir_Whirlpool.cpp:225
void setPowerToggle(const bool on)
Change the power toggle setting.
Definition ir_Whirlpool.cpp:370
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition ir_Whirlpool.cpp:483
WhirlpoolProtocol _
Definition ir_Whirlpool.h:195
void setOffTimer(const uint16_t minspastmidnight)
Set the Off Timer time.
Definition ir_Whirlpool.cpp:320
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition ir_Whirlpool.cpp:390
void setSwing(const bool on)
Set the (vertical) swing setting of the A/C.
Definition ir_Whirlpool.cpp:281
void setLight(const bool on)
Set the Light (Display/LED) setting of the A/C.
Definition ir_Whirlpool.cpp:295
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition ir_Whirlpool.cpp:470
void checksum(const uint16_t length=kWhirlpoolAcStateLength)
Calculate & set the checksum for the current internal state of the remote.
Definition ir_Whirlpool.cpp:130
uint8_t * getRaw(const bool calcchecksum=true)
Get a copy of the internal state/code for this protocol.
Definition ir_Whirlpool.cpp:151
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition ir_Whirlpool.cpp:254
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition ir_Whirlpool.cpp:260
whirlpool_ac_remote_model_t getModel(void) const
Get/Detect the model of the A/C.
Definition ir_Whirlpool.cpp:165
uint16_t getClock(void) const
Get the clock time in nr. of minutes past midnight.
Definition ir_Whirlpool.cpp:314
uint8_t getFan(void) const
Get the current fan speed setting.
Definition ir_Whirlpool.cpp:275
void enableOnTimer(const bool on)
Enable the On Timer.
Definition ir_Whirlpool.cpp:363
void setClock(const uint16_t minspastmidnight)
Set the clock time in nr. of minutes past midnight.
Definition ir_Whirlpool.cpp:308
void setCommand(const uint8_t code)
Set the Command (Button) setting of the A/C.
Definition ir_Whirlpool.cpp:434
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition ir_Whirlpool.cpp:247
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition ir_Whirlpool.cpp:398
void enableOffTimer(const bool on)
Enable the Off Timer.
Definition ir_Whirlpool.cpp:338
void _setTemp(const uint8_t temp, const bool remember=true)
Set the temperature.
Definition ir_Whirlpool.cpp:200
int8_t getTempOffset(void) const
Calculate the temp. offset in deg C for the current model.
Definition ir_Whirlpool.cpp:189
uint8_t getCommand(void) const
Get the Command (Button) setting of the A/C.
Definition ir_Whirlpool.cpp:384
void setModel(const whirlpool_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition ir_Whirlpool.cpp:174
uint8_t getTemp(void) const
Get the current temperature setting.
Definition ir_Whirlpool.cpp:218
bool getSwing(void) const
Get the (vertical) swing setting of the A/C.
Definition ir_Whirlpool.cpp:289
uint8_t _desiredtemp
The last user explicitly set temperature.
Definition ir_Whirlpool.h:196
IRsend _irsend
Instance of the IR send class.
Definition ir_Whirlpool.h:189
bool getSuper(void) const
Get the Super (Turbo/Jet) setting of the A/C.
Definition ir_Whirlpool.cpp:428
void setRaw(const uint8_t new_code[], const uint16_t length=kWhirlpoolAcStateLength)
Set the internal state from a valid code for this protocol.
Definition ir_Whirlpool.cpp:159
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition ir_Whirlpool.cpp:441
void setTemp(const uint8_t temp)
Set the temperature.
Definition ir_Whirlpool.cpp:210
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 kWhirlpoolAcCommandOffTimer
Definition ir_Whirlpool.h:126
const uint8_t kWhirlpoolAcMaxTemp
Definition ir_Whirlpool.h:113
const uint8_t kWhirlpoolAcFanAuto
Definition ir_Whirlpool.h:108
const uint8_t kWhirlpoolAcHeat
Definition ir_Whirlpool.h:103
const uint8_t kWhirlpoolAcAuto
Definition ir_Whirlpool.h:104
const uint8_t kWhirlpoolAcAutoTemp
Definition ir_Whirlpool.h:114
const uint8_t kWhirlpoolAcCommandSwing
Definition ir_Whirlpool.h:122
const uint8_t kWhirlpoolAcChecksumByte2
Definition ir_Whirlpool.h:102
const uint8_t kWhirlpoolAcCommandFanSpeed
Definition ir_Whirlpool.h:124
const uint8_t kWhirlpoolAcCommand6thSense
Definition ir_Whirlpool.h:125
const uint8_t kWhirlpoolAcCommandSuper
Definition ir_Whirlpool.h:119
const uint8_t kWhirlpoolAcCommandOnTimer
Definition ir_Whirlpool.h:120
const uint8_t kWhirlpoolAcCommandIFeel
Definition ir_Whirlpool.h:123
const uint8_t kWhirlpoolAcCommandSleep
Definition ir_Whirlpool.h:118
const uint8_t kWhirlpoolAcCommandTemp
Definition ir_Whirlpool.h:117
const uint8_t kWhirlpoolAcFan
Definition ir_Whirlpool.h:107
const uint8_t kWhirlpoolAcFanHigh
Definition ir_Whirlpool.h:109
const uint8_t kWhirlpoolAcCool
Definition ir_Whirlpool.h:105
const uint8_t kWhirlpoolAcCommandMode
Definition ir_Whirlpool.h:121
const uint8_t kWhirlpoolAcChecksumByte1
Definition ir_Whirlpool.h:101
const uint8_t kWhirlpoolAcDry
Definition ir_Whirlpool.h:106
const uint8_t kWhirlpoolAcFanLow
Definition ir_Whirlpool.h:111
const uint8_t kWhirlpoolAcCommandPower
Definition ir_Whirlpool.h:116
const uint8_t kWhirlpoolAcFanMedium
Definition ir_Whirlpool.h:110
const uint8_t kWhirlpoolAcMinTemp
Definition ir_Whirlpool.h:112
const uint8_t kWhirlpoolAcCommandLight
Definition ir_Whirlpool.h:115
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
Structure to hold a common A/C state.
Definition IRsend.h:120
Native representation of a Whirlpool A/C message.
Definition ir_Whirlpool.h:34
uint8_t Mode
Definition ir_Whirlpool.h:46
uint8_t Swing1
Definition ir_Whirlpool.h:44
uint8_t Swing2
Definition ir_Whirlpool.h:67
uint8_t OnHours
Definition ir_Whirlpool.h:74
uint8_t Sum2
Definition ir_Whirlpool.h:96
uint8_t Cmd
Definition ir_Whirlpool.h:86
uint8_t J191
Definition ir_Whirlpool.h:91
uint8_t Sum1
Definition ir_Whirlpool.h:82
uint8_t Power
Definition ir_Whirlpool.h:41
uint8_t OffMins
Definition ir_Whirlpool.h:70
uint8_t ClockHours
Definition ir_Whirlpool.h:57
uint8_t OnTimerEnabled
Definition ir_Whirlpool.h:72
uint8_t raw[kWhirlpoolAcStateLength]
The state in IR code form.
Definition ir_Whirlpool.h:35
uint8_t OffHours
Definition ir_Whirlpool.h:65
uint8_t pad0[2]
Definition ir_Whirlpool.h:38
uint8_t OffTimerEnabled
Definition ir_Whirlpool.h:63
uint8_t Temp
Definition ir_Whirlpool.h:48
uint8_t Sleep
Definition ir_Whirlpool.h:42
uint8_t OnMins
Definition ir_Whirlpool.h:77
uint8_t Super1
Definition ir_Whirlpool.h:53
uint8_t Fan
Definition ir_Whirlpool.h:40
uint8_t Super2
Definition ir_Whirlpool.h:55
uint8_t ClockMins
Definition ir_Whirlpool.h:61
uint8_t pad1[2]
Definition ir_Whirlpool.h:88
uint8_t LightOff
Definition ir_Whirlpool.h:58