ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
onkyori_protocol.cpp
Go to the documentation of this file.
1#include "onkyori_protocol.h"
2#include "esphome/core/log.h"
3
4namespace esphome::remote_base {
5
6ESPHOME_LOG_TAG(TAG, "remote.onkyori");
7
8static constexpr uint8_t NBITS = 12;
9static constexpr uint16_t MAX_DATA = (1U << NBITS) - 1;
10static constexpr uint32_t HEADER_HIGH_US = 3000;
11static constexpr uint32_t HEADER_LOW_US = 1000;
12static constexpr uint32_t BIT_HIGH_US = 1000;
13static constexpr uint32_t BIT_ONE_LOW_US = 2000;
14static constexpr uint32_t BIT_ZERO_LOW_US = 1000;
15static constexpr uint32_t TRAILER_HIGH_US = 1000;
16
18 if (data.data > MAX_DATA) {
19 ESP_LOGE(TAG, "Data 0x%04X does not fit in a 12-bit RI frame, not sending", data.data);
20 return;
21 }
22
23 // RI is a baseband signal on a wire, so it has no carrier to modulate.
25 dst->reserve(2 + NBITS * 2u + 1);
26
27 dst->item(HEADER_HIGH_US, HEADER_LOW_US);
28
29 for (uint32_t mask = 1UL << (NBITS - 1); mask != 0; mask >>= 1) {
30 dst->item(BIT_HIGH_US, (data.data & mask) != 0 ? BIT_ONE_LOW_US : BIT_ZERO_LOW_US);
31 }
32
33 dst->mark(TRAILER_HIGH_US);
34}
35
37 OnkyoRIData out{.data = 0};
38
39 if (!src.expect_item(HEADER_HIGH_US, HEADER_LOW_US))
40 return {};
41
42 for (uint8_t i = 0; i < NBITS; i++) {
43 out.data <<= 1;
44 if (src.expect_item(BIT_HIGH_US, BIT_ONE_LOW_US)) {
45 out.data |= 1;
46 } else if (!src.expect_item(BIT_HIGH_US, BIT_ZERO_LOW_US)) {
47 return {};
48 }
49 }
50
51 if (!src.expect_mark(TRAILER_HIGH_US))
52 return {};
53
54 return out;
55}
56
57void OnkyoRIProtocol::dump(const OnkyoRIData &data) { ESP_LOGI(TAG, "Received OnkyoRI: data=0x%03X", data.data); }
58
59} // namespace esphome::remote_base
void encode(RemoteTransmitData *dst, const OnkyoRIData &data)
optional< OnkyoRIData > decode(RemoteReceiveData src)
void dump(const OnkyoRIData &data)
void set_carrier_frequency(uint32_t carrier_frequency)
Definition remote_base.h:31
void item(uint32_t mark, uint32_t space)
Definition remote_base.h:26
std::vector< uint8_t > & out
Definition gif.cpp:49
ESPHOME_LOG_TAG(TAG, "remote.abbwelcome")
const void * src
Definition hal.h:68
static void uint32_t