bringup and order sensors

This commit is contained in:
Thaddeus Hughes
2026-04-22 18:31:31 -05:00
parent a775999c87
commit 3774cde506
55 changed files with 184854 additions and 38 deletions

View File

@@ -0,0 +1,2 @@
14:52:22.629 == Flashing COM3 ==
14:52:22.631 erase_flash @ COM3

View File

@@ -0,0 +1,9 @@
14:54:20.812 == Flashing COM3 ==
14:54:20.814 erase_flash @ COM3
14:54:23.260 flashing from D:\SC\SC-F001\build
14:54:23.261 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
14:54:48.002 == Flash complete ==
14:54:49.503 Connecting to COM3 @ 115200 ...
14:54:49.507 -> BU.BEGIN
14:55:24.216 -> BU.FLASH
14:55:50.514 -> BU.END

View File

@@ -0,0 +1,8 @@
15:03:29.132 == Flashing COM3 ==
15:03:29.134 erase_flash @ COM3
15:03:32.409 flashing from D:\SC\SC-F001\build
15:03:32.410 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
15:03:57.500 == Flash complete ==
15:03:59.001 Connecting to COM3 @ 115200 ...
15:03:59.005 -> BU.BEGIN
15:06:09.840 -> BU.END

View File

@@ -0,0 +1,27 @@
15:08:35.387 == Flashing COM3 ==
15:08:35.388 erase_flash @ COM3
15:08:38.996 flashing from D:\SC\SC-F001\build
15:08:38.998 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
15:09:04.125 == Flash complete ==
15:09:05.626 Connecting to COM3 @ 115200 ...
15:09:05.631 -> BU.BEGIN
15:09:07.138 -> BU.BEGIN
15:09:08.643 -> BU.BEGIN
15:09:10.151 -> BU.BEGIN
15:09:11.659 -> BU.BEGIN
15:09:13.170 -> BU.BEGIN
15:09:14.679 -> BU.BEGIN
15:09:16.166 -> BU.BEGIN
15:09:17.668 -> BU.BEGIN
15:09:19.177 -> BU.BEGIN
15:09:20.683 -> BU.BEGIN
15:09:22.186 -> BU.BEGIN
15:09:23.708 -> BU.BEGIN
15:09:25.209 -> BU.BEGIN
15:09:26.712 -> BU.BEGIN
15:09:28.237 -> BU.BEGIN
15:09:29.729 -> BU.BEGIN
15:09:31.242 -> BU.BEGIN
15:09:32.729 -> BU.BEGIN
15:09:34.243 -> BU.BEGIN
15:52:17.070 -> BU.END

154154
BRINGUP_22APR2026_1552.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,26 @@
15:54:04.593 == Flashing COM3 ==
15:54:04.596 flashing from D:\SC\SC-F001\build
15:54:04.596 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
15:54:29.689 == Flash complete ==
15:54:31.190 Connecting to COM3 @ 115200 ...
15:54:31.194 -> BU.BEGIN
15:54:32.689 -> BU.BEGIN
15:54:34.195 -> BU.BEGIN
15:54:35.694 -> BU.BEGIN
15:54:37.184 -> BU.BEGIN
15:54:38.702 -> BU.BEGIN
15:54:40.202 -> BU.BEGIN
15:54:41.705 -> BU.BEGIN
15:54:43.205 -> BU.BEGIN
15:54:44.723 -> BU.BEGIN
15:54:46.221 -> BU.BEGIN
15:54:47.736 -> BU.BEGIN
15:54:49.243 -> BU.BEGIN
15:54:50.737 -> BU.BEGIN
15:54:52.244 -> BU.BEGIN
15:54:53.755 -> BU.BEGIN
15:54:55.253 -> BU.BEGIN
15:54:56.748 -> BU.BEGIN
15:54:58.262 -> BU.BEGIN
15:54:59.769 -> BU.BEGIN
15:55:09.125 -> BU.END

BIN
BRINGUP_22APR2026_1557.txt Normal file

Binary file not shown.

3081
BRINGUP_22APR2026_1616.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
BRINGUP_22APR2026_1638.txt Normal file

Binary file not shown.

565
BRINGUP_22APR2026_1640.txt Normal file
View File

@@ -0,0 +1,565 @@
16:40:50.654 Connecting to COM3 @ 115200 ...
16:40:50.659 -> BU.BEGIN
16:40:50.660 <-
16:40:50.660 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.661 <-
16:40:50.661 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.661 <-
16:40:50.661 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.662 <-
16:40:50.662 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.663 <-
16:40:50.664 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.664 <-
16:40:50.664 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.664 <-
16:40:50.664 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.676 <-
16:40:50.676 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.676 <-
16:40:50.677 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.678 <-
16:40:50.678 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.679 <-
16:40:50.679 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.680 <-
16:40:50.680 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.680 <-
16:40:50.680 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.681 <-
16:40:50.682 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.682 <-
16:40:50.682 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.682 <-
16:40:50.682 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.683 <-
16:40:50.683 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.684 <-
16:40:50.684 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.685 <-
16:40:50.685 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.686 <-
16:40:50.686 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.688 <-
16:40:50.688 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.689 <-
16:40:50.689 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.690 <-
16:40:50.691 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.692 <-
16:40:50.692 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.693 <-
16:40:50.693 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.694 <-
16:40:50.694 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.694 <-
16:40:50.695 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.695 <-
16:40:50.695 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.695 <-
16:40:50.696 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.697 <-
16:40:50.697 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.697 <-
16:40:50.697 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.698 <-
16:40:50.698 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.699 <-
16:40:50.699 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.699 <-
16:40:50.699 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.700 <-
16:40:50.700 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.701 <-
16:40:50.701 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.701 <-
16:40:50.701 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.702 <-
16:40:50.702 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.703 <-
16:40:50.703 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.706 <-
16:40:50.706 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.707 <-
16:40:50.708 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.708 <-
16:40:50.708 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.709 <-
16:40:50.709 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.709 <-
16:40:50.709 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.710 <-
16:40:50.711 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.711 <-
16:40:50.711 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.712 <-
16:40:50.712 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.712 <-
16:40:50.712 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.713 <-
16:40:50.713 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.713 <-
16:40:50.714 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.714 <-
16:40:50.714 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.715 <-
16:40:50.715 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.715 <-
16:40:50.715 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.716 <-
16:40:50.717 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.717 <-
16:40:50.717 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.717 <-
16:40:50.718 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.718 <-
16:40:50.718 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.719 <-
16:40:50.719 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.721 <-
16:40:50.722 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.723 <-
16:40:50.723 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.724 <-
16:40:50.724 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.725 <-
16:40:50.725 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.725 <-
16:40:50.726 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.726 <-
16:40:50.726 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.727 <-
16:40:50.727 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.728 <-
16:40:50.728 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.728 <-
16:40:50.728 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.729 <-
16:40:50.730 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.730 <-
16:40:50.730 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.731 <-
16:40:50.731 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.731 <-
16:40:50.731 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.732 <-
16:40:50.732 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.732 <-
16:40:50.733 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.733 <-
16:40:50.733 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.733 <-
16:40:50.733 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.734 <-
16:40:50.734 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.734 <-
16:40:50.735 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.736 <-
16:40:50.736 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.737 <-
16:40:50.737 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.739 <-
16:40:50.739 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.739 <-
16:40:50.740 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.740 <-
16:40:50.740 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.741 <-
16:40:50.741 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.742 <-
16:40:50.742 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.742 <-
16:40:50.742 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.743 <-
16:40:50.744 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.744 <-
16:40:50.744 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.744 <-
16:40:50.744 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.745 <-
16:40:50.745 <- E rmt: hw buffer too small, received symbols truncated
16:40:50.746 <-
16:40:51.249 <- E rmt: hw buffer too small, received symbols truncated
16:40:51.249 <- BU.BEGIN
16:40:51.251 <-
16:40:51.251 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
16:40:51.254 -> BU.INFO
16:40:51.254 <- E rmt: hw buffer too small, received symbols truncated
16:40:51.254 <- E rmt: hw buffer too small, received symbols truncated
16:40:51.763 <- BU.OK info reset=SW heap=68572 min_heap=68072 fw=a775999-dirty build=2026-04-22 21:25:54
16:40:53.500 -> BU.FLASH
16:40:53.500 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.500 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.501 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.501 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.501 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.501 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- I (24479) BT_HID: Found 0 HID device(s)
16:40:53.502 <- I (24479) BT_HID: No HID devices found, retrying in 2000ms...
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.502 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.503 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.503 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.503 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.503 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.503 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.527 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.527 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.527 <- E rmt: hw buffer too small, received symbols truncated
16:40:53.527 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.028 <- BU.OK flash post_part=roundtrip log_head=131 log_tail=0 partitions_size=4128768
16:40:54.796 -> BU.I2C
16:40:54.796 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.796 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.796 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.820 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.820 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.820 <- E rmt: hw buffer too small, received symbols truncated
16:40:54.820 <- I (26479) BT_HID: Scanning for HID devices (3s)...
16:40:55.300 <- I (26849) I2C: POST: TCA9555 OK (port0=0x01E3)
16:40:55.300 <- BU.OK i2c tca9555=ack
16:40:55.303 -> BU.LED 0
16:40:55.303 <- E rmt: hw buffer too small, received symbols truncated
16:40:55.303 <- E rmt: hw buffer too small, received symbols truncated
16:40:55.303 <- E rmt: hw buffer too small, received symbols truncated
16:40:55.820 <- E rmt: hw buffer too small, received symbols truncated
16:40:55.820 <- BU.OK led mask=0
16:40:56.070 -> BU.LED 1
16:40:56.316 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.316 <- BU.OK led mask=1
16:40:56.567 -> BU.LED 3
16:40:56.567 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.567 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.567 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.659 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.659 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.659 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.659 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.659 <- BU.OK led mask=3
16:40:56.910 -> BU.LED 7
16:40:56.929 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.930 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.930 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.930 <- E rmt: hw buffer too small, received symbols truncated
16:40:56.930 <- BU.OK led mask=7
16:40:57.180 -> BU.LED 6
16:40:57.296 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.296 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.296 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.296 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.296 <- BU.OK led mask=6
16:40:57.547 -> BU.LED 4
16:40:57.547 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.547 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.547 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.547 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.547 <- I (29489) BT_HID: Found 0 HID device(s)
16:40:57.884 <- I (29489) BT_HID: No HID devices found, retrying in 2000ms...
16:40:57.884 <- E rmt: hw buffer too small, received symbols truncated
16:40:57.884 <- BU.OK led mask=4
16:40:58.134 -> BU.LED 0
16:40:58.134 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.134 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.556 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.556 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.556 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.556 <- E rmt: hw buffer too small, received symbols truncated
16:40:58.556 <- BU.OK led mask=0
16:40:58.807 -> BU.LED 1
16:40:59.313 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.313 <- BU.OK led mask=1
16:40:59.564 -> BU.LED 3
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.564 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.565 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.565 <- I (31489) BT_HID: Scanning for HID devices (3s)...
16:40:59.932 <- E rmt: hw buffer too small, received symbols truncated
16:40:59.932 <- BU.OK led mask=3
16:41:00.183 -> BU.LED 7
16:41:00.183 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.183 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.183 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.690 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.690 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.690 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.690 <- E rmt: hw buffer too small, received symbols truncated
16:41:00.690 <- BU.OK led mask=7
16:41:00.941 -> BU.LED 6
16:41:01.255 <- BU.OK led mask=6
16:41:01.506 -> BU.LED 4
16:41:01.506 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.506 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.506 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.506 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.507 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.507 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.507 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.507 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.849 <- E rmt: hw buffer too small, received symbols truncated
16:41:01.849 <- BU.OK led mask=4
16:41:02.100 -> BU.LED 0
16:41:02.100 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.100 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.100 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.100 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.476 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.476 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.476 <- E rmt: hw buffer too small, received symbols truncated
16:41:02.476 <- BU.OK led mask=0
16:41:02.727 -> BU.LED 1
16:41:02.727 <- I (34499) BT_HID: Found 0 HID device(s)
16:41:03.105 <- I (34499) BT_HID: No HID devices found, retrying in 2000ms...
16:41:03.105 <- BU.OK led mask=1
16:41:03.356 -> BU.LED 3
16:41:03.356 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.356 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.356 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.363 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.363 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.363 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.363 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.697 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.697 <- BU.OK led mask=3
16:41:03.948 -> BU.LED 7
16:41:03.948 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.948 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.948 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.948 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.948 <- E rmt: hw buffer too small, received symbols truncated
16:41:03.949 <- E rmt: hw buffer too small, received symbols truncated

367
BRINGUP_22APR2026_1713.txt Normal file
View File

@@ -0,0 +1,367 @@
17:13:09.734 == Flashing COM3 ==
17:13:09.736 flashing from D:\SC\SC-F001\build
17:13:09.737 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
17:13:34.882 == Flash complete ==
17:13:36.383 Connecting to COM3 @ 115200 ...
17:13:36.389 -> BU.BEGIN
17:13:36.895 <- BU.BEGIN
17:13:36.895 <-
17:13:36.895 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
17:13:36.897 -> BU.INFO
17:13:36.897 <- E rmt: hw buffer too small, received symbols truncated
17:13:36.897 <- E rmt: hw buffer too small, received symbols truncated
17:13:36.897 <- E rmt: hw buffer too small, received symbols truncated
17:13:37.412 <- BU.OK info reset=POWERON heap=68276 min_heap=67772 fw=a775999-dirty build=2026-04-22 21:25:54
17:13:50.053 -> BU.FLASH
17:13:50.053 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.054 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.054 <- I (4419) BT_HID: Found 0 HID device(s)
17:13:50.054 <- I (4419) BT_HID: No HID devices found, retrying in 2000ms...
17:13:50.054 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.055 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.055 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.055 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.055 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- I (6419) BT_HID: Scanning for HID devices (3s)...
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.056 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.057 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.057 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.057 <- I (9429) BT_HID: Found 0 HID device(s)
17:13:50.057 <- I (9429) BT_HID: No HID devices found, retrying in 2000ms...
17:13:50.057 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- I (11429) BT_HID: Scanning for HID devices (3s)...
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.058 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.059 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.059 <- I (14439) BT_HID: Found 0 HID device(s)
17:13:50.059 <- I (14439) BT_HID: No HID devices found, retrying in 2000ms...
17:13:50.059 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.085 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.085 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.085 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.086 <- E rmt: hw buffer too small, received symbols truncated
17:13:50.593 <- BU.OK flash post_part=roundtrip log_head=164 log_tail=0 partitions_size=4128768
17:13:52.197 -> BU.I2C
17:13:52.198 <- E rmt: hw buffer too small, received symbols truncated
17:13:52.198 <- E rmt: hw buffer too small, received symbols truncated
17:13:52.709 <- I (16439) BT_HID: Scanning for HID devices (3s)...
17:13:52.709 <- E rmt: hw buffer too small, received symbols truncated
17:13:52.709 <- I (17459) I2C: POST: TCA9555 OK (port0=0x0123)
17:13:52.709 <- BU.OK i2c tca9555=ack
17:13:52.710 -> BU.LED 0
17:13:53.226 <- BU.OK led mask=0
17:13:53.477 -> BU.LED 1
17:13:53.477 <- E rmt: hw buffer too small, received symbols truncated
17:13:53.983 <- E rmt: hw buffer too small, received symbols truncated
17:13:53.983 <- E rmt: hw buffer too small, received symbols truncated
17:13:53.983 <- BU.OK led mask=1
17:13:54.233 -> BU.LED 3
17:13:54.233 <- E rmt: hw buffer too small, received symbols truncated
17:13:54.439 <- E rmt: hw buffer too small, received symbols truncated
17:13:54.439 <- I (19449) BT_HID: Found 0 HID device(s)
17:13:54.439 <- I (19449) BT_HID: No HID devices found, retrying in 2000ms...
17:13:54.439 <- BU.OK led mask=3
17:13:54.690 -> BU.LED 7
17:13:54.690 <- E rmt: hw buffer too small, received symbols truncated
17:13:55.193 <- E rmt: hw buffer too small, received symbols truncated
17:13:55.193 <- BU.OK led mask=7
17:13:55.444 -> BU.LED 6
17:13:55.444 <- E rmt: hw buffer too small, received symbols truncated
17:13:55.959 <- BU.OK led mask=6
17:13:56.209 -> BU.LED 4
17:13:56.209 <- E rmt: hw buffer too small, received symbols truncated
17:13:56.535 <- E rmt: hw buffer too small, received symbols truncated
17:13:56.536 <- E rmt: hw buffer too small, received symbols truncated
17:13:56.536 <- E rmt: hw buffer too small, received symbols truncated
17:13:56.536 <- I (21449) BT_HID: Scanning for HID devices (3s)...
17:13:56.536 <- BU.OK led mask=4
17:13:56.787 -> BU.LED 0
17:13:57.251 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.251 <- BU.OK led mask=0
17:13:57.502 -> BU.LED 1
17:13:57.502 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.502 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.502 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.984 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.984 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.984 <- E rmt: hw buffer too small, received symbols truncated
17:13:57.984 <- BU.OK led mask=1
17:13:58.234 -> BU.LED 3
17:13:58.234 <- E rmt: hw buffer too small, received symbols truncated
17:13:58.744 <- E rmt: hw buffer too small, received symbols truncated
17:13:58.744 <- BU.OK led mask=3
17:13:58.994 -> BU.LED 7
17:13:59.509 <- BU.OK led mask=7
17:13:59.760 -> BU.LED 6
17:13:59.760 <- I (24459) BT_HID: Found 0 HID device(s)
17:13:59.760 <- I (24459) BT_HID: No HID devices found, retrying in 2000ms...
17:14:00.261 <- E rmt: hw buffer too small, received symbols truncated
17:14:00.261 <- E rmt: hw buffer too small, received symbols truncated
17:14:00.261 <- BU.OK led mask=6
17:14:00.512 -> BU.LED 4
17:14:00.512 <- E rmt: hw buffer too small, received symbols truncated
17:14:01.014 <- BU.OK led mask=4
17:14:01.264 -> BU.LED 0
17:14:01.465 <- E rmt: hw buffer too small, received symbols truncated
17:14:01.465 <- E rmt: hw buffer too small, received symbols truncated
17:14:01.465 <- I (26459) BT_HID: Scanning for HID devices (3s)...
17:14:01.465 <- BU.OK led mask=0
17:14:01.716 -> BU.LED 1
17:14:01.716 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.084 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.084 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.084 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.084 <- BU.OK led mask=1
17:14:02.335 -> BU.LED 3
17:14:02.335 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.849 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.849 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.849 <- E rmt: hw buffer too small, received symbols truncated
17:14:02.849 <- BU.OK led mask=3
17:14:03.099 -> BU.LED 7
17:14:03.099 <- E rmt: hw buffer too small, received symbols truncated
17:14:03.602 <- BU.OK led mask=7
17:14:03.852 -> BU.LED 6
17:14:03.852 <- E rmt: hw buffer too small, received symbols truncated
17:14:03.852 <- E rmt: hw buffer too small, received symbols truncated
17:14:04.237 <- E rmt: hw buffer too small, received symbols truncated
17:14:04.237 <- E rmt: hw buffer too small, received symbols truncated
17:14:04.237 <- BU.OK led mask=6
17:14:04.489 -> BU.LED 4
17:14:04.489 <- I (29469) BT_HID: Found 0 HID device(s)
17:14:04.489 <- I (29469) BT_HID: No HID devices found, retrying in 2000ms...
17:14:04.839 <- E rmt: hw buffer too small, received symbols truncated
17:14:04.839 <- BU.OK led mask=4
17:14:05.090 -> BU.LED 0
17:14:05.090 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.090 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.090 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.596 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.596 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.596 <- BU.OK led mask=0
17:14:05.847 -> BU.LED 1
17:14:05.847 <- E rmt: hw buffer too small, received symbols truncated
17:14:05.847 <- E rmt: hw buffer too small, received symbols truncated
17:14:06.360 <- E rmt: hw buffer too small, received symbols truncated
17:14:06.360 <- E rmt: hw buffer too small, received symbols truncated
17:14:06.360 <- BU.OK led mask=1
17:14:06.612 -> BU.LED 3
17:14:06.612 <- E rmt: hw buffer too small, received symbols truncated
17:14:06.612 <- I (31469) BT_HID: Scanning for HID devices (3s)...
17:14:07.125 <- BU.OK led mask=3
17:14:07.376 -> BU.LED 7
17:14:07.878 <- BU.OK led mask=7
17:14:08.128 -> BU.LED 0
17:14:08.128 <- E rmt: hw buffer too small, received symbols truncated
17:14:08.623 <- E rmt: hw buffer too small, received symbols truncated
17:14:08.623 <- E rmt: hw buffer too small, received symbols truncated
17:14:08.623 <- BU.OK led mask=0
17:14:12.509 -> BU.ADC
17:14:12.510 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.510 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.510 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.511 <- I (34479) BT_HID: Found 0 HID device(s)
17:14:12.511 <- I (34479) BT_HID: No HID devices found, retrying in 2000ms...
17:14:12.511 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.512 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.512 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.512 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.512 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.513 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.514 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.514 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.514 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.514 <- E rmt: hw buffer too small, received symbols truncated
17:14:12.514 <- E rmt: hw buffer too small, received symbols truncated

375
BRINGUP_22APR2026_1718.txt Normal file
View File

@@ -0,0 +1,375 @@
17:18:21.245 Connecting to COM3 @ 115200 ...
17:18:21.251 -> BU.BEGIN
17:18:21.252 <- symbols truncated
17:18:21.252 <- E rmt: hsbu<62>symbols truncated
17:18:21.253 <- E rmt: hsbu<62>symbols truncated
17:18:21.254 <- E rmt: hsbu<62>symbols truncated
17:18:21.255 <- E rmt: hsbu<62>symbols truncated
17:18:21.255 <- E rmt: hsbu<62>symbols truncated
17:18:21.258 <- E rmt: hsbu<62>symbols truncated
17:18:21.258 <- E rmt: hsbu<62>symbols truncated
17:18:21.260 <- E rmt: hsbu<62>symbols truncated
17:18:21.260 <- E rmt: hsbu<62>symbols truncated
17:18:21.261 <- E rmt: hsbu<62>symbols truncated
17:18:21.262 <- E rmt: hsbu<62>symbols truncated
17:18:21.263 <- E rmt: hsbu<62>symbols truncated
17:18:21.275 <- E rmt: hsbu<62>symbols truncated
17:18:21.275 <- E rmt: hsbu<62>symbols truncated
17:18:21.276 <- E rmt: hsbu<62>symbols truncated
17:18:21.278 <- E rmt: hsbu<62>symbols truncated
17:18:21.278 <- E rmt: hsbu<62>symbols truncated
17:18:21.278 <- E rmt: hsbu<62>symbols truncated
17:18:21.279 <- E rmt: hsbu<62>symbols truncated
17:18:21.280 <- E rmt: hsbu<62>symbols truncated
17:18:21.280 <- E rmt: hsbu<62>symbols truncated
17:18:21.281 <- E rmt: hsbu<62>symbols truncated
17:18:21.282 <- E rmt: hsbu<62>symbols truncated
17:18:21.283 <- E rmt: hsbu<62>symbols truncated
17:18:21.283 <- E rmt: hsbu<62>symbols truncated
17:18:21.285 <- E rmt: hsbu<62>symbols truncated
17:18:21.286 <- E rmt: hsbu<62>symbols truncated
17:18:21.288 <- E rmt: hsbu<62>symbols truncated
17:18:21.289 <- E rmt: hsbu<62>symbols truncated
17:18:21.290 <- E rmt: hsbu<62>symbols truncated
17:18:21.291 <- E rmt: hsbu<62>symbols truncated
17:18:21.292 <- E rmt: hsbu<62>symbols truncated
17:18:21.409 <- E rmt: hsbu<62>symbols truncated
17:18:21.409 <- E rmt: hsbu<62>symbols truncated
17:18:21.410 <- E rmt: hsbu<62>symbols truncated
17:18:21.412 <- E rmt: hsbu<62>ɲ<EFBFBD><C9B2><EFBFBD> small, received symbols truncated
17:18:21.413 <- BU.BEGIN
17:18:21.413 <-
17:18:21.413 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
17:18:21.414 -> BU.INFO
17:18:21.414 <- E rmt: hw buffer too small, received symbols truncated
17:18:21.637 <- E rmt: hw buffer too small, received symbols truncated
17:18:21.637 <- BU.OK info reset=SW heap=84048 min_heap=67828 fw=a775999-dirty build=2026-04-22 21:25:54
17:18:23.380 -> BU.FLASH
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.381 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.382 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.382 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.382 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.382 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.382 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.383 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.384 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.384 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.384 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.384 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.434 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.434 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.434 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.434 <- E rmt: hw buffer too small, received symbols truncated
17:18:23.434 <- BU.OK flash post_part=roundtrip log_head=175 log_tail=0 partitions_size=4128768
17:18:27.978 -> BU.SENSORS.WATCH 0
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.979 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.980 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.980 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.980 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.980 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.981 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.982 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.982 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.982 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.982 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.982 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.983 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.983 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.983 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.983 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.983 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.984 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.984 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.984 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.984 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.985 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.986 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.986 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.986 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.986 <- E rmt: hw buffer too small, received symbols truncated
17:18:27.986 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.033 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.033 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.033 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.033 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.457 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.457 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.457 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.457 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.457 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.973 <- E rmt: hw buffer too small, received symbols truncated
17:18:28.973 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.485 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.485 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.885 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.885 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.885 <- E rmt: hw buffer too small, received symbols truncated
17:18:29.885 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.395 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.395 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.395 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.395 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.395 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.910 <- E rmt: hw buffer too small, received symbols truncated
17:18:30.910 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.405 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.405 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.405 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.405 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.911 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.911 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.911 <- E rmt: hw buffer too small, received symbols truncated
17:18:31.911 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.414 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.414 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.414 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.753 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.753 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.753 <- E rmt: hw buffer too small, received symbols truncated
17:18:32.753 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.082 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.082 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.082 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.082 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.082 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.228 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.228 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.228 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.228 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.741 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.741 <- BU.EVENT sensor name=SAFETY edge=make t=12.01
17:18:33.741 <- BU.EVENT sensor name=SAFETY edge=break t=12.19
17:18:33.742 <- E rmt: hw buffer too small, received symbols truncated
17:18:33.742 <- BU.EVENT sensor name=SAFETY edge=make t=12.40
17:18:34.199 <- BU.EVENT sensor name=SAFETY edge=break t=12.52
17:18:34.199 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.200 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.200 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.707 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.707 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.707 <- E rmt: hw buffer too small, received symbols truncated
17:18:34.893 ->
17:18:35.222 <- BU.OK sensors.watch sec=-1 SAFETY=both DRIVE=none JACK=none AUX=none
17:18:39.477 -> BU.RELAY SENSORS ON 200
17:18:39.478 <- E rmt: hw buffer too small, received symbols truncated

3171
BRINGUP_22APR2026_1719.txt Normal file

File diff suppressed because it is too large Load Diff

17646
BRINGUP_22APR2026_1725.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
BRINGUP_22APR2026_1730.txt Normal file

Binary file not shown.

BIN
BRINGUP_22APR2026_1742.txt Normal file

Binary file not shown.

BIN
BRINGUP_22APR2026_1747.txt Normal file

Binary file not shown.

BIN
BRINGUP_22APR2026_1800.txt Normal file

Binary file not shown.

460
BRINGUP_22APR2026_1806.txt Normal file
View File

@@ -0,0 +1,460 @@
18:06:05.925 == Flashing COM3 ==
18:06:05.927 flashing from D:\SC\SC-F001\build
18:06:05.928 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
18:06:30.772 == Flash complete ==
18:06:32.274 Connecting to COM3 @ 115200 ...
18:06:32.279 -> BU.BEGIN
18:06:32.473 <- BU.BEGIN
18:06:32.473 <-
18:06:32.473 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
18:06:32.474 -> BU.INFO
18:06:32.475 <- I (1699) SENS: SAFETY BREAK - Relays disabled
18:06:32.475 <- I (1809) BT_HID: Scanning for HID devices (3s)...
18:06:32.475 <- I (1809) BT_HID: BLE HID host initialised
18:06:32.492 <- I (1809) WEBSERVER: Initializing webserver...
18:06:32.492 <- I (1809) WEBSERVER: AP LAUNCHING
18:06:32.492 <- I (1829) wifi:wifi driver task: 3ffe2828, prio:23, stack:6656, core=0
18:06:32.492 <- I (1829) wifi:wifi firmware version: ccaebfa
18:06:32.492 <- I (1829) wifi:wifi certification version: v7.0
18:06:32.514 <- I (1829) wifi:config NVS flash: enabled
18:06:32.514 <- I (1829) wifi:config nano formating: disabled
18:06:32.514 <- I (1839) wifi:Init data frame dynamic rx buffer num: 32
18:06:32.514 <- I (1839) wifi:Init static rx mgmt buffer num: 5
18:06:32.540 <- I (1849) wifi:BU.OK info reset=POWERON heap=111764 min_heap=111764 fw=a775999-dirty build=2026-04-22 21:25:54
18:06:32.541 <- Init management short buffer num: 32
18:06:32.541 <- I (1859) wifi:Init dynamic tx buffer num: 32
18:06:32.541 <- I (1859) wifi:Init static rx buffer size: 1600
18:06:32.541 <- I (1869) wifi:Init static rx buffer num: 10
18:06:32.562 <- I (1869) wifi:Init dynamic rx buffer num: 32
18:06:32.562 <- I (1879) wifi_init: rx ba win: 6
18:06:32.562 <- I (1879) wifi_init: accept mbox: 6
18:06:32.562 <- I (1879) wifi_init: tcpip mbox: 32
18:06:32.562 <- I (1889) wifi_init: udp mbox: 6
18:06:32.562 <- I (1889) wifi_init: tcp mbox: 6
18:06:32.861 <- I (1889) wifi_init: tcp tx win: 5760
18:06:32.861 <- I (1899) wifi_init: tcp rx win: 5760
18:06:32.861 <- I (1899) wifi_init: tcp mss: 1440
18:06:32.861 <- I (2189) wifi:mode : softAP (80:f3:da:65:25:f9)
18:06:32.861 <- I (2199) wifi:Total power save buffer number: 16
18:06:32.882 <- I (2199) wifi:Init max length of beacon: 752/752
18:06:32.882 <- I (2199) wifi:Init max length of beacon: 752/752
18:06:32.882 <- I (2209) esp_netif_lwip: DHCP server started on interface WIFI_AP_DEF with IP: 192.168.4.1
18:06:32.882 <- I (2209) DNS_SERVER: DNS server started on port 53
18:06:32.903 <- I (2219) mdns_mem: mDNS task will be created from internal RAM
18:06:32.903 <- I (2219) WEBSERVER: SoftAP ready. SSID: sc.local, Channel: 6, Password: password
18:06:32.904 <- I (2229) WEBSERVER: Access at: http://sc.local.local or http://192.168.4.1
18:06:32.925 <- I (2239) WEBSERVER: STARTING HTTP
18:06:32.925 <- I (2249) WEBSERVER: HTTP server started successfully
18:06:32.925 <- I (2249) WEBSERVER: Registered URI handler: /
18:06:32.925 <- I (2249) WEBSERVER: Registered URI handler: /get
18:06:33.431 <- I (2259) WEBSERVER: Registered URI handler: /post
18:06:33.431 <- I (2259) WEBSERVER: Registered URI handler: /log
18:06:33.431 <- I (2269) WEBSERVER: Registered URI handler: /ota
18:06:33.431 <- I (2269) WEBSERVER: Registered URI handler: /*
18:06:33.431 <- I (2279) WEBSERVER: Webserver initialization complete
18:06:35.470 <- E rmt: hw buffer too small, received symbols truncated
18:06:35.976 <- I (4819) BT_HID: Found 0 HID device(s)
18:06:35.976 <- I (4819) BT_HID: No HID devices found, retrying in 2000ms...
18:06:36.482 <- E rmt: hw buffer too small, received symbols truncated
18:06:45.048 -> BU.BEGIN
18:06:45.049 <- I (6819) BT_HID: Scanning for HID devices (3s)...
18:06:45.049 <- E rmt: hw buffer too small, received symbols truncated
18:06:45.050 <- I (9829) BT_HID: Found 0 HID device(s)
18:06:45.052 <- I (9829) BT_HID: No HID devices found, retrying in 2000ms...
18:06:45.492 <- E rmt: hw buffer too small, received symbols truncated
18:06:45.492 <- I (11829) BT_HID: Scanning for HID devices (3s)...
18:06:45.493 <- E rmt: hw buffer too small, received symbols truncated
18:06:45.496 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
18:06:45.496 -> BU.INFO
18:06:45.997 <- I (14839) BT_HID: Found 0 HID device(s)
18:06:45.997 <- I (14839) BT_HID: No HID devices found, retrying in 2000ms...
18:06:45.997 <- BU.OK info reset=POWERON heap=68372 min_heap=67540 fw=a775999-dirty build=2026-04-22 21:25:54
18:06:49.092 -> BU.FLASH
18:06:49.120 <- E rmt: hw buffer too small, received symbols truncated
18:06:49.120 <- E rmt: hw buffer too small, received symbols truncated
18:06:49.120 <- I (16839) BT_HID: Scanning for HID devices (3s)...
18:06:49.120 <- E rmt: hw buffer too small, received symbols truncated
18:06:49.622 <- BU.OK flash post_part=roundtrip log_head=11 log_tail=0 partitions_size=4128768
18:06:51.076 -> BU.I2C
18:06:51.589 <- I (19849) BT_HID: Found 0 HID device(s)
18:06:51.589 <- I (19849) BT_HID: No HID devices found, retrying in 2000ms...
18:06:51.589 <- I (20449) I2C: POST: TCA9555 OK (port0=0x0123)
18:06:51.589 <- BU.OK i2c tca9555=ack
18:06:51.590 -> BU.LED 0
18:06:52.091 <- BU.OK led mask=0
18:06:52.344 -> BU.LED 1
18:06:52.845 <- BU.OK led mask=1
18:06:53.098 -> BU.LED 3
18:06:53.098 <- I (21849) BT_HID: Scanning for HID devices (3s)...
18:06:53.098 <- E rmt: hw buffer too small, received symbols truncated
18:06:53.599 <- BU.OK led mask=3
18:06:53.850 -> BU.LED 7
18:06:54.353 <- BU.OK led mask=7
18:06:54.604 -> BU.LED 6
18:06:55.117 <- BU.OK led mask=6
18:06:55.117 -> BU.LED 0
18:06:55.633 <- BU.OK led mask=0
18:06:57.108 -> BU.ADC
18:06:57.108 <- I (24859) BT_HID: Found 0 HID device(s)
18:06:57.108 <- I (24859) BT_HID: No HID devices found, retrying in 2000ms...
18:06:57.613 <- E rmt: hw buffer too small, received symbols truncated
18:06:57.613 <- BU.OK adc bat_mv=1642 bat_V=13.003 isens_mv=1666 isens_A=-1.21 voc_mv=3150 fault=1
18:07:01.579 -> BU.SENSORS.WATCH 0
18:07:01.579 <- I (26859) BT_HID: Scanning for HID devices (3s)...
18:07:01.580 <- E rmt: hw buffer too small, received symbols truncated
18:07:01.580 <- E rmt: hw buffer too small, received symbols truncated
18:07:01.580 <- I (29869) BT_HID: Found 0 HID device(s)
18:07:01.580 <- I (29869) BT_HID: No HID devices found, retrying in 2000ms...
18:07:02.011 <- E rmt: hw buffer too small, received symbols truncated
18:07:02.011 <- BU.EVENT state t=16.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:02.011 <- BU.EVENT state t=16.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:02.519 <- E rmt: hw buffer too small, received symbols truncated
18:07:02.519 <- BU.EVENT state t=17.04 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:02.519 <- E rmt: hw buffer too small, received symbols truncated
18:07:02.519 <- BU.EVENT state t=17.29 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:03.034 <- I (31869) BT_HID: Scanning for HID devices (3s)...
18:07:03.034 <- BU.EVENT state t=17.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:03.034 <- BU.EVENT state t=17.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:03.536 <- BU.EVENT state t=18.05 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:03.536 <- BU.EVENT state t=18.30 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:04.038 <- BU.EVENT state t=18.55 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:04.038 <- BU.EVENT state t=18.80 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:04.540 <- BU.EVENT state t=19.05 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:04.540 <- BU.EVENT state t=19.30 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:05.055 <- BU.EVENT state t=19.55 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:05.055 <- BU.EVENT state t=19.80 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:05.537 <- BU.EVENT state t=20.05 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:05.537 <- BU.EVENT state t=20.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:05.537 <- I (34879) BT_HID: Found 0 HID device(s)
18:07:06.038 <- I (34879) BT_HID: No HID devices found, retrying in 2000ms...
18:07:06.038 <- BU.EVENT state t=20.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:06.038 <- BU.EVENT state t=20.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:06.383 <- BU.EVENT state t=21.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:07:06.383 <- BU.EVENT sensor name=SAFETY edge=make t=21.25
18:07:06.384 <- BU.EVENT sensor name=SAFETY edge=break t=21.26
18:07:06.882 <- BU.EVENT state t=21.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=2 isr_d=0 isr_j=0 isr_a=0
18:07:06.882 <- E rmt: hw buffer too small, received symbols truncated
18:07:06.882 <- BU.EVENT sensor name=SAFETY edge=make t=21.46
18:07:06.885 <- BU.EVENT state t=21.56 SAFETY=1 DRIVE=0 JACK=0 AUX=0 isr_s=3 isr_d=0 isr_j=0 isr_a=0
18:07:07.381 <- BU.EVENT state t=21.81 SAFETY=1 DRIVE=0 JACK=0 AUX=0 isr_s=3 isr_d=0 isr_j=0 isr_a=0
18:07:07.381 <- E rmt: hw buffer too small, received symbols truncated
18:07:07.381 <- BU.EVENT state t=22.06 SAFETY=1 DRIVE=0 JACK=0 AUX=0 isr_s=3 isr_d=0 isr_j=0 isr_a=0
18:07:07.381 <- BU.EVENT sensor name=SAFETY edge=break t=22.20
18:07:07.881 <- BU.EVENT state t=22.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:07.882 <- I (36879) BT_HID: Scanning for HID devices (3s)...
18:07:07.882 <- BU.EVENT state t=22.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:07.882 <- E rmt: hw buffer too small, received symbols truncated
18:07:08.383 <- BU.EVENT state t=22.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:08.383 <- BU.EVENT state t=23.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:08.890 <- BU.EVENT state t=23.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:08.890 <- BU.EVENT state t=23.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:08.890 <- BU.EVENT state t=23.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:09.396 <- BU.EVENT state t=24.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:09.396 <- E rmt: hw buffer too small, received symbols truncated
18:07:09.396 <- BU.EVENT state t=24.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:09.896 <- BU.EVENT state t=24.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:09.896 <- BU.EVENT state t=24.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:10.397 <- BU.EVENT state t=25.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:10.397 <- BU.EVENT state t=25.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:10.643 <- I (39889) BT_HID: Found 0 HID device(s)
18:07:10.643 <- I (39889) BT_HID: No HID devices found, retrying in 2000ms...
18:07:10.643 <- E rmt: hw buffer too small, received symbols truncated
18:07:11.151 <- BU.EVENT state t=25.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:11.151 <- E rmt: hw buffer too small, received symbols truncated
18:07:11.151 <- BU.EVENT state t=25.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:11.151 <- BU.EVENT state t=26.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:11.667 <- BU.EVENT state t=26.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:11.667 <- E rmt: hw buffer too small, received symbols truncated
18:07:11.667 <- BU.EVENT state t=26.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:12.182 <- BU.EVENT state t=26.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:12.182 <- BU.EVENT state t=27.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:12.641 <- BU.EVENT state t=27.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:12.641 <- I (41889) BT_HID: Scanning for HID devices (3s)...
18:07:12.641 <- E rmt: hw buffer too small, received symbols truncated
18:07:13.144 <- BU.EVENT state t=27.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:13.144 <- BU.EVENT state t=27.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:13.144 <- E rmt: hw buffer too small, received symbols truncated
18:07:13.654 <- BU.EVENT state t=28.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:13.654 <- BU.EVENT state t=28.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:13.654 <- E rmt: hw buffer too small, received symbols truncated
18:07:13.654 <- BU.EVENT state t=28.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:14.157 <- BU.EVENT state t=28.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:14.157 <- E rmt: hw buffer too small, received symbols truncated
18:07:14.157 <- BU.EVENT state t=29.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:14.662 <- BU.EVENT state t=29.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:14.662 <- E rmt: hw buffer too small, received symbols truncated
18:07:14.662 <- BU.EVENT state t=29.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:15.164 <- E rmt: hw buffer too small, received symbols truncated
18:07:15.164 <- BU.EVENT state t=29.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:15.164 <- BU.EVENT state t=30.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:15.557 <- BU.EVENT state t=30.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:15.557 <- E rmt: hw buffer too small, received symbols truncated
18:07:15.557 <- I (44899) BT_HID: Found 0 HID device(s)
18:07:16.067 <- I (44899) BT_HID: No HID devices found, retrying in 2000ms...
18:07:16.067 <- BU.EVENT state t=30.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:16.067 <- BU.EVENT state t=30.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:16.574 <- BU.EVENT state t=31.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:16.574 <- BU.EVENT state t=31.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:16.574 <- E rmt: hw buffer too small, received symbols truncated
18:07:17.076 <- BU.EVENT state t=31.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:17.076 <- BU.EVENT state t=31.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:17.551 <- BU.EVENT state t=32.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:17.551 <- E rmt: hw buffer too small, received symbols truncated
18:07:17.551 <- BU.EVENT state t=32.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:18.060 <- I (46899) BT_HID: Scanning for HID devices (3s)...
18:07:18.060 <- BU.EVENT state t=32.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:18.060 <- BU.EVENT state t=32.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:18.575 <- BU.EVENT state t=33.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:18.575 <- BU.EVENT state t=33.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:19.090 <- BU.EVENT state t=33.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:19.090 <- BU.EVENT state t=33.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:19.595 <- BU.EVENT state t=34.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:19.595 <- BU.EVENT state t=34.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.097 <- BU.EVENT state t=34.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.097 <- E rmt: hw buffer too small, received symbols truncated
18:07:20.097 <- BU.EVENT state t=34.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.567 <- BU.EVENT state t=35.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.567 <- BU.EVENT state t=35.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.567 <- I (49909) BT_HID: Found 0 HID device(s)
18:07:20.986 <- I (49909) BT_HID: No HID devices found, retrying in 2000ms...
18:07:20.986 <- BU.EVENT state t=35.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:20.986 <- BU.EVENT state t=35.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:21.143 <- E rmt: hw buffer too small, received symbols truncated
18:07:21.143 <- E rmt: hw buffer too small, received symbols truncated
18:07:21.143 <- E rmt: hw buffer too small, received symbols truncated
18:07:21.143 <- E rmt: hw buffer too small, received symbols truncated
18:07:21.645 <- BU.EVENT state t=36.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:21.645 <- BU.EVENT state t=36.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:21.645 <- E rmt: hw buffer too small, received symbols truncated
18:07:21.645 <- BU.EVENT state t=36.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:22.160 <- BU.EVENT state t=36.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:22.160 <- BU.EVENT state t=37.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:22.641 <- BU.EVENT state t=37.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:22.641 <- E rmt: hw buffer too small, received symbols truncated
18:07:22.641 <- I (51909) BT_HID: Scanning for HID devices (3s)...
18:07:23.143 <- BU.EVENT state t=37.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:23.143 <- BU.EVENT state t=37.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:23.143 <- E rmt: hw buffer too small, received symbols truncated
18:07:23.648 <- BU.EVENT state t=38.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:23.648 <- BU.EVENT state t=38.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=4 isr_d=0 isr_j=0 isr_a=0
18:07:23.648 <- E rmt: hw buffer too small, received symbols truncated

2324
BRINGUP_22APR2026_1808.txt Normal file

File diff suppressed because it is too large Load Diff

753
BRINGUP_22APR2026_1817.txt Normal file
View File

@@ -0,0 +1,753 @@
18:17:18.258 == Flashing COM3 ==
18:17:18.261 flashing from D:\SC\SC-F001\build
18:17:18.262 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]
18:17:43.243 == Flash complete ==
18:17:44.744 Connecting to COM3 @ 115200 ...
18:17:44.749 -> BU.BEGIN
18:17:44.962 <- BU.BEGIN
18:17:44.962 <-
18:17:44.962 <- BU.OK begin fw=a775999-dirty board=V5 t=0.00
18:17:44.963 -> BU.INFO
18:17:44.963 <- E rmt: hw buffer too small, received symbols truncated
18:17:44.963 <- I (1819) BT_HID: Scanning for HID devices (3s)...
18:17:44.963 <- I (1829) BT_HID: BLE HID host initialised
18:17:44.986 <- I (1829) WEBSERVER: Initializing webserver...
18:17:44.986 <- I (1829) WEBSERVER: AP LAUNCHING
18:17:44.986 <- I (1849) wifi:wifi driver task: 3ffe2884, prio:23, stack:6656, core=0
18:17:44.986 <- I (1849) wifi:wifi firmware version: ccaebfa
18:17:44.986 <- I (1849) wifi:wifi certification version: v7.0
18:17:45.008 <- I (1849) wifi:config NVS flash: enabled
18:17:45.008 <- I (1859) wifi:config nano formating: disabled
18:17:45.008 <- BU.OK info reset=POWERON heap=115124 min_heap=114096 fw=a775999-dirty build=2026-04-22 21:25:54
18:17:53.122 -> BU.FLASH
18:17:53.122 <- I (1859) wifi:Init data frame dynamic rx buffer num: 32
18:17:53.123 <- I (1869) wifi:Init static rx mgmt buffer num: 5
18:17:53.123 <- I (1879) wifi:Init management short buffer num: 32
18:17:53.123 <- I (1879) wifi:Init dynamic tx buffer num: 32
18:17:53.123 <- I (1889) wifi:Init static rx buffer size: 1600
18:17:53.123 <- I (1889) wifi:Init static rx buffer num: 10
18:17:53.123 <- I (1889) wifi:Init dynamic rx buffer num: 32
18:17:53.123 <- I (1899) wifi_init: rx ba win: 6
18:17:53.123 <- I (1899) wifi_init: accept mbox: 6
18:17:53.123 <- I (1909) wifi_init: tcpip mbox: 32
18:17:53.123 <- I (1909) wifi_init: udp mbox: 6
18:17:53.123 <- I (1909) wifi_init: tcp mbox: 6
18:17:53.124 <- I (1919) wifi_init: tcp tx win: 5760
18:17:53.124 <- I (1919) wifi_init: tcp rx win: 5760
18:17:53.124 <- I (1929) wifi_init: tcp mss: 1440
18:17:53.124 <- I (1939) wifi:mode : softAP (80:f3:da:65:25:f9)
18:17:53.124 <- I (1949) wifi:Total power save buffer number: 16
18:17:53.124 <- I (1949) wifi:Init max length of beacon: 752/752
18:17:53.124 <- I (1949) wifi:Init max length of beacon: 752/752
18:17:53.124 <- I (1949) esp_netif_lwip: DHCP server started on interface WIFI_AP_DEF with IP: 192.168.4.1
18:17:53.124 <- I (1959) DNS_SERVER: DNS server started on port 53
18:17:53.125 <- I (1969) mdns_mem: mDNS task will be created from internal RAM
18:17:53.125 <- I (1969) WEBSERVER: SoftAP ready. SSID: sc.local, Channel: 6, Password: password
18:17:53.125 <- I (1979) WEBSERVER: Access at: http://sc.local.local or http://192.168.4.1
18:17:53.125 <- I (1979) WEBSERVER: STARTING HTTP
18:17:53.125 <- I (1989) WEBSERVER: HTTP server started successfully
18:17:53.125 <- I (1989) WEBSERVER: Registered URI handler: /
18:17:53.125 <- I (1999) WEBSERVER: Registered URI handler: /get
18:17:53.126 <- I (2009) WEBSERVER: Registered URI handler: /post
18:17:53.126 <- I (2009) WEBSERVER: Registered URI handler: /log
18:17:53.126 <- I (2019) WEBSERVER: Registered URI handler: /ota
18:17:53.126 <- I (2019) WEBSERVER: Registered URI handler: /*
18:17:53.126 <- I (2029) WEBSERVER: Webserver initialization complete
18:17:53.126 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.126 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.126 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.126 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- I (4839) BT_HID: Found 0 HID device(s)
18:17:53.127 <- I (4839) BT_HID: No HID devices found, retrying in 2000ms...
18:17:53.127 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- I (6839) BT_HID: Scanning for HID devices (3s)...
18:17:53.127 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.127 <- I (9849) BT_HID: Found 0 HID device(s)
18:17:53.639 <- I (9849) BT_HID: No HID devices found, retrying in 2000ms...
18:17:53.639 <- E rmt: hw buffer too small, received symbols truncated
18:17:53.639 <- BU.OK flash post_part=roundtrip log_head=33 log_tail=0 partitions_size=4128768
18:17:55.202 -> BU.I2C
18:17:55.717 <- I (11849) BT_HID: Scanning for HID devices (3s)...
18:17:55.717 <- I (12099) I2C: POST: TCA9555 OK (port0=0x0123)
18:17:55.717 <- BU.OK i2c tca9555=ack
18:17:55.719 -> BU.LED 0
18:17:56.221 <- BU.OK led mask=0
18:17:56.473 -> BU.LED 1
18:17:56.975 <- BU.OK led mask=1
18:17:57.227 -> BU.LED 3
18:17:57.740 <- BU.OK led mask=3
18:17:57.740 -> BU.LED 0
18:17:58.244 <- BU.OK led mask=0
18:17:59.458 -> BU.ADC
18:17:59.458 <- I (14859) BT_HID: Found 0 HID device(s)
18:17:59.459 <- I (14859) BT_HID: No HID devices found, retrying in 2000ms...
18:17:59.459 <- E rmt: hw buffer too small, received symbols truncated
18:17:59.972 <- E rmt: hw buffer too small, received symbols truncated
18:17:59.972 <- E rmt: hw buffer too small, received symbols truncated
18:17:59.972 <- BU.OK adc bat_mv=1640 bat_V=12.974 isens_mv=1666 isens_A=-1.21 voc_mv=3150 fault=1
18:18:03.690 -> BU.SENSORS.WATCH 0
18:18:03.690 <- E rmt: hw buffer too small, received symbols truncated
18:18:03.690 <- I (16859) BT_HID: Scanning for HID devices (3s)...
18:18:03.690 <- E rmt: hw buffer too small, received symbols truncated
18:18:03.690 <- E rmt: hw buffer too small, received symbols truncated
18:18:03.690 <- E rmt: hw buffer too small, received symbols truncated
18:18:03.974 <- I (19869) BT_HID: Found 0 HID device(s)
18:18:03.974 <- I (19869) BT_HID: No HID devices found, retrying in 2000ms...
18:18:03.974 <- BU.EVENT state t=18.94 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:04.490 <- BU.EVENT state t=19.20 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:04.490 <- E rmt: hw buffer too small, received symbols truncated
18:18:04.490 <- BU.EVENT state t=19.45 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:04.490 <- BU.EVENT state t=19.70 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:05.004 <- BU.EVENT state t=19.95 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:05.004 <- BU.EVENT state t=20.20 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:05.004 <- I (21869) BT_HID: Scanning for HID devices (3s)...
18:18:05.504 <- E rmt: hw buffer too small, received symbols truncated
18:18:05.504 <- BU.EVENT state t=20.45 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:05.504 <- BU.EVENT state t=20.70 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:06.005 <- BU.EVENT state t=20.95 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:06.005 <- BU.EVENT state t=21.20 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:06.511 <- BU.EVENT state t=21.45 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:06.511 <- BU.EVENT state t=21.70 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:07.026 <- BU.EVENT state t=21.95 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:07.026 <- BU.EVENT state t=22.20 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:07.541 <- BU.EVENT state t=22.46 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:07.541 <- BU.EVENT state t=22.71 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:08.008 <- BU.EVENT state t=22.96 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:08.008 <- BU.EVENT state t=23.21 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:08.008 <- I (24879) BT_HID: Found 0 HID device(s)
18:18:08.517 <- I (24879) BT_HID: No HID devices found, retrying in 2000ms...
18:18:08.517 <- BU.EVENT state t=23.47 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:08.517 <- BU.EVENT state t=23.72 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:09.032 <- BU.EVENT state t=23.98 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:09.032 <- BU.EVENT state t=24.23 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:09.536 <- E rmt: hw buffer too small, received symbols truncated
18:18:09.536 <- BU.EVENT state t=24.48 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:09.536 <- BU.EVENT state t=24.73 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:10.038 <- BU.EVENT state t=24.98 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:10.038 <- I (26879) BT_HID: Scanning for HID devices (3s)...
18:18:10.038 <- BU.EVENT state t=25.23 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:10.542 <- BU.EVENT state t=25.48 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:10.542 <- BU.EVENT state t=25.74 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:11.048 <- BU.EVENT state t=25.99 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:11.048 <- BU.EVENT state t=26.24 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:11.048 <- E rmt: hw buffer too small, received symbols truncated
18:18:11.555 <- BU.EVENT state t=26.49 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:11.555 <- E rmt: hw buffer too small, received symbols truncated
18:18:11.555 <- BU.EVENT state t=26.74 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:12.057 <- BU.EVENT state t=26.99 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:12.057 <- BU.EVENT state t=27.24 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:12.562 <- BU.EVENT state t=27.49 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:12.562 <- BU.EVENT state t=27.74 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:13.022 <- BU.EVENT state t=27.99 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:13.022 <- BU.EVENT state t=28.24 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:13.022 <- I (29889) BT_HID: Found 0 HID device(s)
18:18:13.529 <- I (29889) BT_HID: No HID devices found, retrying in 2000ms...
18:18:13.529 <- BU.EVENT state t=28.50 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:13.529 <- BU.EVENT state t=28.75 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:14.030 <- BU.EVENT state t=29.00 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:14.030 <- BU.EVENT state t=29.25 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:14.531 <- BU.EVENT state t=29.50 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:14.531 <- BU.EVENT state t=29.75 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:15.033 <- BU.EVENT state t=30.00 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:15.033 <- I (31889) BT_HID: Scanning for HID devices (3s)...
18:18:15.549 <- BU.EVENT state t=30.26 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:15.549 <- BU.EVENT state t=30.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:15.549 <- E rmt: hw buffer too small, received symbols truncated
18:18:15.549 <- BU.EVENT state t=30.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:16.065 <- BU.EVENT state t=31.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:16.065 <- BU.EVENT state t=31.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:16.577 <- BU.EVENT state t=31.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:16.577 <- BU.EVENT state t=31.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:17.041 <- BU.EVENT state t=32.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:17.042 <- E rmt: hw buffer too small, received symbols truncated
18:18:17.042 <- E rmt: hw buffer too small, received symbols truncated
18:18:17.544 <- BU.EVENT state t=32.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:17.544 <- BU.EVENT state t=32.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:17.545 <- E rmt: hw buffer too small, received symbols truncated
18:18:17.545 <- BU.EVENT state t=32.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:18.042 <- BU.EVENT state t=33.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:18.042 <- I (34899) BT_HID: Found 0 HID device(s)
18:18:18.042 <- I (34899) BT_HID: No HID devices found, retrying in 2000ms...
18:18:18.543 <- BU.EVENT state t=33.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:18.543 <- BU.EVENT state t=33.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:19.046 <- BU.EVENT state t=33.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:19.046 <- BU.EVENT state t=34.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:19.046 <- BU.EVENT state t=34.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:19.547 <- BU.EVENT state t=34.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:19.547 <- BU.EVENT state t=34.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:20.053 <- BU.EVENT state t=35.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:20.053 <- I (36899) BT_HID: Scanning for HID devices (3s)...
18:18:20.053 <- BU.EVENT state t=35.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:20.569 <- BU.EVENT state t=35.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:20.569 <- BU.EVENT state t=35.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:21.073 <- BU.EVENT state t=36.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:21.073 <- BU.EVENT state t=36.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:21.575 <- BU.EVENT state t=36.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:21.575 <- BU.EVENT state t=36.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:22.089 <- BU.EVENT state t=37.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:22.089 <- E rmt: hw buffer too small, received symbols truncated
18:18:22.089 <- BU.EVENT state t=37.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:22.591 <- BU.EVENT state t=37.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:22.591 <- BU.EVENT state t=37.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:23.043 <- BU.EVENT state t=38.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:23.043 <- I (39909) BT_HID: Found 0 HID device(s)
18:18:23.043 <- I (39909) BT_HID: No HID devices found, retrying in 2000ms...
18:18:23.549 <- BU.EVENT state t=38.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:23.549 <- BU.EVENT state t=38.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:23.549 <- BU.EVENT state t=38.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:24.050 <- BU.EVENT state t=39.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:24.050 <- BU.EVENT state t=39.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:24.563 <- BU.EVENT state t=39.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:24.563 <- BU.EVENT state t=39.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:25.064 <- BU.EVENT state t=40.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:25.064 <- I (41909) BT_HID: Scanning for HID devices (3s)...
18:18:25.064 <- BU.EVENT state t=40.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:25.576 <- BU.EVENT state t=40.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:25.576 <- BU.EVENT state t=40.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:26.076 <- BU.EVENT state t=41.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:26.076 <- BU.EVENT state t=41.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:26.577 <- BU.EVENT state t=41.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:26.577 <- BU.EVENT state t=41.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:27.079 <- BU.EVENT state t=42.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:27.085 <- BU.EVENT state t=42.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:27.594 <- BU.EVENT state t=42.52 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:27.594 <- BU.EVENT state t=42.77 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:28.052 <- BU.EVENT state t=43.02 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:28.052 <- BU.EVENT state t=43.27 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:28.052 <- I (44919) BT_HID: Found 0 HID device(s)
18:18:28.553 <- I (44919) BT_HID: No HID devices found, retrying in 2000ms...
18:18:28.553 <- BU.EVENT state t=43.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:28.553 <- E rmt: hw buffer too small, received symbols truncated
18:18:29.063 <- BU.EVENT state t=43.78 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:29.063 <- BU.EVENT state t=44.03 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:29.063 <- BU.EVENT state t=44.28 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:29.579 <- BU.EVENT state t=44.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:29.579 <- BU.EVENT state t=44.78 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:30.083 <- BU.EVENT state t=45.03 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:30.083 <- I (46919) BT_HID: Scanning for HID devices (3s)...
18:18:30.083 <- BU.EVENT state t=45.28 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:30.585 <- BU.EVENT state t=45.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:30.585 <- BU.EVENT state t=45.78 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:30.585 <- E rmt: hw buffer too small, received symbols truncated
18:18:31.089 <- BU.EVENT state t=46.03 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:31.089 <- BU.EVENT state t=46.28 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:31.591 <- BU.EVENT state t=46.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:31.591 <- BU.EVENT state t=46.78 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:31.591 <- E rmt: hw buffer too small, received symbols truncated
18:18:32.051 <- E rmt: hw buffer too small, received symbols truncated
18:18:32.051 <- BU.EVENT state t=47.03 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:32.051 <- E rmt: hw buffer too small, received symbols truncated
18:18:32.559 <- BU.EVENT state t=47.28 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:32.559 <- BU.EVENT state t=47.53 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:32.559 <- BU.EVENT state t=47.78 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:33.061 <- BU.EVENT state t=48.03 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:33.061 <- BU.EVENT state t=48.28 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:33.562 <- I (49929) BT_HID: Found 0 HID device(s)
18:18:33.562 <- I (49929) BT_HID: No HID devices found, retrying in 2000ms...
18:18:33.562 <- E rmt: hw buffer too small, received symbols truncated
18:18:33.562 <- BU.EVENT state t=48.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:34.075 <- BU.EVENT state t=48.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:34.075 <- BU.EVENT state t=49.04 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:34.075 <- BU.EVENT state t=49.29 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:34.577 <- BU.EVENT state t=49.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:34.577 <- BU.EVENT state t=49.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:35.088 <- BU.EVENT state t=50.04 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:35.088 <- I (51929) BT_HID: Scanning for HID devices (3s)...
18:18:35.088 <- BU.EVENT state t=50.29 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:35.591 <- BU.EVENT state t=50.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:35.591 <- BU.EVENT state t=50.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:36.095 <- E rmt: hw buffer too small, received symbols truncated
18:18:36.095 <- BU.EVENT state t=51.04 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:36.095 <- BU.EVENT state t=51.29 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:36.608 <- BU.EVENT state t=51.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:36.608 <- BU.EVENT state t=51.79 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:37.109 <- BU.EVENT state t=52.04 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:37.109 <- BU.EVENT state t=52.29 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:37.614 <- E rmt: hw buffer too small, received symbols truncated
18:18:37.614 <- BU.EVENT state t=52.54 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:37.614 <- BU.EVENT state t=52.80 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:38.073 <- BU.EVENT state t=53.05 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:38.073 <- I (54939) BT_HID: Found 0 HID device(s)
18:18:38.073 <- I (54939) BT_HID: No HID devices found, retrying in 2000ms...
18:18:38.584 <- BU.EVENT state t=53.30 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:38.584 <- E rmt: hw buffer too small, received symbols truncated
18:18:38.584 <- BU.EVENT state t=53.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:39.085 <- BU.EVENT state t=53.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:39.085 <- BU.EVENT state t=54.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:39.085 <- BU.EVENT state t=54.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:39.598 <- BU.EVENT state t=54.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:39.598 <- BU.EVENT state t=54.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:40.112 <- BU.EVENT state t=55.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:40.112 <- I (56939) BT_HID: Scanning for HID devices (3s)...
18:18:40.112 <- BU.EVENT state t=55.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:40.626 <- BU.EVENT state t=55.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:40.626 <- BU.EVENT state t=55.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:41.139 <- BU.EVENT state t=56.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:41.139 <- BU.EVENT state t=56.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:41.655 <- BU.EVENT state t=56.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:41.655 <- BU.EVENT state t=56.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:42.169 <- BU.EVENT state t=57.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:42.169 <- BU.EVENT state t=57.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:42.670 <- BU.EVENT state t=57.56 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:42.670 <- BU.EVENT state t=57.81 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:43.083 <- BU.EVENT state t=58.06 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:43.083 <- I (59949) BT_HID: Found 0 HID device(s)
18:18:43.083 <- I (59949) BT_HID: No HID devices found, retrying in 2000ms...
18:18:43.593 <- BU.EVENT state t=58.31 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:43.593 <- BU.EVENT state t=58.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:44.096 <- BU.EVENT state t=58.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:44.096 <- BU.EVENT state t=59.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:44.096 <- BU.EVENT state t=59.32 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:44.601 <- BU.EVENT state t=59.57 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:44.601 <- BU.EVENT state t=59.82 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:45.106 <- BU.EVENT state t=60.07 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:45.106 <- I (61949) BT_HID: Scanning for HID devices (3s)...
18:18:45.106 <- BU.EVENT state t=60.33 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:45.620 <- BU.EVENT state t=60.58 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:45.620 <- BU.EVENT state t=60.83 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:46.122 <- BU.EVENT state t=61.08 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:46.122 <- BU.EVENT state t=61.33 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:46.637 <- BU.EVENT state t=61.58 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:46.637 <- BU.EVENT state t=61.83 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:47.139 <- BU.EVENT state t=62.08 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:47.139 <- E rmt: hw buffer too small, received symbols truncated
18:18:47.139 <- BU.EVENT state t=62.33 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:47.641 <- BU.EVENT state t=62.58 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:47.641 <- BU.EVENT state t=62.83 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:48.111 <- BU.EVENT state t=63.08 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:48.111 <- I (64959) BT_HID: Found 0 HID device(s)
18:18:48.111 <- I (64959) BT_HID: No HID devices found, retrying in 2000ms...
18:18:48.622 <- BU.EVENT state t=63.34 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:48.622 <- BU.EVENT state t=63.59 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:49.137 <- BU.EVENT state t=63.85 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:49.137 <- E rmt: hw buffer too small, received symbols truncated
18:18:49.137 <- BU.EVENT state t=64.10 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:49.137 <- BU.EVENT state t=64.35 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:49.651 <- E rmt: hw buffer too small, received symbols truncated
18:18:49.651 <- BU.EVENT state t=64.60 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:49.651 <- BU.EVENT state t=64.85 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:50.163 <- BU.EVENT state t=65.10 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:50.163 <- I (66959) BT_HID: Scanning for HID devices (3s)...
18:18:50.163 <- BU.EVENT state t=65.35 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:50.677 <- BU.EVENT state t=65.60 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:50.677 <- BU.EVENT state t=65.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:51.188 <- BU.EVENT state t=66.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:51.188 <- BU.EVENT state t=66.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:51.693 <- BU.EVENT state t=66.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:51.693 <- BU.EVENT state t=66.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:52.194 <- BU.EVENT state t=67.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:52.194 <- E rmt: hw buffer too small, received symbols truncated
18:18:52.194 <- BU.EVENT state t=67.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:52.697 <- BU.EVENT state t=67.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:52.697 <- BU.EVENT state t=67.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:53.097 <- E rmt: hw buffer too small, received symbols truncated
18:18:53.097 <- BU.EVENT state t=68.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:53.097 <- I (69969) BT_HID: Found 0 HID device(s)
18:18:53.607 <- I (69969) BT_HID: No HID devices found, retrying in 2000ms...
18:18:53.607 <- BU.EVENT state t=68.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:53.607 <- E rmt: hw buffer too small, received symbols truncated
18:18:53.607 <- BU.EVENT state t=68.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:53.900 <- BU.EVENT state t=68.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:53.900 <- E rmt: hw buffer too small, received symbols truncated
18:18:53.900 <- BU.EVENT state t=69.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:54.405 <- E rmt: hw buffer too small, received symbols truncated
18:18:54.405 <- BU.EVENT state t=69.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:54.405 <- BU.EVENT state t=69.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:54.920 <- BU.EVENT state t=69.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:54.920 <- BU.EVENT state t=70.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=0 isr_a=0
18:18:55.422 <- I (71969) BT_HID: Scanning for HID devices (3s)...
18:18:55.422 <- BU.EVENT state t=70.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:55.422 <- BU.EVENT state t=70.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:55.923 <- BU.EVENT state t=70.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:55.923 <- BU.EVENT state t=71.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:56.438 <- E rmt: hw buffer too small, received symbols truncated
18:18:56.438 <- BU.EVENT state t=71.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:56.438 <- BU.EVENT state t=71.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:56.940 <- BU.EVENT state t=71.86 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:56.940 <- BU.EVENT state t=72.11 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:57.456 <- BU.EVENT state t=72.36 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:57.456 <- BU.EVENT state t=72.61 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:57.970 <- E rmt: hw buffer too small, received symbols truncated
18:18:57.970 <- BU.EVENT state t=72.87 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:57.970 <- BU.EVENT state t=73.12 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:58.392 <- I (74979) BT_HID: Found 0 HID device(s)
18:18:58.392 <- I (74979) BT_HID: No HID devices found, retrying in 2000ms...
18:18:58.392 <- BU.EVENT state t=73.37 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:58.907 <- BU.EVENT state t=73.62 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:58.907 <- BU.EVENT state t=73.87 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:58.907 <- BU.EVENT state t=74.12 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:59.421 <- BU.EVENT state t=74.37 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:59.421 <- BU.EVENT state t=74.62 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0
18:18:59.936 <- BU.EVENT state t=74.87 SAFETY=0 DRIVE=0 JACK=0 AUX=0 isr_s=0 isr_d=0 isr_j=1 isr_a=0

View File

@@ -0,0 +1,3 @@
18:24:39.175 == Flashing COM3 ==
18:24:39.177 flashing from D:\SC\SC-F001\build
18:24:39.177 files: [('0x1000', 'bootloader/bootloader.bin'), ('0x10000', 'SC-F001.bin'), ('0x8000', 'partition_table/partition-table.bin'), ('0xd000', 'ota_data_initial.bin')]

BIN
BRINGUP_22APR2026_1825.txt Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

168
bringup/bringup.py Normal file
View File

@@ -0,0 +1,168 @@
#!/usr/bin/env python3
"""
SC-F001 Bring-up Tool
Flashes the firmware (optional) and then walks the operator through the
bring-up procedure documented in docs/SC-F001/BRINGUP.md.
Usage:
bringup.py --port <COMx | /dev/ttyUSB0> [options]
Options:
--port <p> Serial port (required)
--baud <n> Baud rate for UART protocol (default: 115200)
--out <basename> Transcript basename (default: dated)
Flashing (optional):
--flash Flash the firmware before running tests
--build-dir <p> Build directory containing flasher_args.json
(default: ../build/ relative to this script)
--flash-baud <n> Baud for esptool (default: 460800)
--erase `esptool erase_flash` before writing (slow)
--flash-only Flash and exit (no bring-up tests)
Testing:
--skip-relays Skip the live relay pulse stage
--no-calibrate Skip battery-voltage calibration prompt
--no-transcript Do not write a .txt transcript file
"""
from __future__ import annotations
import argparse
import sys
import time
from datetime import datetime
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from protocol import Link # noqa: E402
from stages import all_stages, Tally # noqa: E402
import flash as flasher # noqa: E402
def _default_basename() -> str:
return "BRINGUP_" + datetime.now().strftime("%d%b%Y_%H%M").upper()
def _do_flash(args, log_fn) -> None:
build_dir = Path(args.build_dir) if args.build_dir else None
try:
flasher.flash(
port=args.port,
build_dir=build_dir,
baud=args.flash_baud,
erase_all=args.erase,
log=log_fn,
)
except flasher.FlashError as e:
log_fn(f"FLASH FAILED: {e}")
raise SystemExit(2)
def main() -> int:
ap = argparse.ArgumentParser(description="SC-F001 bring-up tool (flash + test)")
ap.add_argument("--port", required=True, help="serial port (COM5, /dev/ttyUSB0, ...)")
ap.add_argument("--baud", type=int, default=115200)
ap.add_argument("--out", default=None, help="transcript basename")
ap.add_argument("--flash", action="store_true",
help="flash firmware before tests")
ap.add_argument("--build-dir", default=None,
help="build dir with flasher_args.json (default: ../build)")
ap.add_argument("--flash-baud", type=int, default=460800)
ap.add_argument("--erase", action="store_true",
help="erase_flash before writing")
ap.add_argument("--flash-only", action="store_true",
help="flash and exit; skip tests")
ap.add_argument("--skip-relays", action="store_true")
ap.add_argument("--no-calibrate", action="store_true")
ap.add_argument("--no-transcript", action="store_true")
args = ap.parse_args()
basename = args.out or _default_basename()
transcript_path = None if args.no_transcript else Path(basename + ".txt")
transcript_file = None
transcript_cb = None
if transcript_path:
transcript_file = transcript_path.open("w", encoding="utf-8")
def _tx(line: str) -> None:
ts = datetime.now().strftime("%H:%M:%S.%f")[:-3]
transcript_file.write(f"{ts} {line}\n")
transcript_file.flush()
transcript_cb = _tx
print(f"Transcript → {transcript_path}")
def _log(msg: str) -> None:
print(msg)
if transcript_cb:
transcript_cb(msg)
# Phase 1: optional flash
if args.flash or args.flash_only:
_log(f"== Flashing {args.port} ==")
_do_flash(args, _log)
_log("== Flash complete ==")
if args.flash_only:
if transcript_file:
transcript_file.close()
return 0
# Give the chip a moment to finish hard_reset before we open the port
time.sleep(1.5)
# Phase 2: connect and walk bring-up stages
_log(f"Connecting to {args.port} @ {args.baud} ...")
link = Link(args.port, baud=args.baud, transcript=transcript_cb)
link.ser.reset_input_buffer()
tally = Tally()
stages = all_stages(skip_relays=args.skip_relays,
no_calibrate=args.no_calibrate)
def _snapshot(t: Tally) -> tuple[int, int, int, int]:
return (t.passed, t.failed, t.warnings, t.skipped)
def _restore(t: Tally, snap: tuple[int, int, int, int]) -> None:
t.passed, t.failed, t.warnings, t.skipped = snap
try:
for stage in stages:
while True:
snap = _snapshot(tally)
try:
stage(link, tally)
except TimeoutError as e:
print(f" TIMEOUT: {e}")
tally.note_fail()
except Exception as e:
print(f" EXCEPTION in stage: {e!r}")
tally.note_fail()
if tally.failed > snap[1]:
ans = input(" Stage had FAILs — retry? [y/n]: ").strip().lower()
if ans.startswith("y"):
_restore(tally, snap)
continue
break
except KeyboardInterrupt:
print("\nAborted by operator")
try:
link.send("BU.END")
except Exception:
pass
print("\n==== Bring-up summary ====")
print(f" pass={tally.passed} fail={tally.failed} "
f"warn={tally.warnings} skip={tally.skipped}")
link.close()
if transcript_file:
transcript_file.close()
return 0 if tally.failed == 0 else 1
if __name__ == "__main__":
raise SystemExit(main())

39
bringup/calibrate.py Normal file
View File

@@ -0,0 +1,39 @@
"""Battery voltage calibration math.
Firmware model (power_mgmt.c:278):
V_bat = mV * V_SENS_K + V_SENS_OFFSET
"""
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class CalResult:
k: float
offset: float
note: str
def single_point_offset(bat_mv: float, v_true: float, k: float) -> CalResult:
"""Fix K, solve for OFFSET so that V_bat(bat_mv) == v_true."""
offset = v_true - bat_mv * k
return CalResult(k=k, offset=offset, note="single-point offset")
def two_point(
bat_mv_1: float, v_true_1: float,
bat_mv_2: float, v_true_2: float,
) -> CalResult:
"""Solve for K and OFFSET from two (mV, V) pairs."""
dmv = bat_mv_2 - bat_mv_1
if abs(dmv) < 1e-3:
raise ValueError("Two calibration points are too close — pick wider V")
k = (v_true_2 - v_true_1) / dmv
offset = v_true_1 - bat_mv_1 * k
return CalResult(k=k, offset=offset, note="two-point")
def verify(bat_mv: float, cal: CalResult) -> float:
return bat_mv * cal.k + cal.offset

108
bringup/flash.py Normal file
View File

@@ -0,0 +1,108 @@
"""Wrap esptool to flash the SC-F001 firmware from a build directory.
Reads `build/flasher_args.json` (produced by `idf.py build`) to get the
authoritative list of offsets + binaries, then invokes esptool once with all
of them — no hardcoded offsets here.
Requires esptool reachable either as a Python module (`pip install esptool`)
or as `esptool.py` on PATH (e.g., from an ESP-IDF activation).
"""
from __future__ import annotations
import importlib.util
import json
import shutil
import subprocess
import sys
from pathlib import Path
class FlashError(RuntimeError):
pass
def _default_build_dir() -> Path:
# bringup dir sits at SC-F001/bringup; build sits at SC-F001/build
return Path(__file__).resolve().parent.parent / "build"
def _resolve_esptool_invocation() -> list[str]:
"""Return the command prefix to run esptool, preferring the installed
module in the current interpreter, falling back to esptool.py on PATH.
Raises FlashError with an actionable message if neither is available.
"""
if importlib.util.find_spec("esptool") is not None:
return [sys.executable, "-m", "esptool"]
fallback = shutil.which("esptool.py") or shutil.which("esptool")
if fallback:
return [fallback]
raise FlashError(
"esptool is not installed in this Python and not on PATH.\n"
" Install with: "
f"{sys.executable} -m pip install -r "
f"{Path(__file__).parent / 'requirements.txt'}\n"
" Or activate an ESP-IDF shell that provides esptool.py."
)
def _load_manifest(build_dir: Path) -> dict:
manifest = build_dir / "flasher_args.json"
if not manifest.exists():
raise FlashError(
f"Build manifest not found: {manifest}\n"
f"Run `idf.py build` from SC-F001/ first, or pass --build-dir."
)
return json.loads(manifest.read_text())
def _resolve_flash_args(build_dir: Path, manifest: dict) -> list[str]:
"""Expand manifest into a (offset, abs-path) list suitable for esptool."""
args: list[str] = []
# flasher_args.json's flash_files is {offset_hex: relpath}.
for offset_hex, rel in manifest["flash_files"].items():
p = (build_dir / rel).resolve()
if not p.exists():
raise FlashError(f"Missing firmware binary: {p}")
args.append(offset_hex)
args.append(str(p))
return args
def flash(
port: str,
build_dir: Path | None = None,
baud: int = 460800,
erase_all: bool = False,
log: callable = print,
) -> None:
build_dir = (build_dir or _default_build_dir()).resolve()
manifest = _load_manifest(build_dir)
chip = manifest.get("extra_esptool_args", {}).get("chip", "esp32")
before = manifest.get("extra_esptool_args", {}).get("before", "default_reset")
after = manifest.get("extra_esptool_args", {}).get("after", "hard_reset")
esptool_cmd = _resolve_esptool_invocation()
base_cmd = esptool_cmd + [
"--chip", chip,
"--port", port,
"--baud", str(baud),
"--before", before,
"--after", after,
]
if erase_all:
log(f" erase_flash @ {port}")
subprocess.check_call(base_cmd + ["erase_flash"])
write_args = manifest.get("write_flash_args", [])
cmd = base_cmd + ["write_flash"] + write_args + _resolve_flash_args(build_dir, manifest)
log(f" flashing from {build_dir}")
log(f" files: {list(manifest['flash_files'].items())}")
try:
subprocess.check_call(cmd)
except subprocess.CalledProcessError as e:
raise FlashError(f"esptool failed (exit {e.returncode})") from e

209
bringup/protocol.py Normal file
View File

@@ -0,0 +1,209 @@
"""Line-oriented protocol over UART for the SC-F001 bring-up procedure.
The firmware side is specified in docs/SC-F001/BRINGUP.md §3.
Commands are prefixed `BU.`; responses are `BU.OK`, `BU.ERR`, `BU.SKIP`,
or streamed `BU.EVENT` lines.
"""
from __future__ import annotations
import re
import time
from dataclasses import dataclass, field
from typing import Callable, Iterator
import serial
LINE_TIMEOUT_S = 2.0
@dataclass
class Response:
status: str # "OK" | "ERR" | "SKIP"
cmd: str
fields: dict[str, str] = field(default_factory=dict)
raw: str = ""
def get(self, key: str, default: str | None = None) -> str | None:
return self.fields.get(key, default)
def getf(self, key: str, default: float = float("nan")) -> float:
v = self.fields.get(key)
if v is None:
return default
try:
return float(v)
except ValueError:
return default
def geti(self, key: str, default: int = 0) -> int:
v = self.fields.get(key)
if v is None:
return default
try:
return int(v, 0)
except ValueError:
return default
@dataclass
class Event:
cmd: str
fields: dict[str, str] = field(default_factory=dict)
raw: str = ""
_KV_RE = re.compile(r'(\w[\w.]*)=("[^"]*"|\S+)')
def _parse_kv(rest: str) -> dict[str, str]:
out: dict[str, str] = {}
for m in _KV_RE.finditer(rest):
k = m.group(1)
v = m.group(2)
if v.startswith('"') and v.endswith('"'):
v = v[1:-1]
out[k] = v
return out
def parse_line(line: str) -> Response | Event | None:
"""Returns None for lines that aren't bring-up protocol (boot chatter etc.)."""
line = line.rstrip("\r\n")
if not line.startswith("BU."):
return None
tokens = line.split(None, 2)
tag = tokens[0] # BU.OK | BU.ERR | BU.EVENT | BU.SKIP
if len(tokens) < 2:
return None
cmd = tokens[1]
rest = tokens[2] if len(tokens) >= 3 else ""
fields = _parse_kv(rest)
if tag == "BU.EVENT":
return Event(cmd=cmd, fields=fields, raw=line)
status = tag.removeprefix("BU.")
if status in ("OK", "ERR", "SKIP"):
return Response(status=status, cmd=cmd, fields=fields, raw=line)
return None
class Link:
"""Wraps a serial.Serial with line I/O + protocol parsing."""
def __init__(self, port: str, baud: int = 115200, transcript: Callable[[str], None] | None = None):
# Don't let pyserial auto-assert DTR/RTS on open. ESP32 dev boards
# tie those into the BOOT/EN transistor pair — default-asserted lines
# hold the chip in reset for as long as the port is open, which
# silently blocks every command we send.
self.ser = serial.Serial()
self.ser.port = port
self.ser.baudrate = baud
self.ser.timeout = LINE_TIMEOUT_S
self.ser.dtr = False
self.ser.rts = False
self.ser.open()
# After open, re-assert False (some platforms override on open).
self.ser.dtr = False
self.ser.rts = False
self.transcript = transcript or (lambda _s: None)
self._buf = b""
def close(self) -> None:
try:
self.ser.close()
except Exception:
pass
def _readline(self, deadline: float) -> str | None:
while True:
remaining = deadline - time.monotonic()
if remaining <= 0:
return None
if b"\n" in self._buf:
line, _, self._buf = self._buf.partition(b"\n")
s = line.decode("utf-8", errors="replace")
self.transcript(f"<- {s}")
return s
self.ser.timeout = min(remaining, 0.5)
chunk = self.ser.read(256)
if chunk:
self._buf += chunk
def send(self, cmd: str) -> None:
if not cmd.endswith("\n"):
cmd = cmd + "\n"
self.transcript(f"-> {cmd.rstrip()}")
self.ser.write(cmd.encode("utf-8"))
self.ser.flush()
def request(self, cmd: str, overall_timeout_s: float = 5.0) -> Response:
"""Send a command and collect lines until a terminating OK/ERR/SKIP."""
self.send(cmd)
deadline = time.monotonic() + overall_timeout_s
while True:
line = self._readline(deadline)
if line is None:
raise TimeoutError(f"No terminating response to {cmd!r}")
parsed = parse_line(line)
if isinstance(parsed, Response):
return parsed
# Events during a non-streaming command are unexpected but not fatal
# — swallow them and keep reading.
def wait_ready(self, cmd: str = "BU.BEGIN",
per_attempt_s: float = 1.5,
overall_timeout_s: float = 30.0,
show_boot_chatter: bool = True) -> "Response":
"""Send `cmd` repeatedly until we get a Response back.
Used once at the start of a session to ride out the boot/init time
before uart_comms installs the UART driver — bytes sent earlier are
dropped by the hardware FIFO and never reach the firmware.
When `show_boot_chatter` is True (default), non-protocol lines
(ESP_LOG output, boot banner) are printed to stdout so the operator
can see what the device is actually doing while we wait.
"""
deadline = time.monotonic() + overall_timeout_s
last_err: Exception | None = None
attempt = 0
while time.monotonic() < deadline:
attempt += 1
remaining = deadline - time.monotonic()
print(f" [wait_ready] attempt {attempt}, {remaining:.0f}s left")
self.send(cmd)
per_deadline = time.monotonic() + per_attempt_s
while True:
line = self._readline(per_deadline)
if line is None:
last_err = TimeoutError(f"no response to {cmd!r}")
break
parsed = parse_line(line)
if isinstance(parsed, Response):
return parsed
if parsed is None and show_boot_chatter:
stripped = line.rstrip("\r\n")
if stripped:
print(f" [uart] {stripped}")
raise TimeoutError(
f"Device never answered {cmd!r} within {overall_timeout_s:.0f}s "
f"(last: {last_err})"
)
def request_stream(
self, cmd: str, overall_timeout_s: float
) -> Iterator[Event | Response]:
"""Yield each Event, then the terminating Response."""
self.send(cmd)
deadline = time.monotonic() + overall_timeout_s
while True:
line = self._readline(deadline)
if line is None:
raise TimeoutError(f"Timed out during streaming {cmd!r}")
parsed = parse_line(line)
if parsed is None:
continue
yield parsed
if isinstance(parsed, Response):
return

2
bringup/requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
pyserial>=3.5
esptool>=4.6

474
bringup/stages.py Normal file
View File

@@ -0,0 +1,474 @@
"""One function per bring-up stage. Each is explicit and independently
runnable from the operator prompt — no implicit sequencing between them."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
from protocol import Link, Response, Event
@dataclass
class Tally:
passed: int = 0
failed: int = 0
skipped: int = 0
warnings: int = 0
def note_pass(self) -> None: self.passed += 1
def note_fail(self) -> None: self.failed += 1
def note_skip(self) -> None: self.skipped += 1
def note_warn(self) -> None: self.warnings += 1
def _prompt(msg: str, accept_skip: bool = True) -> str:
"""Block for operator input. Returns 'run', 'skip', or 'quit'."""
hint = " [Enter=run" + (", s=skip" if accept_skip else "") + ", q=quit]"
ans = input(msg + hint + ": ").strip().lower()
if ans in ("", "y", "yes", "r", "run"):
return "run"
if ans in ("s", "skip") and accept_skip:
return "skip"
if ans in ("q", "quit", "exit"):
return "quit"
# anything else — treat as run, operator can always quit with Ctrl-C
return "run"
def _show_response(label: str, r: Response) -> None:
bag = " ".join(f"{k}={v}" for k, v in r.fields.items())
print(f" [{r.status}] {label} {bag}")
# ---------------------------------------------------------------------------
# Stage 0 — Begin + identify
# ---------------------------------------------------------------------------
def stage_begin(link: Link, t: Tally) -> None:
print("\n== Stage 0 — Begin ==")
print(" Waiting for device to finish booting ...")
r = link.wait_ready("BU.BEGIN", per_attempt_s=1.5, overall_timeout_s=30.0)
_show_response("begin", r)
if r.status != "OK":
t.note_fail(); raise SystemExit("Device did not enter bring-up mode")
r = link.request("BU.INFO")
_show_response("info", r)
(t.note_pass if r.status == "OK" else t.note_fail)()
print(f" -> fw={r.get('fw')} board={r.get('board', '?')} reset={r.get('reset')} "
f"heap={r.get('heap')}")
# ---------------------------------------------------------------------------
# Stage 1 — Flash & persistence
# ---------------------------------------------------------------------------
def stage_flash(link: Link, t: Tally) -> None:
print("\n== Stage 1 — Flash & storage ==")
if _prompt(" Run flash roundtrip + log head/tail check") != "run":
t.note_skip(); return
r = link.request("BU.FLASH", overall_timeout_s=10)
_show_response("flash", r)
(t.note_pass if r.status == "OK" else t.note_fail)()
# ---------------------------------------------------------------------------
# Stage 2 — I2C + LEDs
# ---------------------------------------------------------------------------
def stage_i2c_led(link: Link, t: Tally) -> None:
import threading
import time
print("\n== Stage 2 — I2C / TCA9555 / LEDs ==")
if _prompt(" Probe TCA9555 and run LED waterfall") != "run":
t.note_skip(); return
r = link.request("BU.I2C")
_show_response("i2c", r)
if r.status != "OK":
t.note_fail(); return
t.note_pass()
# Waterfall: 000 → 001 → 011 → 111 → 110 → 100 → 000, looped.
pattern = [0b000, 0b001, 0b011, 0b111, 0b110, 0b100]
step_s = 0.25
stop = threading.Event()
def driver() -> None:
i = 0
while not stop.is_set():
try:
link.request(f"BU.LED {pattern[i % len(pattern)]}",
overall_timeout_s=2.0)
except Exception as e:
print(f" [led] {e!r}")
break
i += 1
# Sleep in small chunks so we can stop promptly.
for _ in range(int(step_s * 20)):
if stop.is_set():
return
time.sleep(0.05)
th = threading.Thread(target=driver, daemon=True)
th.start()
print(" LED waterfall running — watch the board.")
try:
while True:
ans = input(" Did the waterfall look correct? [y/n]: ").strip().lower()
if ans.startswith("y"):
verdict = "pass"; break
if ans.startswith("n"):
verdict = "fail"; break
finally:
stop.set()
th.join(timeout=3)
try:
link.request("BU.LED 0", overall_timeout_s=2.0)
except Exception:
pass
if verdict == "pass":
t.note_pass()
else:
print(" LED visual check FAILED")
t.note_fail()
# ---------------------------------------------------------------------------
# Stage 3 — ADC + battery calibration
# ---------------------------------------------------------------------------
def stage_adc(link: Link, t: Tally, calibrate: bool = True) -> None:
print("\n== Stage 3 — Analog front-end ==")
if _prompt(" Read ADC snapshot (battery / current / FAULT / VOC)") != "run":
t.note_skip(); return
r = link.request("BU.ADC")
_show_response("adc", r)
if r.status != "OK":
t.note_fail(); return
t.note_pass()
bat_V = r.getf("bat_V", 0.0)
print(f" -> battery reports {bat_V:.3f} V")
# V5-specific checks — INFORMATIONAL only on the current V5 boards,
# because both VOC and FAULT are wired straight to the ESP32 with no
# external resistors. Without a pull-down on VOC the pin floats at VDD
# (IC has a ~10 µA internal current source toward VDD, needs an
# external RL_VOC to GND to set the OC threshold). Without a pull-up
# on FAULT (open-drain, active-low) the line is undefined. Neither
# reading is actionable in firmware until the board is respun —
# GPIO36/39 are input-only on ESP32 and don't have internal pulls.
# See docs/SC-F001/README.md "V5 hardware caveats".
if "voc_mv" in r.fields:
voc_mv = r.geti("voc_mv")
in_range = 330 <= voc_mv <= 660
print(f" INFO: VOC={voc_mv} mV "
f"({'in' if in_range else 'out of'} datasheet linear range 330660 mV)")
if "fault" in r.fields:
if r.geti("fault") == 1:
print(" INFO: FAULT pin reads LOW — expected on V5 boards without "
"an external pull-up on the FAULT trace")
if not calibrate:
return
_run_battery_cal(link, t)
def _run_battery_cal(link: Link, t: Tally) -> None:
from calibrate import single_point_offset, verify
print("\n-- Battery voltage calibration --")
while True:
ans = input(" Run calibration now? [y/n]: ").strip().lower()
if ans.startswith("n"):
t.note_skip(); return
if ans.startswith("y"):
break
# Read current K and raw mV.
k_r = link.request("BU.PARAM GET V_SENS_K")
if k_r.status != "OK":
print(" Could not read V_SENS_K"); t.note_fail(); return
k = k_r.getf("value")
adc_r = link.request("BU.ADC")
bat_mv = adc_r.getf("bat_mv")
if bat_mv == 0.0:
print(" ADC read looks bogus (mv=0)"); t.note_fail(); return
raw_ans = input(" Measure the battery at the board terminals with a DMM.\n"
" Enter true voltage (V): ").strip()
try:
v_true = float(raw_ans)
except ValueError:
print(" Not a number — skipping cal"); t.note_skip(); return
cal = single_point_offset(bat_mv, v_true, k)
predicted = verify(bat_mv, cal)
print(f" bat_mv={bat_mv:.0f} K={k:.10f} new OFFSET={cal.offset:+.6f} V")
print(f" predicted V_bat after cal = {predicted:.3f} (true = {v_true:.3f})")
if input(" Write this to the device? [y/n]: ").strip().lower().startswith("y"):
wr = link.request(f"BU.PARAM SET V_SENS_OFFSET {cal.offset:.6f}")
_show_response("param.set", wr)
if wr.status != "OK":
t.note_fail(); return
# Verify by re-reading the ADC
check = link.request("BU.ADC")
new_V = check.getf("bat_V")
err = new_V - v_true
print(f" Post-cal bat_V = {new_V:.3f} (err {err*1000:+.1f} mV)")
if abs(err) < 0.05:
t.note_pass()
else:
print(" WARN: residual error > 50 mV")
t.note_warn()
else:
print(" Calibration not written (operator declined)")
t.note_skip()
# ---------------------------------------------------------------------------
# Stage 4 — Discrete sensors (mandatory edges)
# ---------------------------------------------------------------------------
SENSOR_NAMES = ["SAFETY"] # JACK and DRIVE are checked via the relay pulse stage.
def stage_sensors(link: Link, t: Tally) -> None:
"""Live-print safety-sensor edges until operator presses Enter.
Drive and jack sensors are encoder-style and only trip while the motor
runs — they're verified as a side effect of Stage 5 relay pulses.
"""
import threading
print("\n== Stage 4 — Sensor live view ==")
print(" Live state of all 4 sensor pins is printed below when any one")
print(" changes. Per-edge events also print as they arrive.")
print(" Poke each sensor by hand / magnet / jumper to verify it responds.")
print(" SAFETY must show both break and make to pass; the others are")
print(" diagnostic only (drive/jack are properly tested in Stage 5).")
print(" Press Enter when you're satisfied.")
state = {"make": False, "break": False}
last_state_line = {"v": ""}
def reader() -> None:
try:
for item in link.request_stream("BU.SENSORS.WATCH 0",
overall_timeout_s=3600):
if isinstance(item, Event):
if item.cmd == "sensor":
name = item.fields.get("name")
edge = item.fields.get("edge")
if name == "SAFETY" and edge in state:
state[edge] = True
print(f" [{name}] {edge}")
elif item.cmd == "state":
# Live snapshot of all four sensors. Only print when
# the level line changes, so steady state doesn't spam.
f = item.fields
line = (f"SAFETY={f.get('SAFETY','?')} "
f"DRIVE={f.get('DRIVE','?')} "
f"JACK={f.get('JACK','?')} "
f"AUX={f.get('AUX','?')} "
f"isr=(s={f.get('isr_s','?')} "
f"d={f.get('isr_d','?')} "
f"j={f.get('isr_j','?')} "
f"a={f.get('isr_a','?')})")
if line != last_state_line["v"]:
print(f" [state] {line}")
last_state_line["v"] = line
elif isinstance(item, Response):
# terminating OK after we aborted
return
except Exception as e: # pragma: no cover — defensive
print(f" [reader] {e!r}")
th = threading.Thread(target=reader, daemon=True)
th.start()
input(" Press Enter when SAFETY has been actuated: ")
# Kick the firmware out of its watch loop: any byte aborts.
link.send("") # just the \n
th.join(timeout=3)
if state["make"] and state["break"]:
print(" SAFETY: PASS (saw break and make)")
t.note_pass()
else:
missing = [k for k, v in state.items() if not v]
print(f" SAFETY: FAIL — missed {missing}")
t.note_fail()
# ---------------------------------------------------------------------------
# Stage 5 — Relay bridges
# ---------------------------------------------------------------------------
# (bridge, dir, ms, (dI_min, dI_max), check_edges)
# check_edges → bridge has an encoder-style sensor; pulse must produce
# at least one edge on it.
RELAY_TESTS = [
("SENSORS", "ON", 200, (0.0, 0.0), False),
("DRIVE", "FWD", 1000, (0.5, 25.0), True),
("DRIVE", "REV", 1000, (0.5, 25.0), True),
("JACK", "UP", 500, (0.2, 25.0), True),
("JACK", "DOWN", 500, (0.2, 25.0), True),
("AUX", "FWD", 150, (0.1, 25.0), False),
]
def stage_relays(link: Link, t: Tally) -> None:
print("\n== Stage 5 — Relay bridges ==")
print(" PRECONDITIONS:")
print(" - Battery connected, fuse in place")
print(" - Drive wheels off ground / disengaged")
print(" - Safety interlock asserted (SAFETY sensor HIGH)")
if _prompt(" Proceed with live relay tests", accept_skip=True) != "run":
print(" Relay stage SKIPPED"); t.note_skip(); return
for bridge, direction, ms, (lo, hi), check_edges in RELAY_TESTS:
prompt = f" Pulse {bridge} {direction} for {ms} ms"
if _prompt(prompt) != "run":
t.note_skip(); continue
r = link.request(f"BU.RELAY {bridge} {direction} {ms}",
overall_timeout_s=ms / 1000.0 + 5.0)
_show_response(f"{bridge}/{direction}", r)
if r.status == "SKIP":
print(" Device refused (safety?)"); t.note_skip(); continue
if r.status != "OK":
t.note_fail(); continue
if bridge == "SENSORS":
t.note_pass(); continue
i_before = r.getf("I_before")
i_mid = r.getf("I_mid")
delta = abs(i_mid - i_before)
tripped = r.geti("tripped") == 1
edges = r.geti("edges")
edge_str = f" edges={edges}" if check_edges else ""
print(f" |ΔI| = {delta:.2f} A (expected {lo}-{hi}) "
f"tripped={tripped}{edge_str}")
if tripped:
print(" FAIL: efuse tripped"); t.note_fail(); continue
if check_edges and edges <= 0:
print(f" FAIL: {bridge} sensor saw no edges — motor not turning?")
t.note_fail(); continue
if lo <= delta <= hi:
t.note_pass()
else:
print(f" WARN: ΔI outside nominal")
t.note_warn()
# ---------------------------------------------------------------------------
# Stage 6 — Radio & connectivity
# ---------------------------------------------------------------------------
def stage_rf(link: Link, t: Tally) -> None:
import threading
print("\n== Stage 6a — RF 433 MHz ==")
if _prompt(" Watch for RF remote codes") != "run":
t.note_skip(); return
print(" Press buttons on the RF remote. Codes will print live.")
print(" Press Enter to stop.")
count = {"seen": 0}
def reader() -> None:
try:
for item in link.request_stream("BU.RF.WATCH 0",
overall_timeout_s=3600):
if isinstance(item, Event) and item.cmd == "rf":
code = item.fields.get("code", "?")
print(f" rf code={code}")
count["seen"] += 1
elif isinstance(item, Response):
return
except Exception as e: # pragma: no cover
print(f" [reader] {e!r}")
th = threading.Thread(target=reader, daemon=True)
th.start()
input(" Press Enter when done: ")
link.send("") # abort the watch
th.join(timeout=3)
print(f" -> {count['seen']} code(s) captured")
(t.note_pass if count["seen"] > 0 else t.note_warn)()
def stage_wifi(link: Link, t: Tally) -> None:
print("\n== Stage 6b — WiFi + web UI ==")
if _prompt(" Start SoftAP and wait for a client to load the web UI") != "run":
t.note_skip(); return
r = link.request("BU.WIFI.START", overall_timeout_s=20)
_show_response("wifi.start", r)
if r.status != "OK":
t.note_fail(); return
ssid = r.get("ssid", "?")
print(f"\n Connect a device to WiFi SSID `{ssid}` and open http://192.168.4.1/")
print(" Waiting for a client to associate and load the page... (Ctrl+C to abort)")
try:
for item in link.request_stream("BU.WIFI.WAIT", overall_timeout_s=3600):
if isinstance(item, Event):
print(f" {item.cmd} {' '.join(f'{k}={v}' for k,v in item.fields.items())}")
elif isinstance(item, Response):
_show_response("wifi.wait", item)
(t.note_pass if item.status == "OK" else t.note_fail)()
break
except KeyboardInterrupt:
print(" WiFi wait aborted by operator"); t.note_skip()
# ---------------------------------------------------------------------------
# End
# ---------------------------------------------------------------------------
def stage_end(link: Link, t: Tally) -> None:
print("\n== Stage — End ==")
if _prompt(" Exit bring-up mode (device will reboot)") != "run":
print(" Leaving device in bring-up mode — reset manually to resume normal firmware.")
return
r = link.request("BU.END", overall_timeout_s=5)
_show_response("end", r)
# Device reboots; no further response expected.
# ---------------------------------------------------------------------------
# Top-level driver
# ---------------------------------------------------------------------------
Stage = Callable[[Link, Tally], None]
def all_stages(skip_relays: bool = False, no_calibrate: bool = False) -> list[Stage]:
stages: list[Stage] = [
stage_begin,
stage_flash,
stage_i2c_led,
lambda link, t: stage_adc(link, t, calibrate=not no_calibrate),
stage_sensors,
]
if not skip_relays:
stages.append(stage_relays)
stages.extend([
stage_rf,
stage_wifi,
stage_end,
])
return stages

View File

@@ -4,7 +4,7 @@
include(${CMAKE_CURRENT_LIST_DIR}/version.cmake)
idf_component_register(
SRCS main.c log_test.c partition_test.c i2c.c rtc.c storage.c uart_comms.c control_fsm.c power_mgmt.c rf_433.c rtc.c sensors.c solar.c webserver.c simple_dns_server.c comms.c bt_hid.c # list the source files of this component
SRCS main.c log_test.c partition_test.c i2c.c rtc.c storage.c uart_comms.c control_fsm.c power_mgmt.c bringup.c rf_433.c rtc.c sensors.c solar.c webserver.c simple_dns_server.c comms.c bt_hid.c # list the source files of this component
INCLUDE_DIRS "." "${CMAKE_BINARY_DIR}"
PRIV_INCLUDE_DIRS # optional, add here private include directories

672
main/bringup.c Normal file
View File

@@ -0,0 +1,672 @@
/*
* bringup.c — manufacturing / bench bring-up procedure over UART.
*
* Line protocol specified in docs/SC-F001/BRINGUP.md §3.
* All responses are written with printf() so they share the UART stream
* with uart_comms; keep every line short and grep-friendly.
*
* Distinct from the per-module POST routines (adc_post, i2c_post, ...) that
* run on every boot — those are the actual power-on self-tests.
*/
#include "bringup.h"
#include "board_config.h"
#include "control_fsm.h"
#include "i2c.h"
#include "power_mgmt.h"
#include "rf_433.h"
#include "sensors.h"
#include "solar.h"
#include "storage.h"
#include "version.h"
#include "webserver.h"
#include "esp_err.h"
#include "esp_log.h"
#include "esp_partition.h"
#include "esp_system.h"
#include "esp_task_wdt.h"
#include "esp_timer.h"
#include "esp_wifi.h"
#include "driver/gpio.h"
#include "driver/uart.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include <math.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#define TAG "BRINGUP"
static bool s_active = false;
static int64_t s_start_us = 0;
static volatile int s_http_reqs = 0;
/* -------- state helpers -------- */
bool bringup_mode_is_active(void) { return s_active; }
void bringup_notify_http_request(void) { s_http_reqs++; }
void bringup_mode_enter(void)
{
extern relay_port_t last_relay_state;
s_active = true;
s_start_us = esp_timer_get_time();
s_http_reqs = 0;
/* All bridges off, sensor rail (P10) up — system is still on. */
relay_port_t idle = {.bridges = {.SENSORS = 1}};
last_relay_state = idle;
i2c_relays_idle();
}
void bringup_mode_exit(void)
{
extern relay_port_t last_relay_state;
s_active = false;
relay_port_t idle = {.bridges = {.SENSORS = 1}};
last_relay_state = idle;
i2c_relays_idle();
}
static float elapsed_s(void)
{
return (esp_timer_get_time() - s_start_us) / 1e6f;
}
/* -------- output helpers -------- */
__attribute__((format(printf, 2, 3)))
static void emit(const char *kind, const char *fmt, ...)
{
printf("BU.%s ", kind);
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
printf("\n");
fflush(stdout);
}
#define OK(fmt, ...) emit("OK", fmt, ##__VA_ARGS__)
#define ERR(fmt, ...) emit("ERR", fmt, ##__VA_ARGS__)
#define SKIP(fmt, ...) emit("SKIP", fmt, ##__VA_ARGS__)
#define EVT(fmt, ...) emit("EVENT", fmt, ##__VA_ARGS__)
/* -------- tokenizer -------- */
/* strsep-style: mutate s in place, return next token (no quotes handled). */
static char *next_tok(char **s)
{
if (!s || !*s) return NULL;
while (**s == ' ' || **s == '\t') (*s)++;
if (**s == '\0') return NULL;
char *start = *s;
while (**s && **s != ' ' && **s != '\t') (*s)++;
if (**s) { *(*s)++ = '\0'; }
return start;
}
static void str_upper(char *s)
{
for (; *s; s++) if (*s >= 'a' && *s <= 'z') *s -= 32;
}
/* -------- parameter lookup by name -------- */
static int param_find(const char *name)
{
for (int i = 0; i < NUM_PARAMS; i++) {
if (strcmp(name, get_param_name((param_idx_t)i)) == 0) return i;
}
return -1;
}
/* -------- command handlers -------- */
static void cmd_begin(char *args)
{
(void)args;
bringup_mode_enter();
OK("begin fw=%s board=%s t=%.2f",
FIRMWARE_VERSION,
#ifdef BOARD_V5
"V5",
#else
"V4",
#endif
elapsed_s());
}
static void cmd_end(char *args)
{
(void)args;
OK("end reboot t=%.2f", elapsed_s());
fflush(stdout);
vTaskDelay(pdMS_TO_TICKS(200));
bringup_mode_exit();
esp_restart();
}
static void cmd_info(char *args)
{
(void)args;
esp_reset_reason_t r = esp_reset_reason();
const char *rname = "?";
switch (r) {
case ESP_RST_POWERON: rname = "POWERON"; break;
case ESP_RST_EXT: rname = "EXT"; break;
case ESP_RST_SW: rname = "SW"; break;
case ESP_RST_PANIC: rname = "PANIC"; break;
case ESP_RST_INT_WDT: rname = "INT_WDT"; break;
case ESP_RST_TASK_WDT: rname = "TASK_WDT";break;
case ESP_RST_WDT: rname = "WDT"; break;
case ESP_RST_DEEPSLEEP:rname = "DEEPSLEEP";break;
case ESP_RST_BROWNOUT: rname = "BROWNOUT";break;
default: break;
}
OK("info reset=%s heap=%u min_heap=%u fw=%s build=%s",
rname,
(unsigned)esp_get_free_heap_size(),
(unsigned)esp_get_minimum_free_heap_size(),
FIRMWARE_VERSION, BUILD_DATE);
}
static void cmd_flash(char *args)
{
(void)args;
const esp_partition_t *p = esp_partition_find_first(
ESP_PARTITION_TYPE_DATA, 0x42, "post_test");
if (!p) { ERR("flash reason=\"no post_test partition\""); return; }
/* Erase, write pattern, read back, compare. */
const size_t N = 64;
uint8_t pattern[N], readback[N];
for (size_t i = 0; i < N; i++) pattern[i] = (uint8_t)(i ^ 0xA5);
esp_err_t e = esp_partition_erase_range(p, 0, 4096);
if (e != ESP_OK) { ERR("flash stage=erase err=%s", esp_err_to_name(e)); return; }
e = esp_partition_write(p, 0, pattern, N);
if (e != ESP_OK) { ERR("flash stage=write err=%s", esp_err_to_name(e)); return; }
e = esp_partition_read(p, 0, readback, N);
if (e != ESP_OK) { ERR("flash stage=read err=%s", esp_err_to_name(e)); return; }
if (memcmp(pattern, readback, N) != 0) {
ERR("flash stage=compare mismatch");
return;
}
OK("flash post_part=roundtrip log_head=%u log_tail=%u partitions_size=%u",
(unsigned)log_get_head(), (unsigned)log_get_tail(),
(unsigned)(p->address));
}
static void cmd_i2c(char *args)
{
(void)args;
/* i2c_post re-probes TCA9555 by reading its input register. */
esp_err_t e = i2c_post();
if (e != ESP_OK) { ERR("i2c tca9555=nack err=%s", esp_err_to_name(e)); return; }
OK("i2c tca9555=ack");
}
static void cmd_led(char *args)
{
/* BU.LED <mask 0..7> [on|off] — just writes mask if given; ignores the
* optional second token and uses it when present to set/clear. */
char *s = args;
char *tok = next_tok(&s);
if (!tok) { ERR("led reason=\"missing mask\""); return; }
unsigned mask = (unsigned)strtoul(tok, NULL, 0);
if (mask > 7) mask = 7;
i2c_set_led1((uint8_t)mask);
OK("led mask=%u", mask);
}
static void cmd_adc_once(void)
{
int bat_mv = get_bat_raw_mv();
float bat_V = get_battery_V();
#ifdef BOARD_V5
int isens_mv = get_isens_raw_mv();
float isens_A = -(isens_mv - 1650.0f) / 13.2f;
int voc_mv = get_voc_raw_mv();
int fault = get_hw_overcurrent_fault() ? 1 : 0;
OK("adc bat_mv=%d bat_V=%.3f isens_mv=%d isens_A=%+.2f voc_mv=%d fault=%d",
bat_mv, bat_V, isens_mv, isens_A, voc_mv, fault);
#else
OK("adc bat_mv=%d bat_V=%.3f", bat_mv, bat_V);
#endif
}
static void cmd_adc(char *args)
{
(void)args;
cmd_adc_once();
}
static void cmd_adc_stream(char *args)
{
char *s = args;
char *t = next_tok(&s);
int sec = t ? atoi(t) : 5;
if (sec < 1) sec = 1;
if (sec > 60) sec = 60;
int64_t end_us = esp_timer_get_time() + (int64_t)sec * 1000000;
while (esp_timer_get_time() < end_us) {
#ifdef BOARD_V5
int bat_mv = get_bat_raw_mv();
int isens_mv = get_isens_raw_mv();
EVT("adc t=%.2f bat_mv=%d isens_mv=%d", elapsed_s(), bat_mv, isens_mv);
#else
int bat_mv = get_bat_raw_mv();
EVT("adc t=%.2f bat_mv=%d", elapsed_s(), bat_mv);
#endif
esp_task_wdt_reset();
vTaskDelay(pdMS_TO_TICKS(200));
}
OK("adc.stream sec=%d", sec);
}
static void cmd_sensors_watch(char *args)
{
/* BU.SENSORS.WATCH [sec]
* sec omitted or 0 → watch indefinitely; exit when any byte arrives
* on UART0 (operator hit Enter on the host side).
* sec > 0 → watch for that many seconds, then return.
*/
char *s = args;
char *t = next_tok(&s);
int sec = t ? atoi(t) : 0;
bool indefinite = (sec <= 0);
if (!indefinite && sec > 600) sec = 600;
static const char *names[N_SENSORS] = {"SAFETY", "DRIVE", "JACK", "AUX"};
bool last_state[N_SENSORS];
bool make_seen[N_SENSORS] = {false};
bool break_seen[N_SENSORS] = {false};
/* Read the GPIO directly — the normal sensor pipeline runs in the FSM
* task (sensors_check()), which is paused while bring-up is active, so
* get_sensor() returns stale state. Active-low → inverted. */
#define _SENS_RAW(i) (!gpio_get_level(sensor_pins[i]))
extern uint8_t sensor_pins[N_SENSORS];
for (int i = 0; i < N_SENSORS; i++) last_state[i] = _SENS_RAW(i);
int64_t end_us = esp_timer_get_time() + (int64_t)sec * 1000000;
int64_t next_snapshot_us = esp_timer_get_time();
while (indefinite || esp_timer_get_time() < end_us) {
/* Abort on any UART input. */
size_t available = 0;
if (uart_get_buffered_data_len(UART_NUM_0, &available) == ESP_OK
&& available > 0) {
uint8_t drain[64];
while (available > 0) {
int n = uart_read_bytes(UART_NUM_0, drain, sizeof(drain), 0);
if (n <= 0) break;
available = (size_t)n < available ? available - (size_t)n : 0;
}
break;
}
for (int i = 0; i < N_SENSORS; i++) {
bool now = _SENS_RAW(i);
if (now != last_state[i]) {
const char *edge = now ? "make" : "break";
if (now) make_seen[i] = true; else break_seen[i] = true;
EVT("sensor name=%s edge=%s t=%.2f",
names[i], edge, elapsed_s());
last_state[i] = now;
}
}
/* Periodic state snapshot of all four sensors — includes the
* no-connect slot so a floating/misrouted pin is visible. */
int64_t now_us = esp_timer_get_time();
if (now_us >= next_snapshot_us) {
next_snapshot_us = now_us + 250000; /* 250 ms */
EVT("state t=%.2f SAFETY=%d DRIVE=%d JACK=%d AUX=%d "
"isr_s=%u isr_d=%u isr_j=%u isr_a=%u",
elapsed_s(),
(int)_SENS_RAW(SENSOR_SAFETY),
(int)_SENS_RAW(SENSOR_DRIVE),
(int)_SENS_RAW(SENSOR_JACK),
(int)_SENS_RAW(SENSOR_AUX2),
(unsigned)get_sensor_isr_edges(SENSOR_SAFETY),
(unsigned)get_sensor_isr_edges(SENSOR_DRIVE),
(unsigned)get_sensor_isr_edges(SENSOR_JACK),
(unsigned)get_sensor_isr_edges(SENSOR_AUX2));
}
esp_task_wdt_reset();
vTaskDelay(pdMS_TO_TICKS(10));
}
#undef _SENS_RAW
/* Summary: which sensors saw both edges. */
char buf[128];
size_t used = 0;
for (int i = 0; i < N_SENSORS; i++) {
const char *tag =
(make_seen[i] && break_seen[i]) ? "both"
: make_seen[i] ? "make_only"
: break_seen[i] ? "break_only"
: "none";
int n = snprintf(buf + used, sizeof(buf) - used,
"%s%s=%s", used ? " " : "", names[i], tag);
if (n < 0 || (size_t)n >= sizeof(buf) - used) break;
used += n;
}
OK("sensors.watch sec=%d %s", indefinite ? -1 : sec, buf);
}
static bool parse_bridge(const char *s, bridge_t *out)
{
if (strcasecmp(s, "DRIVE") == 0) { *out = BRIDGE_DRIVE; return true; }
if (strcasecmp(s, "JACK") == 0) { *out = BRIDGE_JACK; return true; }
if (strcasecmp(s, "AUX") == 0) { *out = BRIDGE_AUX; return true; }
return false;
}
static bool parse_dir(const char *s, uint8_t *out)
{
if (strcasecmp(s, "FWD") == 0 || strcasecmp(s, "UP") == 0)
{ *out = BRIDGE_FWD; return true; }
if (strcasecmp(s, "REV") == 0 || strcasecmp(s, "DOWN") == 0)
{ *out = BRIDGE_REV; return true; }
if (strcasecmp(s, "ON") == 0)
{ *out = BRIDGE_ON; return true; }
if (strcasecmp(s, "OFF") == 0)
{ *out = BRIDGE_OFF; return true; }
return false;
}
static void cmd_relay(char *args)
{
char *s = args;
char *t_bridge = next_tok(&s);
char *t_dir = next_tok(&s);
char *t_ms = next_tok(&s);
if (!t_bridge || !t_dir) { ERR("relay reason=\"usage: <bridge> <dir> [ms]\""); return; }
int ms = t_ms ? atoi(t_ms) : 150;
if (ms < 10) ms = 10;
if (ms > 2000) ms = 2000;
if (!get_is_safe()) { SKIP("relay reason=\"safety open\""); return; }
/* P10 / sensor power rail. Default is ON; pulse it OFF to prove the line
* can be driven, then restore. */
if (strcasecmp(t_bridge, "SENSORS") == 0) {
i2c_relays_sleep(); /* P10 low */
vTaskDelay(pdMS_TO_TICKS(ms));
i2c_relays_idle(); /* P10 high (restore) */
OK("relay bridge=SENSORS ms=%d", ms);
return;
}
bridge_t b;
uint8_t dir;
if (!parse_bridge(t_bridge, &b)) { ERR("relay reason=\"bad bridge\""); return; }
if (!parse_dir(t_dir, &dir)) { ERR("relay reason=\"bad dir\""); return; }
/* Sample current before, pulse, sample at midpoint, release, sample after.
* FSM is paused during POST, so we drive process_bridge_current() ourselves
* to refresh isens[].current before each read. We also mirror the relay
* state into last_relay_state so V5's shared autozero gate (which looks at
* last_relay_state to decide if bridges are powered) stays truthful. */
extern volatile int64_t fsm_now;
extern relay_port_t last_relay_state;
vTaskDelay(pdMS_TO_TICKS(50)); /* let things settle */
fsm_now = esp_timer_get_time();
process_bridge_current(b);
float I_before = get_bridge_A(b);
/* Which sensor to count edges on during the pulse — ISR-level counter,
* doesn't depend on sensors_check() running. */
sensor_t which_sensor = N_SENSORS;
if (b == BRIDGE_DRIVE) which_sensor = SENSOR_DRIVE;
else if (b == BRIDGE_JACK) which_sensor = SENSOR_JACK;
uint32_t edges_before = (which_sensor < N_SENSORS)
? get_sensor_isr_edges(which_sensor) : 0;
relay_port_t rs = {.raw = 0};
switch (b) {
case BRIDGE_DRIVE: rs.bridges.DRIVE = dir; break;
case BRIDGE_JACK: rs.bridges.JACK = dir; break;
case BRIDGE_AUX: rs.bridges.AUX = dir; break;
default: ERR("relay reason=\"bad bridge idx\""); return;
}
rs.bridges.SENSORS = 1;
last_relay_state = rs;
i2c_set_relays(rs);
vTaskDelay(pdMS_TO_TICKS(ms / 2));
fsm_now = esp_timer_get_time();
process_bridge_current(b);
float I_mid = get_bridge_A(b);
vTaskDelay(pdMS_TO_TICKS(ms - ms / 2));
relay_port_t idle = {.bridges = {.SENSORS = 1}};
last_relay_state = idle;
i2c_relays_idle();
vTaskDelay(pdMS_TO_TICKS(50));
fsm_now = esp_timer_get_time();
process_bridge_current(b);
float I_after = get_bridge_A(b);
float heat = efuse_get_heat(b);
int tripped = efuse_get(b) ? 1 : 0;
uint32_t edges_after = (which_sensor < N_SENSORS)
? get_sensor_isr_edges(which_sensor) : 0;
uint32_t edges = edges_after - edges_before;
OK("relay bridge=%s dir=%s ms=%d I_before=%+.2f I_mid=%+.2f I_after=%+.2f heat=%.3f tripped=%d edges=%u",
t_bridge, t_dir, ms, I_before, I_mid, I_after, heat, tripped, (unsigned)edges);
}
static void cmd_rf_watch(char *args)
{
/* BU.RF.WATCH [sec]
* sec omitted or 0 → watch indefinitely; exit when any byte arrives
* on UART0 (operator hit Enter on the host side).
*/
char *s = args;
char *t = next_tok(&s);
int sec = t ? atoi(t) : 0;
bool indefinite = (sec <= 0);
if (!indefinite && sec > 600) sec = 600;
int64_t end_us = esp_timer_get_time() + (int64_t)sec * 1000000;
int count = 0;
/* Drain any stale code from before the watch started. */
(void)rf_433_peek_latest();
while (indefinite || esp_timer_get_time() < end_us) {
/* Abort on any UART input. */
size_t available = 0;
if (uart_get_buffered_data_len(UART_NUM_0, &available) == ESP_OK
&& available > 0) {
uint8_t drain[64];
while (available > 0) {
int n = uart_read_bytes(UART_NUM_0, drain, sizeof(drain), 0);
if (n <= 0) break;
available = (size_t)n < available ? available - (size_t)n : 0;
}
break;
}
uint32_t code = rf_433_peek_latest();
if (code) {
EVT("rf code=0x%lX t=%.2f", (unsigned long)code, elapsed_s());
count++;
}
esp_task_wdt_reset();
vTaskDelay(pdMS_TO_TICKS(50));
}
OK("rf.watch sec=%d seen=%d", indefinite ? -1 : sec, count);
}
static void cmd_wifi_start(char *args)
{
(void)args;
esp_err_t e = webserver_init();
if (e != ESP_OK) { ERR("wifi.start err=%s", esp_err_to_name(e)); return; }
OK("wifi.start mode=AP ssid=\"%s\" ip=192.168.4.1",
get_param_string(PARAM_WIFI_SSID));
}
static void cmd_wifi_wait(char *args)
{
(void)args; /* no timeout — BRINGUP.md §4 Stage 6. Operator aborts via Ctrl+C. */
wifi_sta_list_t sta = {0};
int last_n = 0;
while (1) {
if (esp_wifi_ap_get_sta_list(&sta) == ESP_OK && sta.num > last_n) {
EVT("wifi.assoc n=%d t=%.2f", sta.num, elapsed_s());
last_n = sta.num;
}
/* Bail when at least one client is associated AND the web UI has
* issued at least one request (notified by webserver). */
if (last_n > 0 && s_http_reqs > 0) break;
esp_task_wdt_reset();
vTaskDelay(pdMS_TO_TICKS(200));
}
OK("wifi.wait clients=%d http_reqs=%d", last_n, s_http_reqs);
}
static void cmd_fsm(char *args)
{
char *s = args;
char *sub = next_tok(&s);
if (!sub) sub = "INFO";
str_upper(sub);
if (strcmp(sub, "INFO") == 0) {
OK("fsm state=%d err=%d idle=%d",
(int)fsm_get_state(), (int)fsm_get_error(), fsm_is_idle() ? 1 : 0);
} else {
ERR("fsm reason=\"unknown subcommand\"");
}
}
static void cmd_solar_tick(char *args)
{
(void)args;
(void)solar_run_fsm();
OK("solar tick=ok chg_bulk=%d",
gpio_get_level(GPIO_NUM_26));
}
/* BU.PARAM GET <key> | BU.PARAM SET <key> <value> */
static void cmd_param(char *args)
{
char *s = args;
char *op = next_tok(&s);
char *key = next_tok(&s);
if (!op || !key) { ERR("param reason=\"usage: GET <k> | SET <k> <v>\""); return; }
str_upper(op);
int idx = param_find(key);
if (idx < 0) { ERR("param reason=\"unknown key\" key=%s", key); return; }
param_type_e type = get_param_type((param_idx_t)idx);
if (strcmp(op, "GET") == 0) {
param_value_t v = get_param_value_t((param_idx_t)idx);
switch (type) {
case PARAM_TYPE_u16: OK("param key=%s value=%u", key, v.u16); break;
case PARAM_TYPE_i16: OK("param key=%s value=%d", key, v.i16); break;
case PARAM_TYPE_u32: OK("param key=%s value=%u", key, (unsigned)v.u32); break;
case PARAM_TYPE_i32: OK("param key=%s value=%d", key, (int)v.i32); break;
case PARAM_TYPE_f32: OK("param key=%s value=%.9g", key, v.f32); break;
case PARAM_TYPE_f64: OK("param key=%s value=%.17g",key, v.f64); break;
case PARAM_TYPE_str: OK("param key=%s value=\"%s\"", key, get_param_string((param_idx_t)idx)); break;
}
return;
}
if (strcmp(op, "SET") == 0) {
char *val = next_tok(&s);
if (!val) { ERR("param reason=\"missing value\""); return; }
esp_err_t e = ESP_OK;
if (type == PARAM_TYPE_str) {
e = set_param_string((param_idx_t)idx, val);
} else {
param_value_t v = {0};
switch (type) {
case PARAM_TYPE_u16: v.u16 = (uint16_t)strtoul(val, NULL, 0); break;
case PARAM_TYPE_i16: v.i16 = (int16_t)strtol(val, NULL, 0); break;
case PARAM_TYPE_u32: v.u32 = (uint32_t)strtoul(val, NULL, 0); break;
case PARAM_TYPE_i32: v.i32 = (int32_t)strtol(val, NULL, 0); break;
case PARAM_TYPE_f32: v.f32 = strtof(val, NULL); break;
case PARAM_TYPE_f64: v.f64 = strtod(val, NULL); break;
default: break;
}
e = set_param_value_t((param_idx_t)idx, v);
}
if (e != ESP_OK) { ERR("param reason=\"set failed\" err=%s", esp_err_to_name(e)); return; }
e = commit_params();
if (e != ESP_OK) { ERR("param reason=\"commit failed\" err=%s", esp_err_to_name(e)); return; }
OK("param key=%s set=ok committed=yes", key);
return;
}
ERR("param reason=\"unknown op\" op=%s", op);
}
/* -------- dispatcher -------- */
typedef void (*cmd_fn)(char *args);
struct cmd_entry {
const char *name; /* uppercased, no BU. prefix */
cmd_fn fn;
};
static const struct cmd_entry CMDS[] = {
{ "BEGIN", cmd_begin },
{ "END", cmd_end },
{ "INFO", cmd_info },
{ "FLASH", cmd_flash },
{ "I2C", cmd_i2c },
{ "LED", cmd_led },
{ "ADC", cmd_adc },
{ "ADC.STREAM", cmd_adc_stream },
{ "SENSORS.WATCH", cmd_sensors_watch},
{ "RELAY", cmd_relay },
{ "RF.WATCH", cmd_rf_watch },
{ "WIFI.START", cmd_wifi_start },
{ "WIFI.WAIT", cmd_wifi_wait },
{ "FSM", cmd_fsm },
{ "SOLAR.TICK", cmd_solar_tick },
{ "PARAM", cmd_param },
};
void bringup_handle_line(char *line)
{
/* Trim leading whitespace. */
while (*line == ' ' || *line == '\t') line++;
if (*line == '\0') return;
/* Expect "BU.<CMD> [args]" */
if (strncasecmp(line, "BU.", 3) != 0) {
ERR("dispatch reason=\"missing BU. prefix\"");
return;
}
line += 3;
/* Split CMD token from args. */
char *sp = line;
while (*sp && *sp != ' ' && *sp != '\t') sp++;
char *args = sp;
if (*sp) { *sp = '\0'; args = sp + 1; }
str_upper(line);
for (size_t i = 0; i < sizeof(CMDS)/sizeof(CMDS[0]); i++) {
if (strcmp(line, CMDS[i].name) == 0) {
CMDS[i].fn(args);
return;
}
}
ERR("dispatch reason=\"unknown command\" cmd=%s", line);
}

35
main/bringup.h Normal file
View File

@@ -0,0 +1,35 @@
/*
* bringup.h — manufacturing / bench bring-up protocol over UART.
*
* See docs/SC-F001/BRINGUP.md for the line protocol and stage procedure.
*
* While bring-up mode is active:
* - uart_comms routes every input line to bringup_handle_line() instead of
* the JSON parser.
* - control_fsm pauses (stays in STATE_IDLE, skips relay writes).
* - BU.* commands drive the hardware directly via i2c_set_relays etc.
*
* Note: this is distinct from the per-module POST routines (adc_post,
* i2c_post, storage_post) which run at normal boot and are genuinely
* power-on self-tests.
*/
#ifndef MAIN_BRINGUP_H_
#define MAIN_BRINGUP_H_
#include <stdbool.h>
void bringup_mode_enter(void);
void bringup_mode_exit(void);
bool bringup_mode_is_active(void);
/* Called by uart_comms when a full line has been received in bring-up mode.
* `line` is null-terminated, no trailing \r\n. Response is printed via
* printf(); caller doesn't need to capture it. */
void bringup_handle_line(char *line);
/* Counted by webserver when the root page is served. BU.WIFI.WAIT uses it
* to confirm that an associated client actually loaded the UI. */
void bringup_notify_http_request(void);
#endif /* MAIN_BRINGUP_H_ */

View File

@@ -13,6 +13,7 @@
#include "esp_timer.h"
#include "i2c.h"
#include "power_mgmt.h"
#include "bringup.h"
#include "rtc_wdt.h"
#include "driver/gpio.h"
#include "sc_err.h"
@@ -65,6 +66,10 @@ fsm_state_t fsm_get_state() {
return current_state;
}
bool fsm_is_idle(void) {
return current_state == STATE_IDLE;
}
static int64_t timer_end = 0;
static int64_t timer_start = 0;
static inline void set_timer(uint64_t us) {
@@ -186,9 +191,15 @@ void control_task(void *param) {
while (enabled) {
vTaskDelayUntil(&xLastWakeTime, xFrequency);
fsm_now = esp_timer_get_time();
/* Bring-up tool owns the relays and ADCs while active — skip. */
if (bringup_mode_is_active()) {
esp_task_wdt_reset();
continue;
}
bool log = false;
/**** READ INPUTS ****/
for (uint8_t i = 0; i < N_BRIDGES; i++) {
process_bridge_current(i);

View File

@@ -104,6 +104,7 @@ void fsm_set_remaining_distance(float x);
int8_t fsm_get_current_progress(int8_t remainder);
fsm_state_t fsm_get_state();
bool fsm_is_idle(void);
int8_t get_bridge_state(bridge_t bridge);

View File

@@ -68,6 +68,14 @@ esp_err_t i2c_set_relays(relay_port_t states) {
return tca_write_word_8(TCA_REG_OUTPUT1, states.raw);
}
esp_err_t i2c_relays_idle(void) {
return i2c_set_relays((relay_port_t){.bridges = {.SENSORS = 1}});
}
esp_err_t i2c_relays_sleep(void) {
return i2c_set_relays((relay_port_t){.raw = 0});
}
esp_err_t i2c_set_led1(uint8_t state) {
// push 3 LSB to top
return tca_write_word_8(TCA_REG_OUTPUT0, state<<5);

View File

@@ -55,6 +55,13 @@ esp_err_t i2c_stop(void);
esp_err_t i2c_set_relays(relay_port_t states);
esp_err_t i2c_set_led1(uint8_t state);
/* Normal run state: all bridges off, but P10 (sensor rail) held high.
* Use whenever "everything off" is really "all motors off, system is still on". */
esp_err_t i2c_relays_idle(void);
/* Sleep state: all bridges off AND P10 low, cutting power to the sensors. */
esp_err_t i2c_relays_sleep(void);
esp_err_t i2c_poll_buttons();
bool i2c_get_button_tripped(uint8_t button);

View File

@@ -18,6 +18,7 @@
#include "rf_433.h"
#include "bt_hid.h"
#include "webserver.h"
#include "bringup.h"
#include "comms_events.h"
#include "version.h"
#include <string.h>
@@ -160,7 +161,9 @@ void app_main(void) {esp_task_wdt_add(NULL);
init_critical("I2C", i2c_init);
drive_leds(LED_BOOTING); // LED on ASAP after I2C is up
i2c_post(); // verify TCA9555 responds
i2c_set_relays((relay_port_t){.raw=0});
/* Sensors powered from boot; FSM will keep P10 high on every tick.
* Drops back to 0 on soft_idle_enter() (sleep). */
i2c_relays_idle();
if (rtc_xtal_init() != ESP_OK) ESP_LOGE(TAG, "RTC FAILED");
@@ -321,7 +324,13 @@ void app_main(void) {esp_task_wdt_add(NULL);
while(true) {
vTaskDelayUntil(&xLastWakeTime, xFrequency);
/* Bring-up tool owns the LEDs, buttons, and relays while active. */
if (bringup_mode_is_active()) {
esp_task_wdt_reset();
continue;
}
/* In soft idle: slow poll (5s) via direct GPIO, no I2C. */
// TODO: Critique & confirm what we do in idle
if (soft_idle_is_active()) {

View File

@@ -584,6 +584,37 @@ bool get_hw_overcurrent_fault(void)
#endif
}
static int read_mv_channel(adc_channel_t ch)
{
int raw = 0, mv = 0;
if (adc_oneshot_read(adc1_handle, ch, &raw) != ESP_OK) return 0;
if (adc_cali_raw_to_voltage(adc_cali_handle, raw, &mv) != ESP_OK) return 0;
return mv;
}
int get_bat_raw_mv(void)
{
return read_mv_channel(PIN_V_SENS_BAT);
}
int get_isens_raw_mv(void)
{
#ifdef BOARD_V5
return read_mv_channel(PIN_V_ISENS_MAIN);
#else
return 0;
#endif
}
int get_voc_raw_mv(void)
{
#ifdef BOARD_V5
return read_mv_channel(PIN_V_VOC);
#else
return 0;
#endif
}
efuse_trip_t efuse_get(bridge_t bridge)
{
if (bridge >= N_BRIDGES) return false;

View File

@@ -34,6 +34,11 @@ float get_battery_V();
// Always false on V4.
bool get_hw_overcurrent_fault(void);
// Raw, unfiltered ADC reads — used by POST. Return 0 on error.
int get_bat_raw_mv(void);
int get_isens_raw_mv(void); // V5 only — returns 0 on V4
int get_voc_raw_mv(void); // V5 only — returns 0 on V4
void disable_autozero(bridge_t bridge);
bool get_bridge_overcurrent(bridge_t bridge, float threshold);
bool get_bridge_spike(bridge_t bridge, float threshold);

View File

@@ -43,6 +43,15 @@ bool controls_enabled = true;
// Temporary storage for learned keycodes (not committed to params yet)
static int64_t temp_keycodes[NUM_RF_BUTTONS] = {0};
// Most recently decoded raw code, read-and-clear via rf_433_peek_latest().
static volatile uint32_t latest_code = 0;
uint32_t rf_433_peek_latest(void) {
uint32_t c = latest_code;
latest_code = 0;
return c;
}
// For rmt_rx_register_event_callbacks
static bool rfrx_done(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *udata) {
BaseType_t high_task_wakeup = pdFALSE;
@@ -137,6 +146,7 @@ static void rf_433_receiver_task(void* param) {
// If we got a valid code, process it
if (code) {
latest_code = code;
ESP_LOGI(TAG, "GOT KEYCODE 0x%lx [%d]", (long) code, len);
if (learn_flag >= 0) {

View File

@@ -11,11 +11,14 @@
#define NUM_RF_BUTTONS 8
int64_t receive_keycode(void);
esp_err_t rf_433_init();
esp_err_t rf_433_stop();
/* Consume-once peek of the most recently decoded raw code. Returns 0 if
* none has arrived since the last call. Used by the bring-up RF.WATCH
* stage; does not interfere with the normal decode/dispatch path. */
uint32_t rf_433_peek_latest(void);
void rf_433_learn_keycode(uint8_t index);
void rf_433_cancel_learn_keycode();

View File

@@ -81,10 +81,12 @@ void soft_idle_enter(void)
{
if (in_soft_idle) return;
in_soft_idle = true;
ESP_LOGI("RTC", "Entering soft idle (WiFi/BT off, LEDs off)");
ESP_LOGI("RTC", "Entering soft idle (WiFi/BT off, LEDs off, sensors off)");
webserver_stop();
bt_hid_stop();
i2c_set_led1(0);
/* Drop P10 to kill sensor rail power while we're asleep. */
i2c_relays_sleep();
}
bool soft_idle_is_active(void) { return in_soft_idle; }
@@ -95,6 +97,8 @@ void soft_idle_exit(void)
if (!in_soft_idle) return;
in_soft_idle = false;
ESP_LOGI("RTC", "Exiting soft idle");
/* Bring sensor rail back before anything else tries to read sensors. */
i2c_relays_idle();
webserver_restart_wifi();
bt_hid_resume();
rtc_reset_shutdown_timer();

View File

@@ -17,14 +17,21 @@
static const char* TAG = "SENS";
#ifdef BOARD_V5
// V5 labels 2/3/4/1 → IO14/16/19/27 → SAFETY/JACK/DRIVE/nc
// V5 physical connectors:
// J1 = IO27 → SAFETY
// J2 = IO14 → JACK
// J3 = IO23 → n/c (AUX) (J3 unreliable on the V5 board, moved DRIVE off)
// J4 = IO19 → DRIVE
// Array order matches sensor_t: SAFETY, DRIVE, JACK, AUX2
uint8_t sensor_pins[N_SENSORS] = {GPIO_NUM_14, GPIO_NUM_19, GPIO_NUM_16, GPIO_NUM_27};
uint8_t sensor_pins[N_SENSORS] = {GPIO_NUM_27, GPIO_NUM_19, GPIO_NUM_14, GPIO_NUM_23};
#else // BOARD_V4
uint8_t sensor_pins[N_SENSORS] = {GPIO_NUM_27, GPIO_NUM_14, GPIO_NUM_16, GPIO_NUM_19};
#endif
volatile int16_t sensor_count[N_SENSORS] = {0};
/* Bumped directly in the ISR on every edge — does not require sensors_check()
* to run, so it works even while bring-up pauses the FSM task. */
volatile uint32_t sensor_isr_edge_count[N_SENSORS] = {0};
static volatile uint64_t sensor_last_isr_time[N_SENSORS] = {0};
static volatile bool sensor_stable_state[N_SENSORS] = {false};
static QueueHandle_t sensor_event_queue = NULL;
@@ -59,6 +66,8 @@ static void IRAM_ATTR sensor_isr_handler(void* arg) {
uint64_t now = esp_timer_get_time();
sensor_last_isr_time[i] = now;
sensor_isr_edge_count[i]++;
sensor_event_t evt = {.sensor_id = i, .level = !gpio_get_level(gpio_num)};
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(sensor_event_queue, &evt, &xHigherPriorityTaskWoken);
@@ -69,6 +78,17 @@ esp_err_t sensors_init() {
uint64_t pin_mask = 0;
for (uint8_t i = 0; i < N_SENSORS; i++) pin_mask |= (1ULL << sensor_pins[i]);
/* Belt-and-suspenders: force each sensor pin into digital-GPIO mode with
* pull-up explicitly applied. gpio_config()'s pull_up_en is known to be
* shadowed by RTC-subsystem settings on RTC-capable pins (IO27, 32, 33,
* 3439). gpio_reset_pin() detaches any lingering RTC/peripheral mux,
* and the explicit gpio_set_pull_mode() call goes through the right
* path regardless of which sub-block owns the pin. */
for (uint8_t i = 0; i < N_SENSORS; i++) {
gpio_reset_pin(sensor_pins[i]);
}
gpio_config_t io_conf = {
.pin_bit_mask = pin_mask,
.mode = GPIO_MODE_INPUT,
@@ -78,6 +98,10 @@ esp_err_t sensors_init() {
};
ESP_ERROR_CHECK(gpio_config(&io_conf));
for (uint8_t i = 0; i < N_SENSORS; i++) {
ESP_ERROR_CHECK(gpio_set_pull_mode(sensor_pins[i], GPIO_PULLUP_ONLY));
}
sensor_event_queue = xQueueCreate(16, sizeof(sensor_event_t));
if (!sensor_event_queue) {
ESP_LOGE(TAG, "Failed to create sensor queue");
@@ -165,7 +189,9 @@ void sensors_check() {
ESP_LOGI(TAG, "Safety sensor went HIGH, starting break timer");
} else if (is_safe && (now - safety_high_start_time >= SAFETY_BREAK_DEBOUNCE_US)) {
is_safe = false;
i2c_set_relays((relay_port_t){.raw=0});
/* Kill all bridges but leave the sensor rail up — we still
* want to observe the safety input. */
i2c_relays_idle();
ESP_LOGI(TAG, "SAFETY BREAK - Relays disabled");
}
}
@@ -198,4 +224,9 @@ int16_t get_sensor_counter(sensor_t i) {
void set_sensor_counter(sensor_t i, int16_t to) {
sensor_count[i] = to;
}
uint32_t get_sensor_isr_edges(sensor_t i) {
if (i >= N_SENSORS) return 0;
return sensor_isr_edge_count[i];
}

View File

@@ -27,6 +27,11 @@ void reset_sensor_counter(sensor_t i);
void set_sensor_counter(sensor_t i, int16_t to);
int16_t get_sensor_counter(sensor_t i);
/* Raw ISR-level edge count. Bumped on every GPIO transition by the
* sensor ISR regardless of whether sensors_check() is running; safe to
* read during bring-up while the FSM task is paused. */
uint32_t get_sensor_isr_edges(sensor_t i);
bool get_sensor(sensor_t i);
bool get_is_safe(void);

View File

@@ -1,5 +1,6 @@
#include "uart_comms.h"
#include "comms.h"
#include "bringup.h"
#include "cJSON.h"
#include "driver/uart.h"
#include "esp_log.h"
@@ -143,12 +144,20 @@ static void process_command(char *cmd) {
while (*cmd == ' ' || *cmd == '\t') {
cmd++;
}
// Ignore empty commands
if (*cmd == '\0') {
return;
}
// Route bring-up traffic to the BU parser. BU.BEGIN flips the mode flag
// so the subsequent lines in the same session come here too.
if (bringup_mode_is_active() ||
strncasecmp(cmd, "BU.", 3) == 0) {
bringup_handle_line(cmd);
return;
}
// Convert to uppercase for command matching
char command[16] = {0};
int i = 0;
@@ -208,36 +217,37 @@ void uart_event_task(void *pvParameters) {
if (len > 0) {
for (int i = 0; i < len; i++) {
char c = (char)data[i];
// Echo character
printf("%c", c);
fflush(stdout);
bool quiet = bringup_mode_is_active();
// Echo character (suppressed in bring-up mode — machine-parseable output)
if (!quiet) { printf("%c", c); fflush(stdout); }
// Handle backspace
if (c == '\b' || c == 127) {
if (cmd_pos > 0) {
cmd_pos--;
printf(" \b"); // Clear character on screen
if (!quiet) { printf(" \b"); fflush(stdout); }
}
continue;
}
// Handle newline/carriage return
if (c == '\n' || c == '\r') {
cmd_buffer[cmd_pos] = '\0';
if (!quiet) printf("\n");
if (cmd_pos > 0) {
process_command(cmd_buffer);
}
cmd_pos = 0;
if (!bringup_mode_is_active()) {
printf("\n> ");
fflush(stdout);
}
continue;
}
// Handle newline/carriage return
if (c == '\n' || c == '\r') {
cmd_buffer[cmd_pos] = '\0';
printf("\n");
if (cmd_pos > 0) {
process_command(cmd_buffer);
}
cmd_pos = 0;
printf("\n> ");
fflush(stdout);
continue;
}
// Add to buffer if not full
if (cmd_pos < CMD_MAX_LEN - 1) {
cmd_buffer[cmd_pos++] = c;

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,7 @@
#include <Arduino.h>
const unsigned char PROGMEM html_content_gz[] = {
0x1f, 0x8b, 0x08, 0x00, 0xb5, 0x89, 0xe7, 0x69, 0x02, 0xff, 0xed, 0x3d, 0xfd, 0x57, 0xdb, 0x48,
0x1f, 0x8b, 0x08, 0x00, 0xe4, 0x3c, 0xe9, 0x69, 0x02, 0xff, 0xed, 0x3d, 0xfd, 0x57, 0xdb, 0x48,
0x92, 0x3f, 0xef, 0xfc, 0x15, 0x4d, 0x92, 0x21, 0x52, 0x10, 0xc2, 0x86, 0x64, 0x66, 0xd6, 0x46,
0x66, 0x09, 0x98, 0x0d, 0x93, 0x04, 0x78, 0xd8, 0x24, 0x33, 0xc7, 0xf1, 0x90, 0x6c, 0xb5, 0xb1,
0x06, 0x59, 0xf2, 0x4a, 0x32, 0xc4, 0x6b, 0xfc, 0xbf, 0x5f, 0x55, 0x7f, 0x48, 0xad, 0x0f, 0x1b,

View File

@@ -13,6 +13,7 @@
#include "endian.h"
#include "esp_ota_ops.h"
#include "esp_timer.h"
#include "bringup.h"
#include "power_mgmt.h"
#include "rf_433.h"
#include "rtc.h"
@@ -65,11 +66,13 @@ char http_buffer[4096];
/* Handler to serve the HTML page */
static esp_err_t root_get_handler(httpd_req_t *req) {
//ESP_LOGI(TAG, "root_get_handler");
if (req == NULL) {
ESP_LOGE(TAG, "Null request pointer");
return ESP_FAIL;
}
bringup_notify_http_request();
// Send the HTML response
esp_err_t err = httpd_resp_set_type(req, "text/html");