feat(board): align new-board inputs and factory runtime

This commit is contained in:
2026-08-04 14:00:13 +08:00
parent d5409ea4e3
commit 07219e6aad
15 changed files with 35590 additions and 525 deletions
+1
View File
@@ -0,0 +1 @@
*.pdf binary
@@ -139,6 +139,14 @@ static esp_err_t app_composition_run_plan_a_boot_sequence(void)
return err; return err;
} }
#if CONFIG_TQ_FACTORY_CLI_ENABLE
err = control_plane_factory_cli_start();
if (err != ESP_OK) {
ESP_LOGE(TAG, "Factory CLI start failed: %s", esp_err_to_name(err));
return err;
}
#endif
#if CONFIG_TQ_SCREEN_ENABLE #if CONFIG_TQ_SCREEN_ENABLE
if (lcd_ready) { if (lcd_ready) {
esp_err_t expression_err = control_plane_request_boot_expression(); esp_err_t expression_err = control_plane_request_boot_expression();
@@ -1901,6 +1901,15 @@ esp_err_t control_plane_start_runtime_workers(void)
} }
#endif #endif
#if CONFIG_TQ_FACTORY_CLI_ENABLE
esp_err_t factory_cli_err = control_plane_factory_cli_start();
if (factory_cli_err != ESP_OK) {
ESP_LOGW(TAG,
"Optional factory CLI unavailable; core runtime remains active: %s",
esp_err_to_name(factory_cli_err));
}
#endif
return ESP_OK; return ESP_OK;
} }
@@ -1938,6 +1947,10 @@ void control_plane_stop_runtime_workers(void)
control_plane_set_runtime_stop_requested(true); control_plane_set_runtime_stop_requested(true);
control_plane_stop_user_config_server(); control_plane_stop_user_config_server();
#if CONFIG_TQ_FACTORY_CLI_ENABLE
control_plane_factory_cli_stop();
#endif
(void)control_plane_register_model_command_callback(NULL, NULL); (void)control_plane_register_model_command_callback(NULL, NULL);
#if CONFIG_FORTUNE_ENABLE #if CONFIG_FORTUNE_ENABLE
domain_runtime_register_birth_profile_observer(NULL, NULL); domain_runtime_register_birth_profile_observer(NULL, NULL);
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+1 -1
View File
@@ -205,7 +205,7 @@ flowchart LR
```mermaid ```mermaid
flowchart TD flowchart TD
GPIO["GPIO edge interrupt\nPTT GPIO3 / SW2 GPIO13"] GPIO["GPIO edge interrupt\nButton 1/SW1 GPIO12\nButton 2/K2 GPIO13\nrocker SW2 GPIO6"]
IsrQueue["key IRQ queue"] IsrQueue["key IRQ queue"]
KeyTask["cp_key_input\ndebounce and click state machine"] KeyTask["cp_key_input\ndebounce and click state machine"]
SystemQueue["system event queue"] SystemQueue["system event queue"]
+10 -6
View File
@@ -10,15 +10,15 @@ the ESP32-S3 MCU perspective.
| ---: | --- | --- | --- | --- | --- | | ---: | --- | --- | --- | --- | --- |
| 1 | `CONFIG_MULTIMODAL_AUDIO_I2C_SDA_GPIO` | Bidirectional | Audio codec | ES8311 I2C SDA | I2C port 0, codec control bus | | 1 | `CONFIG_MULTIMODAL_AUDIO_I2C_SDA_GPIO` | Bidirectional | Audio codec | ES8311 I2C SDA | I2C port 0, codec control bus |
| 2 | `CONFIG_MULTIMODAL_AUDIO_I2C_SCL_GPIO` | Output | Audio codec | ES8311 I2C SCL | I2C port 0, codec control bus | | 2 | `CONFIG_MULTIMODAL_AUDIO_I2C_SCL_GPIO` | Output | Audio codec | ES8311 I2C SCL | I2C port 0, codec control bus |
| 3 | `CONFIG_MULTIMODAL_PTT_BUTTON_GPIO` | Input | Keys / multimodal | TTP223 touch output / PTT | Active-high, externally driven, no internal pull |
| 4 | IO4 RMT control | Output | RMT control | RMT output control | Reuses unconnected `TP_INT` on the 8-wire LCD setup | | 4 | IO4 RMT control | Output | RMT control | RMT output control | Reuses unconnected `TP_INT` on the 8-wire LCD setup |
| 5 | IO5 PWM control | Output | PWM control | PWM output control | Reuses unconnected `TP_SDA` on the 8-wire LCD setup | | 5 | IO5 PWM control | Output | PWM control | PWM output control | Reuses unconnected `TP_SDA` on the 8-wire LCD setup |
| 6 | `CONFIG_TQ_SLOT_SWITCH_GPIO` | Input | Slot / key input | Rocker microswitch / original SW2 function | Uses the unconnected `TP_SCL` contact; active-low with internal pull-up |
| 7 | `CONFIG_TQ_SCREEN_BACKLIGHT_GPIO` | Output | LCD | LCD adapter backlight control | Active-high by default | | 7 | `CONFIG_TQ_SCREEN_BACKLIGHT_GPIO` | Output | LCD | LCD adapter backlight control | Active-high by default |
| 8 | `CONFIG_TQ_SCREEN_SPI_CLK_GPIO` | Output | LCD | ST7789P3 SPI clock / SCK | SPI2 host, 20 MHz default | | 8 | `CONFIG_TQ_SCREEN_SPI_CLK_GPIO` | Output | LCD | ST7789P3 SPI clock / SCK | SPI2 host, 20 MHz default |
| 9 | `CONFIG_TQ_POWER_HOLD_GPIO` | Output | Power | Board power hold | Active-high by default | | 9 | `CONFIG_TQ_POWER_HOLD_GPIO` | Output | Power | Board power hold | Active-high by default |
| 11 | `CONFIG_MULTIMODAL_AUDIO_PA_GPIO` | Output | Audio amplifier | PA enable | Managed by codec GPIO interface | | 11 | `CONFIG_MULTIMODAL_AUDIO_PA_GPIO` | Output | Audio amplifier | PA enable | Managed by codec GPIO interface |
| 12 | `CONFIG_TQ_CALIBRATION_SWITCH_GPIO` | Input | Turntable calibration | SW1 direction calibration microswitch | Active-low, external and internal pull-up | | 12 | `CONFIG_TQ_CALIBRATION_SWITCH_GPIO` | Input | Turntable calibration | Button 1 / SW1 direction calibration | Active-low, external and internal pull-up |
| 13 | `CONFIG_TQ_SLOT_SWITCH_GPIO` | Input | Slot / key input | SW2 slot-machine feature switch | Active-low, external and internal pull-up | | 13 | `CONFIG_MULTIMODAL_PTT_BUTTON_GPIO` | Input | Keys / multimodal | Button 2 / K2 push-to-talk | Active-low, external and internal pull-up |
| 15 | `CONFIG_TQ_SCREEN_SPI_CS_GPIO` | Output | LCD | ST7789P3 SPI chip select | SPI2 host | | 15 | `CONFIG_TQ_SCREEN_SPI_CS_GPIO` | Output | LCD | ST7789P3 SPI chip select | SPI2 host |
| 16 | `CONFIG_TQ_SCREEN_DC_GPIO` | Output | LCD | ST7789P3 data/command select | Initialized low | | 16 | `CONFIG_TQ_SCREEN_DC_GPIO` | Output | LCD | ST7789P3 data/command select | Initialized low |
| 17 | `CONFIG_TQ_SCREEN_RESET_PIN` | Output | LCD | ST7789P3 panel reset | Active-low reset; `-1` disables hardware reset | | 17 | `CONFIG_TQ_SCREEN_RESET_PIN` | Output | LCD | ST7789P3 panel reset | Active-low reset; `-1` disables hardware reset |
@@ -33,6 +33,11 @@ the ESP32-S3 MCU perspective.
| 47 | `CONFIG_TQ_STEPPER_IN3_GPIO` | Output | Turntable | ULN2003 stepper IN3 | Batched GPIO phase updates | | 47 | `CONFIG_TQ_STEPPER_IN3_GPIO` | Output | Turntable | ULN2003 stepper IN3 | Batched GPIO phase updates |
| 48 | `CONFIG_TQ_STEPPER_IN2_GPIO` | Output | Turntable | ULN2003 stepper IN2 | Batched GPIO phase updates | | 48 | `CONFIG_TQ_STEPPER_IN2_GPIO` | Output | Turntable | ULN2003 stepper IN2 | Batched GPIO phase updates |
The rocker microswitch wiring is `CN2 pin 3 (TP_SCL/GPIO6) -> normally-open
switch -> GND` (`CN2 pin 11` is a local ground option). The switch must not be
connected to 3.3 V. GPIO6 cannot be used as a touch I2C clock while this wiring
is installed.
## Disabled Or Not Connected In Defaults ## Disabled Or Not Connected In Defaults
| Config | Value | Meaning | | Config | Value | Meaning |
@@ -40,8 +45,7 @@ the ESP32-S3 MCU perspective.
| `CONFIG_TQ_SCREEN_SPI_MISO_GPIO` | `-1` | LCD MISO is not connected or not used. | | `CONFIG_TQ_SCREEN_SPI_MISO_GPIO` | `-1` | LCD MISO is not connected or not used. |
| `CONFIG_TQ_SLOT_SWITCH_PULLDOWN` | unset | SW2 uses pull-up only. | | `CONFIG_TQ_SLOT_SWITCH_PULLDOWN` | unset | SW2 uses pull-up only. |
| `CONFIG_TQ_CALIBRATION_SWITCH_PULLDOWN` | unset | Calibration switch uses pull-up only. | | `CONFIG_TQ_CALIBRATION_SWITCH_PULLDOWN` | unset | Calibration switch uses pull-up only. |
| `CONFIG_MULTIMODAL_PTT_BUTTON_PULLUP` | unset | TTP223 drives both levels. | | `CONFIG_MULTIMODAL_PTT_BUTTON_PULLDOWN` | unset | Button 2 uses pull-up only. |
| `CONFIG_MULTIMODAL_PTT_BUTTON_PULLDOWN` | unset | TTP223 drives both levels. |
## Boot Hardware Test Profile ## Boot Hardware Test Profile
@@ -85,7 +89,7 @@ them to an active project feature.
| GPIO / Net | Board function | Firmware status | | GPIO / Net | Board function | Firmware status |
| --- | --- | --- | | --- | --- | --- |
| GPIO0 / K1 | Switch to GND, commonly boot/download related | Not consumed by application code | | GPIO0 / K1 | Switch to GND, commonly boot/download related | Not consumed by application code |
| GPIO6 / `TP_SCL` | Optional touch clock / reusable IO | Not connected by the current 8-wire LCD adapter | | GPIO3 / `touch` | TTP223 touch output | Present on the board but not consumed by the current input policy |
| GPIO10 / `Charge` | Charger status | No current firmware consumer found | | GPIO10 / `Charge` | Charger status | No current firmware consumer found |
| GPIO14 | Unassigned | Not used | | GPIO14 | Unassigned | Not used |
| GPIO35 | Unassigned | Not used | | GPIO35 | Unassigned | Not used |
+4 -4
View File
@@ -13,7 +13,7 @@ the MCU's perspective.
| 3 | EN/RST | EN | Input | Chip enable and reset input | Reset and enable | | 3 | EN/RST | EN | Input | Chip enable and reset input | Reset and enable |
| 4 | GPIO4 | TP_INT | Bidirectional | Optional touch interrupt / reusable IO | Not connected by the 8-wire LCD adapter | | 4 | GPIO4 | TP_INT | Bidirectional | Optional touch interrupt / reusable IO | Not connected by the 8-wire LCD adapter |
| 5 | GPIO5 | TP_SDA | Bidirectional | Optional touch I2C SDA / reusable IO | Not connected by the 8-wire LCD adapter | | 5 | GPIO5 | TP_SDA | Bidirectional | Optional touch I2C SDA / reusable IO | Not connected by the 8-wire LCD adapter |
| 6 | GPIO6 | TP_SCL | Bidirectional | Optional touch I2C SCL / reusable IO | Not connected by the 8-wire LCD adapter | | 6 | GPIO6 | TP_SCL | Input | Rocker microswitch / original SW2 function | Reuses the touch-clock contact left open by the 8-wire LCD adapter; active-low with internal pull-up |
| 7 | GPIO7 | BLK | Output | LCD adapter backlight control | Active-high firmware default | | 7 | GPIO7 | BLK | Output | LCD adapter backlight control | Active-high firmware default |
| 8 | GPIO15 | CS | Output | ST7789P3 SPI chip select | Active low | | 8 | GPIO15 | CS | Output | ST7789P3 SPI chip select | Active low |
| 9 | GPIO16 | DC | Output | ST7789P3 data/command select | Also named A0 by the panel specification | | 9 | GPIO16 | DC | Output | ST7789P3 data/command select | Also named A0 by the panel specification |
@@ -22,13 +22,13 @@ the MCU's perspective.
| 12 | GPIO8 | CLK / Swing | Output | ST7789P3 SPI clock | Do not drive the Swing function while the LCD is connected | | 12 | GPIO8 | CLK / Swing | Output | ST7789P3 SPI clock | Do not drive the Swing function while the LCD is connected |
| 13 | GPIO19 | ESP_D_N | Bidirectional | USB D- | Type-C | | 13 | GPIO19 | ESP_D_N | Bidirectional | USB D- | Type-C |
| 14 | GPIO20 | ESP_D_P | Bidirectional | USB D+ | Type-C | | 14 | GPIO20 | ESP_D_P | Bidirectional | USB D+ | Type-C |
| 15 | GPIO3 | touch | Input | TTP223 touch-button output / PTT | Active high | | 15 | GPIO3 | touch | Input | TTP223 touch-button output | Present on the board but not consumed by the current input policy |
| 16 | GPIO46 | UNASSIGNED | N/A | No connection assigned | Reserved; no signal assigned | | 16 | GPIO46 | UNASSIGNED | N/A | No connection assigned | Reserved; no signal assigned |
| 17 | GPIO9 | Power | Output | Board power hold | Active high | | 17 | GPIO9 | Power | Output | Board power hold | Active high |
| 18 | GPIO10 | Charge | Input | Charger status | Not consumed by current firmware | | 18 | GPIO10 | Charge | Input | Charger status | Not consumed by current firmware |
| 19 | GPIO11 | PA_CTRL | Output | Audio power-amplifier enable | Amplifier control | | 19 | GPIO11 | PA_CTRL | Output | Audio power-amplifier enable | Amplifier control |
| 20 | GPIO12 | SW1 | Input | Turntable calibration microswitch | External 10 kOhm pull-up; active low | | 20 | GPIO12 | SW1 | Input | Button 1 / turntable calibration switch | External 10 kOhm pull-up; active low |
| 21 | GPIO13 | SW2 | Input | Slot-machine feature switch | External 10 kOhm pull-up; active low | | 21 | GPIO13 | SW2 | Input | Button 2 / K2 push-to-talk input | External 10 kOhm pull-up; active low |
| 22 | GPIO14 | UNASSIGNED | N/A | No connection assigned | Reserved; no signal assigned | | 22 | GPIO14 | UNASSIGNED | N/A | No connection assigned | Reserved; no signal assigned |
| 23 | GPIO21 | IN4 | Output | ULN2003 IN4 | Stepper motor phase control | | 23 | GPIO21 | IN4 | Output | ULN2003 IN4 | Stepper motor phase control |
| 24 | GPIO47 | IN3 | Output | ULN2003 IN3 | Stepper motor phase control | | 24 | GPIO47 | IN3 | Output | ULN2003 IN3 | Stepper motor phase control |
Binary file not shown.
Binary file not shown.
-367
View File
@@ -1,367 +0,0 @@
sp-idf-v5.5.4\tools\idf_monitor.py' -p COM5 -b 921600 --toolchain-prefix xtensa-esp32s3-elf- --make '''C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe'' ''C:\Espressif\frameworks\esp-idf-v5.5.4\tools\idf.py''' --target esp32s3 'd:\Code\chaowan\TQ_catN\build\TQ_Cat_Code.elf'
--- Warning: GDB cannot open serial ports accessed as COMx
--- Using \\.\COM5 instead...
--- esp-idf-monitor 1.9.0 on \\.\COM5 921600
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
could not open port '\\\\.\\COM5': FileNotFoundError(2, '绯荤粺鎵句笉鍒版寚瀹氱殑鏂囦欢銆?, None, 2)
--- Connection to \\.\COM5 failed. Available ports:
PS D:\Code\chaowan\TQ_catN>
PS D:\Code\chaowan\TQ_catN> $env:IDF_PATH = 'C:/Espressif/frameworks/esp-idf-v5.5.4/';
PS D:\Code\chaowan\TQ_catN> & 'C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe' 'C:\Espressif\frameworks\esp-idf-v5.5.4\tools\idf_monitor.py' -p COM5 -b 921600 --toolchain-prefix xtensa-esp32s3-elf- --make '''C:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe'' ''C:\Espressif\frameworks\esp-idf-v5.5.4\tools\idf.py''' --target esp32s3 'd:\Code\chaowan\TQ_catN\build\TQ_Cat_Code.elf'
--- Warning: GDB cannot open serial ports accessed as COMx
--- Using \\.\COM5 instead...
--- esp-idf-monitor 1.9.0 on \\.\COM5 921600
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
I (324) esp_image: segment 1: paddr=0093496c vaddr=3fc9e100 sizeESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0x1b (SPI_FAST_FLASH_BOOT)
Saved PC:0x4037bca6
--- 0x4037bca6: esp_cpu_wait_for_intr at C:/Espressif/frameworks/esp-idf-v5.5.4/components/esp_hw_support/cpu.c:64
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x14f0
load:0x403c8700,len:0xd24
load:0x403cb700,len:0x2ef0
entry 0x403c8924
I (24) boot: ESP-IDF v5.5.4 2nd stage bootloader
I (24) boot: compile time Jun 26 2026 10:07:28
I (25) boot: Multicore bootloader
I (25) boot: chip revision: v0.2
I (28) boot: efuse block revision: v1.3
I (31) boot.esp32s3: Boot SPI Speed : 80MHz
I (35) boot.esp32s3: SPI Mode : DIO
I (39) boot.esp32s3: SPI Flash Size : 16MB
I (43) boot: Enabling RNG early entropy source...
I (47) boot: Partition Table:
I (50) boot: ## Label Usage Type ST Offset Length
I (56) boot: 0 nvs WiFi data 01 02 00009000 00004000
I (63) boot: 1 otadata OTA data 01 00 0000d000 00002000
I (69) boot: 2 phy_init RF data 01 01 0000f000 00001000
I (76) boot: 3 gifpack Unknown data 01 83 00010000 00800000
I (82) boot: 4 ota_0 OTA app 00 10 00810000 00330000
I (89) boot: 5 ota_1 OTA app 00 11 00b40000 00330000
I (95) boot: 6 model Unknown data 01 82 00e70000 00180000
I (102) boot: End of partition table
I (105) esp_image: segment 0: paddr=00810020 vaddr=3c110020 size=124944h (1198404) map
I (324) esp_image: segment 1: paddr=0093496c vaddr=3fc9e100 size=0578ch ( 22412) load
I (329) esp_image: segment 2: paddr=0093a100 vaddr=40374000 size=05f18h ( 24344) load
I (334) esp_image: segment 3: paddr=00940020 vaddr=42000020 size=10daf8h (1104632) map
I (530) esp_image: segment 4: paddr=00a4db20 vaddr=40379f18 size=14164h ( 82276) load
I (548) esp_image: segment 5: paddr=00a61c8c vaddr=50000000 size=00020h ( 32) load
I (559) boot: Loaded app from partition at offset 0x810000
I (559) boot: Disabling RNG early entropy source...
I (569) octal_psram: vendor id : 0x0d (AP)
I (569) octal_psram: dev id : 0x02 (generation 3)
I (570) octal_psram: density : 0x03 (64 Mbit)
I (571) octal_psram: good-die : 0x01 (Pass)
I (576) octal_psram: Latency : 0x01 (Fixed)
I (580) octal_psram: VCC : 0x01 (3V)
I (584) octal_psram: SRF : 0x01 (Fast Refresh)
I (589) octal_psram: BurstType : 0x01 (Hybrid Wrap)
I (594) octal_psram: BurstLen : 0x01 (32 Byte)
I (598) octal_psram: Readlatency : 0x02 (10 cycles@Fixed)
I (604) octal_psram: DriveStrength: 0x00 (1/1)
I (608) MSPI Timing: Enter psram timing tuning
I (613) esp_psram: Found 8MB PSRAM device
I (616) esp_psram: Speed: 80MHz
I (619) cpu_start: Multicore app
I (912) esp_psram: SPI SRAM memory test OK
I (920) cpu_start: GPIO 44 and 43 are used as console UART I/O pins
I (921) cpu_start: Pro cpu start user code
I (921) cpu_start: cpu freq: 240000000 Hz
I (923) app_init: Application information:
I (927) app_init: Project name: TQ_Cat_Code
I (931) app_init: App version: 6aaf13d-dirty
I (935) app_init: Compile time: Jun 27 2026 11:00:31
I (940) app_init: ELF file SHA256: 8cd15c4b1...
--- Warning: Checksum mismatch between flashed and built applications. Checksum of built application is 6bbc2d153c535122f3e0520a7e0b375ceed0070d0ec1f234d950f57c0548b115
I (945) app_init: ESP-IDF: v5.5.4
I (948) efuse_init: Min chip rev: v0.0
I (952) efuse_init: Max chip rev: v0.99
I (956) efuse_init: Chip rev: v0.2
I (960) heap_init: Initializing. RAM available for dynamic allocation:
I (966) heap_init: At 3FCA7AE0 len 00041C30 (263 KiB): RAM
I (972) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM
I (977) heap_init: At 600FE000 len 00001FE8 (7 KiB): RTCRAM
I (982) esp_psram: Adding pool of 8178K of PSRAM memory to heap allocator
I (989) spi_flash: detected chip: generic
I (992) spi_flash: flash io: dio
I (995) sleep_gpio: Configure to isolate all GPIO pins in sleep state
I (1002) sleep_gpio: Enable automatic switching of GPIO sleep configuration
I (1008) main_task: Started on CPU0
I (1018) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
I (1018) main_task: Calling app_main()
I (1018) app_comp_boot: ========================================
I (1028) app_comp_boot: App Composition Boot Plan A
I (1028) app_comp_boot: dry_run=0
I (1038) app_comp_boot: ========================================
I (1038) app_comp_boot: boot stage 01 power_hold event=already_asserted_by_platform_core
I (1048) app_comp_boot: boot stage 02 audio_init event=boot_sound_policy_begin
I (1058) app_comp_boot: boot stage 03 boot_sound event=play_boot_sound_with_timeout
I (1068) control_plane_rt: Boot sound policy start timeout=3000ms
I (1078) multimodal_audio: Heap audio_init_begin: free8=8647743 largest8=8257536 free_internal=275643 largest_internal=212992 largest_dma=212992 free_spiram=8372100 largest_spiram=8257536
I (1088) multimodal_audio: Heap before_opus_init: free8=8647743 largest8=8257536 free_internal=275643 largest_internal=212992 largest_dma=212992 free_spiram=8372100 largest_spiram=8257536
I (1108) multimodal_audio: Heap before_opus_enc_open: free8=8647743 largest8=8257536 free_internal=275643 largest_internal=212992 largest_dma=212992 free_spiram=8372100 largest_spiram=8257536
I (1118) multimodal_audio: Try opus profile=configured sr=16000 ch=1 frame=5 bitrate=24000 app=0 complexity=0 vbr=0 dtx=0 fec=0
I (1138) multimodal_audio: Opus ready: 16000Hz frame=60ms bitrate=24kbps enc(in=1920 out=280)
I (1138) multimodal_audio: Heap after_opus_init: free8=8596159 largest8=8257536 free_internal=275567 largest_internal=212992 largest_dma=212992 free_spiram=8320592 largest_spiram=8257536
I (1158) multimodal_audio: Heap after_opus_ready: free8=8596159 largest8=8257536 free_internal=275567 largest_internal=212992 largest_dma=212992 free_spiram=8320592 largest_spiram=8257536
I (1178) multimodal_audio: I2C ready: port=0 sda=1 scl=2 ctrl(8-bit)=0x30 probe(7-bit)=0x18
I (1188) multimodal_audio: I2S ready: port=0 mclk=38 bclk=39 ws=41 dout=40 din=42 use_mclk=1 dma(desc=4 frame=160)
I (1198) ES8311: Work in Slave mode
I (1198) I2S_IF: channel mode 0 bits:16/16 channel:2 mask:1
I (1198) I2S_IF: STD Mode 1 bits:16/16 channel:2 sample_rate:16000 mask:1
I (1208) I2S_IF: channel mode 0 bits:16/16 channel:2 mask:1
I (1218) I2S_IF: STD Mode 0 bits:16/16 channel:2 sample_rate:16000 mask:1
I (1238) Adev_Codec: Open codec device OK
I (1238) multimodal_audio: Codec controls: out_volume=60 in_gain=30 pa_gpio=12 output_gate=volume hw_mute=0
I (1238) multimodal_audio: Using fixed capture map MIC=ch0
I (1248) multimodal_audio: Heap after_codec_ready: free8=8590095 largest8=8257536 free_internal=271723 largest_internal=212992 largest_dma=212992 free_spiram=8318372 largest_spiram=8257536
I (1258) multimodal_audio: Mic uplink capture task started (stack=32768B opus in=1920B out=280B read=1920B channels=1 mic_ch=0)
I (1258) multimodal_audio: Mic uplink send task started (stack=12288B queue=24 packet_max=1024B)
I (1258) multimodal_audio: Downstream playback queue allocated in PSRAM: len=1024 item=8
I (1288) multimodal_audio: Codec initialized: 16000Hz 1ch 16bit opus(frame=60ms bitrate=24kbps)
I (1288) multimodal_audio: Downstream playback task started (stack=12288B queue=1024 packet_max=2048B)
I (1338) voice_prompt: LittleFS mounted at /littlefs, used=458752 total=8388608
I (1338) multimodal_audio: Downstream response begin: sample_rate=16000 frame=60ms codec_channels=1 pa_gpio=12 out_volume=60
I (1338) multimodal_audio: Downstream TX bounce buffer allocated in internal RAM: 3200B
I (1348) multimodal_audio: Downstream idle mute timer ready (timeout=250ms)
I (1358) multimodal_audio: Downstream output primed: volume=60 warmup=320B channels=1
I (2138) multimodal_audio: Downstream playback completed after response end (queue_empty)
I (2268) voice_prompt: Prompt queued: /littlefs/audio_prompts/boot.opus packets=13 bytes=2244
I (2268) control_plane_rt: Boot sound audio resources kept for runtime
I (2268) app_comp_boot: boot stage 04 audio_ready event=boot_sound_policy_end_keep_runtime
I (2278) app_comp_boot: boot stage 05 lcd_device event=control_plane_init_lcd_device
I (2368) multimodal_audio: Downstream idle mute after 250ms (response_active=0)
I (2408) lcd_direct: Direct LCD initialized (MOSI=17 SCLK=18 CS=6 DC=7 RST=3 BL=9 clock=20000000)
I (2408) app_comp_boot: boot stage 05 lcd_device result=ESP_OK
I (2408) app_comp_boot: boot stage 06 lcd_render_loop event=control_plane_start_lcd_render_worker
I (2418) cp_rt_workers: LCD render worker started
I (2418) lcd_direct: Direct LCD render loop started
I (2418) app_comp_boot: boot stage 06 lcd_render_loop result=ESP_OK
I (2438) app_comp_boot: boot stage 07 platform_domain event=control_plane_init
I (2438) platform_core: Platform initialized
I (2448) domain: Direction axis initialized (angle=0.0, speed=1500us)
I (2448) domain_rt_adapters: Expression request id=0 trigger=0
I (2458) lcd_direct: Direct LCD presentation queued kind=1 asset=jichubiaoqing
I (2468) app_comp_boot: boot stage 08 turntable_calibration skipped=disabled_by_config
I (2468) app_comp_boot: boot stage 09 storage_prepare event=control_plane_prepare_runtime_storage
I (2488) platform_core: NVS stats: used_entries=152 free_entries=352 total_entries=504 namespace_count=6
I (2488) platform_core: NVS namespace "wifi": used_entries=8 free_entries_shared=352
I (2498) platform_core: NVS namespace "ota": used_entries=5 free_entries_shared=352
I (2508) platform_core: NVS namespace "auth": used_entries=51 free_entries_shared=352
I (2518) platform_core: NVS namespace "auth_key": used_entries=7 free_entries_shared=352
I (2518) platform_core: NVS namespace "fortune": used_entries=0 free_entries_shared=352
I (2528) app_comp_boot: boot stage 10 wifi_bootstrap event=control_plane_bootstrap_connectivity
I (2538) control_plane_rt: Boot Wi-Fi config SSID=csy2 timeout_ms=30000
I (2548) platform_core: NVS stats: used_entries=152 free_entries=352 total_entries=504 namespace_count=6
I (2558) platform_core: NVS namespace "wifi": used_entries=8 free_entries_shared=352
I (2558) platform_core: NVS namespace "ota": used_entries=5 free_entries_shared=352
I (2568) platform_core: NVS namespace "auth": used_entries=51 free_entries_shared=352
I (2578) platform_core: NVS namespace "auth_key": used_entries=7 free_entries_shared=352
I (2588) platform_core: NVS namespace "fortune": used_entries=0 free_entries_shared=352
I (2588) SsidManager: compare [csy2:4] [csy2:4]
W (2598) SsidManager: SSID csy2 already exists, overwrite it
I (2598) wifi_portal: Ensured configured Wi-Fi credentials for SSID "csy2" with 2 previous candidate(s)
I (2608) wifi_portal: Starting STA connection with 2 saved credential candidate(s)
I (2618) wifi_portal: STA connect: 2 saved Wi-Fi credential candidate(s)
I (2628) wifi_portal: STA connect: candidate[0] SSID="csy2"
I (2628) wifi_portal: STA connect: candidate[1] SSID="TalkingQ"
I (2638) WifiManager: Initializing...
I (2638) pp: pp rom version: e7ae62f
I (2638) net80211: net80211 rom version: e7ae62f
I (2658) wifi:wifi driver task: 3fcbb87c, prio:23, stack:6656, core=0
I (2658) wifi:wifi firmware version: 0947e8b
I (2658) wifi:wifi certification version: v7.0
I (2658) wifi:config NVS flash: disabled
I (2668) wifi:config nano formatting: disabled
I (2668) wifi:Init data frame dynamic rx buffer num: 16
I (2668) wifi:Init static rx mgmt buffer num: 5
I (2678) wifi:Init management short buffer num: 32
I (2678) wifi:Init static tx buffer num: 8
I (2688) wifi:Init tx cache buffer num: 16
I (2688) wifi:Init static tx FG buffer num: 2
I (2698) wifi:Init static rx buffer size: 1600
I (2698) wifi:Init static rx buffer num: 8
I (2698) wifi:Init dynamic rx buffer num: 16
I (2708) wifi_init: rx ba win: 6
I (2708) wifi_init: accept mbox: 6
I (2708) wifi_init: tcpip mbox: 32
I (2718) wifi_init: udp mbox: 6
I (2718) wifi_init: tcp mbox: 6
I (2718) wifi_init: tcp tx win: 5760
I (2728) wifi_init: tcp rx win: 5760
I (2728) wifi_init: tcp mss: 1440
I (2728) wifi_init: WiFi/LWIP prefer SPIRAM
I (2738) wifi_init: WiFi IRAM OP enabled
I (2738) wifi_init: WiFi RX IRAM OP enabled
I (2738) WifiManager: Initialized
I (2748) WifiManager: Starting station
I (2748) phy_init: phy_version 711,97bcf0a2,Aug 25 2025,19:04:10
I (2798) wifi:mode : sta (30:ed:a0:aa:b2:78)
I (2798) wifi:enable tsf
I (2798) wifi:Set ps type: 0, coexist: 0
I (2798) wifi_portal: Wi-Fi STA stability policy: ps=none inactive=15s
I (3078) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (5208) WifiStation: Found AP: csy2, BSSID: 64:23:15:28:70:ac, RSSI: -74, Channel: 1, Authmode: 4
I (5218) wifi_portal: Connecting to "csy2"
W (5218) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2
I (5298) wifi:new:<1,0>, old:<1,0>, ap:<255,255>, sta:<1,0>, prof:1, snd_ch_cfg:0x0
I (5298) wifi:state: init -> auth (0xb0)
I (5308) wifi:state: auth -> assoc (0x0)
I (5318) wifi:state: assoc -> run (0x10)
I (5328) wifi:connected with csy2, aid = 13, channel 1, BW20, bssid = 64:23:15:28:70:ac
I (5328) wifi:security: WPA2-PSK, phy: bgn, rssi: -72, cipher(pairwise:0x3, group:0x1), pmf:0
I (5338) wifi:pm start, type: 0
I (5338) wifi:dp: 1, bi: 102400, li: 10, scale listen interval from 1024000 us to 1024000 us
I (5348) wifi:set rx beacon pti, rx_bcn_pti: 0, bcn_timeout: 25000, mt_pti: 0, mt_time: 10000
I (5418) wifi:AP's beacon interval = 102400 us, DTIM period = 1
I (6428) esp_netif_handlers: sta ip: 192.168.3.44, mask: 255.255.255.0, gw: 192.168.3.1
I (6428) WifiStation: Got IP: 192.168.3.44
I (6428) wifi_portal: Connected to "csy2"
I (6428) wifi:Set ps type: 0, coexist: 0
I (6428) wifi_portal: Wi-Fi STA stability policy: ps=none inactive=15s
I (6498) multimodal_audio: Downstream response begin: sample_rate=16000 frame=60ms codec_channels=1 pa_gpio=12 out_volume=60
I (6498) multimodal_audio: Downstream output primed: volume=60 warmup=320B channels=1
I (7998) multimodal_audio: Downstream playback completed after response end (queue_empty)
I (8128) voice_prompt: Prompt queued: /littlefs/audio_prompts/network_connect_success.opus packets=25 bytes=4678
I (8128) app_comp_boot: boot stage 11 runtime_workers event=control_plane_start_runtime_workers
I (8128) cp_rt_workers: Direction console disabled by configuration
I (8138) cp_rt_workers: LCD render worker already running
I (8138) cp_rt_workers: Wi-Fi state monitor task started
I (8148) platform_lan_http: Heap after_io_buffers: free_internal=182739 largest_internal=139264 largest_dma=139264 free_spiram=8157304 largest_spiram=8126464
I (8168) mdns_mem: mDNS task will be created from SPIRAM
I (8168) platform_lan_http: LAN user configuration available at http://192.168.3.44:80/ and http://tq-cat.local:80/
I (8178) cp_system_event: System event task started queue_len=32
I (8178) cp_key_input: Key input task started irq_queue_len=16 debounce=20ms long=800ms double=450ms
I (8178) cp_rt_workers: Daily fortune worker started
I (8178) app_comp_boot: boot stage 12 network_services event=started_by_runtime_workers_after_readiness
I (8208) main_task: Returned from app_main()
I (8228) multimodal_audio: Downstream idle mute after 250ms (response_active=0)
I (8398) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
W (8688) cp_key_input: PTT initial level is active; wait for next stable press before emitting press event
I (8688) cp_key_input: key config key=PTT gpio=15 active_level=0 pullup=1 pulldown=0 initial_level=0
I (8698) cp_key_input: key config key=SW2 gpio=45 active_level=0 pullup=1 pulldown=0 initial_level=1
I (9178) cp_mm_auth: Request device token: https://gz.api.talkingq.com/token/api/device/token
I (9178) cp_dev_auth: Auth state restored (state=READY jwt_valid=1 exp=1782549499 scope=0x0000000f kv=1 wait_factory=0 fail_count=0)
I (9278) cp_dev_auth: Loaded auth key material (key_version=1)
I (9278) cp_mm_auth: Heap before token POST: free_internal=162231 largest_internal=116736 largest_dma=116736 free_spiram=8150284
I (9368) wifi:<ba-add>idx:0 (ifx:0, 64:23:15:28:70:ac), tid:0, ssn:5, winSize:64
I (9488) esp-x509-crt-bundle: Certificate validated
I (9878) cp_mm_auth: Token fetched (workspace=llm-igyrxzdvbwja5gyt, app=6a0dabccd1514145baef5fe202793b09)
I (9878) multimodal_ws: WS ordered worker queue: ingress=512 stack=12288
I (9888) multimodal_ws: Heap before_ws_client_start: free_internal=161727 largest_internal=108544 largest_dma=108544 free_spiram=8128620 largest_spiram=7995392
I (9898) multimodal_ws: Smallest WebSocket stack candidate=8192
I (9898) multimodal_ws: Try WebSocket stack=8192 buf=2048 ping=20s pong_to=120s keepalive=1
I (9918) websocket_client: Started
I (9918) multimodal_ws: Heap after_ws_client_start: free_internal=144219 largest_internal=100352 largest_dma=100352 free_spiram=8128644 largest_spiram=7995392
I (9928) multimodal_ws: WebSocket starting: wss://dashscope.aliyuncs.com/api-ws/v1/inference
I (9938) cp_rt_workers: Multimodal client started
I (10098) esp-x509-crt-bundle: Certificate validated
I (10398) multimodal_ws: WebSocket connected
I (10398) multimodal_ws: Heap ws_connected: free_internal=142331 largest_internal=98304 largest_dma=98304 free_spiram=8128436 largest_spiram=7995392
I (10408) multimodal_audio: Downstream response begin: sample_rate=16000 frame=60ms codec_channels=1 pa_gpio=12 out_volume=60
I (10418) multimodal_audio: Downstream output primed: volume=60 warmup=320B channels=1
I (12338) multimodal_audio: Downstream playback completed after response end (queue_empty)
I (12468) voice_prompt: Prompt queued: /littlefs/audio_prompts/server_connect_success.opus packets=32 bytes=6174
I (12568) multimodal_audio: Downstream idle mute after 250ms (response_active=0)
I (13748) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (19028) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (20588) cp_key_input: gpio change key=PTT gpio=15 level=0
I (24108) cp_key_input: gpio change key=PTT gpio=15 level=0
I (24108) cp_key_input: gpio change key=PTT gpio=15 level=1
I (24308) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (29588) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (33618) cp_key_input: gpio change key=PTT gpio=15 level=0
I (33618) cp_key_input: emit key=PTT type=PRESSED gpio=15 level=0 duration=0ms clicks=0
I (33618) cp_system_event: dispatch family=KEY
I (33618) cp_system_event: key event key=PTT type=PRESSED gpio=15 level=0 duration=0ms clicks=0
I (33938) cp_mm_session: Start sent (upstream_mode=push2talk voice=longjielidou_v3 downstream_text=transcript,dialog downstream_rate_limit=3000B/s incremental=0 sample_rate=16000 frame=60ms bitrate=24kbps channels=1 pa_gpio=12)
I (34268) multimodal_audio: Heap before_uplink_start: free8=8269359 largest8=7995392 free_internal=142387 largest_internal=98304 largest_dma=98304 free_spiram=8126972 largest_spiram=7995392
I (34268) multimodal_audio: Heap after_uplink_start: free8=8269359 largest8=7995392 free_internal=142387 largest_internal=98304 largest_dma=98304 free_spiram=8126972 largest_spiram=7995392
I (34318) cp_mm_session: ASR started
I (34978) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (37208) cp_key_input: gpio change key=PTT gpio=15 level=1
I (37208) cp_key_input: emit key=PTT type=RELEASED gpio=15 level=1 duration=3593ms clicks=0
I (37208) cp_system_event: dispatch family=KEY
I (37218) cp_system_event: key event key=PTT type=RELEASED gpio=15 level=1 duration=3593ms clicks=0
I (37228) multimodal_audio: Heap after_uplink_stop: free8=8269211 largest8=7995392 free_internal=142259 largest_internal=98304 largest_dma=98304 free_spiram=8126952 largest_spiram=7995392
I (37398) cp_mm_session: ASR (final): 你好。
I (37398) multimodal_audio: Heap after_uplink_stop: free8=8267499 largest8=7995392 free_internal=141367 largest_internal=98304 largest_dma=98304 free_spiram=8126132 largest_spiram=7995392
I (37408) cp_mm_session: ASR ended
I (37408) multimodal_audio: Heap after_uplink_stop: free8=8268747 largest8=7995392 free_internal=141207 largest_internal=98304 largest_dma=98304 free_spiram=8127540 largest_spiram=7995392
I (37668) cp_key_input: emit key=PTT type=SHORT_PRESS gpio=15 level=1 duration=0ms clicks=1
I (37668) cp_system_event: dispatch family=KEY
I (37668) cp_system_event: key event key=PTT type=SHORT_PRESS gpio=15 level=1 duration=0ms clicks=1
I (38518) cp_mm_session: TTS (final): 喵~今天周六下午好呀,要不要查查今日财位,或者抽支签放松一下?本...
I (38628) multimodal_audio: Heap after_uplink_stop: free8=8268595 largest8=7995392 free_internal=141287 largest_internal=98304 largest_dma=98304 free_spiram=8127308 largest_spiram=7995392
I (38628) cp_mm_session: TTS responding started
I (38638) multimodal_audio: Downstream response begin: sample_rate=16000 frame=60ms codec_channels=1 pa_gpio=12 out_volume=60
I (38648) multimodal_audio: Downstream output primed: volume=60 warmup=320B channels=1
I (38698) multimodal_ws: WebSocket send text done (LocalRespondingStarted, realtime=1, bytes=217, elapsed_ms=10)
I (40198) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (45268) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (45308) cp_mm_session: TTS responding ended
I (47228) multimodal_audio: Downstream playback completed after response end (queue_empty)
I (47238) multimodal_ws: WebSocket send text done (LocalRespondingEnded, realtime=1, bytes=215, elapsed_ms=10)
I (47458) multimodal_audio: Downstream idle mute after 250ms (response_active=0)
I (50598) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (53828) cp_key_input: gpio change key=PTT gpio=15 level=0
I (53828) cp_key_input: emit key=PTT type=PRESSED gpio=15 level=0 duration=0ms clicks=0
I (53828) cp_system_event: dispatch family=KEY
I (53838) cp_system_event: key event key=PTT type=PRESSED gpio=15 level=0 duration=0ms clicks=0
I (54328) multimodal_audio: Heap before_uplink_start: free8=8258079 largest8=7995392 free_internal=141419 largest_internal=98304 largest_dma=98304 free_spiram=8119980 largest_spiram=7995392
I (54328) multimodal_audio: Heap after_uplink_start: free8=8261399 largest8=7995392 free_internal=141419 largest_internal=98304 I (54338) cp_mm_session: ASR started
largest_dma=98304 free_spiram=8119980 largest_spiram=7995392
I (55818) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (59368) multimodal_audio: Mic uplink sent: packets=84 bytes=15120 failures=0
I (59368) multimodal_audio: Mic uplink levels: raw_ch0(avg=12411 peak=32768) raw_ch1(avg=0 peak=0) uplink(avg=12411 peak=32768) codec_channels=1 map(MIC=ch0) queued=84/15120B drops=0
I (61288) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (64408) multimodal_audio: Mic uplink sent: packets=84 bytes=15120 failures=0
I (64408) multimodal_audio: Mic uplink levels: raw_ch0(avg=3591 peak=16140) raw_ch1(avg=0 peak=0) uplink(avg=3591 peak=16140) codec_channels=1 map(MIC=ch0) queued=84/15120B drops=0
E (65608) transport_ws: Error transport_poll_write(0)
E (65608) websocket_client: esp_transport_write() returned 0, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, errno=0
W (65618) multimodal_ws: WebSocket error
I (65628) multimodal_audio: Heap before_uplink_start: free8=8256651 largest8=7995392 free_internal=141259 largest_internal=98304 largest_dma=98304 free_spiram=8115392 largest_spiram=7995392
I (65638) multimodal_audio: Heap after_uplink_start: free8=8256651 largest8=7995392 free_internal=141259 largest_internal=98304 largest_dma=98304 free_spiram=8115392 largest_spiram=7995392
I (66568) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
W (67098) multimodal_audio: Mic uplink queue overflow: 1 old packets replaced
I (68238) cp_key_input: gpio change key=PTT gpio=15 level=1
I (68238) cp_key_input: emit key=PTT type=RELEASED gpio=15 level=1 duration=14409ms clicks=0
I (68238) cp_system_event: dispatch family=KEY
I (68248) cp_system_event: key event key=PTT type=RELEASED gpio=15 level=1 duration=14409ms clicks=0
I (68698) cp_key_input: emit key=PTT type=SHORT_PRESS gpio=15 level=1 duration=0ms clicks=1
I (71578) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
W (71618) multimodal_audio: Mic uplink stop timed out with 24 queued packet(s), in_flight=1
I (71618) multimodal_audio: Heap after_uplink_stop: free8=8257903 largest8=7995392 free_internal=141259 largest_internal=98304 largest_dma=98304 free_spiram=8116644 largest_spiram=7995392
I (71628) websocket_client: Reconnect after 2000 ms
I (71628) multimodal_ws: WebSocket disconnected
W (74258) multimodal_audio: Mic uplink stop timed out with 0 queued packet(s), in_flight=1
I (74258) multimodal_audio: Heap after_uplink_stop: free8=8265403 largest8=7995392 free_internal=144935 largest_internal=100352 largest_dma=100352 free_spiram=8120468 largest_spiram=7995392
I (74268) cp_system_event: dispatch family=KEY
I (74278) cp_system_event: key event key=PTT type=SHORT_PRESS gpio=15 level=1 duration=0ms clicks=1
I (76888) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
W (77638) multimodal_audio: Mic uplink stop timed out with 0 queued packet(s), in_flight=1
I (77638) multimodal_audio: Heap after_uplink_stop: free8=8265403 largest8=7995392 free_internal=144935 largest_internal=100352 largest_dma=100352 free_spiram=8120468 largest_spiram=7995392
W (77648) multimodal_ws: WebSocket send bin failed (0/180, errno=0)
I (77658) multimodal_audio: Mic uplink sent: packets=0 bytes=0 failures=1
W (77668) multimodal_audio: Mic uplink send failed: ESP_FAIL
I (77958) esp-x509-crt-bundle: Certificate validated
I (78438) multimodal_ws: WebSocket connected
I (78448) multimodal_ws: Heap ws_connected: free_internal=141363 largest_internal=98304 largest_dma=98304 free_spiram=8120184 largest_spiram=7995392
I (82168) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (87448) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (92728) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (98008) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (103288) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (108568) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (109268) control_plane_mm_rt: Idle multimodal transport timeout, stopping client after 30000 ms
I (109268) multimodal_audio: Heap after_uplink_stop: free8=8261403 largest8=7995392 free_internal=141419 largest_internal=98304 largest_dma=98304 free_spiram=8119984 largest_spiram=7995392
I (109278) multimodal_audio: Heap after_uplink_stop: free8=8261403 largest8=7995392 free_internal=141419 largest_internal=98304 largest_dma=98304 free_spiram=8119984 largest_spiram=7995392
I (110048) multimodal_ws: Heap after_ws_stop_cleanup: free_internal=161211 largest_internal=108544 largest_dma=108544 free_spiram=8142780 largest_spiram=7995392
I (113848) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
-126
View File
@@ -1,126 +0,0 @@
I (1933979) esp-x509-crt-bundle: Certificate validated
E (1934309) transport_ws: Sec-WebSocket-Accept not found
E (1934319) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1934319) multimodal_ws: WebSocket error
W (1934329) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1934339) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1934349) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1934369) websocket_client: Reconnect after 2000 ms
I (1934369) multimodal_ws: WebSocket disconnected
W (1934379) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1934389) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1934399) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1936609) esp-x509-crt-bundle: Certificate validated
I (1936779) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
E (1936949) transport_ws: Sec-WebSocket-Accept not found
E (1936949) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1936959) multimodal_ws: WebSocket error
W (1936959) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1936969) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1936989) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1936999) websocket_client: Reconnect after 2000 ms
I (1937009) multimodal_ws: WebSocket disconnected
W (1937009) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1937019) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1937039) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1939219) esp-x509-crt-bundle: Certificate validated
E (1939509) transport_ws: Sec-WebSocket-Accept not found
E (1939509) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1939509) multimodal_ws: WebSocket error
W (1939519) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1939529) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1939539) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1939559) websocket_client: Reconnect after 2000 ms
I (1939559) multimodal_ws: WebSocket disconnected
W (1939569) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1939579) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1939599) multimodal_audio: Heap after_uplink_stop: free8=8272195 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8129208 largest_spiram=7995392
I (1941799) esp-x509-crt-bundle: Certificate validated
I (1942059) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
E (1942129) transport_ws: Sec-WebSocket-Accept not found
E (1942129) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1942139) multimodal_ws: WebSocket error
W (1942139) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1942149) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1942169) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1942179) websocket_client: Reconnect after 2000 ms
I (1942189) multimodal_ws: WebSocket disconnected
W (1942189) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1942199) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1942219) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1944429) esp-x509-crt-bundle: Certificate validated
E (1944729) transport_ws: Sec-WebSocket-Accept not found
E (1944729) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1944739) multimodal_ws: WebSocket error
W (1944739) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1944749) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1944759) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1944779) websocket_client: Reconnect after 2000 ms
I (1944789) multimodal_ws: WebSocket disconnected
W (1944789) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1944799) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1944819) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1947129) esp-x509-crt-bundle: Certificate validated
I (1947339) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
E (1947589) transport_ws: Sec-WebSocket-Accept not found
E (1947589) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1947599) multimodal_ws: WebSocket error
W (1947599) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1947609) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1947629) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1947649) websocket_client: Reconnect after 2000 ms
I (1947649) multimodal_ws: WebSocket disconnected
W (1947649) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1947659) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1947679) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1950029) esp-x509-crt-bundle: Certificate validated
E (1950549) transport_ws: Sec-WebSocket-Accept not found
E (1950549) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1950559) multimodal_ws: WebSocket error
W (1950559) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1950569) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1950589) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1950609) websocket_client: Reconnect after 2000 ms
I (1950609) multimodal_ws: WebSocket disconnected
W (1950619) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1950619) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1950639) multimodal_audio: Heap after_uplink_stop: free8=8273975 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128868 largest_spiram=7995392
I (1952619) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (1952979) esp-x509-crt-bundle: Certificate validated
E (1953469) transport_ws: Sec-WebSocket-Accept not found
E (1953469) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1953469) multimodal_ws: WebSocket error
W (1953479) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1953489) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1953499) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1953519) websocket_client: Reconnect after 2000 ms
I (1953519) multimodal_ws: WebSocket disconnected
W (1953529) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1953539) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1953549) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1955929) esp-x509-crt-bundle: Certificate validated
E (1956379) transport_ws: Sec-WebSocket-Accept not found
E (1956379) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1956389) multimodal_ws: WebSocket error
W (1956389) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1956399) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1956419) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1956439) websocket_client: Reconnect after 2000 ms
I (1956439) multimodal_ws: WebSocket disconnected
W (1956439) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1956449) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1956469) multimodal_audio: Heap after_uplink_stop: free8=8273971 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128864 largest_spiram=7995392
I (1957899) lcd_direct: LCD asset sequence drawn asset=jichubiaoqing frames=3
I (1958769) esp-x509-crt-bundle: Certificate validated
E (1959239) transport_ws: Sec-WebSocket-Accept not found
E (1959239) websocket_client: esp_transport_connect() failed with -1, transport_error=ESP_OK, tls_error_code=0, tls_flags=0, esp_ws_handshake_status_code=401, errno=119
W (1959249) multimodal_ws: WebSocket error
W (1959249) cp_mm_session: Transport unavailable: reason=ws_error caller=transport_event_bridge
I (1959259) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1959279) multimodal_audio: Heap after_uplink_stop: free8=8270347 largest8=7995392 free_internal=141431 largest_internal=98304 largest_dma=98304 free_spiram=8128916 largest_spiram=7995392
I (1959289) websocket_client: Reconnect after 2000 ms
I (1959299) multimodal_ws: WebSocket disconnected
W (1959299) cp_mm_session: Transport unavailable: reason=ws_disconnected caller=transport_event_bridge
I (1959309) multimodal_audio: Heap after_uplink_stop: free8=8273979 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128872 largest_spiram=7995392
I (1959329) multimodal_audio: Heap after_uplink_stop: free8=8273979 largest8=7995392 free_internal=145107 largest_internal=98304 largest_dma=98304 free_spiram=8128872 largest_spiram=7995392
I (1961529) esp-x509-crt-bundle: Certificate validated
+27 -17
View File
@@ -218,9 +218,9 @@ menu "Example Configuration"
bool "Enable interrupt-driven key input task" bool "Enable interrupt-driven key input task"
default y default y
help help
Start the staged GPIO interrupt key input task for PTT and SW2. Start the staged GPIO interrupt key input task for PTT, SW1,
SW1 is reserved as the turntable limit switch and is not and SW2. SW1 remains the turntable calibration input and is
emitted as a normal key event. also reported for post-boot button diagnostics.
config TQ_KEY_INPUT_TASK_STACK config TQ_KEY_INPUT_TASK_STACK
int "Key input task stack size" int "Key input task stack size"
@@ -435,11 +435,12 @@ menu "Example Configuration"
config TQ_SLOT_SWITCH_GPIO config TQ_SLOT_SWITCH_GPIO
int "Slot feature switch GPIO" int "Slot feature switch GPIO"
default 13 default 6
range 0 48 range 0 48
help help
GPIO used for the slot machine feature switch. GPIO used for the rocker microswitch that triggers the slot
Default from docs/gpio-map.md (SW2 on IO13). machine feature. The new board reuses the unconnected TP_SCL
contact on IO6 for the original SW2 function.
config TQ_SLOT_SWITCH_ACTIVE_LEVEL config TQ_SLOT_SWITCH_ACTIVE_LEVEL
int "Slot feature switch active level" int "Slot feature switch active level"
@@ -447,7 +448,7 @@ menu "Example Configuration"
range 0 1 range 0 1
help help
Logic level that means the slot machine feature switch is active. Logic level that means the slot machine feature switch is active.
Default from docs/gpio-map.md (SW_2 is active-low). The rocker microswitch shorts IO6 to ground when pressed.
config TQ_SLOT_SWITCH_PULLUP config TQ_SLOT_SWITCH_PULLUP
bool "Enable slot feature switch pull-up" bool "Enable slot feature switch pull-up"
@@ -519,7 +520,8 @@ menu "Example Configuration"
default 12 default 12
range 0 48 range 0 48
help help
GPIO used for the turntable direction calibration switch. GPIO used for Button 1 on the SW1/IO12 net and for turntable
direction calibration.
config TQ_CALIBRATION_SWITCH_ACTIVE_LEVEL config TQ_CALIBRATION_SWITCH_ACTIVE_LEVEL
int "Direction calibration switch active level" int "Direction calibration switch active level"
@@ -767,6 +769,15 @@ menu "Example Configuration"
registered server-side. Leave disabled to use the static API key registered server-side. Leave disabled to use the static API key
/ bypass path. / bypass path.
config TQ_FACTORY_CLI_ENABLE
bool "Enable serial factory provisioning CLI"
depends on AUTH_V2_ENABLE
default y
help
Start the managed serial worker used by the factory tool for
device identity provisioning, public-key retrieval, and
on-device challenge signing.
config AUTH_REGISTER_BASE_URL config AUTH_REGISTER_BASE_URL
string "Auth V2 registration base URL" string "Auth V2 registration base URL"
depends on AUTH_V2_ENABLE depends on AUTH_V2_ENABLE
@@ -841,33 +852,32 @@ menu "Example Configuration"
config MULTIMODAL_PTT_BUTTON_GPIO config MULTIMODAL_PTT_BUTTON_GPIO
int "Push-to-talk button GPIO" int "Push-to-talk button GPIO"
default 3 default 13
range 0 48 range 0 48
help help
GPIO used for the push-to-talk button. GPIO used for the push-to-talk button.
Default from docs/gpio-map.md (TTP223 touch output on IO3). Default from docs/gpio-map.md (Button 2 on the SW2/IO13 net).
config MULTIMODAL_PTT_BUTTON_ACTIVE_LEVEL config MULTIMODAL_PTT_BUTTON_ACTIVE_LEVEL
int "Push-to-talk button active level" int "Push-to-talk button active level"
default 1 default 0
range 0 1 range 0 1
help help
Logic level that means the push-to-talk button is pressed. Logic level that means the push-to-talk button is pressed.
Default from docs/gpio-map.md (TTP223 output is active-high). Button 2 is active-low through the board pull-up.
config MULTIMODAL_PTT_BUTTON_PULLUP config MULTIMODAL_PTT_BUTTON_PULLUP
bool "Enable push-to-talk button pull-up" bool "Enable push-to-talk button pull-up"
default n default y
help help
The TTP223 provides a driven digital output, so no internal Enable the internal pull-up for the default active-low Button 2
pull-up is required on the default board. wiring in addition to the board pull-up.
config MULTIMODAL_PTT_BUTTON_PULLDOWN config MULTIMODAL_PTT_BUTTON_PULLDOWN
bool "Enable push-to-talk button pull-down" bool "Enable push-to-talk button pull-down"
default n default n
help help
The TTP223 provides a driven digital output, so no internal Leave disabled for the default active-low Button 2 wiring.
pull-down is required on the default board.
config MULTIMODAL_HEARTBEAT_INTERVAL_MS config MULTIMODAL_HEARTBEAT_INTERVAL_MS
int "Heartbeat interval (ms)" int "Heartbeat interval (ms)"
+5 -4
View File
@@ -121,10 +121,11 @@ CONFIG_ENABLE_MULTIMODAL_INTERACTION=y
# CONFIG_MULTIMODAL_USE_STATIC_CREDENTIALS is not set # CONFIG_MULTIMODAL_USE_STATIC_CREDENTIALS is not set
# CONFIG_MULTIMODAL_AUTH_BYPASS_TOKEN_SERVICE is not set # CONFIG_MULTIMODAL_AUTH_BYPASS_TOKEN_SERVICE is not set
CONFIG_AUTH_V2_ENABLE=y CONFIG_AUTH_V2_ENABLE=y
CONFIG_TQ_FACTORY_CLI_ENABLE=y
CONFIG_MULTIMODAL_UPSTREAM_MODE="push2talk" CONFIG_MULTIMODAL_UPSTREAM_MODE="push2talk"
CONFIG_MULTIMODAL_PTT_BUTTON_GPIO=3 CONFIG_MULTIMODAL_PTT_BUTTON_GPIO=13
CONFIG_MULTIMODAL_PTT_BUTTON_ACTIVE_LEVEL=1 CONFIG_MULTIMODAL_PTT_BUTTON_ACTIVE_LEVEL=0
# CONFIG_MULTIMODAL_PTT_BUTTON_PULLUP is not set CONFIG_MULTIMODAL_PTT_BUTTON_PULLUP=y
# CONFIG_MULTIMODAL_PTT_BUTTON_PULLDOWN is not set # CONFIG_MULTIMODAL_PTT_BUTTON_PULLDOWN is not set
# CONFIG_MULTIMODAL_AUDIO_CHANNEL_PROBE_ON_INIT is not set # CONFIG_MULTIMODAL_AUDIO_CHANNEL_PROBE_ON_INIT is not set
CONFIG_MULTIMODAL_HEARTBEAT_INTERVAL_MS=50000 CONFIG_MULTIMODAL_HEARTBEAT_INTERVAL_MS=50000
@@ -219,7 +220,7 @@ CONFIG_TQ_SCREEN_SPI_CS_GPIO=15
CONFIG_TQ_SCREEN_DC_GPIO=16 CONFIG_TQ_SCREEN_DC_GPIO=16
CONFIG_TQ_SCREEN_BACKLIGHT_GPIO=7 CONFIG_TQ_SCREEN_BACKLIGHT_GPIO=7
CONFIG_TQ_SCREEN_SPI_PIXEL_CLOCK_HZ=20000000 CONFIG_TQ_SCREEN_SPI_PIXEL_CLOCK_HZ=20000000
CONFIG_TQ_SLOT_SWITCH_GPIO=13 CONFIG_TQ_SLOT_SWITCH_GPIO=6
CONFIG_TQ_SLOT_SWITCH_ACTIVE_LEVEL=0 CONFIG_TQ_SLOT_SWITCH_ACTIVE_LEVEL=0
CONFIG_TQ_SLOT_SWITCH_PULLUP=y CONFIG_TQ_SLOT_SWITCH_PULLUP=y
# CONFIG_TQ_SLOT_SWITCH_PULLDOWN is not set # CONFIG_TQ_SLOT_SWITCH_PULLDOWN is not set