Firmware  0.9.0
Loading...
Searching...
No Matches
config.hpp
Go to the documentation of this file.
1// Copyright (C) 2025 Vincent Hamp
2//
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU General Public License as published by
5// the Free Software Foundation, either version 3 of the License, or
6// (at your option) any later version.
7//
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU General Public License for more details.
12//
13// You should have received a copy of the GNU General Public License
14// along with this program. If not, see <https://www.gnu.org/licenses/>.
15
21
22#pragma once
23
24#include <driver/rmt_tx.h>
25#include <driver/spi_master.h>
26#include <esp_http_server.h>
27#include <freertos/message_buffer.h>
28#include <freertos/queue.h>
29#include <freertos/stream_buffer.h>
30#include <hal/gpio_types.h>
31#include <static_math/static_math.h>
32#include <atomic>
33#include <climits>
34#include <dcc/dcc.hpp>
35#include <magic_enum/magic_enum.hpp>
36#include <memory>
37#include <string>
38#include <string_view>
39#include <vector>
40#include <ztl/enum.hpp>
41#include <ztl/implicit_wrapper.hpp>
42#include <ztl/limits.hpp>
43#include <ztl/moving_average.hpp>
44#include <ztl/string.hpp>
45#include "task.hpp"
46
47#if CONFIG_IDF_TARGET_ESP32S3
48# include <driver/gptimer.h>
49# include <driver/ledc.h>
50# include <esp_wifi.h>
51# include <hal/adc_types.h>
52#elif CONFIG_IDF_TARGET_LINUX
53# define APP_CPU_NUM 0
54# define PRO_CPU_NUM APP_CPU_NUM
55# define WIFI_TASK_CORE_ID APP_CPU_NUM
56# define MAX_SSID_LEN 32
57# define MAX_PASSPHRASE_LEN 64
58# define ADC_CHANNEL_0 0
59# define ADC_CHANNEL_1 1
60# define ADC_CHANNEL_2 2
61# define ADC_CHANNEL_3 3
62# define ADC_CHANNEL_4 4
63# define ADC_CHANNEL_5 5
64# define ADC_CHANNEL_6 6
65# define ADC_CHANNEL_7 7
66# define ADC_CHANNEL_8 8
67# define ADC_CHANNEL_9 9
68# define ADC_ATTEN_DB_0 0
69# define ADC_ATTEN_DB_2_5 1
70# define ADC_ATTEN_DB_6 2
71# define ADC_ATTEN_DB_11 3
72# define LEDC_CHANNEL_0 0
73# define LEDC_CHANNEL_1 1
74# define LEDC_CHANNEL_2 2
75# define LEDC_CHANNEL_3 3
76# define LEDC_CHANNEL_4 4
77# define LEDC_CHANNEL_5 5
78# define LEDC_CHANNEL_6 6
79# define LEDC_CHANNEL_7 7
80# define SOC_ADC_PATT_LEN_MAX 24
81# define SOC_ADC_DIGI_MAX_BITWIDTH 12
82# define SOC_ADC_DIGI_DATA_BYTES_PER_CONV 4
83# define SOC_ADC_SAMPLE_FREQ_THRES_HIGH 83333
84# define GPIO_NUM_1 static_cast<gpio_num_t>(1)
85# define GPIO_NUM_2 static_cast<gpio_num_t>(2)
86# define GPIO_NUM_3 static_cast<gpio_num_t>(3)
87# define GPIO_NUM_4 static_cast<gpio_num_t>(4)
88# define GPIO_NUM_5 static_cast<gpio_num_t>(5)
89# define GPIO_NUM_6 static_cast<gpio_num_t>(6)
90# define GPIO_NUM_7 static_cast<gpio_num_t>(7)
91# define GPIO_NUM_8 static_cast<gpio_num_t>(8)
92# define GPIO_NUM_9 static_cast<gpio_num_t>(9)
93# define GPIO_NUM_10 static_cast<gpio_num_t>(10)
94# define GPIO_NUM_11 static_cast<gpio_num_t>(11)
95# define GPIO_NUM_12 static_cast<gpio_num_t>(12)
96# define GPIO_NUM_13 static_cast<gpio_num_t>(13)
97# define GPIO_NUM_14 static_cast<gpio_num_t>(14)
98# define GPIO_NUM_15 static_cast<gpio_num_t>(15)
99# define GPIO_NUM_16 static_cast<gpio_num_t>(16)
100# define GPIO_NUM_17 static_cast<gpio_num_t>(17)
101# define GPIO_NUM_18 static_cast<gpio_num_t>(18)
102# define GPIO_NUM_19 static_cast<gpio_num_t>(19)
103# define GPIO_NUM_20 static_cast<gpio_num_t>(20)
104# define GPIO_NUM_21 static_cast<gpio_num_t>(21)
105# define GPIO_NUM_22 static_cast<gpio_num_t>(22)
106# define GPIO_NUM_23 static_cast<gpio_num_t>(23)
107# define GPIO_NUM_24 static_cast<gpio_num_t>(24)
108# define GPIO_NUM_25 static_cast<gpio_num_t>(25)
109# define GPIO_NUM_26 static_cast<gpio_num_t>(26)
110# define GPIO_NUM_27 static_cast<gpio_num_t>(27)
111# define GPIO_NUM_28 static_cast<gpio_num_t>(28)
112# define GPIO_NUM_29 static_cast<gpio_num_t>(29)
113# define GPIO_NUM_30 static_cast<gpio_num_t>(30)
114# define GPIO_NUM_31 static_cast<gpio_num_t>(31)
115# define GPIO_NUM_32 static_cast<gpio_num_t>(32)
116# define GPIO_NUM_33 static_cast<gpio_num_t>(33)
117# define GPIO_NUM_34 static_cast<gpio_num_t>(34)
118# define GPIO_NUM_35 static_cast<gpio_num_t>(35)
119# define GPIO_NUM_36 static_cast<gpio_num_t>(36)
120# define GPIO_NUM_37 static_cast<gpio_num_t>(37)
121# define GPIO_NUM_38 static_cast<gpio_num_t>(38)
122# define GPIO_NUM_39 static_cast<gpio_num_t>(39)
123# define GPIO_NUM_40 static_cast<gpio_num_t>(40)
124# define GPIO_NUM_41 static_cast<gpio_num_t>(41)
125# define GPIO_NUM_42 static_cast<gpio_num_t>(42)
126# define GPIO_NUM_43 static_cast<gpio_num_t>(43)
127# define GPIO_NUM_44 static_cast<gpio_num_t>(44)
128# define GPIO_NUM_45 static_cast<gpio_num_t>(45)
129# define GPIO_NUM_46 static_cast<gpio_num_t>(46)
130# define GPIO_NUM_47 static_cast<gpio_num_t>(47)
131# define GPIO_NUM_48 static_cast<gpio_num_t>(48)
132#else
133# error "Unsupported SOC"
134#endif
135
147inline constexpr auto default_notify_index{tskDEFAULT_INDEX_TO_NOTIFY + 1u};
148static_assert(configTASK_NOTIFICATION_ARRAY_ENTRIES > 1);
149
151inline constexpr auto boot_gpio_num{GPIO_NUM_0};
152
154enum class State : uint16_t {
155 // Flags (8 bits)
156 Suspended = 0u << 0u,
159
160 // Outputs
161 DCCOperations = 1u << CHAR_BIT,
162 DCCService = 2u << CHAR_BIT,
163 DECUPZpp = 3u << CHAR_BIT,
164 DECUPZsu = 4u << CHAR_BIT,
165 MDUZpp = 5u << CHAR_BIT,
166 MDUZsu = 6u << CHAR_BIT,
167 ZUSI = 7u << CHAR_BIT,
168
169 // USB protocols
170 ULF_DCC_EIN = 8u << CHAR_BIT,
171 ULF_MDU_EIN = 9u << CHAR_BIT,
172 ULF_SUSIV2 = 10u << CHAR_BIT,
173
174 // System
175 OTA = 11u << CHAR_BIT,
176};
177static_assert(std::to_underlying(State::OTA) < MAGIC_ENUM_RANGE_MAX);
178
179ZTL_MAKE_ENUM_CLASS_FLAGS(State)
180
181
182inline std::atomic<State> state{State::Suspended};
183
185inline std::string_view revision{"0.0.0"};
186
187namespace drv {
188
189namespace anlg {
190
191inline constexpr auto ol_on_gpio_num{GPIO_NUM_17};
192
194inline constexpr auto voltage_upper_r{14300};
195
197inline constexpr auto voltage_lower_r{470};
198
200inline constexpr auto current_r{180};
201
203inline constexpr auto current_k{800};
204
205inline constexpr auto vref{1000};
206inline constexpr auto max_measurement{smath::pow(2, SOC_ADC_DIGI_MAX_BITWIDTH) -
207 1};
208inline constexpr auto vcc_voltage_channel{ADC_CHANNEL_0};
209inline constexpr auto supply_voltage_channel{ADC_CHANNEL_2};
210inline constexpr auto current_channel{ADC_CHANNEL_9};
211inline constexpr auto attenuation{ADC_ATTEN_DB_0};
214
216inline constexpr auto sample_freq_hz{SOC_ADC_SAMPLE_FREQ_THRES_HIGH};
217static_assert(sample_freq_hz == 83333);
218
220inline constexpr auto conversion_frame_samples{84uz};
221
225static_assert(conversion_frame_samples_per_channel == 28uz);
226static_assert(size(channels) < SOC_ADC_PATT_LEN_MAX);
227
229inline constexpr auto conversion_frame_time{
230 (conversion_frame_samples * 1000u * 1000u) / sample_freq_hz};
231static_assert(conversion_frame_time == 1008u);
232
235 SOC_ADC_DIGI_DATA_BYTES_PER_CONV};
236static_assert(conversion_frame_size == 336uz);
237
239inline TASK(adc_task,
240 "drv::anlg::adc", // Name
241 3072uz, // Stack size
242 ESP_TASK_PRIO_MAX - 2u, // Priority
243 APP_CPU_NUM, // Core
244 100u); // Timeout
245
247inline TASK(temp_task,
248 "drv::anlg::temp", // Name
249 2048uz, // Stack size
250 tskIDLE_PRIORITY, // Priority
251 APP_CPU_NUM, // Core
252 1000u); // Timeout
253
255 ztl::implicit_wrapper<ztl::smallest_signed_t<0, max_measurement>,
256 struct VccVoltageMeasurementTag>;
257static_assert(std::same_as<VccVoltageMeasurement::value_type, int16_t>);
258
259using VccVoltage = ztl::implicit_wrapper<VccVoltageMeasurement::value_type,
260 struct VccVoltageTag>;
261static_assert(std::same_as<VccVoltage::value_type, int16_t>);
262
264 ztl::implicit_wrapper<ztl::smallest_signed_t<0, max_measurement>,
265 struct SupplyVoltageMeasurementTag>;
266static_assert(std::same_as<SupplyVoltageMeasurement::value_type, int16_t>);
267
269 ztl::implicit_wrapper<SupplyVoltageMeasurement::value_type,
270 struct SupplyVoltageTag>;
271static_assert(std::same_as<SupplyVoltage::value_type, int16_t>);
272
274 ztl::implicit_wrapper<ztl::smallest_signed_t<0, max_measurement>,
275 struct CurrentMeasurementTag>;
276static_assert(std::same_as<CurrentMeasurement::value_type, int16_t>);
277
278using Current =
279 ztl::implicit_wrapper<CurrentMeasurement::value_type, struct CurrentTag>;
280static_assert(std::same_as<Current::value_type, int16_t>);
281
282using FilteredCurrent = ztl::moving_average<int32_t, smath::pow(2, 12)>;
283
285inline struct VccVoltagesQueue {
287 static constexpr auto size{2000uz};
288 static inline QueueHandle_t handle{};
290
292inline struct SupplyVoltagesQueue {
294 static constexpr auto size{2000uz};
295 static inline QueueHandle_t handle{};
297
299inline struct CurrentsQueue {
301 static constexpr auto size{2000uz};
302 static inline QueueHandle_t handle{};
304
306inline struct FilteredCurrentQueue {
308 static constexpr auto size{1uz};
309 static inline QueueHandle_t handle{};
311
313inline struct TemperatureQueue {
314 using value_type = float;
315 static constexpr auto size{1uz};
316 static inline QueueHandle_t handle{};
318
319} // namespace anlg
320
321namespace eth {
322
324inline constexpr auto cs_gpio_num{GPIO_NUM_42};
325
327inline constexpr auto sclk_gpio_num{GPIO_NUM_2};
328
330inline constexpr auto miso_gpio_num{GPIO_NUM_40};
331
333inline constexpr auto mosi_gpio_num{GPIO_NUM_41};
334
335inline std::array<char, 16uz> ip{};
336inline std::string ip_str{};
337inline std::array<uint8_t, 6uz> mac{};
338inline std::string mac_str(2uz * 6uz + 5uz + sizeof('\n'), '\0');
339
340} // namespace eth
341
342namespace led {
343
345inline constexpr auto bug_gpio_num{GPIO_NUM_48};
346
348inline constexpr auto bug_channel{LEDC_CHANNEL_0};
349
351inline constexpr auto wifi_gpio_num{GPIO_NUM_47};
352
354inline constexpr auto wifi_channel{LEDC_CHANNEL_1};
355
356} // namespace led
357
358namespace out {
359
361inline std::array<StackType_t, 4096uz> stack{};
362
363#if !CONFIG_IDF_TARGET_LINUX
364inline gptimer_handle_t gptimer{};
365#endif
366
368inline struct RxMessageBuffer {
369 static constexpr auto size{320uz};
370 static inline MessageBufferHandle_t handle{};
372
374inline struct TxMessageBuffer {
375 static constexpr auto size{320uz};
376 static inline MessageBufferHandle_t front_handle{};
377 static inline MessageBufferHandle_t back_handle{};
379
380namespace susi {
381
382inline std::array<spi_device_handle_t, 4uz> spis{};
383
384inline constexpr auto enable_gpio_num{GPIO_NUM_4};
385inline constexpr auto clock_gpio_num{GPIO_NUM_6};
386inline constexpr auto data_gpio_num{GPIO_NUM_5};
387
388namespace zimo::zusi {
389
391inline SHARED_TASK(task,
392 "drv::out::susi::zimo::zusi", // Name
393 ESP_TASK_PRIO_MAX - 1u, // Priority
394 APP_CPU_NUM, // Core
395 0u);
396
397} // namespace zimo::zusi
398
399} // namespace susi
400
401namespace track {
402
403enum class CurrentLimit : uint8_t {
404 _500mA = 0b00u,
405 _1300mA = 0b01u,
406 _2700mA = 0b10u,
407 _4100mA = 0b11u
408};
409
411inline constexpr auto trans_queue_depth{2uz};
412
413inline constexpr auto p_gpio_num{GPIO_NUM_11};
414inline constexpr auto n_force_low_gpio_num{GPIO_NUM_9};
415
416inline constexpr auto ack_gpio_num{GPIO_NUM_18};
417inline constexpr auto nsleep_gpio_num{GPIO_NUM_8};
418inline constexpr auto ilim0_gpio_num{GPIO_NUM_15};
419inline constexpr auto ilim1_gpio_num{GPIO_NUM_16};
420inline constexpr auto nfault_gpio_num{GPIO_NUM_46};
421inline constexpr auto enable_gpio_num{GPIO_NUM_12};
422
424inline struct RxQueue {
425 struct value_type {
426 dcc::Packet packet{};
427 dcc::bidi::Datagram<> datagram{};
428 };
429 static constexpr auto size{32uz};
430 static inline QueueHandle_t handle{};
432
433inline rmt_channel_handle_t channel{};
434inline rmt_encoder_handle_t encoder{};
435
436namespace dcc {
437
438inline constexpr auto bidi_rx_gpio_num{GPIO_NUM_14};
439inline constexpr auto bidi_en_gpio_num{GPIO_NUM_13};
440
442inline SHARED_TASK(task,
443 "drv::out::track::dcc", // Name
444 ESP_TASK_PRIO_MAX - 1u, // Priority
445 APP_CPU_NUM, // Core
446 0u);
447
448} // namespace dcc
449
450namespace zimo {
451
452namespace decup {
453
455inline SHARED_TASK(task,
456 "drv::out::track::zimo::decup", // Name
457 ESP_TASK_PRIO_MAX - 1u, // Priority
458 APP_CPU_NUM, // Core
459 60'000u); // Timeout
460
461} // namespace decup
462
463namespace mdu {
464
466inline SHARED_TASK(task,
467 "drv::out::track::zimo::mdu", // Name
468 ESP_TASK_PRIO_MAX - 1u, // Priority
469 APP_CPU_NUM, // Core
470 0u);
471
472} // namespace mdu
473
474} // namespace zimo
475
476} // namespace track
477
478} // namespace out
479
480namespace wifi {
481
482//
484
485#if CONFIG_IDF_TARGET_ESP32S3
486inline std::vector<wifi_ap_record_t> ap_records;
487#endif
488
489} // namespace wifi
490
491} // namespace drv
492
493namespace intf {
494
495namespace http {
496
498inline httpd_handle_t handle{};
499
501inline constexpr auto stack_size{6144uz};
502
503class Server;
504inline std::shared_ptr<Server> server;
505
506} // namespace http
507
508namespace mdns {
509
510inline std::string str;
511
512} // namespace mdns
513
514namespace udp {
515
516inline constexpr uint16_t port{21105u};
517inline int sock_fd;
518
519} // namespace udp
520
521namespace usb {
522
523inline constexpr auto vbus_gpio_num{GPIO_NUM_7};
524inline constexpr auto buffer_size{512uz};
525
527inline TASK(rx_task,
528 "intf::usb::rx", // Name
529 3072uz, // Stack size
530 5u, // Priority
531 APP_CPU_NUM, // Core
532 100u); // Timeout
533
535inline TASK(tx_task,
536 "intf::usb::tx", // Name
537 3072uz, // Stack size
538 1u, // Priority
539 APP_CPU_NUM, // Core
540 20u); // Timeout
541
543inline struct RxStreamBuffer {
544 static constexpr auto size{buffer_size};
545 StreamBufferHandle_t handle{};
547
549inline struct TxStreamBuffer {
550 static constexpr auto size{buffer_size};
551 StreamBufferHandle_t handle{};
553
554} // namespace usb
555
556} // namespace intf
557
558namespace mem {
559
560namespace nvs {
561
563inline TASK(task,
564 "mem::nvs", // Name
565 3072uz, // Stack size
566 tskIDLE_PRIORITY, // Priority
567 APP_CPU_NUM, // Core
568 0u);
569
570} // namespace nvs
571
572} // namespace mem
573
574namespace mw {
575
576namespace dcc {
577
578inline constexpr auto priority_bits{5u};
579
580class Service;
581inline std::shared_ptr<Service> service;
582
584inline TASK(task,
585 "mw::dcc", // Name
586 4096uz, // Stack size
587 2u, // Priority
588 APP_CPU_NUM, // Core
589 10u); // Timeout
590
591} // namespace dcc
592
593namespace disp {
594
596inline TASK(task,
597 "mw::disp", // Name
598 4096uz, // Stack size
599 tskIDLE_PRIORITY, // Priority
600 APP_CPU_NUM, // Core
601 1000u); // Timeout
602
603} // namespace disp
604
605namespace ota {
606
608inline constexpr uint8_t ack{0x06u};
609
611inline constexpr uint8_t nak{0x15u};
612
614inline TASK(task,
615 "mw::ota", // Name
616 4096uz, // Stack size
617 ESP_TASK_PRIO_MAX - 1u, // Priority
618 APP_CPU_NUM, // Core
619 0u);
620
621} // namespace ota
622
623namespace roco::z21 {
624
626inline TASK(task,
627 "mw::roco::z21", // Name
628 6144uz, // Stack size
629 5u, // Priority
630 APP_CPU_NUM, // Core
631 500u); // Timeout
632
633class Service;
634inline std::shared_ptr<Service> service;
635
636} // namespace roco::z21
637
638namespace zimo {
639
640namespace decup {
641
643inline TASK(task,
644 "mw::zimo::decup", // Name
645 4096uz, // Stack size
646 2u, // Priority
647 APP_CPU_NUM, // Core
648 drv::out::track::zimo::decup::task.timeout); // Timeout
649
650} // namespace decup
651
652namespace mdu {
653
655inline TASK(task,
656 "mw::zimo::mdu", // Name
657 4096uz, // Stack size
658 2u, // Priority
659 APP_CPU_NUM, // Core
660 0u);
661
662} // namespace mdu
663
664namespace ulf {
665
666inline std::array<StackType_t, 3072uz> stack{};
667
668namespace dcc_ein {
669
671inline SHARED_TASK(task,
672 "mw::zimo::ulf::dcc_ein", // Name
673 intf::usb::rx_task.priority - 1u, // Priority
674 APP_CPU_NUM, // Core
675 100u); // Timeout
676
677} // namespace dcc_ein
678
679namespace susiv2 {
680
682inline SHARED_TASK(task,
683 "mw::zimo::ulf::susiv2", // Name
684 intf::usb::rx_task.priority - 1u, // Priority
685 APP_CPU_NUM, // Core
686 0u);
687
688} // namespace susiv2
689
690// https://github.com/OpenRemise/Firmware/issues/36
691static_assert(dcc_ein::task.priority < intf::usb::rx_task.priority);
692static_assert(susiv2::task.priority < intf::usb::rx_task.priority);
693
694} // namespace ulf
695
696namespace zusi {
697
699inline TASK(task,
700 "mw::zimo::zusi", // Name
701 4096uz, // Stack size
702 2u, // Priority
703 APP_CPU_NUM, // Core
704 0u);
705
706} // namespace zusi
707
708} // namespace zimo
709
710} // namespace mw
Definition service.hpp:31
std::atomic< State > state
Restricts access to low-level tasks.
Definition config.hpp:182
constexpr auto boot_gpio_num
BOOT pin used to boot into bootloader or resetting WiFi station settings.
Definition config.hpp:151
State
System state.
Definition config.hpp:154
@ MDUZpp
MDU ZPP update.
Definition config.hpp:165
@ DECUPZpp
DECUP ZPP update.
Definition config.hpp:163
@ DCCOperations
DCC operation mode.
Definition config.hpp:161
@ ShortCircuit
Short circuit.
Definition config.hpp:158
@ OTA
OTA update.
Definition config.hpp:175
@ ULF_DCC_EIN
ULF_DCC_EIN USB mode.
Definition config.hpp:170
@ DECUPZsu
DECUP ZSU update.
Definition config.hpp:164
@ Suspending
About to be idle.
Definition config.hpp:157
@ MDUZsu
MDU ZSU update.
Definition config.hpp:166
@ ULF_SUSIV2
ULF_SUSIV2 USB mode.
Definition config.hpp:172
@ Suspended
Idle.
Definition config.hpp:156
@ ULF_MDU_EIN
ULF_MDU_EIN USB mode.
Definition config.hpp:171
@ ZUSI
ZUSI mode.
Definition config.hpp:167
@ DCCService
DCC service mode.
Definition config.hpp:162
constexpr auto default_notify_index
Default task notification index.
Definition config.hpp:147
std::string_view revision
Hardware revision.
Definition config.hpp:185
Definition config.hpp:189
constexpr std::array channels
Definition config.hpp:212
struct drv::anlg::TemperatureQueue temperature_queue
struct drv::anlg::SupplyVoltagesQueue supply_voltages_queue
constexpr auto conversion_frame_time
Time per frame [us].
Definition config.hpp:229
constexpr auto current_r
Current sense resistor.
Definition config.hpp:200
ztl::moving_average< int32_t, smath::pow(2, 12)> FilteredCurrent
Definition config.hpp:282
TASK(adc_task, "drv::anlg::adc", 3072uz, ESP_TASK_PRIO_MAX - 2u, APP_CPU_NUM, 100u)
struct drv::anlg::VccVoltagesQueue vcc_voltages_queue
constexpr auto conversion_frame_samples
Number of samples per frame (84 * 12us = 1008us).
Definition config.hpp:220
constexpr auto conversion_frame_size
Bytes per conversion frame.
Definition config.hpp:234
constexpr auto ol_on_gpio_num
Definition config.hpp:191
constexpr auto conversion_frame_samples_per_channel
Number of samples per frame and channel.
Definition config.hpp:223
constexpr auto max_measurement
Definition config.hpp:206
constexpr auto voltage_lower_r
Voltage divider lower resistor for voltage measurement.
Definition config.hpp:197
ztl::implicit_wrapper< CurrentMeasurement::value_type, struct CurrentTag > Current
Definition config.hpp:278
constexpr auto current_channel
Definition config.hpp:210
ztl::implicit_wrapper< ztl::smallest_signed_t< 0, max_measurement >, struct VccVoltageMeasurementTag > VccVoltageMeasurement
Definition config.hpp:254
constexpr auto voltage_upper_r
Voltage divider upper resistor for voltage measurement.
Definition config.hpp:194
struct drv::anlg::FilteredCurrentQueue filtered_current_queue
constexpr auto sample_freq_hz
Sample frequency [Hz] (sample takes 12us).
Definition config.hpp:216
ztl::implicit_wrapper< ztl::smallest_signed_t< 0, max_measurement >, struct CurrentMeasurementTag > CurrentMeasurement
Definition config.hpp:273
constexpr auto supply_voltage_channel
Definition config.hpp:209
constexpr auto vref
Definition config.hpp:205
ztl::implicit_wrapper< VccVoltageMeasurement::value_type, struct VccVoltageTag > VccVoltage
Definition config.hpp:259
constexpr auto vcc_voltage_channel
Definition config.hpp:208
struct drv::anlg::CurrentsQueue currents_queue
constexpr auto current_k
Current sense ratio.
Definition config.hpp:203
constexpr auto attenuation
Definition config.hpp:211
ztl::implicit_wrapper< ztl::smallest_signed_t< 0, max_measurement >, struct SupplyVoltageMeasurementTag > SupplyVoltageMeasurement
Definition config.hpp:263
ztl::implicit_wrapper< SupplyVoltageMeasurement::value_type, struct SupplyVoltageTag > SupplyVoltage
Definition config.hpp:268
Definition config.hpp:321
constexpr auto sclk_gpio_num
W5500 SPI clock.
Definition config.hpp:327
std::string ip_str
Definition config.hpp:336
std::array< char, 16uz > ip
Definition config.hpp:335
std::array< uint8_t, 6uz > mac
Definition config.hpp:337
constexpr auto miso_gpio_num
W5500 SPI MISO.
Definition config.hpp:330
constexpr auto mosi_gpio_num
W5500 SPI MOSI.
Definition config.hpp:333
std::string mac_str(2uz *6uz+5uz+sizeof('\n'), '\0')
constexpr auto cs_gpio_num
W5500 SPI chip select.
Definition config.hpp:324
Definition config.hpp:342
constexpr auto bug_gpio_num
Bug LED pin used to indicate errors or updates.
Definition config.hpp:345
constexpr auto wifi_gpio_num
WiFi LED used to indicate WiFi connection status.
Definition config.hpp:351
constexpr auto wifi_channel
WiFi LED channel.
Definition config.hpp:354
constexpr auto bug_channel
Bug LED channel.
Definition config.hpp:348
Definition config.hpp:388
SHARED_TASK(task, "drv::out::susi::zimo::zusi", ESP_TASK_PRIO_MAX - 1u, APP_CPU_NUM, 0u)
Definition config.hpp:380
constexpr auto enable_gpio_num
Definition config.hpp:384
std::array< spi_device_handle_t, 4uz > spis
Definition config.hpp:382
constexpr auto data_gpio_num
Definition config.hpp:386
constexpr auto clock_gpio_num
Definition config.hpp:385
Definition config.hpp:436
SHARED_TASK(task, "drv::out::track::dcc", ESP_TASK_PRIO_MAX - 1u, APP_CPU_NUM, 0u)
constexpr auto bidi_en_gpio_num
Definition config.hpp:439
constexpr auto bidi_rx_gpio_num
Definition config.hpp:438
Definition config.hpp:452
SHARED_TASK(task, "drv::out::track::zimo::decup", ESP_TASK_PRIO_MAX - 1u, APP_CPU_NUM, 60 '000u)
Definition config.hpp:463
SHARED_TASK(task, "drv::out::track::zimo::mdu", ESP_TASK_PRIO_MAX - 1u, APP_CPU_NUM, 0u)
Definition config.hpp:450
Definition config.hpp:401
constexpr auto nsleep_gpio_num
Definition config.hpp:417
constexpr auto ilim1_gpio_num
Definition config.hpp:419
constexpr auto trans_queue_depth
Continuous transmission requires at least a depth of 2.
Definition config.hpp:411
constexpr auto ilim0_gpio_num
Definition config.hpp:418
constexpr auto enable_gpio_num
Definition config.hpp:421
constexpr auto ack_gpio_num
Definition config.hpp:416
rmt_encoder_handle_t encoder
Definition config.hpp:434
constexpr auto n_force_low_gpio_num
Definition config.hpp:414
constexpr auto nfault_gpio_num
Definition config.hpp:420
CurrentLimit
Definition config.hpp:403
@ _4100mA
Definition config.hpp:407
@ _1300mA
Definition config.hpp:405
@ _500mA
Definition config.hpp:404
@ _2700mA
Definition config.hpp:406
rmt_channel_handle_t channel
Definition config.hpp:433
constexpr auto p_gpio_num
Definition config.hpp:413
struct drv::out::track::RxQueue rx_queue
Definition config.hpp:358
struct drv::out::TxMessageBuffer tx_message_buffer
std::array< StackType_t, 4096uz > stack
Definition config.hpp:361
struct drv::out::RxMessageBuffer rx_message_buffer
gptimer_handle_t gptimer
Definition config.hpp:364
Definition config.hpp:480
Definition config.hpp:187
Definition config.hpp:495
httpd_handle_t handle
Handle to server instance.
Definition config.hpp:498
constexpr auto stack_size
Definition config.hpp:501
std::shared_ptr< Server > server
Definition config.hpp:504
Definition config.hpp:508
std::string str
Definition config.hpp:510
Definition config.hpp:514
constexpr uint16_t port
Definition config.hpp:516
int sock_fd
Definition config.hpp:517
Definition config.hpp:521
TASK(rx_task, "intf::usb::rx", 3072uz, 5u, APP_CPU_NUM, 100u)
constexpr auto buffer_size
Definition config.hpp:524
struct intf::usb::RxStreamBuffer rx_stream_buffer
constexpr auto vbus_gpio_num
Definition config.hpp:523
struct intf::usb::TxStreamBuffer tx_stream_buffer
Definition config.hpp:493
Definition config.hpp:560
TASK(task, "mem::nvs", 3072uz, tskIDLE_PRIORITY, APP_CPU_NUM, 0u)
Definition config.hpp:558
Definition config.hpp:576
constexpr auto priority_bits
Definition config.hpp:578
std::shared_ptr< Service > service
Definition config.hpp:581
TASK(task, "mw::dcc", 4096uz, 2u, APP_CPU_NUM, 10u)
Definition config.hpp:593
TASK(task, "mw::disp", 4096uz, tskIDLE_PRIORITY, APP_CPU_NUM, 1000u)
Definition config.hpp:605
TASK(task, "mw::ota", 4096uz, ESP_TASK_PRIO_MAX - 1u, APP_CPU_NUM, 0u)
constexpr uint8_t nak
Definition config.hpp:611
constexpr uint8_t ack
Definition config.hpp:608
Definition config.hpp:623
std::shared_ptr< Service > service
Definition config.hpp:634
TASK(task, "mw::roco::z21", 6144uz, 5u, APP_CPU_NUM, 500u)
Definition config.hpp:640
TASK(task, "mw::zimo::decup", 4096uz, 2u, APP_CPU_NUM, drv::out::track::zimo::decup::task.timeout)
Definition config.hpp:652
TASK(task, "mw::zimo::mdu", 4096uz, 2u, APP_CPU_NUM, 0u)
Definition config.hpp:668
SHARED_TASK(task, "mw::zimo::ulf::dcc_ein", intf::usb::rx_task.priority - 1u, APP_CPU_NUM, 100u)
Definition config.hpp:679
SHARED_TASK(task, "mw::zimo::ulf::susiv2", intf::usb::rx_task.priority - 1u, APP_CPU_NUM, 0u)
Definition config.hpp:664
std::array< StackType_t, 3072uz > stack
Definition config.hpp:666
Definition config.hpp:696
TASK(task, "mw::zimo::zusi", 4096uz, 2u, APP_CPU_NUM, 0u)
Definition config.hpp:638
Definition config.hpp:574
Definition config.hpp:299
static constexpr auto size
Definition config.hpp:301
CurrentMeasurement value_type
Definition config.hpp:300
static QueueHandle_t handle
Definition config.hpp:302
Definition config.hpp:306
static constexpr auto size
Definition config.hpp:308
static QueueHandle_t handle
Definition config.hpp:309
CurrentMeasurement value_type
Definition config.hpp:307
Definition config.hpp:292
static constexpr auto size
Definition config.hpp:294
static QueueHandle_t handle
Definition config.hpp:295
SupplyVoltageMeasurement value_type
Definition config.hpp:293
Definition config.hpp:313
float value_type
Definition config.hpp:314
static constexpr auto size
Definition config.hpp:315
static QueueHandle_t handle
Definition config.hpp:316
Definition config.hpp:285
static QueueHandle_t handle
Definition config.hpp:288
static constexpr auto size
Definition config.hpp:287
VccVoltageMeasurement value_type
Definition config.hpp:286
Definition config.hpp:368
static constexpr auto size
Definition config.hpp:369
static MessageBufferHandle_t handle
Definition config.hpp:370
Definition config.hpp:374
static MessageBufferHandle_t back_handle
Definition config.hpp:377
static constexpr auto size
Definition config.hpp:375
static MessageBufferHandle_t front_handle
Definition config.hpp:376
Definition config.hpp:425
dcc::Packet packet
Definition config.hpp:426
dcc::bidi::Datagram datagram
Definition config.hpp:427
Definition config.hpp:424
static QueueHandle_t handle
Definition config.hpp:430
static constexpr auto size
Definition config.hpp:429
Definition config.hpp:543
StreamBufferHandle_t handle
Definition config.hpp:545
static constexpr auto size
Definition config.hpp:544
Definition config.hpp:549
StreamBufferHandle_t handle
Definition config.hpp:551
static constexpr auto size
Definition config.hpp:550
Task macros.