7 namespace remote_base {
19 RCSwitchBase(uint32_t sync_high, uint32_t sync_low, uint32_t zero_high, uint32_t zero_low, uint32_t one_high,
20 uint32_t one_low,
bool inverted);
36 bool decode(
RemoteReceiveData &src, uint64_t *out_data, uint8_t *out_nbits)
const;
40 static void simple_code_to_tristate(uint16_t code, uint8_t nbits, uint64_t *out_code);
42 static void type_a_code(uint8_t switch_group, uint8_t switch_device,
bool state, uint64_t *out_code,
45 static void type_b_code(uint8_t address_code, uint8_t channel_code,
bool state, uint64_t *out_code,
48 static void type_c_code(uint8_t family, uint8_t group, uint8_t device,
bool state, uint64_t *out_code,
51 static void type_d_code(uint8_t group, uint8_t device,
bool state, uint64_t *out_code, uint8_t *out_nbits);
54 uint32_t sync_high_{};
56 uint32_t zero_high_{};
72 TEMPLATABLE_VALUE(std::string,
code);
75 auto code = this->code_.value(
x...);
77 uint8_t nbits =
code.size();
79 auto proto = this->protocol_.value(
x...);
80 proto.transmit(dst, the_code, nbits);
87 TEMPLATABLE_VALUE(std::string, group);
88 TEMPLATABLE_VALUE(std::string, device);
89 TEMPLATABLE_VALUE(
bool,
state);
92 auto group = this->group_.value(
x...);
93 auto device = this->device_.value(
x...);
94 auto state = this->state_.value(
x...);
102 auto proto = this->protocol_.value(
x...);
103 proto.transmit(dst, code, nbits);
110 TEMPLATABLE_VALUE(uint8_t, address);
111 TEMPLATABLE_VALUE(uint8_t, channel);
112 TEMPLATABLE_VALUE(
bool,
state);
115 auto address = this->address_.value(
x...);
116 auto channel = this->channel_.value(
x...);
117 auto state = this->state_.value(
x...);
123 auto proto = this->protocol_.value(
x...);
124 proto.transmit(dst, code, nbits);
131 TEMPLATABLE_VALUE(std::string, family);
132 TEMPLATABLE_VALUE(uint8_t, group);
133 TEMPLATABLE_VALUE(uint8_t, device);
134 TEMPLATABLE_VALUE(
bool,
state);
137 auto family = this->family_.value(
x...);
138 auto group = this->group_.value(
x...);
139 auto device = this->device_.value(
x...);
140 auto state = this->state_.value(
x...);
142 auto u_family =
static_cast<uint8_t
>(tolower(family[0]) -
'a');
148 auto proto = this->protocol_.value(
x...);
149 proto.transmit(dst, code, nbits);
155 TEMPLATABLE_VALUE(std::string, group);
156 TEMPLATABLE_VALUE(uint8_t, device);
157 TEMPLATABLE_VALUE(
bool,
state);
160 auto group = this->group_.value(
x...);
161 auto device = this->device_.value(
x...);
162 auto state = this->state_.value(
x...);
164 auto u_group =
static_cast<uint8_t
>(tolower(group[0]) -
'a');
170 auto proto = this->protocol_.value(
x...);
171 proto.transmit(dst, code, nbits);
182 this->nbits_ = code.size();
194 auto u_family =
static_cast<uint8_t
>(tolower(family[0]) -
'a');
198 auto u_group =
static_cast<uint8_t
>(tolower(group[0]) -
'a');
207 uint64_t mask_{0xFFFFFFFFFFFFFFFF};
void set_code(uint64_t code)
static void type_d_code(uint8_t group, uint8_t device, bool state, uint64_t *out_code, uint8_t *out_nbits)
void encode(RemoteTransmitData *dst, Ts... x) override
void set_type_b(uint8_t address_code, uint8_t channel_code, bool state)
static void type_c_code(uint8_t family, uint8_t group, uint8_t device, bool state, uint64_t *out_code, uint8_t *out_nbits)
void set_type_a(const std::string &group, const std::string &device, bool state)
void set_type_c(std::string family, uint8_t group, uint8_t device, bool state)
void set_nbits(uint8_t nbits)
static void type_a_code(uint8_t switch_group, uint8_t switch_device, bool state, uint64_t *out_code, uint8_t *out_nbits)
void encode(RemoteTransmitData *dst, Ts... x) override
uint64_t decode_binary_string_mask(const std::string &data)
void set_type_d(std::string group, uint8_t device, bool state)
const RCSwitchBase RC_SWITCH_PROTOCOLS[9]
void set_code(const std::string &code)
uint64_t decode_binary_string(const std::string &data)
static void type_b_code(uint8_t address_code, uint8_t channel_code, bool state, uint64_t *out_code, uint8_t *out_nbits)
bool operator==(const RCSwitchData &rhs) const
Implementation of SPI Controller mode.
void set_protocol(const RCSwitchBase &a_protocol)
void encode(RemoteTransmitData *dst, Ts... x) override
void encode(RemoteTransmitData *dst, Ts... x) override
void encode(RemoteTransmitData *dst, Ts... x) override