IRremoteIDF
Infrared send & receive for ESP-IDF
Loading...
Searching...
No Matches
ir_Vestel.h
Go to the documentation of this file.
1// Copyright 2018 Erdem U. Altinyurt
2// Copyright 2019 David Conran
3
7
8// Supports:
9// Brand: Vestel, Model: BIOX CXP-9 A/C (9K BTU)
10
11#ifndef IR_VESTEL_H_
12#define IR_VESTEL_H_
13
14#define __STDC_LIMIT_MACROS
15#include <stdint.h>
16#include "IRplatform.h"
17#include "IRremoteESP8266.h"
18#include "IRsend.h"
19#ifdef UNIT_TEST
20#include "IRsend_test.h"
21#endif
22
25 struct {
26 uint64_t cmdState;
27 uint64_t timeState;
28 };
29 struct {
30 // Command
31 uint64_t Signature :12; // 0x201
32 uint64_t CmdSum :8;
33 uint64_t Swing :4; // auto 0xA, stop 0xF
34 uint64_t TurboSleep :4; // normal 0x1, sleep 0x3, turbo 0x7
35 uint64_t :8;
36 uint64_t Temp :4;
37 uint64_t Fan :4;
38 uint64_t Mode :3;
39 uint64_t :3;
40 uint64_t Ion :1;
41 uint64_t :1;
42 uint64_t Power :2;
43 uint64_t UseCmd :1;
44 uint64_t :0;
45 // Time
46 uint64_t :12;
47 uint64_t TimeSum :8;
48 uint64_t OffTenMins :3;
49 uint64_t OffHours :5;
50 uint64_t OnTenMins :3;
51 uint64_t OnHours :5;
52 uint64_t Hours :5;
53 uint64_t OnTimer :1;
54 uint64_t OffTimer :1;
55 uint64_t Timer :1;
56 uint64_t Minutes :8;
57 uint64_t :0;
58 };
59};
60
61// Constants
62const uint16_t kVestelAcHdrMark = 3110;
63const uint16_t kVestelAcHdrSpace = 9066;
64const uint16_t kVestelAcBitMark = 520;
65const uint16_t kVestelAcOneSpace = 1535;
66const uint16_t kVestelAcZeroSpace = 480;
67const uint16_t kVestelAcTolerance = 30;
68
69const uint8_t kVestelAcMinTempH = 16;
70const uint8_t kVestelAcMinTempC = 18;
71const uint8_t kVestelAcMaxTemp = 30;
72
73const uint8_t kVestelAcAuto = 0;
74const uint8_t kVestelAcCool = 1;
75const uint8_t kVestelAcDry = 2;
76const uint8_t kVestelAcFan = 3;
77const uint8_t kVestelAcHeat = 4;
78
79const uint8_t kVestelAcFanAuto = 1;
80const uint8_t kVestelAcFanLow = 5;
81const uint8_t kVestelAcFanMed = 9;
82const uint8_t kVestelAcFanHigh = 0xB;
83const uint8_t kVestelAcFanAutoCool = 0xC;
84const uint8_t kVestelAcFanAutoHot = 0xD;
85
86const uint8_t kVestelAcNormal = 1;
87const uint8_t kVestelAcSleep = 3;
88const uint8_t kVestelAcTurbo = 7;
89const uint8_t kVestelAcIon = 4;
90const uint8_t kVestelAcSwing = 0xA;
91
92// Default states
93const uint64_t kVestelAcStateDefault = 0x0F00D9001FEF201ULL;
94const uint64_t kVestelAcTimeStateDefault = 0x201ULL;
95
96// Classes
99 public:
100 explicit IRVestelAc(const uint16_t pin, const bool inverted = false,
101 const bool use_modulation = true);
102 void stateReset(void);
103#if SEND_VESTEL_AC
104 void send(const uint16_t repeat = kNoRepeat);
109 int8_t calibrate(void) { return _irsend.calibrate(); }
110#endif // SEND_VESTEL_AC
111 void begin(void);
112 void on(void);
113 void off(void);
114 void setPower(const bool on);
115 bool getPower(void) const;
116 void setAuto(const int8_t autoLevel);
117 void setTimer(const uint16_t minutes);
118 uint16_t getTimer(void) const;
119 void setTime(const uint16_t minutes);
120 uint16_t getTime(void) const;
121 void setOnTimer(const uint16_t minutes);
122 uint16_t getOnTimer(void) const;
123 void setOffTimer(const uint16_t minutes);
124 uint16_t getOffTimer(void) const;
125 void setTemp(const uint8_t temp);
126 uint8_t getTemp(void) const;
127 void setFan(const uint8_t fan);
128 uint8_t getFan(void) const;
129 void setMode(const uint8_t mode);
130 uint8_t getMode(void) const;
131 void setRaw(const uint8_t* newState);
132 void setRaw(const uint64_t newState);
133 uint64_t getRaw(void);
134 static bool validChecksum(const uint64_t state);
135 void setSwing(const bool on);
136 bool getSwing(void) const;
137 void setSleep(const bool on);
138 bool getSleep(void) const;
139 void setTurbo(const bool on);
140 bool getTurbo(void) const;
141 void setIon(const bool on);
142 bool getIon(void) const;
143 bool isTimeCommand(void) const;
144 bool isOnTimerActive(void) const;
145 void setOnTimerActive(const bool on);
146 bool isOffTimerActive(void) const;
147 void setOffTimerActive(const bool on);
148 bool isTimerActive(void) const;
149 void setTimerActive(const bool on);
150 static uint8_t calcChecksum(const uint64_t state);
151 static uint8_t convertMode(const stdAc::opmode_t mode);
152 static uint8_t convertFan(const stdAc::fanspeed_t speed);
153 static stdAc::opmode_t toCommonMode(const uint8_t mode);
154 static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
155 stdAc::state_t toCommon(void) const;
156 String toString(void) const;
157#ifndef UNIT_TEST
158
159 private:
161#else // UNIT_TEST
163 IRsendTest _irsend;
165#endif // UNIT_TEST
167 void checksum(void);
168};
169
170#endif // IR_VESTEL_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 kNoRepeat
Definition IRremoteESP8266.h:1171
Class for handling detailed Vestel A/C messages.
Definition ir_Vestel.h:98
void setPower(const bool on)
Change the power setting.
Definition ir_Vestel.cpp:110
bool isTimerActive(void) const
Get if the Timer is active on the A/C.
Definition ir_Vestel.cpp:211
VestelProtocol _
Definition ir_Vestel.h:166
void setOnTimerActive(const bool on)
Set the On timer to be active on the A/C.
Definition ir_Vestel.cpp:252
void setAuto(const int8_t autoLevel)
Set Auto mode/level of the A/C.
Definition ir_Vestel.cpp:186
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition ir_Vestel.cpp:315
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition ir_Vestel.cpp:162
uint16_t getOnTimer(void) const
Get the A/C's On Timer time.
Definition ir_Vestel.cpp:274
uint16_t getOffTimer(void) const
Get the A/C's Off Timer time.
Definition ir_Vestel.cpp:302
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition ir_Vestel.cpp:169
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition ir_Vestel.cpp:308
void on(void)
Set the requested power state of the A/C to on.
Definition ir_Vestel.cpp:103
uint8_t getFan(void) const
Get the current fan speed setting.
Definition ir_Vestel.cpp:156
IRsend _irsend
Instance of the IR send class.
Definition ir_Vestel.h:160
void off(void)
Set the requested power state of the A/C to off.
Definition ir_Vestel.cpp:106
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition ir_Vestel.cpp:391
bool getSwing(void) const
Get the Swing Roaming setting of the A/C.
Definition ir_Vestel.cpp:354
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition ir_Vestel.cpp:67
void setRaw(const uint8_t *newState)
Set the internal state from a valid code for this protocol.
Definition ir_Vestel.cpp:82
void setSwing(const bool on)
Set the Swing Roaming setting of the A/C.
Definition ir_Vestel.cpp:347
bool isTimeCommand(void) const
Is the current state a time command?
Definition ir_Vestel.cpp:384
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition ir_Vestel.cpp:431
uint16_t getTime(void) const
Get the A/C's internal clock's time.
Definition ir_Vestel.cpp:246
void setTimerActive(const bool on)
Set the timer to be active on the A/C.
Definition ir_Vestel.cpp:204
void begin(void)
Set up hardware to be able to send a message.
Definition ir_Vestel.cpp:62
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition ir_Vestel.cpp:376
void setTimer(const uint16_t minutes)
Set Timer option of A/C.
Definition ir_Vestel.cpp:219
uint8_t getTemp(void) const
Get the current temperature setting.
Definition ir_Vestel.cpp:132
bool getPower(void) const
Get the value of the current power setting.
Definition ir_Vestel.cpp:117
void setOffTimerActive(const bool on)
Set the Off timer to be active on the A/C.
Definition ir_Vestel.cpp:280
void setTemp(const uint8_t temp)
Set the temperature.
Definition ir_Vestel.cpp:123
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition ir_Vestel.cpp:56
bool getIon(void) const
Get the Ion (Filter) setting of the A/C.
Definition ir_Vestel.cpp:341
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition ir_Vestel.cpp:328
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition ir_Vestel.cpp:404
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition ir_Vestel.h:109
String toString(void) const
Convert the current internal state into a human readable string.
Definition ir_Vestel.cpp:469
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition ir_Vestel.cpp:361
void setOffTimer(const uint16_t minutes)
Set the Off timer time on the A/C.
Definition ir_Vestel.cpp:293
void setIon(const bool on)
Set the Ion (Filter) setting of the A/C.
Definition ir_Vestel.cpp:334
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition ir_Vestel.cpp:442
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition ir_Vestel.cpp:369
bool isOnTimerActive(void) const
Get if the On Timer is active on the A/C.
Definition ir_Vestel.cpp:259
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition ir_Vestel.cpp:418
bool isOffTimerActive(void) const
Get if the Off Timer is active on the A/C.
Definition ir_Vestel.cpp:287
void setOnTimer(const uint16_t minutes)
Set the On timer time on the A/C.
Definition ir_Vestel.cpp:265
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition ir_Vestel.cpp:138
uint16_t getTimer(void) const
Get the Timer time of A/C.
Definition ir_Vestel.cpp:234
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition ir_Vestel.cpp:321
void setTime(const uint16_t minutes)
Set the A/C's internal clock.
Definition ir_Vestel.cpp:238
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition ir_Vestel.cpp:74
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 kVestelAcMinTempH
Definition ir_Vestel.h:69
const uint8_t kVestelAcAuto
Definition ir_Vestel.h:73
const uint16_t kVestelAcZeroSpace
Definition ir_Vestel.h:66
const uint8_t kVestelAcDry
Definition ir_Vestel.h:75
const uint8_t kVestelAcFanLow
Definition ir_Vestel.h:80
const uint16_t kVestelAcHdrSpace
Definition ir_Vestel.h:63
const uint8_t kVestelAcFanMed
Definition ir_Vestel.h:81
const uint16_t kVestelAcHdrMark
Definition ir_Vestel.h:62
const uint8_t kVestelAcHeat
Definition ir_Vestel.h:77
const uint64_t kVestelAcStateDefault
Definition ir_Vestel.h:93
const uint16_t kVestelAcTolerance
Definition ir_Vestel.h:67
const uint8_t kVestelAcMaxTemp
Definition ir_Vestel.h:71
const uint16_t kVestelAcOneSpace
Definition ir_Vestel.h:65
const uint8_t kVestelAcIon
Definition ir_Vestel.h:89
const uint16_t kVestelAcBitMark
Definition ir_Vestel.h:64
const uint8_t kVestelAcTurbo
Definition ir_Vestel.h:88
const uint8_t kVestelAcFanAutoHot
Definition ir_Vestel.h:84
const uint8_t kVestelAcCool
Definition ir_Vestel.h:74
const uint64_t kVestelAcTimeStateDefault
Definition ir_Vestel.h:94
const uint8_t kVestelAcFanAutoCool
Definition ir_Vestel.h:83
const uint8_t kVestelAcSleep
Definition ir_Vestel.h:87
const uint8_t kVestelAcFanAuto
Definition ir_Vestel.h:79
const uint8_t kVestelAcFanHigh
Definition ir_Vestel.h:82
const uint8_t kVestelAcMinTempC
Definition ir_Vestel.h:70
const uint8_t kVestelAcFan
Definition ir_Vestel.h:76
const uint8_t kVestelAcSwing
Definition ir_Vestel.h:90
const uint8_t kVestelAcNormal
Definition ir_Vestel.h:86
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 Vestel A/C message.
Definition ir_Vestel.h:24
uint64_t Signature
Definition ir_Vestel.h:31
uint64_t Temp
Definition ir_Vestel.h:36
uint64_t Minutes
Definition ir_Vestel.h:56
uint64_t TurboSleep
Definition ir_Vestel.h:34
uint64_t OnTimer
Definition ir_Vestel.h:53
uint64_t Hours
Definition ir_Vestel.h:52
uint64_t Ion
Definition ir_Vestel.h:40
uint64_t Mode
Definition ir_Vestel.h:38
uint64_t timeState
Definition ir_Vestel.h:27
uint64_t Fan
Definition ir_Vestel.h:37
uint64_t TimeSum
Definition ir_Vestel.h:47
uint64_t OnTenMins
Definition ir_Vestel.h:50
uint64_t cmdState
Definition ir_Vestel.h:26
uint64_t Swing
Definition ir_Vestel.h:33
uint64_t Timer
Definition ir_Vestel.h:55
uint64_t CmdSum
Definition ir_Vestel.h:32
uint64_t OffHours
Definition ir_Vestel.h:49
uint64_t OnHours
Definition ir_Vestel.h:51
uint64_t OffTenMins
Definition ir_Vestel.h:48
uint64_t UseCmd
Definition ir_Vestel.h:43
uint64_t Power
Definition ir_Vestel.h:42
uint64_t OffTimer
Definition ir_Vestel.h:54