IRremoteESP8266
ir_York.h
Go to the documentation of this file.
1 // Copyright 2022 Daniele Gobbetti
2 
5 
6 // Supports:
7 // Brand: York, Model: MHH07P17 A/C
8 // Brand: York, Model: GRYLH2A remote
9 
10 #ifndef IR_YORK_H_
11 #define IR_YORK_H_
12 
13 #define __STDC_LIMIT_MACROS
14 #include <stdint.h>
15 #ifndef UNIT_TEST
16 #include <Arduino.h>
17 #endif
18 #include "IRremoteESP8266.h"
19 #include "IRsend.h"
20 #ifdef UNIT_TEST
21 #include "IRsend_test.h"
22 #endif
23 
24 
27  uint8_t raw[kYorkStateLength];
28  struct {
29  // byte 0-5
30  uint8_t preamble[6]; // unknown, fixed 0x08, 0x10, 0x07, 0x02, 0x40, 0x08
31  // byte 6
32  uint8_t Key1 :4; // key pressed on the remote: 1 power, 2 temp up, 3
33  // temp down...
34  uint8_t Key2 :4; // only set when setting ontime/offtime:
35  // Key1 value is 0x6 (enter key) and Key2 is 0x3 for
36  // "start" and 0x2 for "stop"
37  // byte 7
38  uint8_t Fan :4; // Fan speed: 1 low, 2 mid, 3 max, 8 auto
39  uint8_t Power :1; // main unit power: 1 on, 0 off
40  uint8_t :3;
41  // byte 8
42  uint8_t Mode :4; // 1 heat, 2 cool, 3 dry, 4 fan, 8 auto
43  uint8_t :4;
44  // byte 9
45  uint8_t :2;
46  uint8_t Temp :6; // Degrees Celsius
47  // byte 10
48  uint8_t OffTimer :8; // Power off time: 10s of minutes from now
49  // byte 11
50  uint8_t OnTimer :8; // Power on time: 10s of minutes from now
51  // byte 12
52  uint8_t :8; // unknown, normally 0x00, could be 0x08 when ontime
53  // set, 0x88 if both on and offtime set, 0x60 if
54  // sleep mode set
55  // byte 13
56  uint8_t SwingV :1; // 0 off, 1 on
57  uint8_t :7;
58  // byte 14
59  uint8_t :8; // checksum preamble, fixed 0xEC
60  // byte 15-16
61  uint8_t Chk1 :8; // checksum, algorithm CRC-16/ARC, first byte
62  uint8_t Chk2 :8; // checksum, algorithm CRC-16/ARC, second byte
63  };
64 };
65 
66 // Constants
68  0x08, 0x10, 0x07, 0x02, 0x40, 0x08,
69  0x03, 0x18, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00,
70  0xEC,
71  0xF5, 0xF2}; // Mode "Heat", Fan Speed "auto", Temp: 24, Power: on
72 
73 // Temperature
74 const uint8_t kYorkMinTemp = 18; // Celsius
75 const uint8_t kYorkMaxTemp = 32; // Celsius
76 // Fan
77 const uint8_t kYorkFanLow = 1;
78 const uint8_t kYorkFanMedium = 2;
79 const uint8_t kYorkFanHigh = 3;
80 const uint8_t kYorkFanAuto = 8;
81 // Modes
82 const uint8_t kYorkHeat = 1;
83 const uint8_t kYorkCool = 2;
84 const uint8_t kYorkDry = 3;
85 const uint8_t kYorkFan = 4;
86 const uint8_t kYorkAuto = 8;
87 
88 // Classes
90 class IRYorkAc {
91  public:
92  explicit IRYorkAc(const uint16_t pin, const bool inverted = false,
93  const bool use_modulation = true);
94  void stateReset();
95 #if SEND_YORK
96  void send(const uint16_t repeat = kNoRepeat);
101  int8_t calibrate(void) { return _irsend.calibrate(); }
102 #endif // SEND_YORK
103  void begin();
104  void setPowerToggle(const bool on);
105  bool getPowerToggle() const;
106  void setTemp(const uint8_t temp);
107  uint8_t getTemp() const;
108  void setFan(const uint8_t speed);
109  uint8_t getFan() const;
110  void setMode(const uint8_t mode);
111  uint8_t getMode() const;
112  uint16_t getOnTimer(void) const;
113  uint16_t getOffTimer(void) const;
114  void setOnTimer(const uint16_t mins);
115  void setOffTimer(const uint16_t mins);
116  uint8_t* getRaw();
117  void setRaw(const uint8_t new_code[],
118  const uint16_t length = kYorkStateLength);
119  static uint8_t convertMode(const stdAc::opmode_t mode);
120  static uint8_t convertFan(const stdAc::fanspeed_t speed);
121  void calcChecksum();
122  static stdAc::opmode_t toCommonMode(const uint8_t mode);
123  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
124  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
125  String toString() const;
126 #ifndef UNIT_TEST
127 
128  private:
130 #else
131  IRsendTest _irsend;
133 #endif
136 };
137 #endif // IR_YORK_H_
YorkProtocol::Chk2
uint8_t Chk2
Definition: ir_York.h:62
IRYorkAc::toCommonFanSpeed
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_York.cpp:234
IRYorkAc::getFan
uint8_t getFan() const
Get the current fan speed setting.
Definition: ir_York.cpp:209
IRYorkAc::calibrate
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_York.h:101
IRYorkAc
Class for handling detailed York A/C messages.
Definition: ir_York.h:90
kYorkMaxTemp
const uint8_t kYorkMaxTemp
Definition: ir_York.h:75
YorkProtocol
Native representation of a York A/C message.
Definition: ir_York.h:26
stdAc::fanspeed_t
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:61
IRYorkAc::getOnTimer
uint16_t getOnTimer(void) const
Get the On Timer setting of the A/C.
Definition: ir_York.cpp:274
IRYorkAc::setRaw
void setRaw(const uint8_t new_code[], const uint16_t length=kYorkStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_York.cpp:127
YorkProtocol::SwingV
uint8_t SwingV
Definition: ir_York.h:56
IRYorkAc::calcChecksum
void calcChecksum()
CRC16-16 (a.k.a. CRC-16-IBM)
Definition: ir_York.cpp:286
kYorkFan
const uint8_t kYorkFan
Definition: ir_York.h:85
IRYorkAc::setFan
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_York.cpp:191
IRsend.h
IRYorkAc::convertMode
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_York.cpp:164
kYorkFanLow
const uint8_t kYorkFanLow
Definition: ir_York.h:77
kYorkDry
const uint8_t kYorkDry
Definition: ir_York.h:84
IRsend
Class for sending all basic IR protocols.
Definition: IRsend.h:237
IRsend::calibrate
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
kYorkAuto
const uint8_t kYorkAuto
Definition: ir_York.h:86
String
std::string String
Definition: IRremoteESP8266.h:1521
YorkProtocol::Key1
uint8_t Key1
Definition: ir_York.h:32
YorkProtocol::OffTimer
uint8_t OffTimer
Definition: ir_York.h:48
IRYorkAc::setOffTimer
void setOffTimer(const uint16_t mins)
Set the Off Timer value of the A/C.
Definition: ir_York.cpp:267
IRYorkAc::IRYorkAc
IRYorkAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_York.cpp:101
IRYorkAc::_
YorkProtocol _
Definition: ir_York.h:135
YorkProtocol::OnTimer
uint8_t OnTimer
Definition: ir_York.h:50
IRYorkAc::toCommonMode
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_York.cpp:177
kYorkCool
const uint8_t kYorkCool
Definition: ir_York.h:83
IRremoteESP8266.h
IRYorkAc::getRaw
uint8_t * getRaw()
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_York.cpp:119
IRYorkAc::getMode
uint8_t getMode() const
Get the current operation mode setting.
Definition: ir_York.cpp:141
kNoRepeat
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:1145
IRYorkAc::getOffTimer
uint16_t getOffTimer(void) const
Get the Off Timer setting of the A/C.
Definition: ir_York.cpp:281
IRYorkAc::setPowerToggle
void setPowerToggle(const bool on)
kYorkStateLength
const uint16_t kYorkStateLength
Definition: IRremoteESP8266.h:1437
IRYorkAc::toString
String toString() const
Convert the current internal state into a human readable string.
Definition: ir_York.cpp:341
IRYorkAc::convertFan
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_York.cpp:216
YorkProtocol::Key2
uint8_t Key2
Definition: ir_York.h:34
kYorkFanHigh
const uint8_t kYorkFanHigh
Definition: ir_York.h:79
YorkProtocol::Power
uint8_t Power
Definition: ir_York.h:39
IRYorkAc::setTemp
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_York.cpp:245
YorkProtocol::Temp
uint8_t Temp
Definition: ir_York.h:46
IRYorkAc::setOnTimer
void setOnTimer(const uint16_t mins)
Set the On Timer value of the A/C.
Definition: ir_York.cpp:259
YorkProtocol::Chk1
uint8_t Chk1
Definition: ir_York.h:61
YorkProtocol::raw
uint8_t raw[kYorkStateLength]
The state of the IR remote.
Definition: ir_York.h:27
kYorkFanMedium
const uint8_t kYorkFanMedium
Definition: ir_York.h:78
IRYorkAc::setMode
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_York.cpp:147
YorkProtocol::Fan
uint8_t Fan
Definition: ir_York.h:38
kYorkFanAuto
const uint8_t kYorkFanAuto
Definition: ir_York.h:80
kYorkMinTemp
const uint8_t kYorkMinTemp
Definition: ir_York.h:74
IRYorkAc::toCommon
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_York.cpp:307
IRYorkAc::_irsend
IRsend _irsend
Instance of the IR send class.
Definition: ir_York.h:129
IRYorkAc::begin
void begin()
Set up hardware to be able to send a message.
Definition: ir_York.cpp:114
IRYorkAc::send
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_York.cpp:134
kYorkHeat
const uint8_t kYorkHeat
Definition: ir_York.h:82
IRYorkAc::getPowerToggle
bool getPowerToggle() const
stdAc::state_t
Structure to hold a common A/C state.
Definition: IRsend.h:114
YorkProtocol::Mode
uint8_t Mode
Definition: ir_York.h:42
IRYorkAc::getTemp
uint8_t getTemp() const
Get the current temperature setting.
Definition: ir_York.cpp:251
IRYorkAc::stateReset
void stateReset()
Definition: ir_York.cpp:108
YorkProtocol::preamble
uint8_t preamble[6]
Definition: ir_York.h:30
kYorkKnownGoodState
const uint8_t kYorkKnownGoodState[kYorkStateLength]
Definition: ir_York.h:67
stdAc::opmode_t
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:49