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