IRremoteESP8266
ir_Argo.h
Go to the documentation of this file.
1 // Copyright 2017 Schmolders
4 
5 // Supports:
6 // Brand: Argo, Model: Ulisse 13 DCI Mobile Split A/C
7 
8 #ifndef IR_ARGO_H_
9 #define IR_ARGO_H_
10 
11 #ifndef UNIT_TEST
12 #include <Arduino.h>
13 #endif
14 #include "IRremoteESP8266.h"
15 #include "IRsend.h"
16 #ifdef UNIT_TEST
17 #include "IRsend_test.h"
18 #endif
19 
20 
21 // ARGO Ulisse DCI
22 
23 /*
24  Protocol Description:
25  All in LSB first as it is sent. argo message array will be stored MSB first!
26  do LSB-MSB conversion in sendData
27  Byte 0: const 0 0 1 1 0 1 0 1
28  Byte 1: const 1 0 1 0 1 1 1 1
29  Byte 2: 0 0 0, 3bit Cool/Heat Mode, 2bit start SetTemp LSB first
30  Byte 3: 3bit End SetTemp, 2bit Fan Mode, 3bit RoomTemp LSB first
31  Byte 4: 2bit RoomTemp, 3bit Flap Mode, 3bit OnTimer
32  Byte 5: 8bit OnTimer
33  Byte 6: 8Bit OffTimer
34  Byte 7: 3bit OffTimer, 5bit Time
35  Byte 8: 6bit Time, 1bit Timer On/Off, 1bit Timer Program
36  Byte 9: 1bit Timer Program, 1bit Timer 1h, 1 bit Night Mode, 1bit Max Mode, 1bit Filter, 1bit on/off, 1bit const 0, 1bit iFeel
37  Byte 10: 2bit const 0 1, 6bit Checksum
38  Byte 11: 2bit Checksum
39 */
40 
41 // Constants. Store MSB left.
42 
43 // byte[2]
44 const uint8_t kArgoHeatBit = 0b00100000;
45 // kArgoTempLowMask = 0b11000000;
46 const uint8_t kArgoTempLowOffset = 5;
47 const uint8_t kArgoTempLowSize = 2;
48 
49 // Mode 0b00111000
50 const uint8_t kArgoModeOffset = 3;
51 const uint8_t kArgoModeSize = 3;
52 const uint8_t kArgoCool = 0b000;
53 const uint8_t kArgoDry = 0b001;
54 const uint8_t kArgoAuto = 0b010;
55 const uint8_t kArgoOff = 0b011;
56 const uint8_t kArgoHeat = 0b100;
57 const uint8_t kArgoHeatAuto = 0b101;
58 // ?no idea what mode that is
59 const uint8_t kArgoHeatBlink = 0b110;
60 
61 // byte[3]
62 // kArgoTempHighMask = 0b00000111;
63 const uint8_t kArgoTempHighOffset = 0;
64 const uint8_t kArgoTempHighSize = 3;
65 // Fan 0b00011000
66 const uint8_t kArgoFanOffset = 3;
67 const uint8_t kArgoFanSize = 2;
68 const uint8_t kArgoFanAuto = 0; // 0b00
69 const uint8_t kArgoFan1 = 1; // 0b01
70 const uint8_t kArgoFan2 = 2; // 0b10
71 const uint8_t kArgoFan3 = 3; // 0b11
72 // kArgoRoomTempLowMask = 0b11100000;
73 const uint8_t kArgoRoomTempLowOffset = 5;
74 const uint8_t kArgoRoomTempLowSize = 3;
75 
76 // byte[4]
77 // kArgoRoomTempHighMask = 0b00000011;
78 const uint8_t kArgoRoomTempHighOffset = 0;
79 const uint8_t kArgoRoomTempHighSize = 2;
80 
81 const uint8_t kArgoTempDelta = 4;
82 const uint8_t kArgoMaxRoomTemp =
84  kArgoTempDelta; // 35C
85 
86 // byte[9]
87 const uint8_t kArgoNightBitOffset = 2;
88 const uint8_t kArgoMaxBitOffset = 3;
89 const uint8_t kArgoPowerBitOffset = 5;
90 const uint8_t kArgoIFeelBitOffset = 7;
91 
92 const uint8_t kArgoMinTemp = 10; // Celsius delta +4
93 const uint8_t kArgoMaxTemp = 32; // Celsius
94 
95 const uint8_t kArgoFlapAuto = 0;
96 const uint8_t kArgoFlap1 = 1;
97 const uint8_t kArgoFlap2 = 2;
98 const uint8_t kArgoFlap3 = 3;
99 const uint8_t kArgoFlap4 = 4;
100 const uint8_t kArgoFlap5 = 5;
101 const uint8_t kArgoFlap6 = 6;
102 const uint8_t kArgoFlapFull = 7;
103 
104 // Legacy defines. (Deperecated)
105 #define ARGO_COOL_ON kArgoCoolOn
106 #define ARGO_COOL_OFF kArgoCoolOff
107 #define ARGO_COOL_AUTO kArgoCoolAuto
108 #define ARGO_COOL_HUM kArgoCoolHum
109 #define ARGO_HEAT_ON kArgoHeatOn
110 #define ARGO_HEAT_AUTO kArgoHeatAuto
111 #define ARGO_HEAT_BLINK kArgoHeatBlink
112 #define ARGO_MIN_TEMP kArgoMinTemp
113 #define ARGO_MAX_TEMP kArgoMaxTemp
114 #define ARGO_FAN_AUTO kArgoFanAuto
115 #define ARGO_FAN_3 kArgoFan3
116 #define ARGO_FAN_2 kArgoFan2
117 #define ARGO_FAN_1 kArgoFan1
118 #define ARGO_FLAP_AUTO kArgoFlapAuto
119 #define ARGO_FLAP_1 kArgoFlap1
120 #define ARGO_FLAP_2 kArgoFlap2
121 #define ARGO_FLAP_3 kArgoFlap3
122 #define ARGO_FLAP_4 kArgoFlap4
123 #define ARGO_FLAP_5 kArgoFlap5
124 #define ARGO_FLAP_6 kArgoFlap6
125 #define ARGO_FLAP_FULL kArgoFlapFull
126 
127 
129 class IRArgoAC {
130  public:
131  explicit IRArgoAC(const uint16_t pin, const bool inverted = false,
132  const bool use_modulation = true);
133 
134 #if SEND_ARGO
135  void send(const uint16_t repeat = kArgoDefaultRepeat);
140  int8_t calibrate(void) { return _irsend.calibrate(); }
141 #endif // SEND_ARGO
142  void begin(void);
143  void on(void);
144  void off(void);
145 
146  void setPower(const bool on);
147  bool getPower(void);
148 
149  void setTemp(const uint8_t degrees);
150  uint8_t getTemp(void);
151 
152  void setFan(const uint8_t fan);
153  uint8_t getFan(void);
154 
155  void setFlap(const uint8_t flap);
156  uint8_t getFlap(void);
157 
158  void setMode(const uint8_t mode);
159  uint8_t getMode(void);
160 
161  void setMax(const bool on);
162  bool getMax(void);
163 
164  void setNight(const bool on);
165  bool getNight(void);
166 
167  void setiFeel(const bool on);
168  bool getiFeel(void);
169 
170  void setTime(void);
171  void setRoomTemp(const uint8_t degrees);
172  uint8_t getRoomTemp(void);
173 
174  uint8_t* getRaw(void);
175  void setRaw(const uint8_t state[]);
176  static uint8_t calcChecksum(const uint8_t state[],
177  const uint16_t length = kArgoStateLength);
178  static bool validChecksum(const uint8_t state[],
179  const uint16_t length = kArgoStateLength);
180  static uint8_t convertMode(const stdAc::opmode_t mode);
181  static uint8_t convertFan(const stdAc::fanspeed_t speed);
182  static uint8_t convertSwingV(const stdAc::swingv_t position);
183  static stdAc::opmode_t toCommonMode(const uint8_t mode);
184  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
185  stdAc::state_t toCommon(void);
186  String toString();
187 #ifndef UNIT_TEST
188 
189  private:
191 #else
192  IRsendTest _irsend;
194 #endif
196  // # of bytes per command
197  uint8_t argo[kArgoStateLength]; // Defined in IRremoteESP8266.h
198  void stateReset(void);
199  void checksum(void);
200 
201  // Attributes
202  uint8_t flap_mode;
203  uint8_t heat_mode;
204  uint8_t cool_mode;
205 };
206 
207 #endif // IR_ARGO_H_
kArgoFanOffset
const uint8_t kArgoFanOffset
Definition: ir_Argo.h:66
IRArgoAC::setTime
void setTime(void)
Set the time for the A/C.
Definition: ir_Argo.cpp:253
IRArgoAC::calcChecksum
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Argo.cpp:74
IRArgoAC::flap_mode
uint8_t flap_mode
Definition: ir_Argo.h:202
IRArgoAC::setFan
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Argo.cpp:185
IRArgoAC::_irsend
IRsend _irsend
instance of the IR send class
Definition: ir_Argo.h:190
kArgoHeatBlink
const uint8_t kArgoHeatBlink
Definition: ir_Argo.h:59
stdAc::swingv_t
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
kArgoMaxTemp
const uint8_t kArgoMaxTemp
Definition: ir_Argo.h:93
kArgoDefaultRepeat
const uint16_t kArgoDefaultRepeat
Definition: IRremoteESP8266.h:848
IRArgoAC::setTemp
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_Argo.cpp:162
IRArgoAC::setFlap
void setFlap(const uint8_t flap)
Set the flap position. i.e. Swing.
Definition: ir_Argo.cpp:198
IRArgoAC::getMode
uint8_t getMode(void)
Get the current operation mode setting.
Definition: ir_Argo.cpp:210
IRArgoAC::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Argo.cpp:279
kArgoPowerBitOffset
const uint8_t kArgoPowerBitOffset
Definition: ir_Argo.h:89
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
kArgoTempHighOffset
const uint8_t kArgoTempHighOffset
Definition: ir_Argo.h:63
kArgoFlap2
const uint8_t kArgoFlap2
Definition: ir_Argo.h:97
IRArgoAC::stateReset
void stateReset(void)
Reset the internals of the object to a known good state.
Definition: ir_Argo.cpp:101
kArgoFlap4
const uint8_t kArgoFlap4
Definition: ir_Argo.h:99
kArgoTempHighSize
const uint8_t kArgoTempHighSize
Definition: ir_Argo.h:64
kArgoHeatBit
const uint8_t kArgoHeatBit
Definition: ir_Argo.h:44
IRArgoAC::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Argo.h:140
IRArgoAC::argo
uint8_t argo[kArgoStateLength]
Definition: ir_Argo.h:197
IRsend.h
IRArgoAC::toCommon
stdAc::state_t toCommon(void)
Convert the current internal state into its stdAc::state_t equivilant.
Definition: ir_Argo.cpp:360
kArgoFlap3
const uint8_t kArgoFlap3
Definition: ir_Argo.h:98
kArgoMaxBitOffset
const uint8_t kArgoMaxBitOffset
Definition: ir_Argo.h:88
IRArgoAC::getiFeel
bool getiFeel(void)
Get the status of iFeel mode.
Definition: ir_Argo.cpp:249
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:176
IRArgoAC::validChecksum
static bool validChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Argo.cpp:85
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
IRArgoAC::getFlap
uint8_t getFlap(void)
Get the flap position. i.e. Swing.
Definition: ir_Argo.cpp:206
IRArgoAC::getMax
bool getMax(void)
Is the Max (i.e. Turbo) setting on?
Definition: ir_Argo.cpp:157
kArgoStateLength
const uint16_t kArgoStateLength
Definition: IRremoteESP8266.h:846
String
std::string String
Definition: IRremoteESP8266.h:1128
kArgoFan1
const uint8_t kArgoFan1
Definition: ir_Argo.h:69
IRArgoAC::getRoomTemp
uint8_t getRoomTemp(void)
Get the currently stored value for the room temperature setting.
Definition: ir_Argo.cpp:269
IRArgoAC::getPower
bool getPower(void)
Get the power setting from the internal state.
Definition: ir_Argo.cpp:147
IRArgoAC::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivilant.
Definition: ir_Argo.cpp:336
kArgoOff
const uint8_t kArgoOff
Definition: ir_Argo.h:55
IRArgoAC::convertSwingV
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Argo.cpp:316
kArgoFlapFull
const uint8_t kArgoFlapFull
Definition: ir_Argo.h:102
kArgoRoomTempHighSize
const uint8_t kArgoRoomTempHighSize
Definition: ir_Argo.h:79
IRremoteESP8266.h
kArgoDry
const uint8_t kArgoDry
Definition: ir_Argo.h:53
kArgoAuto
const uint8_t kArgoAuto
Definition: ir_Argo.h:54
IRArgoAC::setRoomTemp
void setRoomTemp(const uint8_t degrees)
Set the value for the current room temperature.
Definition: ir_Argo.cpp:259
IRArgoAC::convertFan
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Argo.cpp:298
kArgoTempLowOffset
const uint8_t kArgoTempLowOffset
Definition: ir_Argo.h:46
IRArgoAC::off
void off(void)
Set the internal state to have the power off.
Definition: ir_Argo.cpp:137
IRArgoAC::getFan
uint8_t getFan(void)
Get the current fan speed setting.
Definition: ir_Argo.cpp:191
IRArgoAC::setPower
void setPower(const bool on)
Set the internal state to have the desired power.
Definition: ir_Argo.cpp:141
kArgoRoomTempLowOffset
const uint8_t kArgoRoomTempLowOffset
Definition: ir_Argo.h:73
kArgoFlap1
const uint8_t kArgoFlap1
Definition: ir_Argo.h:96
kArgoModeOffset
const uint8_t kArgoModeOffset
Definition: ir_Argo.h:50
IRArgoAC::getRaw
uint8_t * getRaw(void)
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Argo.cpp:122
kArgoTempLowSize
const uint8_t kArgoTempLowSize
Definition: ir_Argo.h:47
IRArgoAC::getTemp
uint8_t getTemp(void)
Get the current temperature setting.
Definition: ir_Argo.cpp:176
kArgoRoomTempLowSize
const uint8_t kArgoRoomTempLowSize
Definition: ir_Argo.h:74
IRArgoAC::heat_mode
uint8_t heat_mode
Definition: ir_Argo.h:203
kArgoMinTemp
const uint8_t kArgoMinTemp
Definition: ir_Argo.h:92
IRArgoAC::on
void on(void)
Set the internal state to have the power on.
Definition: ir_Argo.cpp:134
IRArgoAC::setNight
void setNight(const bool on)
Turn on/off the Night mode. i.e. Sleep.
Definition: ir_Argo.cpp:233
IRArgoAC::getNight
bool getNight(void)
Get the status of Night mode. i.e. Sleep.
Definition: ir_Argo.cpp:239
kArgoFan2
const uint8_t kArgoFan2
Definition: ir_Argo.h:70
kArgoIFeelBitOffset
const uint8_t kArgoIFeelBitOffset
Definition: ir_Argo.h:90
kArgoCool
const uint8_t kArgoCool
Definition: ir_Argo.h:52
IRArgoAC::send
void send(const uint16_t repeat=kArgoDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Argo.cpp:65
kArgoHeatAuto
const uint8_t kArgoHeatAuto
Definition: ir_Argo.h:57
IRArgoAC::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivilant.
Definition: ir_Argo.cpp:349
kArgoHeat
const uint8_t kArgoHeat
Definition: ir_Argo.h:56
IRArgoAC::setRaw
void setRaw(const uint8_t state[])
Set the raw state of the object.
Definition: ir_Argo.cpp:129
kArgoFlap5
const uint8_t kArgoFlap5
Definition: ir_Argo.h:100
IRArgoAC::IRArgoAC
IRArgoAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Argo.cpp:55
kArgoTempDelta
const uint8_t kArgoTempDelta
Definition: ir_Argo.h:81
kArgoRoomTempHighOffset
const uint8_t kArgoRoomTempHighOffset
Definition: ir_Argo.h:78
IRArgoAC::checksum
void checksum(void)
Update the checksum for the internal state.
Definition: ir_Argo.cpp:91
kArgoFlap6
const uint8_t kArgoFlap6
Definition: ir_Argo.h:101
kArgoModeSize
const uint8_t kArgoModeSize
Definition: ir_Argo.h:51
IRArgoAC::cool_mode
uint8_t cool_mode
Definition: ir_Argo.h:204
IRArgoAC::setiFeel
void setiFeel(const bool on)
Turn on/off the iFeel mode.
Definition: ir_Argo.cpp:243
IRArgoAC::setMax
void setMax(const bool on)
Control the current Max setting. (i.e. Turbo)
Definition: ir_Argo.cpp:151
IRArgoAC::toString
String toString()
Convert the current internal state into a human readable string.
Definition: ir_Argo.cpp:386
kArgoFlapAuto
const uint8_t kArgoFlapAuto
Definition: ir_Argo.h:95
kArgoFanSize
const uint8_t kArgoFanSize
Definition: ir_Argo.h:67
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:97
kArgoFan3
const uint8_t kArgoFan3
Definition: ir_Argo.h:71
IRArgoAC
Class for handling detailed Argo A/C messages.
Definition: ir_Argo.h:129
kArgoNightBitOffset
const uint8_t kArgoNightBitOffset
Definition: ir_Argo.h:87
kArgoFanAuto
const uint8_t kArgoFanAuto
Definition: ir_Argo.h:68
IRArgoAC::begin
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Argo.cpp:60
IRArgoAC::setMode
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Argo.cpp:216
kArgoMaxRoomTemp
const uint8_t kArgoMaxRoomTemp
Definition: ir_Argo.h:82
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46