E (501) esp_matter_cluster: Config is NULL or mandatory feature_flags are missing.
When I compile the sensors example unchanged, I get the error:
E (463) i2c: CONFLICT! driver_ng is not allowed to be used with this old driver
Which leads me to believe there is a version change since I had a working program. Been doing clean installs from Espressif’s SDK for Matter web page: https://docs.espressif.com/projects/esp ... index.html
Had many version and path problems trying to use the installation manager in the ESP-IDF extension for VSCode so gave up.
Any ideas what is wrong?
Thanks
occupancy sensor only:
- Executing action: monitor
Serial port /dev/ttyACM0
Connecting...
Detecting chip type... ESP32-C3
Running idf_monitor in directory /home/alex/esp-matter/examples/sensors
Executing "/home/alex/.espressif/python_env/idf5.4_py3.12_env/bin/python /home/alex/esp-idf/tools/idf_monitor.py -p /dev/ttyACM0 -b 115200 --toolchain-prefix riscv32-esp-elf- --target esp32c3 --revision 3 --decode-panic backtrace /home/alex/esp-matter/examples/sensors/build/sensors.elf -m '/home/alex/.espressif/python_env/idf5.4_py3.12_env/bin/python' '/home/alex/esp-idf/tools/idf.py'"...
--- esp-idf-monitor 1.7.0 on /dev/ttyACM0 115200
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
ESP-ROM:esp32c3-api1-20210207
Build:Feb 7 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0xe (SPI_FAST_FLASH_BOOT)
Saved PC:0x4004c98c
--- 0x4004c98c: usb_uart_rx_one_char in ROM
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x1574
load:0x403cc710,len:0xc30
load:0x403ce710,len:0x2f64
entry 0x403cc71a
I (24) boot: ESP-IDF v5.4.1 2nd stage bootloader
I (24) boot: compile time Sep 11 2025 17:04:07
I (24) boot: chip revision: v0.3
I (25) boot: efuse block revision: v1.1
I (28) boot.esp32c3: SPI Speed : 80MHz
I (32) boot.esp32c3: SPI Mode : DIO
I (36) boot.esp32c3: SPI Flash Size : 4MB
I (39) boot: Enabling RNG early entropy source...
I (44) boot: Partition Table:
I (46) boot: ## Label Usage Type ST Offset Length
I (53) boot: 0 esp_secure_cert unknown 3f 06 0000d000 00002000
I (59) boot: 1 nvs WiFi data 01 02 00010000 0000c000
I (66) boot: 2 nvs_keys NVS keys 01 04 0001c000 00001000
I (72) boot: 3 otadata OTA data 01 00 0001d000 00002000
I (79) boot: 4 phy_init RF data 01 01 0001f000 00001000
I (85) boot: 5 ota_0 OTA app 00 10 00020000 001e0000
I (92) boot: 6 ota_1 OTA app 00 11 00200000 001e0000
I (98) boot: 7 fctry WiFi data 01 02 003e0000 00006000
I (105) boot: End of partition table
I (108) esp_image: segment 0: paddr=00020020 vaddr=3c130020 size=35878h (219256) map
I (151) esp_image: segment 1: paddr=000558a0 vaddr=3fc97600 size=03d60h ( 15712) load
I (154) esp_image: segment 2: paddr=00059608 vaddr=40380000 size=06a10h ( 27152) load
I (160) esp_image: segment 3: paddr=00060020 vaddr=42000020 size=123774h (1193844) map
I (352) esp_image: segment 4: paddr=0018379c vaddr=40386a10 size=10a78h ( 68216) load
I (365) esp_image: segment 5: paddr=0019421c vaddr=50000200 size=0001ch ( 28) load
I (373) boot: Loaded app from partition at offset 0x20000
I (373) boot: Disabling RNG early entropy source...
I (384) cpu_start: Unicore app
I (392) cpu_start: Pro cpu start user code
I (392) cpu_start: cpu freq: 160000000 Hz
I (392) app_init: Application information:
I (392) app_init: Project name: sensors
I (396) app_init: App version: 1.0
I (399) app_init: Compile time: Sep 11 2025 17:11:10
I (404) app_init: ELF file SHA256: d09140ff7...
I (409) app_init: ESP-IDF: v5.4.1
I (413) efuse_init: Min chip rev: v0.3
I (416) efuse_init: Max chip rev: v1.99
I (420) efuse_init: Chip rev: v0.3
I (424) heap_init: Initializing. RAM available for dynamic allocation:
I (431) heap_init: At 3FCAEFA0 len 00011060 (68 KiB): RAM
I (436) heap_init: At 3FCC0000 len 0001C710 (113 KiB): Retention RAM
I (442) heap_init: At 3FCDC710 len 00002950 (10 KiB): Retention RAM
I (448) heap_init: At 5000021C len 00001DCC (7 KiB): RTCRAM
I (454) spi_flash: detected chip: generic
I (457) spi_flash: flash io: dio
I (462) sleep_gpio: Configure to isolate all GPIO pins in sleep state
I (466) sleep_gpio: Enable automatic switching of GPIO sleep configuration
I (473) coexist: coex firmware version: e727207
I (477) coexist: coexist rom version 9387209
I (481) main_task: Started on CPU0
I (481) main_task: Calling app_main()
I (491) gpio: GPIO[9]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (491) button: IoT Button Version: 4.1.3
E (501) esp_matter_cluster: Config is NULL or mandatory feature_flags are missing.
assert failed: esp_matter::cluster_t* esp_matter::cluster::occupancy_sensing::create(esp_matter::endpoint_t*, config_t*, uint8_t) esp_matter_cluster.cpp:2154 (false)
Core 0 register dump:
--- Stack dump detected
MEPC : 0x4038082c RA : 0x4038ac46 SP : 0x3fcb1b10 GP : 0x3fc97e00
--- 0x4038082c: panic_abort at /home/alex/esp-idf/components/esp_system/panic.c:468
--- 0x4038ac46: __ubsan_include at /home/alex/esp-idf/components/esp_system/ubsan.c:311
TP : 0x3fcb1dd0 T0 : 0x37363534 T1 : 0x7271706f T2 : 0x33323130
S0/FP : 0x00000001 S1 : 0x3fcb1cd5 A0 : 0x3fcb1b68 A1 : 0x3fc9a7c1
A2 : 0x00000001 A3 : 0x00000029 A4 : 0x00000001 A5 : 0x3fcad000
A6 : 0x7a797877 A7 : 0x76757473 S2 : 0x00000022 S3 : 0x3fcb1b68
S4 : 0x3fcb1b68 S5 : 0x00000000 S6 : 0x00000000 S7 : 0x00000000
S8 : 0x00000000 S9 : 0x00000000 S10 : 0x00000000 S11 : 0x00000000
T3 : 0x6e6d6c6b T4 : 0x6a696867 T5 : 0x66656463 T6 : 0x62613938
MSTATUS : 0x00001881 MTVEC : 0x40380001 MCAUSE : 0x00000002 MTVAL : 0x00000000
--- 0x40380001: _vector_table at /home/alex/esp-idf/components/riscv/vectors_intc.S:54
MHARTID : 0x00000000
- Executing action: monitor
Serial port /dev/ttyACM0
Connecting...
Detecting chip type... ESP32-C3
Running idf_monitor in directory /home/alex/esp-matter/examples/sensors
Executing "/home/alex/.espressif/python_env/idf5.4_py3.12_env/bin/python /home/alex/esp-idf/tools/idf_monitor.py -p /dev/ttyACM0 -b 115200 --toolchain-prefix riscv32-esp-elf- --target esp32c3 --revision 3 --decode-panic backtrace /home/alex/esp-matter/examples/sensors/build/sensors.elf -m '/home/alex/.espressif/python_env/idf5.4_py3.12_env/bin/python' '/home/alex/esp-idf/tools/idf.py'"...
--- esp-idf-monitor 1.7.0 on /dev/ttyACM0 115200
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
ESP-ROM:esp32c3-api1-20210207
Build:Feb 7 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0xe (SPI_FAST_FLASH_BOOT)
Saved PC:0x4004c97e
--- 0x4004c97e: usb_uart_rx_one_char in ROM
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x1574
load:0x403cc710,len:0xc30
load:0x403ce710,len:0x2f64
entry 0x403cc71a
I (24) boot: ESP-IDF v5.4.1 2nd stage bootloader
I (24) boot: compile time Sep 11 2025 17:04:07
I (24) boot: chip revision: v0.3
I (25) boot: efuse block revision: v1.1
I (28) boot.esp32c3: SPI Speed : 80MHz
I (32) boot.esp32c3: SPI Mode : DIO
I (36) boot.esp32c3: SPI Flash Size : 4MB
I (39) boot: Enabling RNG early entropy source...
I (44) boot: Partition Table:
I (46) boot: ## Label Usage Type ST Offset Length
I (53) boot: 0 esp_secure_cert unknown 3f 06 0000d000 00002000
I (59) boot: 1 nvs WiFi data 01 02 00010000 0000c000
I (66) boot: 2 nvs_keys NVS keys 01 04 0001c000 00001000
I (72) boot: 3 otadata OTA data 01 00 0001d000 00002000
I (79) boot: 4 phy_init RF data 01 01 0001f000 00001000
I (85) boot: 5 ota_0 OTA app 00 10 00020000 001e0000
I (92) boot: 6 ota_1 OTA app 00 11 00200000 001e0000
I (98) boot: 7 fctry WiFi data 01 02 003e0000 00006000
I (105) boot: End of partition table
I (108) esp_image: segment 0: paddr=00020020 vaddr=3c130020 size=368b0h (223408) map
I (151) esp_image: segment 1: paddr=000568d8 vaddr=3fc98800 size=03d88h ( 15752) load
I (155) esp_image: segment 2: paddr=0005a668 vaddr=40380000 size=059b0h ( 22960) load
I (159) esp_image: segment 3: paddr=00060020 vaddr=42000020 size=125c90h (1203344) map
I (355) esp_image: segment 4: paddr=00185cb8 vaddr=403859b0 size=12ca8h ( 76968) load
I (369) esp_image: segment 5: paddr=00198968 vaddr=50000200 size=0001ch ( 28) load
I (377) boot: Loaded app from partition at offset 0x20000
I (377) boot: Disabling RNG early entropy source...
I (388) cpu_start: Unicore app
I (396) cpu_start: Pro cpu start user code
I (396) cpu_start: cpu freq: 160000000 Hz
I (396) app_init: Application information:
I (396) app_init: Project name: sensors
I (400) app_init: App version: 1.0
I (403) app_init: Compile time: Sep 11 2025 17:11:10
I (408) app_init: ELF file SHA256: 6260132b1...
I (413) app_init: ESP-IDF: v5.4.1
I (417) efuse_init: Min chip rev: v0.3
I (420) efuse_init: Max chip rev: v1.99
I (424) efuse_init: Chip rev: v0.3
I (428) heap_init: Initializing. RAM available for dynamic allocation:
I (435) heap_init: At 3FCB0210 len 0000FDF0 (63 KiB): RAM
I (440) heap_init: At 3FCC0000 len 0001C710 (113 KiB): Retention RAM
I (446) heap_init: At 3FCDC710 len 00002950 (10 KiB): Retention RAM
I (452) heap_init: At 5000021C len 00001DCC (7 KiB): RTCRAM
I (458) spi_flash: detected chip: generic
I (461) spi_flash: flash io: dio
E (464) i2c: CONFLICT! driver_ng is not allowed to be used with this old driver
abort() was called at PC 0x420afb75 on core 0
--- 0x420afb75: check_i2c_driver_conflict at /home/alex/esp-idf/components/driver/i2c/i2c.c:1723
--- Stack dump detected
Core 0 register dump:
MEPC : 0x4038082c RA : 0x4038bce6 SP : 0x3fcde220 GP : 0x3fc99000
--- 0x4038082c: panic_abort at /home/alex/esp-idf/components/esp_system/panic.c:468
--- 0x4038bce6: __ubsan_include at /home/alex/esp-idf/components/esp_system/ubsan.c:311
TP : 0x00000000 T0 : 0x37363534 T1 : 0x7271706f T2 : 0x33323130
S0/FP : 0x3fcde25c S1 : 0x3fcde25c A0 : 0x3fcde25c A1 : 0x3fcde23e
A2 : 0x00000000 A3 : 0x3fcde289 A4 : 0x00000001 A5 : 0x3fcae000
A6 : 0x7a797877 A7 : 0x76757473 S2 : 0x3fcde240 S3 : 0x0000003e
S4 : 0x3fcde42c S5 : 0x3c800000 S6 : 0x3c130000 S7 : 0xffff0000
S8 : 0x00060020 S9 : 0x00020020 S10 : 0x00000006 S11 : 0x3fcde3c4
T3 : 0x6e6d6c6b T4 : 0x6a696867 T5 : 0x66656463 T6 : 0x62613938
MSTATUS : 0x00001881 MTVEC : 0x40380001 MCAUSE : 0x00000002 MTVAL : 0x00000000
--- 0x40380001: _vector_table at /home/alex/esp-idf/components/riscv/vectors_intc.S:54
MHARTID : 0x00000000
- /home/alex/esp-idf/components/esp_hw_support/include/intr_types.h:8:2: warning: #warning "This header is deprecated. Please use esp_intr_types.h instead" [-Wcpp]
8 | #warning "This header is deprecated. Please use esp_intr_types.h instead"
| ^~~~~~~
[1839/2125] Building C object esp-idf/espressif__esp_diagn...essif__esp_diagnostics.dir/src/esp_diagnostics_utils.c.obj
In file included from /home/alex/esp-matter/examples/sensors/managed_components/espressif__esp_diagnostics/src/esp_diagnostics_utils.c:53:
/home/alex/esp-idf/components/freertos/esp_additions/include/freertos/task_snapshot.h:8:2: warning: #warning freertos/task_snapshot.h header is no longer used, and will be removed in future versions. [-Wcpp]
8 | #warning freertos/task_snapshot.h header is no longer used, and will be removed in future versions.
| ^~~~~~~
[1917/2125] Building CXX object esp-idf/esp_matter/CMakeFiles/__idf_esp_matter.dir/esp_matter_attribute_utils.cpp.obj
/home/alex/esp-matter/components/esp_matter/esp_matter_attribute_utils.cpp30: warning: 'esp_matter_val_type_t esp_matter::attribute::get_val_type_from_attribute_type(int)' defined but not used [-Wunused-function]
1025 | static esp_matter_val_type_t get_val_type_from_attribute_type(int attribute_type)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[1954/2125] Building CXX object esp-idf/esp_matter/CMakeFi...eip/connectedhomeip/src/app/util/attribute-storage.cpp.obj
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/util/attribute-storage.cpp: In function 'void emberAfEndpointConfigure()':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/util/attribute-storage.cpp:183:40: warning: comparison is always true due to limited range of data type [-Wtype-limits]
183 | static_assert(FIXED_ENDPOINT_COUNT <= std::numeric_limits<decltype(ep)>::max(),
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/util/attribute-storage.cpp: In function 'uint16_t emberAfGetClusterServerEndpointIndex(chip::EndpointId, chip::ClusterId, uint16_t)':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/util/attribute-storage.cpp:932:17: warning: comparison is always false due to limited range of data type [-Wtype-limits]
932 | if (epIndex < FIXED_ENDPOINT_COUNT)
[1986/2125] Building CXX object esp-idf/esp_matter/CMakeFi...er/camera-av-settings-user-level-management-server.cpp.obj
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp: In member function 'void chip::app::Clusters::CameraAvSettingsUserLevelManagement::CameraAvSettingsUserLevelMgmtServer::HandleMPTZSetPosition(chip::app::CommandHandlerInterface::HandlerContext&, const chip::app::Clusters::CameraAvSettingsUserLevelManagement::Commands::MPTZSetPosition::DecodableType&)':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp:802:9: warning: '*(unsigned char*)((char*)&zoom + offsetof(chip::Optional<unsigned char>,chip::Optional<unsigned char>::mValueHolder.chip::Optional<unsigned char>::ValueHolder::<unnamed>.chip::Optional<unsigned char>::TrivialDestructor::mValue))' may be used uninitialized [-Wmaybe-uninitialized]
802 | if ((zoomValue > mZoomMax) || (zoomValue < kMinZoomValue))
| ^~
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp:750:23: note: '*(unsigned char*)((char*)&zoom + offsetof(chip::Optional<unsigned char>,chip::Optional<unsigned char>::mValueHolder.chip::Optional<unsigned char>::ValueHolder::<unnamed>.chip::Optional<unsigned char>::TrivialDestructor::mValue))' was declared here
750 | Optional<uint8_t> zoom = commandData.zoom;
| ^~~~
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp: In member function 'void chip::app::Clusters::CameraAvSettingsUserLevelManagement::CameraAvSettingsUserLevelMgmtServer::HandleMPTZRelativeMove(chip::app::CommandHandlerInterface::HandlerContext&, const chip::app::Clusters::CameraAvSettingsUserLevelManagement::Commands::MPTZRelativeMove::DecodableType&)':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp:949:13: warning: '*(signed char*)((char*)&zoomDelta + offsetof(chip::Optional<signed char>,chip::Optional<signed char>::mValueHolder.chip::Optional<signed char>::ValueHolder::<unnamed>.chip::Optional<signed char>::TrivialDestructor::mValue))' may be used uninitialized [-Wmaybe-uninitialized]
949 | if (zoomDeltaValue > (mZoomMax - 1) || zoomDeltaValue < -(mZoomMax - 1))
| ^~~~~~~~~~~~~~
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp:856:22: note: '*(signed char*)((char*)&zoomDelta + offsetof(chip::Optional<signed char>,chip::Optional<signed char>::mValueHolder.chip::Optional<signed char>::ValueHolder::<unnamed>.chip::Optional<signed char>::TrivialDestructor::mValue))' was declared here
856 | Optional<int8_t> zoomDelta = commandData.zoomDelta;
| ^~~~~~~~~
In file included from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/lib/core/TLVReader.h:36,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/lib/core/TLVBackingStore.h:32,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/lib/core/TLV.h:32,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/MessageDef/Builder.h:28,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/MessageDef/ArrayBuilder.h:20,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/MessageDef/AttributeReportIBs.h:26,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/AttributeReportBuilder.h:19,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/AttributeAccessInterface.h:21,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/AttributeAccessInterfaceRegistry.h:18,
from /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp:19:
In copy constructor 'constexpr chip::Optional<T>::Optional(const chip::Optional<T>&) [with T = signed char]',
inlined from 'constexpr chip::Optional<T>::Optional(const chip::Optional<T>&) [with T = signed char]' at /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/lib/core/Optional.h:74:5,
inlined from 'void chip::app::Clusters::CameraAvSettingsUserLevelManagement::CameraAvSettingsUserLevelMgmtServer::HandleDPTZRelativeMove(chip::app::CommandHandlerInterface::HandlerContext&, const chip::app::Clusters::CameraAvSettingsUserLevelManagement::Commands::DPTZRelativeMove::DecodableType&)' at /home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp47:
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/lib/core/Optional.h:72:13: warning: '*(signed char*)((char*)&zoomDelta + offsetof(chip::Optional<signed char>,chip::Optional<signed char>::mValueHolder.chip::Optional<signed char>::ValueHolder::<unnamed>.chip::Optional<signed char>::TrivialDestructor::mValue))' may be used uninitialized [-Wmaybe-uninitialized]
72 | new (&mValueHolder.mValue.mData) T(other.mValueHolder.mValue.mData);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp: In member function 'void chip::app::Clusters::CameraAvSettingsUserLevelManagement::CameraAvSettingsUserLevelMgmtServer::HandleDPTZRelativeMove(chip::app::CommandHandlerInterface::HandlerContext&, const chip::app::Clusters::CameraAvSettingsUserLevelManagement::Commands::DPTZRelativeMove::DecodableType&)':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.cpp22: note: '*(signed char*)((char*)&zoomDelta + offsetof(chip::Optional<signed char>,chip::Optional<signed char>::mValueHolder.chip::Optional<signed char>::ValueHolder::<unnamed>.chip::Optional<signed char>::TrivialDestructor::mValue))' was declared here
1257 | Optional<int8_t> zoomDelta = commandData.zoomDelta;
| ^~~~~~~~~
[1988/2125] Building CXX object esp-idf/esp_matter/CMakeFi...clusters/color-control-server/color-control-server.cpp.obj
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/color-control-server/color-control-server.cpp: In member function 'chip::Protocols::InteractionModel::Status ColorControlServer::moveToHueCommand(chip::EndpointId, uint16_t, DirectionEnum, uint16_t, chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>, chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>, bool)':
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/color-control-server/color-control-server.cpp58: warning: 'direction' may be used uninitialized [-Wmaybe-uninitialized]
1602 | colorHueTransitionState->up = (direction == DirectionEnum::kUp);
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/home/alex/esp-matter/connectedhomeip/connectedhomeip/src/app/clusters/color-control-server/color-control-server.cpp19: note: 'direction' was declared here
1525 | DirectionEnum direction;
| ^~~~~~~~~