M5Unit-RF433 0.1.0 git rev:5415b86
Loading...
Searching...
No Matches
rmt_item_types.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_RF433_RMT_ITEM_TYPES_HPP
11#define M5_UNIT_RF433_RMT_ITEM_TYPES_HPP
12
13#include <M5UnitComponent.hpp>
14
15namespace m5 {
16namespace unit {
17namespace rf433 {
18
20constexpr m5::unit::gpio::m5_rmt_item_t rmt_item_one{{800, 1, 200, 0}}; // 1
21constexpr m5::unit::gpio::m5_rmt_item_t rmt_item_zero{{200, 1, 800, 0}}; // 0
22constexpr m5::unit::gpio::m5_rmt_item_t rmt_sof_0{{4868, 1, 2469, 0}}; // Frame start 0
23constexpr m5::unit::gpio::m5_rmt_item_t rmt_sof_1{{1647, 1, 315, 0}}; // Frame start 1
24constexpr m5::unit::gpio::m5_rmt_item_t rmt_preamble{{500, 1, 500, 0}}; // preamble
26
27using container_type = std::vector<uint8_t>;
28using item_container_type = std::vector<gpio::m5_rmt_item_t>;
30
32constexpr uint8_t ProtocolOverhead = 4;
33
46#if defined(M5_UNIT_UNIFIED_USING_RMT_V2)
47constexpr uint16_t RmtRxMaxItems = 4096;
48#elif defined(CONFIG_IDF_TARGET_ESP32S3)
49constexpr uint16_t RmtRxMaxItems = 1 * 48;
50#else
51constexpr uint16_t RmtRxMaxItems = 6 * 64;
52#endif
53
69constexpr uint8_t MaxPayloadSize =
70#if defined(M5_UNIT_UNIFIED_USING_RMT_V2)
71 255;
72#elif defined(CONFIG_IDF_TARGET_ESP32S3)
73 // ESP32-S3 uses mem_blocks=1 with threshold ISR wrapping;
74 // theoretical limit depends on ISR throughput, use ESP32 equivalent
75 43;
76#else
77 static_cast<uint8_t>((RmtRxMaxItems - 1 /*SOF*/) / 8 - ProtocolOverhead);
78#endif
79
85constexpr uint32_t calculateRingBufferSize(const uint32_t payload_size)
86{
87 // Frame: SOF(1 item) + (overhead + payload) * 8 Manchester items per byte
88 return (1 /*SOF*/ + (ProtocolOverhead + payload_size) * 8) * sizeof(m5::unit::gpio::m5_rmt_item_t) +
89 2 /*length prefix*/;
90}
91
99item_container_type encodeManchester(const uint8_t* data, const uint32_t len, const bool MSB = true);
100
110uint16_t decodeManchester(uint8_t* buf, const uint16_t buf_size, const m5::unit::gpio::m5_rmt_item_t* data,
111 const uint32_t num, const bool MSB = true);
112
113} // namespace rf433
114} // namespace unit
115} // namespace m5
116#endif
Top level namespace of M5Stack.
Unit-related namespace.
uint8_t communication_identifier_t
Communication identifier (0-255)
Definition rmt_item_types.hpp:29
constexpr uint8_t MaxPayloadSize
Theoretical maximum payload size in bytes for the current platform.
Definition rmt_item_types.hpp:69
constexpr uint32_t calculateRingBufferSize(const uint32_t payload_size)
Calculate the minimum ring buffer size required to receive the given payload size.
Definition rmt_item_types.hpp:85
std::vector< uint8_t > container_type
Container.
Definition rmt_item_types.hpp:27
constexpr uint16_t RmtRxMaxItems
Maximum RMT items receivable in a single frame per platform.
Definition rmt_item_types.hpp:51
constexpr uint8_t ProtocolOverhead
Protocol overhead in bytes: CRC8(1) + ID(1) + Count(1) + Length(1) = 4.
Definition rmt_item_types.hpp:32
std::vector< gpio::m5_rmt_item_t > item_container_type
Item container.
Definition rmt_item_types.hpp:28