From 5590709f291f4fbc2e3afa4c4bbbac7265fdd05a Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AD=99=E6=98=A5=E9=98=B3?= Date: Fri, 28 Nov 2025 19:45:12 +0800 Subject: [PATCH] =?utf8?q?gpio=E6=B5=8B=E8=AF=95=E3=80=81=E5=A3=B0?= =?utf8?q?=E9=9F=B3=E6=B5=8B=E8=AF=95=E3=80=81=E8=93=9D=E7=89=99=E6=89=AB?= =?utf8?q?=E6=8F=8F=E6=B5=8B=E8=AF=95=20=E9=83=BD=E5=B7=B2=E9=85=8D?= =?utf8?q?=E9=BD=90=E3=80=82=E6=9A=82=E6=97=B6=20gpio=E6=B5=8B=E8=AF=95?= =?utf8?q?=E6=9C=8921=E5=AF=B9=E4=B8=8D=E8=BF=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Serial Debug 2025-11-28 142459.txt | 2903 +++++++++++++++++ Serial Debug 2025-11-28 142752.txt | Bin 0 -> 26779 bytes Serial Debug 2025-11-28 171600.txt | 496 +++ Serial Debug 2025-11-28 173749.txt | 578 ++++ Serial Debug 2025-11-28 182925.txt | 491 +++ Serial Debug 2025-11-28 184242.txt | 985 ++++++ Serial Debug 2025-11-28 193616.txt | 507 +++ check_gpio_in_doc.py | 78 + .../brandy/brandy_standard/board_init.c | 2 +- .../brandy/brandy_standard/thread_init.c | 10 +- .../brandy_evb/board_config/board_leiniao.h | 202 +- .../chips/brandy/porting/uart/uart_porting.c | 16 +- .../battery/service/battery_driver.cpp | 8 +- code/sdk/zhihui/utils/custom_utils_at_cmd.c | 75 +- code/sdk/zhihui/utilscpp/CMakeLists.txt | 1 + ...15\347\224\250\350\257\264\346\230\216.md" | 264 ++ ...5\347\224\250\350\257\264\346\230\216.pdf" | Bin 0 -> 284533 bytes code/sdk/zhihui/utilscpp/audio_test.cpp | 19 +- code/sdk/zhihui/utilscpp/bt_scan_test.cpp | 517 +++ code/sdk/zhihui/utilscpp/custom_utilscpp.h | 29 + code/sdk/zhihui/utilscpp/gpio_test.cpp | 329 +- generate_gpio_config_from_log.py | 107 + gpio_connection_table.md | 61 + gpio_scan_comparison.md | 122 + gpio_scan_result_analysis.md | 97 + gpio_scan_same_log_comparison.md | 105 + gpio_test_config_from_scan.json | 60 + mark_gpio_in_board.py | 103 + pdf_to_md.py | 67 + 29 files changed, 8107 insertions(+), 125 deletions(-) create mode 100644 Serial Debug 2025-11-28 142459.txt create mode 100644 Serial Debug 2025-11-28 142752.txt create mode 100644 Serial Debug 2025-11-28 171600.txt create mode 100644 Serial Debug 2025-11-28 173749.txt create mode 100644 Serial Debug 2025-11-28 182925.txt create mode 100644 Serial Debug 2025-11-28 184242.txt create mode 100644 Serial Debug 2025-11-28 193616.txt create mode 100644 check_gpio_in_doc.py create mode 100644 "code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.md" create mode 100644 "code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.pdf" create mode 100644 code/sdk/zhihui/utilscpp/bt_scan_test.cpp create mode 100644 generate_gpio_config_from_log.py create mode 100644 gpio_connection_table.md create mode 100644 gpio_scan_comparison.md create mode 100644 gpio_scan_result_analysis.md create mode 100644 gpio_scan_same_log_comparison.md create mode 100644 gpio_test_config_from_scan.json create mode 100644 mark_gpio_in_board.py create mode 100644 pdf_to_md.py diff --git a/Serial Debug 2025-11-28 142459.txt b/Serial Debug 2025-11-28 142459.txt new file mode 100644 index 000000000..80a874058 --- /dev/null +++ b/Serial Debug 2025-11-28 142459.txt @@ -0,0 +1,2903 @@ +» AT^PMADDVOTE +» AT^PMADDVOTE +« MCU has got pm_id_debug vote + +MCU WAKEUP SUCCESS + +OK~ +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth... +APP|[BtScan] Ensuring Bluetooth stack is enabled... +[osal_msg_queue_create:25]:qName:BT_SERVICE_MSG qID=0x19 +APP|charger not plugged ,disable charge ! +APP|[BtScan] Bluetooth stack enabled successfully +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[BtScan] Bluetooth enabled, waiting for stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|[BtScan] Device discovered: 28:11:06:68:66:3C +APP|[BtScan] Device name: WatchDemo +APP|[BtScan] RSSI update: 28:11:06:68:66:3C, RSSI=-71 dBm +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=28:11:06:68:66:3C, RSSI=-71 dBmAPP|, Name=WatchDemoAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=28:11:06:68:66:3C, RSSI=-71 dBmAPP|, Name=WatchDemoAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +APP|[BtScan] Final scan results: +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=28:11:06:68:66:3C, RSSI=-71 dBmAPP|, Name=WatchDemoAPP| +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +APP|[BtScan] Scan not running +BT SCAN TEST STOP: Success +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +APP|[BtScan] Scan not running +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth... +APP|[BtScan] Ensuring Bluetooth stack is enabled... +APP|[BtScan] Bluetooth stack enabled successfully +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[BtScan] Bluetooth enabled, waiting for stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|[BtScan] Device discovered: 28:11:06:68:66:3C +APP|[BtScan] Device name: WatchDemo +APP|[BtScan] RSSI update: 28:11:06:68:66:3C, RSSI=-67 dBm +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=28:11:06:68:66:3C, RSSI=-67 dBmAPP|, Name=WatchDemoAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +» AT^GPIOTEST=2 +« APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] No GPIO pairs configured, initializing with default config... +APP|[GpioTest] Invalid input pin name: HSUART_CTS +APP|[GpioTest] Parsed 34 GPIO pairs from JSON +APP|[GpioTest] Default config initialized successfully +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: FAILED - Output LOW but input read 1 (expected LOW) +APP|[GpioTest] Test completed: 0 passed, 34 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=28:11:06:68:66:3C, RSSI=-67 dBmAPP|, Name=WatchDemoAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=3 +« APP|[GpioTest] Stopping GPIO test... +APP|[GpioTest] Test not running +GPIO TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=3 +« APP|[GpioTest] Stopping GPIO test... +APP|[GpioTest] Test not running +GPIO TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +PM_ID_BUTTON:1884267328 +fac:id : 0 +APP|mipi_tx has been enable! +APP|Succ read lcd id! Lcd id: 0x5598 +APP|timeout when wait phy ready +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +Brightness: 0% → Fall Edge: 7 → LED Current: 2.5mA +[Graphic Error] [ResumeSlice: 225]No valid slice to resume +fac:id : 0 +fac:id : 0 +fac:id : 0 +fac:id : 0 +APP|app_main run start. +APP|sys_slp: 0x0 +fac:id : 0 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +fac:id : 0 +fac:id : 0 +fac:id : 0 +fac:id : 0 +APP|app_main run start. +APP|sys_slp: 0x0 +����������������������������x�����������x������xx����������������������x�������������x������x�������������������������������x�������������x�������������x������������������x������x���������������x����������������������������������������������������������������x������������������������������������������������������xx���������������x�������������������������������������������������������������x������x�����������x������������x�����������x�����x���������������������������������x��������x���������������������������x��������������������������x�����x�����������������������������������������������������x������������x����������������������������x���������xx�x�������������������x�����������������x����������x��������������x��������������x�x�����������xx��������x����������g7��7��.�����7w�77���1����������x������������������x������������������������x����������������x��������������������x������������������x������������������x����������������x�������������������������������������x���������x�����������������������������������������x�����������x��������������������������������������������������������������������������������x�������������������x������������������������������������x����x�����x�����������������������������������������������������������������������������������������������������������������������������������x������������x��������������x���������������x��x�x������x������������x��������x�����x���������������������x����x�x����x��������������������x���������������������������x��������������������������������������������������������������������������������������������x�����������������������������������������������x������������������������������������������������x���������x�����������������x������������������������APP|App uart init succ. +APP|ipc reg info:int en:0,int:0,int sts:0. +APP|int clr:0,clr sts:0,int set:0. +APP|pmu_power_on_init begin +APP|pmu_power_�n_init end +chip temperature=28.000000(tmp=1830) +APP|Flash id is 186585, init success +APP|entering NormalMode +APP|partition init success +APP|upg init success +[osal_msg_queue_create:25]:qName:nv_write_task qID=0x0 +APP|calibration nv is not active + +cpu 0 entering scheduler +app_init start ok +APP|thread_main start +APP|find nand flash chip id: 0x0B52 +APP|nand flash XT26Q02D start init +APP| +nandflash init start. +APP|xt26q02d_init +APP|nandflash A0 Reg:0x0 +APP|nandflash B0 Reg:0x11 +APP|nandflash C0 Reg:0x2 +APP| +nandflash_qspi_init success +APP| + nandflash init end. +APP|nandflash init success +APP|Succ read lcd id! Lcd id: 0x5598 +get nv local_addr : ******4f71f0 +CALLENDAR:year = 1970, month = 1, day = 1, hour = 0, minute = 0, second = 0 +callendar timestamp = 0 +sync time timestamp 0, timezone_in_quarters 0 +[A][aw88082_i2c_init:353]aw88082 i2c init success +[osal_msg_queue_create:25]:qName:sap_msg qID=0x1 +APP|audio init OK +APP|**********startup info********** +APP|os init class is liteos. +APP|store init class is nandflash. +APP|display init class is MIPI. +APP|board init class is E0B4. +APP|psram density is 32MB. +APP|**********startup info********** +APP|No need to upgrade... +[osal_msg_queue_create:25]:qName:at_queue qID=0x2 +[osal_msg_queue_create:25]:qName:graphic_at_service_queue qID=0x3 +[osal_msg_queue_create:25]:qName:app_at_service_queue qID=0x4 +[osal_msg_queue_create:25]:qName:audio_at_service_queue qID=0x5 +[osal_msg_queue_create:25]:qName:bt_cmd_queue qID=0x6 +[osal_msg_queue_create:25]:qName:media_at_service_queue qID=0x7 +[osal_msg_queue_create:25]:qName:dfx_msg qID=0x8 +[osal_msg_queue_create:25]:qName:transmit qID=0x9 +APP|Turning on LCD backlight... +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +Brightness: 0% → Fall Edge: 7 → LED Current: 2.5mA +APP|LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO) +[DISPLAY I/] GrallocInitialize: gralloc initialize success +[DISPLAY I/] LayerInitialize: layer initialize success +[DISPLAY I/] PrintLayerInfo: layerInfo: +[DISPLAY I/] PrintLayerInfo: type = 0 +[DISPLAY I/] PrintLayerInfo: width = 360 +[DISPLAY I/] PrintLayerInfo: height = 360 +[DISPLAY I/] PrintLayerInfo: bpp = 24 +[DISPLAY I/] PrintLayerInfo: pixFormat = 17 +[DISPLAY I/] VGUInitialize: VGU initializes successfully +[DISPLAY I/] InitMemPool: Memory Pool has been inited. +[DISPLAY I/] GrallocInitialize: gralloc initialize success +====InitDfxCmd=== +[Graphic Error] [ResumeSlice: 225]No valid slice to resume +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:25000, event:5. +APP|No need to upgrade... +APP|SET DSP freq=3, div=6, codec freq=3, div=36 +[VAU_ERROR][vau_api_check_surface 108]input phy_addr is null! +[VAU_ERROR][vau_api_check_surface_list 144]vau check src surface[0] failed! +[VAU_ERROR][uapi_vau_compose 861]call vau_check_surface_list fail ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: uapi_vau_compose failure, ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: src[0] w:360 h:360 str:1472 fmt:0 cmp:0 rect:[0,0,360,360] outRect:[0,0,360,360] +[Graphic Error] [BlitImages: 889]RenderBlit failed! +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 600 +[A][ALERT][drv_sys_pon:297] DSP0 power on +APP|lwip_main run start. +APP|audio manager init ok +APP|app_main run start. +[osal_msg_queue_create:25]:qName:app_queue qID=0xb +APP|uapi_battery_init ! +[osal_msg_queue_create:25]:qName:battery_queue qID=0xc +APP|charger not plugged ,disable charge ! +APP|charger not plugged ,disable charge ! +APP|uapi_custom_cmd_service_init ! +[osal_msg_queue_create:25]:qName:custom_cmd_service_queue qID=0xd +APP|uapi_custom_fileoperate_service_init ! +[osal_msg_queue_create:25]:qName:custom_fileoperate_service_queue qID=0xe +APP|No need to upgrade... +[WEARABLE I/] InitBroadcastService start! +[WEARABLE I/] start! topicSubscriberInfo=0x0x6c104e68 +[WEARABLE I/] InitBroadcastService end! +[WEARABLE E/] LoadManagementFromFile open fail +[WEARABLE E/] SaveManagementToFile open fail +I ams starts successfully +I bms starts successfully +[00:00:01:718][I][Init:37]Locator service starts successfully +[00:00:01:719][D][Init:56][SERVICE:sensor_service]: Init begin +[WEARABLE I/] WatchConnectCmdRegister +I ams feature init success +I [BMS] bms feature init success +[00:00:01:722][I][Init:56]Locator feature init success +[00:00:01:724][D][GetTaskConfig:80][SERVICE:sensor_service]: GetTaskConfig begin +[WEARABLE I/] BroadcastService featureId=4294967295, queueId=536924516, serviceId=2 +[WEARABLE I/] BroadcastFeature featureId=0, queueId=536924516, serviceId=2 +E Fail to open dir:/user/dialpubkey! +E Failed to create file +E Public key write failed! +[WEARABLE I/] NativeAbility InstallAbility +D MemUtils::InitPSRam g_psramMemory = 6c200000 +[WEARABLE I/] InitNativeLauncher: Minimal startup - Blue window only +[WEARABLE I/] Cleared all existing views from RootView +[WEARABLE I/] Blue window created and displayed: 360x360 +I AbilityMgrSliteFeature::OnFeatureInitialize featureId = 0, queueId = 536924708, serviceId = 6 +[WEARABLE I/] NativeAbility OnActive +[WEARABLE E/] NativeAbility ResumeAbility 0 failed +I BundleMgrService::ServiceMessageHandle +[00:00:02:497][I][OnFeatureInitialize:85]Locator feature init +[00:00:02:498][I][InitAbility:84]initAbility start +[00:00:02:499][I][Initialize:71]ability constructed. +[00:00:02:500][E][InitAbility:90]Initialize gps ability, result 1 +[00:00:02:501][I][Initialize:54]LocatorAbility Initialize. +[00:00:02:502][I][OnFeatureInitialize:89]LocatorAbility initialize success +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:0, event:5. +[00:00:02:512][D][Initialize:62][SERVICE:sensor_service]: Initialize begin +[00:00:02:513][D][NewSensorInterfaceInstance:47]Get sensor device instance success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|M core run time 1276556, deepsleep time:0, lightsleep time:1183392, m sleep flag:0 +APP|M core deepsleep cnt:0, lightsleep cnt:26767 +APP|M core last veto id:0, last veto count:0, total_counts=1 +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x1 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=2 +» AT^GPIOTEST=2 +« APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] No GPIO pairs configured, initializing with default config... +APP|[GpioTest] Invalid input pin name: HSUART_CTS +APP|[GpioTest] Parsed 34 GPIO pairs from JSON +APP|[GpioTest] Default config initialized successfully +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: PASSED - S_AGPIO_L3 <-> S_AGPIO_L2 +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: PASSED - S_AGPIO_L1 <-> S_AGPIO_L4 +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: PASSED - S_AGPIO_L0 <-> S_AGPIO_R4 +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: PASSED - S_AGPIO_R5 <-> S_MGPIO14 +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: PASSED - S_MGPIO13 <-> S_AGPIO_R10 +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: PASSED - S_MGPIO11 <-> S_MGPIO12 +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: PASSED - S_AGPIO_R6 <-> S_MGPIO25 +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: PASSED - S_MGPIO20 <-> S_AGPIO_R7 +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: PASSED - S_MGPIO1 <-> S_MGPIO2 +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: PASSED - S_MGPIO9 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: PASSED - S_MGPIO7 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: PASSED - S_AGPIO_L28 <-> S_AGPIO_L18 +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: PASSED - S_HGPIO9 <-> S_AGPIO_L26 +APP|[GpioTest] Test completed: 13 passed, 21 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=2 +« APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: PASSED - S_AGPIO_L3 <-> S_AGPIO_L2 +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: PASSED - S_AGPIO_L1 <-> S_AGPIO_L4 +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: PASSED - S_AGPIO_L0 <-> S_AGPIO_R4 +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: PASSED - S_AGPIO_R5 <-> S_MGPIO14 +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: PASSED - S_MGPIO13 <-> S_AGPIO_R10 +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: PASSED - S_MGPIO11 <-> S_MGPIO12 +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: PASSED - S_AGPIO_R6 <-> S_MGPIO25 +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: PASSED - S_MGPIO20 <-> S_AGPIO_R7 +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: PASSED - S_MGPIO1 <-> S_MGPIO2 +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: PASSED - S_MGPIO9 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: PASSED - S_MGPIO7 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: PASSED - S_AGPIO_L28 <-> S_AGPIO_L18 +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: PASSED - S_HGPIO9 <-> S_AGPIO_L26 +APP|[GpioTest] Test completed: 13 passed, 21 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +�x����������������������x���������������������������������������������������������x�����������x�������������������������x������x������xx��������������������������x�����������������������������������������������x���������������������������������������������������������������������������������������������������������������������������������������������������x��������������������������������������������x�����������������������������x����������������������x����������������������������������������������������x�������������x��������x�������������������x�������������������������������x������x������������������������������������x��������������������������������������������������x�����xx���x�x���������x�������������������������x�����������������������������������������'7��7��.��ɇ�77��7w���1����������x������������������������������������������������������������������������������x�����������������x��xx�x�����������������������������������x����������������������������������������������������������������������������������x������������x������������������������������x��������x����������������������������������������������������������������������������������������������������������������������������������������������������������x��������������x����������������������������������������������x�����������������������������������������x�������������������������������x��������������������������������������������������������������������������������������������������������x��������������������������������������������������x����������������������������������������������������������x����x��������������������������x���������������������������������������������x�������x�����������x��xx�x������������������������x���������������������x���APP|App uart init succ. +APP|ipc reg info:int en:0,int:0,int sts:0. +APP|int clr:0,clr sts:0,int set:0. +APP|pmu_power_on_init begin +APP|pmu_power�on_init end +chip temperature=26.400000(tmp=1798) +APP|Flash id is 186585, init success +APP|entering NormalMode +APP|partition init success +APP|upg init success +[osal_msg_queue_create:25]:qName:nv_write_task qID=0x0 +APP|calibration nv is not active + +cpu 0 entering scheduler +app_init start ok +APP|thread_main start +APP|find nand flash chip id: 0x0B52 +APP|nand flash XT26Q02D start init +APP| +nandflash init start. +APP|xt26q02d_init +APP|nandflash A0 Reg:0x0 +APP|nandflash B0 Reg:0x11 +APP|nandflash C0 Reg:0x2 +APP| +nandflash_qspi_init success +APP| + nandflash init end. +APP|nandflash init success +APP|Succ read lcd id! Lcd id: 0x5598 +get nv local_addr : ******68663c +CALLENDAR:year = 1970, month = 1, day = 1, hour = 0, minute = 0, second = 0 +callendar timestamp = 0 +sync time timestamp 0, timezone_in_quarters 0 +[A][aw88082_i2c_init:353]aw88082 i2c init success +[osal_msg_queue_create:25]:qName:sap_msg qID=0x1 +APP|audio init OK +APP|**********startup info********** +APP|os init class is liteos. +APP|store init class is nandflash. +APP|display init class is MIPI. +APP|board init class is E0B4. +APP|psram density is 32MB. +APP|**********startup info********** +APP|No need to upgrade... +[osal_msg_queue_create:25]:qName:at_queue qID=0x2 +[osal_msg_queue_create:25]:qName:graphic_at_service_queue qID=0x3 +[osal_msg_queue_create:25]:qName:app_at_service_queue qID=0x4 +[osal_msg_queue_create:25]:qName:audio_at_service_queue qID=0x5 +[osal_msg_queue_create:25]:qName:bt_cmd_queue qID=0x6 +[osal_msg_queue_create:25]:qName:media_at_service_queue qID=0x7 +[osal_msg_queue_create:25]:qName:dfx_msg qID=0x8 +[osal_msg_queue_create:25]:qName:transmit qID=0x9 +APP|Turning on LCD backlight... +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +Brightness: 0% → Fall Edge: 7 → LED Current: 2.5mA +APP|LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO) +[DISPLAY I/] GrallocInitialize: gralloc initialize success +[DISPLAY I/] LayerInitialize: layer initialize success +[DISPLAY I/] PrintLayerInfo: layerInfo: +[DISPLAY I/] PrintLayerInfo: type = 0 +[DISPLAY I/] PrintLayerInfo: width = 360 +[DISPLAY I/] PrintLayerInfo: height = 360 +[DISPLAY I/] PrintLayerInfo: bpp = 24 +[DISPLAY I/] PrintLayerInfo: pixFormat = 17 +[DISPLAY I/] VGUInitialize: VGU initializes successfully +[DISPLAY I/] InitMemPool: Memory Pool has been inited. +[DISPLAY I/] GrallocInitialize: gralloc initialize success +====InitDfxCmd=== +[Graphic Error] [ResumeSlice: 225]No valid slice to resume +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:25000, event:5. +APP|No need to upgrade... +APP|SET DSP freq=3, div=6, codec freq=3, div=36 +[VAU_ERROR][vau_api_check_surface 108]input phy_addr is null! +[VAU_ERROR][vau_api_check_surface_list 144]vau check src surface[0] failed! +[VAU_ERROR][uapi_vau_compose 861]call vau_check_surface_list fail ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: uapi_vau_compose failure, ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: src[0] w:360 h:360 str:1472 fmt:0 cmp:0 rect:[0,0,360,360] outRect:[0,0,360,360] +[Graphic Error] [BlitImages: 889]RenderBlit failed! +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 500 +[A][ALERT][drv_sys_pon:297] DSP0 power on +APP|lwip_main run start. +APP|audio manager init ok +APP|app_main run start. +[osal_msg_queue_create:25]:qName:app_queue qID=0xb +APP|uapi_battery_init ! +[osal_msg_queue_create:25]:qName:battery_queue qID=0xc +APP|charger not plugged ,disable charge ! +APP|charger not plugged ,disable charge ! +APP|uapi_custom_cmd_service_init ! +[osal_msg_queue_create:25]:qName:custom_cmd_service_queue qID=0xd +APP|uapi_custom_fileoperate_service_init ! +[osal_msg_queue_create:25]:qName:custom_fileoperate_service_queue qID=0xe +APP|No need to upgrade... +[WEARABLE I/] InitBroadcastService start! +[WEARABLE I/] start! topicSubscriberInfo=0x0x6c104e68 +[WEARABLE I/] InitBroadcastService end! +[WEARABLE E/] LoadManagementFromFile open fail +[WEARABLE E/] SaveManagementToFile open fail +I ams starts successfully +I bms starts successfully +[00:00:01:687][I][Init:37]Locator service starts successfully +[00:00:01:689][D][Init:56][SERVICE:sensor_service]: Init begin +[WEARABLE I/] WatchConnectCmdRegister +I ams feature init success +I [BMS] bms feature init success +[00:00:01:692][I][Init:56]Locator feature init success +[00:00:01:693][D][GetTaskConfig:80][SERVICE:sensor_service]: GetTaskConfig begin +[WEARABLE I/] BroadcastService featureId=4294967295, queueId=536924516, serviceId=2 +[WEARABLE I/] BroadcastFeature featureId=0, queueId=536924516, serviceId=2 +E Fail to open dir:/user/dialpubkey! +E Failed to create file +E Public key write failed! +[WEARABLE I/] NativeAbility InstallAbility +D MemUtils::InitPSRam g_psramMemory = 6c200000 +[WEARABLE I/] InitNativeLauncher: Minimal startup - Blue window only +[WEARABLE I/] Cleared all existing views from RootView +[WEARABLE I/] Blue window created and displayed: 360x360 +I AbilityMgrSliteFeature::OnFeatureInitialize featureId = 0, queueId = 536924708, serviceId = 6 +[WEARABLE I/] NativeAbility OnActive +[WEARABLE E/] NativeAbility ResumeAbility 0 failed +I BundleMgrService::ServiceMessageHandle +[00:00:02:452][I][OnFeatureInitialize:85]Locator feature init +[00:00:02:453][I][InitAbility:84]initAbility start +[00:00:02:454][I][Initialize:71]ability constructed. +[00:00:02:455][E][InitAbility:90]Initialize gps ability, result 1 +[00:00:02:457][I][Initialize:54]LocatorAbility Initialize. +[00:00:02:458][I][OnFeatureInitialize:89]LocatorAbility initialize success +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:0, event:5. +[00:00:02:467][D][Initialize:62][SERVICE:sensor_service]: Initialize begin +[00:00:02:469][D][NewSensorInterfaceInstance:47]Get sensor device instance success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=2 +« [Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +» AT^GPIOTEST=2 +« Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] No GPIO pairs configured, initializing with default config... +APP|[GpioTest] Invalid input pin name: HSUART_CTS +APP|[GpioTest] Parsed 34 GPIO pairs from JSON +APP|[GpioTest] Default config initialized successfully +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: PASSED - S_AGPIO_L3 <-> S_AGPIO_L2 +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: PASSED - S_AGPIO_L1 <-> S_AGPIO_L4 +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: PASSED - S_AGPIO_L0 <-> S_AGPIO_R4 +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: PASSED - S_AGPIO_R5 <-> S_MGPIO14 +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: PASSED - S_MGPIO13 <-> S_AGPIO_R10 +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: PASSED - S_MGPIO11 <-> S_MGPIO12 +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: PASSED - S_AGPIO_R6 <-> S_MGPIO25 +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: PASSED - S_MGPIO20 <-> S_AGPIO_R7 +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: PASSED - S_MGPIO1 <-> S_MGPIO2 +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: PASSED - S_MGPIO9 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: PASSED - S_MGPIO7 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: PASSED - S_AGPIO_L28 <-> S_AGPIO_L18 +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: PASSED - S_HGPIO9 <-> S_AGPIO_L26 +APP|[GpioTest] Test completed: 13 passed, 21 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^AUDIOTEST=5 +« APP|[AudioTest] Starting audio test... +[00:01:38:305][W]{ai_media_service_init():808} AI media service already initialized +[00:01:38:307][E]{old_Start_AIVoice():1289} StartAIVoice +[00:01:38:308][I]{GetGlobalMutex():709} Global AI voice context mutex created successfully +[00:01:38:310][I]{old_Start_AIVoice():1325} Using custom input audio params: format=1, channels=1, sampleRate=16000 +[00:01:38:312][I]{old_Start_AIVoice():1340} Using custom output audio params: format=1, channels=1, sampleRate=16000 +[00:01:38:314][I]{old_Start_AIVoice():1356} OGG encapsulation disabled by parameter +[00:01:38:316][E]{old_Start_AIVoice():1362} g_aiVoiceContext->taskHandle +[00:01:38:317][I]{CreateAIVoiceQueue():747} AI voice input queue created successfully +APP|SET DSP freq=3, div=5, codec freq=3, div=36 +APP|set hifi mode=2. +APP|SET DSP freq=3, div=5, codec freq=3, div=36 +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 500 +[A][ALERT][drv_sys_pon:297] DSP0 power on +[00:01:38:373][I]{old_Start_AIVoice():1392} AI voice thread created successfully with name: AIVoiceThread +APP|[AudioTest] Play thread started +APP|[AudioTest] Pre-filled 5 periods (160 bytes, 5.0 ms) of PCM data +[00:01:38:377] E/TrackHandle :{StreamWriteTrack():720} track[0] is neither running or pause, write failed +[00:01:38:379] E/AudioManagerCWrapper :{AudioStreamOutStreamWrite():365} audio stream out play failed 0xffffffff +APP|[AudioTest] Audio test started successfully +APP|[AudioTest] Playing 1kHz tone, monitoring volume every 0.5s... +AUDIO TEST START: Success + Playing 1kHz tone, monitoring volume every 0.5s... +aw_sysst_check succed +aw_pa_start +[00:01:38:653][I]{CreateAIVoiceInputThread():960} AI voice input thread created successfully +[00:01:38:654][I]{RunAIVoice():1045} RunAIVoice: waiting for queue data... +[00:01:38:656][I]{AIVoiceInputThreadFunc():978} AI voice input thread started +APP|[AudioTest] Volume - RMS: 0.00% (-86.83 dB), Peak: 0.02% (-73.41 dB), Level: 静音 +APP|[AudioTest] Volume - RMS: 13.39% (-17.46 dB), Peak: 37.63% (-8.49 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.37% (-16.85 dB), Peak: 33.00% (-9.63 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.96% (-16.50 dB), Peak: 33.18% (-9.58 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.51% (-16.77 dB), Peak: 32.95% (-9.64 dB), Level: 中 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[AudioTest] Volume - RMS: 14.19% (-16.96 dB), Peak: 32.89% (-9.66 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.25% (-16.92 dB), Peak: 33.04% (-9.62 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.98% (-16.49 dB), Peak: 33.20% (-9.58 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.15% (-16.39 dB), Peak: 33.61% (-9.47 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.50% (-16.77 dB), Peak: 33.29% (-9.55 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.14% (-16.40 dB), Peak: 33.55% (-9.49 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 13.86% (-17.16 dB), Peak: 33.33% (-9.54 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.09% (-16.42 dB), Peak: 33.33% (-9.54 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.06% (-16.45 dB), Peak: 33.28% (-9.56 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.35% (-16.86 dB), Peak: 33.48% (-9.50 dB), Level: 中 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[AudioTest] Volume - RMS: 14.96% (-16.50 dB), Peak: 33.32% (-9.55 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.74% (-16.06 dB), Peak: 33.23% (-9.57 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.86% (-16.56 dB), Peak: 33.65% (-9.46 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.67% (-16.10 dB), Peak: 33.20% (-9.58 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.93% (-16.52 dB), Peak: 33.35% (-9.54 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.43% (-16.82 dB), Peak: 33.16% (-9.59 dB), Level: 中 +» AT^AUDIOTEST=6 +« APP|[AudioTest] Volume - RMS: 14.72% (-16.64 dB), Peak: 32.80% (-9.68 dB), Level: 中 +APP|[AudioTest] Stopping audio test... +APP|[AudioTest] Play thread stopped +APP|[AudioTest] Calling StopAIVoice()... +Waiting for AI voice thread to stop... +Thread validation passed, waiting for thread: AIVoiceThread +osThreadJoin failed (-3), using state check... +[00:01:50:081][I]{AIVoiceInputThreadFunc():1027} AI voice input thread stopped +Waiting... 1/50 (state: 3, running: yes) +Waiting... 2/50 (state: 3, running: yes) +[A][ALERT][core_adp_destroy:414] adp = 0x6D000001 +[A][ALERT][core_mod_free:316] mod_node->mid.u32 = 0x6D000001 +APP|SET DSP freq=3, div=6, codec freq=3, div=36 +APP|set hifi mode=1. +[A][ALERT][core_adp_destroy:414] adp = 0x6D000101 +[A][ALERT][core_mod_free:316] mod_node->mid.u32 = 0x6D000101 +[A][aw88082_i2c_deinit:373]aw88082 i2c deinit success +[00:01:50:353][I]{DeinitAIVoiceResources():811} AI voice input queue deleted +AI voice thread cleanup completed +Waiting... 3/50 (state: 0, running: no) +AI voice thread stopped successfully (state check) +AI voice stopped and resources cleaned up +APP|[AudioTest] Audio test stopped +AUDIO TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 700 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth... +APP|[BtScan] Ensuring Bluetooth stack is enabled... +[osal_msg_queue_create:25]:qName:BT_SERVICE_MSG qID=0x1a +APP|[BtScan] Bluetooth stack enabled successfully +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[BtScan] Bluetooth enabled, waiting for stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] No devices found +APP|[BtScan] Final scaAPP|[BtScan] Discovery state changed: 3 + state changAPP|[BtScan] No devices found +APP|[BtScan] No devices found +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth... +APP|[BtScan] Ensuring Bluetooth stack is enabled... +APP|[BtScan] Bluetooth stack enabled successfully +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[BtScan] Bluetooth enabled, waiting for stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|[BtScan] Device discovered: AC:3F:A4:A2:CA:05 +APP|[BtScan] Device name: 18J173203837 +APP|[BtScan] RSSI update: AC:3F:A4:A2:CA:05, RSSI=-94 dBm +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=3 +« APP|[GpioTest] Stopping GPIO test... +APP|[GpioTest] Test not running +GPIO TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Found 1 device(s): +APP|[BtScan] DeviceAPP|[BtScan] Discovery state changed: 3 +ery state changed: 3 +:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +APP|[BtScan] Final scan results: +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +APP|[BtScan] No devices found +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +» AT^PMADDVOTE +» AT^PMADDVOTE +« MCU has got pm_id_debug vote + +MCU WAKEUP SUCCESS + +OK~ +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTENABLE +« package_common_cmd_to_bt strCmd 36 5A 00 03 00 09 01 9A 20 inParam (null) para_len 0 +commandID = 0x1 payload_len=0 +bt_manager_at_process cmdId=0x1 atId=0x901 +[bts][info] btsrv_set_log_type_level bts sert log type levle:ff2 +gap reg cbk ret 0 +func:audio_manager_init, line:69, success +a2dp reg cbk ret 0 +a2dp reg cbk ret 0 +avrcp reg cbk ret 0 +[osal_msg_queue_create:25]:qName:BT_SERVICE_MSG qID=0x19 +[bts][info] btsrv_task_init btsrv_init: task create success +gap_state_changed_callback transport: 1 status: 0 +[bts][info] btsdk_get_discovery_mode mode = 00 +[bts][info] gap_br_set_bt_scan_mode set scan mode old=0 new=4 +[bts][info] gap_br_set_bt_scan_mode btsdk_set_discovery_mode mode: d ret: 0 +[bts][info] pan_register_cbk pan service register cbk:A TO B sta[bts][info] btsdk_get_discovery_mode mode = 0d +gap_scan_mode_changed_callback mode: 4 +rt. +[bts][info] bt_acore_get_config_sync_flash [ACore] bt read nv config succ, real_len:585. +gap_state_changed_callback transport: 2 status: 1 +gap_state_changed_callback transport: 1 status: 1 +bt enable ok + +OK~ +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Scan already running +BT SCAN TEST START: Failed, ret=-1 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****a4a2ca05 [little endian: 05caa2a4**** ] name: 18J173203837 hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****a4a2ca05 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] Device discovered: AC:3F:A4:A2:CA:05 +APP|[BtScan] Device name: 18J173203837 +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****a4a2ca05 name: 18J173203837APP|[BtScan] RSSI update: AC:3F:A4:A2:CA:05, RSSI=-94 dBm +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][info] gap_br_cancel_discovery btsdk_stop_device_discovery ret=0x0 +[bts][info] gap_br_ca[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +ncel_discovery discovery stopped +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +APP|[BtScan] Final scan results: +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-94 dBmAPP|, Name=18J173203837APP| +APP|[BtScan] No devices found +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][info] gap_br_cancel_discovery btsdk_stop_device_discovery ret=0x0 +[bts][info] gap_br_can[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +cel_discovery discovery stopped +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] No devices found +APP|[BtScan] Final scan results: +APP|[BtScan] No devices found +APP|[BtScan] No devices found +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Scan already running +BT SCAN TEST START: Failed, ret=-1 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][info] gap_br_cancel_discovery btsdk_stop_device_discovery ret=0x0 +[bts][info] gap_br_canc[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +el_discovery discovery stopped +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] No devices found +APP|[BtScan] Final scan results: +APP|[BtScan] No devices found +APP|[BtScan] No devices found +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****a4a2ca05 [little endian: 05caa2a4**** ] name: hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****a4a2ca05 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] Device discovered: AC:3F:A4:A2:CA:05 +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****a4a2ca05 name: APP|[BtScan] RSSI update: AC:3F:A4:A2:CA:05, RSSI=-96 dBm +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-96 dBmAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-96 dBmAPP| +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=2 +« APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] No GPIO pairs configured, initializing with default config... +APP|[GpioTest] Invalid input pin name: HSUART_CTS +APP|[GpioTest] Parsed 34 GPIO pairs from JSON +APP|[GpioTest] Default config initialized successfully +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: PASSED - S_AGPIO_L3 <-> S_AGPIO_L2 +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: PASSED - S_AGPIO_L1 <-> S_AGPIO_L4 +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: PASSED - S_AGPIO_L0 <-> S_AGPIO_R4 +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: PASSED - S_AGPIO_R5 <-> S_MGPIO14 +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: PASSED - S_MGPIO13 <-> S_AGPIO_R10 +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: PASSED - S_MGPIO11 <-> S_MGPIO12 +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: PASSED - S_AGPIO_R6 <-> S_MGPIO25 +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: PASSED - S_MGPIO20 <-> S_AGPIO_R7 +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: PASSED - S_MGPIO1 <-> S_MGPIO2 +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: PASSED - S_MGPIO9 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: PASSED - S_MGPIO7 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: PASSED - S_AGPIO_L28 <-> S_AGPIO_L18 +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: PASSED - S_HGPIO9 <-> S_AGPIO_L26 +APP|[GpioTest] Test completed: 13 passed, 21 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTENABLE +« package_common_cmd_to_bt strCmd 36 5A 00 03 00 09 01 9A 20 inParam (null) para_len 0 +commandID = 0x1 payload_len=0 +bt_manager_at_process cmdId=0x1 atId=0x901 +[bts][info] btsrv_set_log_type_level bts sert log type levle:ff2 +gap reg cbk ret 0 +[bts][info] a2dp_src_register_callbacks duplicate register callback +func:audio_manager_init, line:69, success +a2dp reg cbk ret 0 +[bts][info] a2dp_snk_register_callbacks duplicate register callback +a2dp reg cbk ret 0 +avrcp reg cbk ret 0 +bt enable ok + +OK~ +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Scan already running +BT SCAN TEST START: Failed, ret=-1 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][warning] gap_br_cancel_discovery discovery already stopped +APP|[BtScan] Final scan results: +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=AC:3F:A4:A2:CA:05, RSSI=-96 dBmAPP| +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] No devices found +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +porting_button_remove_veto:1884267424 +APP|uapi_battery_init ! +[osal_msg_queue_create:25]:qName:battery_queue qID=0xc +APP|charger not plugged ,disable charge ! +APP|charger not plugged ,disable charge ! +APP|uapi_custom_cmd_service_init ! +[osal_msg_queue_create:25]:qName:custom_cmd_service_queue qID=0xd +APP|uapi_custom_fileoperate_service_init ! +[osal_msg_queue_create:25]:qName:custom_fileoperate_service_queue qID=0xe +APP|No need to upgrade... +[WEARABLE I/] InitBroadcastService start! +[WEARABLE I/] start! topicSubscriberInfo=0x0x6c104e68 +[WEARABLE I/] InitBroadcastService end! +[WEARABLE E/] LoadManagementFromFile open fail +[WEARABLE E/] SaveManagementToFile open fail +I ams starts successfully +I bms starts successfully +[00:00:01:743][I][Init:37]Locator service starts successfully +[00:00:01:744][D][Init:56][SERVICE:sensor_service]: Init begin +[WEARABLE I/] WatchConnectCmdRegister +I ams feature init success +I [BMS] bms feature init success +[00:00:01:747][I][Init:56]Locator feature init success +[00:00:01:748][D][GetTaskConfig:80][SERVICE:sensor_service]: GetTaskConfig begin +[WEARABLE I/] BroadcastService featureId=4294967295, queueId=536924516, serviceId=2 +[WEARABLE I/] BroadcastFeature featureId=0, queueId=536924516, serviceId=2 +E Fail to open dir:/user/dialpubkey! +E Failed to create file +E Public key write failed! +[WEARABLE I/] NativeAbility InstallAbility +D MemUtils::InitPSRam g_psramMemory = 6c200000 +[WEARABLE I/] InitNativeLauncher: Minimal startup - Blue window only +[WEARABLE I/] Cleared all existing views from RootView +[WEARABLE I/] Blue window created and displayed: 360x360 +I AbilityMgrSliteFeature::OnFeatureInitialize featureId = 0, queueId = 536924708, serviceId = 6 +[WEARABLE I/] NativeAbility OnActive +[WEARABLE E/] NativeAbility ResumeAbility 0 failed +I BundleMgrService::ServiceMessageHandle +[00:00:02:517][I][OnFeatureInitialize:85]Locator feature init +[00:00:02:518][I][InitAbility:84]initAbility start +[00:00:02:519][I][Initialize:71]ability constructed. +[00:00:02:520][E][InitAbility:90]Initialize gps ability, result 1 +[00:00:02:521][I][Initialize:54]LocatorAbility Initialize. +[00:00:02:522][I][OnFeatureInitialize:89]LocatorAbility initialize success +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:0, event:5. +[00:00:02:528][D][Initialize:62][SERVICE:sensor_service]: Initialize begin +[00:00:02:530][D][NewSensorInterfaceInstance:47]Get sensor device instance success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 800 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x1 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +» AT^PMADDVOTE +» AT^PMADDVOTE +« MCU has got pm_id_debug vote + +MCU WAKEUP SUCCESS + +OK~ +APP|app_main run start. +APP|sys_slp: 0x1 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTENABLE +« package_common_cmd_to_bt strCmd 36 5A 00 03 00 09 01 9A 20 inParam (null) para_len 0 +commandID = 0x1 payload_len=0 +bt_manager_at_process cmdId=0x1 atId=0x901 +[bts][info] btsrv_set_log_type_level bts sert log type levle:ff2 +gap reg cbk ret 0 +func:audio_manager_init, line:69, success +a2dp reg cbk ret 0 +a2dp reg cbk ret 0 +avrcp reg cbk ret 0 +[osal_msg_queue_create:25]:qName:BT_SERVICE_MSG qID=0x19 +[bts][info] btsrv_task_init btsrv_init: task create success +gap_state_changed_callback transport: 1 status: 0 +[bts][info] btsdk_get_discovery_mode mode = 00 +[bts][info] gap_br_set_bt_scan_mode set scan mode old=0 new=4 +[bts][info] gap_br_set_bt_scan_mode btsdk_set_discovery_mode mode: d ret: 0 +[bts][info] btsdk_get_discovery_mode mode = 0d +gap_scan_mode_changed_callback mode: 4 +[bts][info] pan_register_cbk pan service register cbk:A TO B start. +[bts][info] bt_acore_get_config_sync_flash [ACore] bt read nv config succ, real_len:585. +gap_state_changed_callback transport: 2 status: 1 +gap_state_changed_callback transport: 1 status: 1 +bt enable ok + +OK~ +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****de4a4ca8 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] New device discovered: C8:68:DE:4A:4C:A8 +APP|[BtScan] Device name: GJ1 +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****de4a4ca8 name: GJ1APP|[BtScan] Device: C8:68:DE:4A:4C:A8, RSSI=-49 dBm +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: GJ1 hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****a4a2ca05 [little endian: 05caa2a4**** ] name: 18J173203837 hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****a4a2ca05 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] New device discovered: AC:3F:A4:A2:CA:05 +APP|[BtScan] Device name: 18J173203837 +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****a4a2ca05 name: 18J173203837APP|[BtScan] Device: AC:3F:A4:A2:CA:05, RSSI=-96 dBm +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][warning] gap_br_cancel_discovery discovery already stopped +APP|[BtScan] Final scan results: +APP|[BtScan] Found 2 device(s): +APP|[BtScan] Device[1]: MAC=C8:68:DE:4A:4C:A8, RSSI=-49 dBmAPP|, Name=GJ1APP| +APP|[BtScan] Device[2]: MAC=AC:3F:A4:A2:CA:05, RSSI=-96 dBmAPP|, Name=18J173203837APP| +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****de4a4ca8 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] New device discovered: C8:68:DE:4A:4C:A8 +APP|[BtScan] Device name: snickers +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****de4a4ca8 name: snickersAPP|[BtScan] Device: C8:68:DE:4A:4C:A8, RSSI=-51 dBm +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****a4a2ca05 [little endian: 05caa2a4**** ] name: 18J173203837 hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****a4a2ca05 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] New device discovered: AC:3F:A4:A2:CA:05 +APP|[BtScan] Device name: 18J173203837 +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****a4a2ca05 name: 18J173203837APP|[BtScan] Device: AC:3F:A4:A2:CA:05, RSSI=-99 dBm +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +�x���������������������x�����������x���������������������������������������������x��������������������������������x������������������������������������������������������������x�������������x������������x���������������������������������������������������������������������������������������x����������������������x������x��������������������������x��x��������������x���x������������x�������������������x��������x����������������������������������x�����x���������x������x������������������������������������������������������������������������������������������������������������������������������x�����������x�x�������������������������xx�x���������������������������������������������������x��������������x���������x����x�������������������x������xx'7��7ٖn�����77��w7���q���������������������������������������������������������������x���������x���������������������x������������������x���������������������������������������������������������������������������������x�����������������������������������������������������xx�x�������x�����������������������xx�����������������x��������x�������������x����������������������������������������������������������������������������������x����������������������������������������������������x��������������������������������������������������x���������������������������������������������������������������������������x������������������������������x������������������������������������������������������x����x������������������x������������������������������������x������������������������x������������������������������������x����xx��x���������������������������������������������������x������������������x�����������x��������������������������������������������x���������x�APP|App uart init succ. +APP|ipc reg info:int en:0,int:0,int sts:0. +APP|int clr:0,clr sts:0,int set:0. +APP|pmu_power_on_init begin +APP|pmu_power_�n_init end +chip temperature=27.000000(tmp=1810) +APP|Flash id is 186585, init success +APP|entering NormalMode +APP|partition init success +APP|upg init success +[osal_msg_queue_create:25]:qName:nv_write_task qID=0x0 +APP|calibration nv is not active + +cpu 0 entering scheduler +app_init start ok +APP|thread_main start +APP|find nand flash chip id: 0x0B52 +APP|nand flash XT26Q02D start init +APP| +nandflash init start. +APP|xt26q02d_init +APP|nandflash A0 Reg:0x0 +APP|nandflash B0 Reg:0x11 +APP|nandflash C0 Reg:0x2 +APP| +nandflash_qspi_init success +APP| + nandflash init end. +APP|nandflash init success +APP|Succ read lcd id! Lcd id: 0x5598 +get nv local_addr : ******68663c +CALLENDAR:year = 1970, month = 1, day = 1, hour = 0, minute = 0, second = 0 +callendar timestamp = 0 +sync time timestamp 0, timezone_in_quarters 0 +[A][aw88082_i2c_init:353]aw88082 i2c init success +[osal_msg_queue_create:25]:qName:sap_msg qID=0x1 +APP|audio init OK +APP|**********startup info********** +APP|os init class is liteos. +APP|store init class is nandflash. +APP|display init class is MIPI. +APP|board init class is E0B4. +APP|psram density is 32MB. +APP|**********startup info********** +APP|No need to upgrade... +[osal_msg_queue_create:25]:qName:at_queue qID=0x2 +[osal_msg_queue_create:25]:qName:graphic_at_service_queue qID=0x3 +[osal_msg_queue_create:25]:qName:app_at_service_queue qID=0x4 +[osal_msg_queue_create:25]:qName:audio_at_service_queue qID=0x5 +[osal_msg_queue_create:25]:qName:bt_cmd_queue qID=0x6 +[osal_msg_queue_create:25]:qName:media_at_service_queue qID=0x7 +[osal_msg_queue_create:25]:qName:dfx_msg qID=0x8 +[osal_msg_queue_create:25]:qName:transmit qID=0x9 +APP|Turning on LCD backlight... +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +Brightness: 0% → Fall Edge: 7 → LED Current: 2.5mA +APP|LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO) +[DISPLAY I/] GrallocInitialize: gralloc initialize success +[DISPLAY I/] LayerInitialize: layer initialize success +[DISPLAY I/] PrintLayerInfo: layerInfo: +[DISPLAY I/] PrintLayerInfo: type = 0 +[DISPLAY I/] PrintLayerInfo: width = 360 +[DISPLAY I/] PrintLayerInfo: height = 360 +[DISPLAY I/] PrintLayerInfo: bpp = 24 +[DISPLAY I/] PrintLayerInfo: pixFormat = 17 +[DISPLAY I/] VGUInitialize: VGU initializes successfully +[DISPLAY I/] InitMemPool: Memory Pool has been inited. +[DISPLAY I/] GrallocInitialize: gralloc initialize success +====InitDfxCmd=== +[Graphic Error] [ResumeSlice: 225]No valid slice to resume +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:25000, event:5. +APP|No need to upgrade... +APP|SET DSP freq=3, div=6, codec freq=3, div=36 +[VAU_ERROR][vau_api_check_surface 108]input phy_addr is null! +[VAU_ERROR][vau_api_check_surface_list 144]vau check src surface[0] failed! +[VAU_ERROR][uapi_vau_compose 861]call vau_check_surface_list fail ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: uapi_vau_compose failure, ret = 0x80004000! +[DISPLAY E/] BlitMultiImgOnce: src[0] w:360 h:360 str:1472 fmt:0 cmp:0 rect:[0,0,360,360] outRect:[0,0,360,360] +[Graphic Error] [BlitImages: 889]RenderBlit failed! +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 600 +[A][ALERT][drv_sys_pon:297] DSP0 power on +APP|lwip_main run start. +APP|audio manager init ok +APP|app_main run start. +[osal_msg_queue_create:25]:qName:app_queue qID=0xb +APP|uapi_battery_init ! +[osal_msg_queue_create:25]:qName:battery_queue qID=0xc +APP|charger not plugged ,disable charge ! +APP|charger not plugged ,disable charge ! +APP|uapi_custom_cmd_service_init ! +[osal_msg_queue_create:25]:qName:custom_cmd_service_queue qID=0xd +APP|uapi_custom_fileoperate_service_init ! +[osal_msg_queue_create:25]:qName:custom_fileoperate_service_queue qID=0xe +APP|No need to upgrade... +[WEARABLE I/] InitBroadcastService start! +[WEARABLE I/] start! topicSubscriberInfo=0x0x6c104e68 +[WEARABLE I/] InitBroadcastService end! +[WEARABLE E/] LoadManagementFromFile open fail +[WEARABLE E/] SaveManagementToFile open fail +I ams starts successfully +I bms starts successfully +[00:00:01:694][I][Init:37]Locator service starts successfully +[00:00:01:695][D][Init:56][SERVICE:sensor_service]: Init begin +[WEARABLE I/] WatchConnectCmdRegister +I ams feature init success +I [BMS] bms feature init success +[00:00:01:698][I][Init:56]Locator feature init success +[00:00:01:699][D][GetTaskConfig:80][SERVICE:sensor_service]: GetTaskConfig begin +[WEARABLE I/] BroadcastService featureId=4294967295, queueId=536924516, serviceId=2 +[WEARABLE I/] BroadcastFeature featureId=0, queueId=536924516, serviceId=2 +E Fail to open dir:/user/dialpubkey! +E Failed to create file +E Public key write failed! +[WEARABLE I/] NativeAbility InstallAbility +D MemUtils::InitPSRam g_psramMemory = 6c200000 +[WEARABLE I/] InitNativeLauncher: Minimal startup - Blue window only +[WEARABLE I/] Cleared all existing views from RootView +[WEARABLE I/] Blue window created and displayed: 360x360 +I AbilityMgrSliteFeature::OnFeatureInitialize featureId = 0, queueId = 536924708, serviceId = 6 +[WEARABLE I/] NativeAbility OnActive +[WEARABLE E/] NativeAbility ResumeAbility 0 failed +I BundleMgrService::ServiceMessageHandle +[00:00:02:458][I][OnFeatureInitialize:85]Locator feature init +[00:00:02:459][I][InitAbility:84]initAbility start +[00:00:02:460][I][Initialize:71]ability constructed. +[00:00:02:461][E][InitAbility:90]Initialize gps ability, result 1 +[00:00:02:463][I][Initialize:54]LocatorAbility Initialize. +[00:00:02:464][I][OnFeatureInitialize:89]LocatorAbility initialize success +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:0, event:5. +[00:00:02:473][D][Initialize:62][SERVICE:sensor_service]: Initialize begin +[00:00:02:475][D][NewSensorInterfaceInstance:47]Get sensor device instance success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +» AT^PMADDVOTE +« APP|app_main run start. +APP|sys_slp: 0x1 +» AT^PMADDVOTE +« MCU has got pm_id_debug vote + +MCU WAKEUP SUCCESS + +OK~ +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GETIDS +« [nandflash id:] b52 +[norflash id:] 186585 +[sdk id:]1.0.9 +[soc id:] +0x5DD4 0x5790 0xD300 0x23C2 +0xC2D7 0xEF08 0x030A 0x0F78 +0x81C1 0x0001 + +OK~ +» AT^GETBTMAC +« get nv local_addr : ******68663c +fac:^^^^ BTMAC=28:11:06:68:66:3C ^^^^ CyweeChipInfo= +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^AUDIOTEST=5 +« APP|[AudioTest] Starting audio test... +[00:00:33:348][W]{ai_media_service_init():808} AI media service already initialized +[00:00:33:349][E]{old_Start_AIVoice():1289} StartAIVoice +[00:00:33:350][I]{GetGlobalMutex():709} Global AI voice context mutex created successfully +[00:00:33:352][I]{old_Start_AIVoice():1325} Using custom input audio params: format=1, channels=1, sampleRate=16000 +[00:00:33:354][I]{old_Start_AIVoice():1340} Using custom output audio params: format=1, channels=1, sampleRate=16000 +[00:00:33:356][I]{old_Start_AIVoice():1356} OGG encapsulation disabled by parameter +[00:00:33:358][E]{old_Start_AIVoice():1362} g_aiVoiceContext->taskHandle +[00:00:33:360][I]{CreateAIVoiceQueue():747} AI voice input queue created successfully +APP|SET DSP freq=3, div=5, codec freq=3, div=36 +APP|set hifi mode=2. +APP|SET DSP freq=3, div=5, codec freq=3, div=36 +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 400 +[A][ALERT][drv_sys_pon:297] DSP0 power on +[00:00:33:415][I]{old_Start_AIVoice():1392} AI voice thread created successfully with name: AIVoiceThread +APP|[AudioTest] Play thread started +APP|[AudioTest] Pre-filled 5 periods (160 bytes, 5.0 ms) of PCM data +[00:00:33:419] E/TrackHandle :{StreamWriteTrack():720} track[0] is neither running or pause, write failed +[00:00:33:421] E/AudioManagerCWrapper :{AudioStreamOutStreamWrite():365} audio stream out play failed 0xffffffff +APP|[AudioTest] Audio test started successfully +APP|[AudioTest] Playing 1kHz tone, monitoring volume every 0.5s... +AUDIO TEST START: Success + Playing 1kHz tone, monitoring volume every 0.5s... +aw_sysst_check succed +aw_pa_start +[00:00:33:695][I]{CreateAIVoiceInputThread():960} AI voice input thread created successfully +[00:00:33:696][I]{RunAIVoice():1045} RunAIVoice: waiting for queue data... +[00:00:33:698][I]{AIVoiceInputThreadFunc():978} AI voice input thread started +APP|[AudioTest] Volume - RMS: 0.00% (-86.98 dB), Peak: 0.02% (-73.41 dB), Level: 静音 +APP|[AudioTest] Volume - RMS: 13.38% (-17.47 dB), Peak: 36.50% (-8.75 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 16.74% (-15.53 dB), Peak: 32.87% (-9.66 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.64% (-16.69 dB), Peak: 33.40% (-9.53 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.55% (-16.74 dB), Peak: 33.34% (-9.54 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 14.26% (-16.92 dB), Peak: 33.75% (-9.43 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.10% (-16.42 dB), Peak: 33.60% (-9.47 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.72% (-16.07 dB), Peak: 33.90% (-9.40 dB), Level: 中 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[AudioTest] Volume - RMS: 15.33% (-16.29 dB), Peak: 34.41% (-9.27 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 16.21% (-15.80 dB), Peak: 33.75% (-9.43 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 15.54% (-16.17 dB), Peak: 33.74% (-9.44 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 13.47% (-17.41 dB), Peak: 33.41% (-9.52 dB), Level: 中 +» AT^AUDIOTEST=7 0.5 +« APP|[AudioTest] Volume - RMS: 14.76% (-16.62 dB), Peak: 33.55% (-9.49 dB), Level: 中 +APP|[AudioTest] Play volume set to 0.50 (50%) +AUDIO TEST SET VOLUME: Success (0.00, 0%) +APP|[AudioTest] Volume - RMS: 13.31% (-17.52 dB), Peak: 33.82% (-9.42 dB), Level: 中 +APP|[AudioTest] Volume - RMS: 6.18% (-24.18 dB), Peak: 14.10% (-17.02 dB), Level: 低 +APP|[AudioTest] Volume - RMS: 6.78% (-23.37 dB), Peak: 14.19% (-16.96 dB), Level: 低 +APP|[AudioTest] Volume - RMS: 6.63% (-23.57 dB), Peak: 14.26% (-16.92 dB), Level: 低 +APP|[AudioTest] Volume - RMS: 6.76% (-23.40 dB), Peak: 14.70% (-16.65 dB), Level: 低 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[AudioTest] Volume - RMS: 6.83% (-23.31 dB), Peak: 14.63% (-16.69 dB), Level: 低 +» AT^AUDIOTEST=6 +« APP|[AudioTest] Stopping audio test... +APP|[AudioTest] Play thread stopped +APP|[AudioTest] Calling StopAIVoice()... +Waiting for AI voice thread to stop... +Thread validation passed, waiting for thread: AIVoiceThread +osThreadJoin failed (-3), using state check... +[00:00:43:891][I]{AIVoiceInputThreadFunc():1027} AI voice input thread stopped +Waiting... 1/50 (state: 3, running: yes) +[A][ALERT][core_adp_destroy:414] adp = 0x6D000001 +[A][ALERT][core_mod_free:316] mod_node->mid.u32 = 0x6D000001 +APP|SET DSP freq=3, div=6, codec freq=3, div=36 +APP|set hifi mode=1. +[A][ALERT][core_adp_destroy:414] adp = 0x6D000101 +[A][ALERT][core_mod_free:316] mod_node->mid.u32 = 0x6D000101 +[A][aw88082_i2c_deinit:373]aw88082 i2c deinit success +[00:00:44:090][I]{DeinitAIVoiceResources():811} AI voice input queue deleted +AI voice thread cleanup completed +Waiting... 2/50 (state: 0, running: no) +AI voice thread stopped successfully (state check) +AI voice stopped and resources cleaned up +APP|[AudioTest] Audio test stopped +AUDIO TEST STOP: Success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 700 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^BTENABLE +« package_common_cmd_to_bt strCmd 36 5A 00 03 00 09 01 9A 20 inParam (null) para_len 0 +commandID = 0x1 payload_len=0 +bt_manager_at_process cmdId=0x1 atId=0x901 +[bts][info] btsrv_set_log_type_level bts sert log type levle:ff2 +gap reg cbk ret 0 +func:audio_manager_init, line:69, success +a2dp reg cbk ret 0 +a2dp reg cbk ret 0 +avrcp reg cbk ret 0 +[osal_msg_queue_create:25]:qName:BT_SERVICE_MSG qID=0x1a +[bts][info] btsrv_task_init btsrv_init: task create success +gap_state_changed_callback transport: 1 status: 0 +[bts][info] btsdk_get_discovery_mode mode = 00 +[bts][info] gap_br_set_bt_scan_mode set scan mode old=0 new=4 +[bts][info] gap_br_set_bt_scan_mode btsdk_set_discovery_mode mode: d ret: 0 +[bts][info] btsdk_get_discovery_mode mode = 0d +gap_scan_mode_changed_callback mode: 4 +[bts][info] pan_register_cbk pan service register cbk:A TO B start. +[bts][info] bt_acore_get_config_sync_flash [ACore] bt read nv config succ, real_len:585. +gap_state_changed_callback transport: 2 status: 1 +gap_state_changed_callback transport: 1 status: 1 +bt enable ok + +OK~ +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +» AT^BTSCANTEST=1 +« APP|[BtScan] Starting Bluetooth scan test... +APP|[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)... +APP|[BtScan] Waiting for Bluetooth stack ready... +APP|[BtScan] Inquiry parameters set successfully +APP|[BtScan] Discovery state changed: 1 +APP|[BtScan] Discovery state changed: 2 +[bts][info] btsrv_start_bt_discovery discovery started +APP|[BtScan] Discovery started successfully +APP|[BtScan] Bluetooth scan started successfully +APP|[BtScan] Scanning for devices... +BT SCAN TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=2 +« APP|[GpioTest] Starting GPIO test... +APP|[GpioTest] No GPIO pairs configured, initializing with default config... +APP|[GpioTest] Invalid input pin name: HSUART_CTS +APP|[GpioTest] Parsed 34 GPIO pairs from JSON +APP|[GpioTest] Default config initialized successfully +APP|[GpioTest] Starting GPIO test with 34 pairs... +APP|[GpioTest] Testing pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 0: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 1: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 2: S_AGPIO_L3 (input) <-> S_AGPIO_L2 (output) +APP|[GpioTest] Pair 2: PASSED - S_AGPIO_L3 <-> S_AGPIO_L2 +APP|[GpioTest] Testing pair 3: S_AGPIO_L1 (input) <-> S_AGPIO_L4 (output) +APP|[GpioTest] Pair 3: PASSED - S_AGPIO_L1 <-> S_AGPIO_L4 +APP|[GpioTest] Testing pair 4: S_AGPIO_L0 (input) <-> S_AGPIO_R4 (output) +APP|[GpioTest] Pair 4: PASSED - S_AGPIO_L0 <-> S_AGPIO_R4 +APP|[GpioTest] Testing pair 5: S_AGPIO_R5 (input) <-> S_MGPIO14 (output) +APP|[GpioTest] Pair 5: PASSED - S_AGPIO_R5 <-> S_MGPIO14 +APP|[GpioTest] Testing pair 6: S_MGPIO13 (input) <-> S_AGPIO_R10 (output) +APP|[GpioTest] Pair 6: PASSED - S_MGPIO13 <-> S_AGPIO_R10 +APP|[GpioTest] Testing pair 7: S_MGPIO11 (input) <-> S_MGPIO12 (output) +APP|[GpioTest] Pair 7: PASSED - S_MGPIO11 <-> S_MGPIO12 +APP|[GpioTest] Testing pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 8: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 9: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 10: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 11: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 12: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 13: S_AGPIO_R6 (input) <-> S_MGPIO25 (output) +APP|[GpioTest] Pair 13: PASSED - S_AGPIO_R6 <-> S_MGPIO25 +APP|[GpioTest] Testing pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 14: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 15: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 16: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 17: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 18: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 19: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 20: S_MGPIO20 (input) <-> S_AGPIO_R7 (output) +APP|[GpioTest] Pair 20: PASSED - S_MGPIO20 <-> S_AGPIO_R7 +APP|[GpioTest] Testing pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 21: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 22: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 23: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 24: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 25: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 26: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 27: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 28: S_MGPIO1 (input) <-> S_MGPIO2 (output) +APP|[GpioTest] Pair 28: PASSED - S_MGPIO1 <-> S_MGPIO2 +APP|[GpioTest] Testing pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Pair 29: FAILED - Output HIGH but input read 0 (expected HIGH) +APP|[GpioTest] Testing pair 30: S_MGPIO9 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 30: PASSED - S_MGPIO9 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 31: S_MGPIO7 (input) <-> S_MGPIO8 (output) +APP|[GpioTest] Pair 31: PASSED - S_MGPIO7 <-> S_MGPIO8 +APP|[GpioTest] Testing pair 32: S_AGPIO_L28 (input) <-> S_AGPIO_L18 (output) +APP|[GpioTest] Pair 32: PASSED - S_AGPIO_L28 <-> S_AGPIO_L18 +APP|[GpioTest] Testing pair 33: S_HGPIO9 (input) <-> S_AGPIO_L26 (output) +APP|[GpioTest] Pair 33: PASSED - S_HGPIO9 <-> S_AGPIO_L26 +APP|[GpioTest] Test completed: 13 passed, 21 failed +APP|[GpioTest] Failed pairs: +APP|[GpioTest] Pair 0: S_AGPIO_L23 (input) <-> S_AGPIO_L12 (output) +APP|[GpioTest] Pair 1: S_AGPIO_L13 (input) <-> S_AGPIO_L31 (output) +APP|[GpioTest] Pair 8: S_AGPIO_R2 (input) <-> S_AGPIO_R1 (output) +APP|[GpioTest] Pair 9: S_AGPIO_L24 (input) <-> S_AGPIO_L17 (output) +APP|[GpioTest] Pair 10: S_AGPIO_L21 (input) <-> S_AGPIO_L11 (output) +APP|[GpioTest] Pair 11: S_AGPIO_L19 (input) <-> S_AGPIO_R0 (output) +APP|[GpioTest] Pair 12: S_HGPIO13 (input) <-> S_AGPIO_R3 (output) +APP|[GpioTest] Pair 14: S_MGPIO26 (input) <-> S_MGPIO23 (output) +APP|[GpioTest] Pair 15: S_MGPIO24 (input) <-> S_MGPIO31 (output) +APP|[GpioTest] Pair 16: S_MGPIO29 (input) <-> S_MGPIO30 (output) +APP|[GpioTest] Pair 17: S_MGPIO32 (input) <-> S_MGPIO28 (output) +APP|[GpioTest] Pair 18: S_MGPIO27 (input) <-> S_MGPIO22 (output) +APP|[GpioTest] Pair 19: S_MGPIO21 (input) <-> S_MGPIO19 (output) +APP|[GpioTest] Pair 21: S_AGPIO_R8 (input) <-> S_AGPIO_R9 (output) +APP|[GpioTest] Pair 22: S_AGPIO_L30 (input) <-> S_AGPIO_L29 (output) +APP|[GpioTest] Pair 23: S_AGPIO_L32 (input) <-> S_AGPIO_L20 (output) +APP|[GpioTest] Pair 24: S_AGPIO_L15 (input) <-> S_HGPIO5 (output) +APP|[GpioTest] Pair 25: S_HGPIO4 (input) <-> S_HGPIO0 (output) +APP|[GpioTest] Pair 26: S_HGPIO1 (input) <-> S_HGPIO2 (output) +APP|[GpioTest] Pair 27: S_HGPIO3 (input) <-> S_MGPIO3 (output) +APP|[GpioTest] Pair 29: S_MGPIO0 (input) <-> S_MGPIO6 (output) +APP|[GpioTest] Test finished +GPIO TEST START: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][debug] btsrv_add_remote_dev_node addr: ****de4a4ca8 hdl: 0 +[bts][info] btsrv_notify_gap_discovery_result descovery result +APP|[BtScan] New device discovered: C8:68:DE:4A:4C:A8 +APP|[BtScan] Device name: snickers +[bts][info] btsrv_notify_gap_discovery_result found device addr: ****de4a4ca8 name: snickersAPP|[BtScan] Device: C8:68:DE:4A:4C:A8, RSSI=-60 dBm +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: hdl: 0 +APP|app_main run start. +APP|sys_slp: 0x0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +[bts][info] btsrv_handle_remote_device_found addr: ****de4a4ca8 [little endian: a84c4ade**** ] name: snickers hdl: 0 +» AT^BTSCANTEST=2 +« APP|[BtScan] Stopping Bluetooth scan test... +[bts][info] gap_br_cancel_discovery btsdk_stop_device_discovery ret=0x0 +[bts][info] gap_br_can[bts][info] btsrv_inquiry_complete_ind_callback inquiry complete +[bts][info] btsrv_handle_conn_event_msg set discovery status to stop +APP|[BtScan] Discovery state changed: 3 +cel_discovery discovery stopped +APP|[BtScan] Discovery state changed: 3 +APP|[BtScan] Final scan results: +APP|[BtScan] Found 1 device(s): +APP|[BtScan] Device[1]: MAC=C8:68:DE:4A:4C:A8, RSSI=-60 dBmAPP|, Name=snickersAPP| +APP|[BtScan] Bluetooth scan stopped +BT SCAN TEST STOP: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^LOWPOWER +« LOWPOWER ATCMD Set Parameter Failed argc 0 +Usage: AT^LOWPOWER=0 (提醒低电充电) + AT^LOWPOWER=1 (电量过低,直接提醒关机) + AT^LOWPOWER=3 (倒计时结束后,直接执行关机动画) +APP|[at cmd]cannot find cmd handle, data=AT^LOWPOWER len=12 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/Serial Debug 2025-11-28 142752.txt b/Serial Debug 2025-11-28 142752.txt new file mode 100644 index 0000000000000000000000000000000000000000..14f85dab1afd1382129d0d24aafccfc4c09f7046 GIT binary patch literal 26779 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 WQ}z!B$YgxR|Bmn(q3i!a(EkC|C)ExB literal 0 HcmV?d00001 diff --git a/Serial Debug 2025-11-28 171600.txt b/Serial Debug 2025-11-28 171600.txt new file mode 100644 index 000000000..22f81e7be --- /dev/null +++ b/Serial Debug 2025-11-28 171600.txt @@ -0,0 +1,496 @@ +« [A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +APP|app_main run start. +APP|sys_slp: 0x1 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=4 +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] Round 1 complete. Remaining: 65 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 65 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|app_main run start. +APP|sys_slp: 0x1 +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] Synced inputs (3): +APP|[GpioTest] - S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] - S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] - S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] Round 2 complete. Remaining: 61 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 61 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 3 complete. Remaining: 60 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 60 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 4 complete. Remaining: 59 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 59 +APP|[GpioTest] Testing output: S_AGPIO_L0 (pin_t=81) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 5 complete. Remaining: 58 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 58 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 6 complete. Remaining: 57 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 57 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO14 (pin_t=56) +APP|[GpioTest] Round 7 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] Round 8 complete. Remaining: 53 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 53 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO12 (pin_t=54) +APP|[GpioTest] Round 9 complete. Remaining: 51 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 51 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 49 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 49 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 47 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 47 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Round 14 complete. Remaining: 45 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 45 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 43 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 43 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 42 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 42 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 41 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 41 +APP|[GpioTest] Testing output: S_AGPIO_R6 (pin_t=120) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|charger not plugged ,disable charge ! +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 39 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 39 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO22 (pin_t=64) +APP|[GpioTest] Round 29 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO20 (pin_t=62) +APP|[GpioTest] Output: S_MGPIO20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] Round 36 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 47 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_MGPIO1 (pin_t=43) +APP|[GpioTest] Output: S_MGPIO1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO2 (pin_t=44) +APP|[GpioTest] Round 47 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 48 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO6 (pin_t=48) +APP|[GpioTest] Round 48 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 49 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_MGPIO9 (pin_t=51) +APP|[GpioTest] Output: S_MGPIO9 +APP|[GpioTest] Synced inputs (2): +APP|[GpioTest] - S_MGPIO8 (pin_t=50) +APP|[GpioTest] - S_MGPIO7 (pin_t=49) +APP|[GpioTest] Round 49 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 50 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] Output: S_AGPIO_L28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 50 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 51 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 51 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 52 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_HGPIO9 (pin_t=35) +APP|[GpioTest] Output: S_HGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 52 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 53 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 53 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 53 +GPIO SCAN PAIRS: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/Serial Debug 2025-11-28 173749.txt b/Serial Debug 2025-11-28 173749.txt new file mode 100644 index 000000000..c5ea97946 --- /dev/null +++ b/Serial Debug 2025-11-28 173749.txt @@ -0,0 +1,578 @@ +« APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=4 +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 1 complete. Remaining: 66 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 66 +APP|[GpioTest] Testing output: S_AGPIO_L12 (pin_t=93) +APP|app_main run start. +APP|sys_slp: 0x1 +APP|[GpioTest] Output: S_AGPIO_L12 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 2 complete. Remaining: 65 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 65 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 3 complete. Remaining: 64 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 64 +APP|[GpioTest] Testing output: S_AGPIO_L31 (pin_t=112) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 4 complete. Remaining: 63 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 63 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 5 complete. Remaining: 62 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 62 +APP|[GpioTest] Testing output: S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] Output: S_AGPIO_L2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 6 complete. Remaining: 61 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 61 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 7 complete. Remaining: 60 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 60 +APP|[GpioTest] Testing output: S_AGPIO_L4 (pin_t=85) +APP|charger not plugged ,disable charge ! +APP|[GpioTest] Output: S_AGPIO_L4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 8 complete. Remaining: 59 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 59 +APP|[GpioTest] Testing output: S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] Output: S_AGPIO_L0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 9 complete. Remaining: 58 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 58 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 57 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 57 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 56 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 56 +APP|[GpioTest] Testing output: S_MGPIO14 (pin_t=56) +APP|[GpioTest] Output: S_MGPIO14 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 54 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 54 +APP|[GpioTest] Testing output: S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] Output: S_AGPIO_R10 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 14 complete. Remaining: 53 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 53 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 52 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 52 +APP|[GpioTest] Testing output: S_MGPIO12 (pin_t=54) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO12 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 51 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 51 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 49 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 49 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 47 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 47 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 46 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 46 +APP|[GpioTest] Testing output: S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Output: S_AGPIO_L11 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 45 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 45 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 43 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 43 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 42 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 42 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 41 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 41 +APP|[GpioTest] Testing output: S_AGPIO_R6 (pin_t=120) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 39 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 39 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 29 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 36 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 30 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 30 +APP|[GpioTest] Testing output: S_MGPIO22 (pin_t=64) +APP|[GpioTest] Output: S_MGPIO22 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|charger not plugged ,disable charge ! +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO20 (pin_t=62) +APP|[GpioTest] Output: S_MGPIO20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 22 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 22 +APP|[GpioTest] Testing output: S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] Output: S_AGPIO_L29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 47 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 47 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 48 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 48 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 49 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 49 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 50 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 50 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 51 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 51 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 52 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 52 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 53 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 53 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 54 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 54 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 55 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 55 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 56 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 56 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 57 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_MGPIO1 (pin_t=43) +APP|[GpioTest] Output: S_MGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 57 complete. Remaining: 10 GPIOs +APP| +APP|[GpioTest] ===== Round 58 ===== +APP|[GpioTest] Remaining GPIOs: 10 +APP|[GpioTest] Testing output: S_MGPIO2 (pin_t=44) +APP|[GpioTest] Output: S_MGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 58 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 59 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 59 complete. Remaining: 8 GPIOs +APP| +APP|[GpioTest] ===== Round 60 ===== +APP|[GpioTest] Remaining GPIOs: 8 +APP|[GpioTest] Testing output: S_MGPIO6 (pin_t=48) +APP|[GpioTest] Output: S_MGPIO6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 60 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 61 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_MGPIO9 (pin_t=51) +APP|[GpioTest] Output: S_MGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 61 complete. Remaining: 6 GPIOs +APP| +APP|[GpioTest] ===== Round 62 ===== +APP|[GpioTest] Remaining GPIOs: 6 +APP|[GpioTest] Testing output: S_MGPIO8 (pin_t=50) +APP|[GpioTest] Output: S_MGPIO8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 62 complete. Remaining: 5 GPIOs +APP| +APP|[GpioTest] ===== Round 63 ===== +APP|[GpioTest] Remaining GPIOs: 5 +APP|[GpioTest] Testing output: S_MGPIO7 (pin_t=49) +APP|[GpioTest] Output: S_MGPIO7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 63 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 64 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] Output: S_AGPIO_L28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 64 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 65 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 65 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 66 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_HGPIO9 (pin_t=35) +APP|[GpioTest] Output: S_HGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 66 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 67 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 67 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 67 +GPIO SCAN PAIRS: Success +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/Serial Debug 2025-11-28 182925.txt b/Serial Debug 2025-11-28 182925.txt new file mode 100644 index 000000000..40cd3d6cf --- /dev/null +++ b/Serial Debug 2025-11-28 182925.txt @@ -0,0 +1,491 @@ +« [osal_msg_queue_create:25]:qName:app_queue qID=0xb +APP|uapi_battery_init ! +[osal_msg_queue_create:25]:qName:battery_queue qID=0xc +APP|charger not plugged ,disable charge ! +APP|charger not plugged ,disable charge ! +APP|uapi_custom_cmd_service_init ! +[osal_msg_queue_create:25]:qName:custom_cmd_service_queue qID=0xd +APP|uapi_custom_fileoperate_service_init ! +[osal_msg_queue_create:25]:qName:custom_fileoperate_service_queue qID=0xe +APP|No need to upgrade... +[WEARABLE I/] InitBroadcastService start! +[WEARABLE I/] start! topicSubscriberInfo=0x0x6c104e68 +[WEARABLE I/] InitBroadcastService end! +[WEARABLE E/] LoadManagementFromFile open fail +[WEARABLE E/] SaveManagementToFile open fail +I ams starts successfully +I bms starts successfully +[00:00:01:704][I][Init:37]Locator service starts successfully +[00:00:01:705][D][Init:56][SERVICE:sensor_service]: Init begin +[WEARABLE I/] WatchConnectCmdRegister +I ams feature init success +I [BMS] bms feature init success +[00:00:01:708][I][Init:56]Locator feature init success +[00:00:01:709][D][GetTaskConfig:80][SERVICE:sensor_service]: GetTaskConfig begin +[WEARABLE I/] BroadcastService featureId=4294967295, queueId=536924516, serviceId=2 +[WEARABLE I/] BroadcastFeature featureId=0, queueId=536924516, serviceId=2 +E Fail to open dir:/user/dialpubkey! +E Failed to create file +E Public key write failed! +[WEARABLE I/] NativeAbility InstallAbility +D MemUtils::InitPSRam g_psramMemory = 6c200000 +[WEARABLE I/] InitNativeLauncher: Minimal startup - Blue window only +[WEARABLE I/] Cleared all existing views from RootView +[WEARABLE I/] Blue window created and displayed: 360x360 +I AbilityMgrSliteFeature::OnFeatureInitialize featureId = 0, queueId = 536924708, serviceId = 6 +[WEARABLE I/] NativeAbility OnActive +[WEARABLE E/] NativeAbility ResumeAbility 0 failed +I BundleMgrService::ServiceMessageHandle +[00:00:02:485][I][OnFeatureInitialize:85]Locator feature init +[00:00:02:486][I][InitAbility:84]initAbility start +[00:00:02:486][I][Initialize:71]ability constructed. +[00:00:02:487][E][InitAbility:90]Initialize gps ability, result 1 +[00:00:02:489][I][Initialize:54]LocatorAbility Initialize. +[00:00:02:490][I][OnFeatureInitialize:89]LocatorAbility initialize success +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:0, event:5. +[00:00:02:500][D][Initialize:62][SERVICE:sensor_service]: Initialize begin +[00:00:02:501][D][NewSensorInterfaceInstance:47]Get sensor device instance success +[A][ALERT][sys_cmd_check_cmd_done:164] wait_time_us = 900 +[A][ALERT][drv_sys_pd:331] DSP0 power down +» AT^GPIOTEST=4 +« APP|app_main run start. +APP|sys_slp: 0x1 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] Synced inputs (3): +APP|[GpioTest] - S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] - S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] - S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] Round 1 complete. Remaining: 63 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 63 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] Synced inputs (7): +APP|[GpioTest] - S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] - S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] - S_MGPIO2 (pin_t=44) +APP|[GpioTest] - S_MGPIO6 (pin_t=48) +APP|[GpioTest] - S_MGPIO8 (pin_t=50) +APP|[GpioTest] - S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] - S_HGPIO9 (pin_t=35) +APP|[GpioTest] Round 2 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] Synced inputs (4): +APP|[GpioTest] - S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] - S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] - S_MGPIO20 (pin_t=62) +APP|[GpioTest] - S_MGPIO7 (pin_t=49) +APP|[GpioTest] Round 3 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Round 4 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO22 (pin_t=64) +APP|[GpioTest] Round 5 complete. Remaining: 46 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 46 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO14 (pin_t=56) +APP|[GpioTest] Round 6 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] Synced inputs (3): +APP|[GpioTest] - S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] - S_MGPIO1 (pin_t=43) +APP|[GpioTest] - S_MGPIO9 (pin_t=51) +APP|[GpioTest] Round 7 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO12 (pin_t=54) +APP|[GpioTest] Round 8 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 9 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 14 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 30 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 30 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 22 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 22 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 29 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 36 complete. Remaining: 10 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 10 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 8 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 8 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 6 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 6 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 5 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 5 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 46 +GPIO SCAN PAIRS: Success +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/Serial Debug 2025-11-28 184242.txt b/Serial Debug 2025-11-28 184242.txt new file mode 100644 index 000000000..ddce9ce34 --- /dev/null +++ b/Serial Debug 2025-11-28 184242.txt @@ -0,0 +1,985 @@ +« APP|app_main run start. +APP|sys_slp: 0x1 +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|app_main run start. +APP|sys_slp: 0x1 +» AT^GPIOTEST=4 +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] Round 1 complete. Remaining: 65 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 65 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|app_main run start. +APP|sys_slp: 0x1 +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] Round 2 complete. Remaining: 63 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 63 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] Round 3 complete. Remaining: 61 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 61 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] Round 4 complete. Remaining: 59 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 59 +APP|[GpioTest] Testing output: S_AGPIO_L0 (pin_t=81) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 5 complete. Remaining: 58 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 58 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 6 complete. Remaining: 57 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 57 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO14 (pin_t=56) +APP|[GpioTest] Round 7 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] Round 8 complete. Remaining: 53 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 53 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO12 (pin_t=54) +APP|[GpioTest] Round 9 complete. Remaining: 51 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 51 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 49 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 49 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 47 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 47 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Round 14 complete. Remaining: 45 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 45 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 43 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 43 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 42 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 42 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 41 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 41 +APP|[GpioTest] Testing output: S_AGPIO_R6 (pin_t=120) +APP|charger not plugged ,disable charge ! +APP|[GpioTest] Output: S_AGPIO_R6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 39 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 39 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO22 (pin_t=64) +APP|[GpioTest] Round 29 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO20 (pin_t=62) +APP|[GpioTest] Output: S_MGPIO20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] Round 36 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 47 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_MGPIO1 (pin_t=43) +APP|[GpioTest] Output: S_MGPIO1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO2 (pin_t=44) +APP|[GpioTest] Round 47 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 48 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO6 (pin_t=48) +APP|[GpioTest] Round 48 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 49 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_MGPIO9 (pin_t=51) +APP|[GpioTest] Output: S_MGPIO9 +APP|[GpioTest] Synced inputs (2): +APP|[GpioTest] - S_MGPIO8 (pin_t=50) +APP|[GpioTest] - S_MGPIO7 (pin_t=49) +APP|[GpioTest] Round 49 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 50 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] Output: S_AGPIO_L28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 50 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 51 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 51 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 52 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_HGPIO9 (pin_t=35) +APP|[GpioTest] Output: S_HGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 52 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 53 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 53 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 53 +GPIO SCAN PAIRS: Success +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|app_main run start. +APP|sys_slp: 0x0 +APP|charger not plugged ,disable charge ! +APP|app_main run start. +APP|sys_slp: 0x0 +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] Round 1 complete. Remaining: 65 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 65 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] Round 2 complete. Remaining: 63 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 63 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] Round 3 complete. Remaining: 61 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 61 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] Round 4 complete. Remaining: 59 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 59 +APP|[GpioTest] Testing output: S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] Output: S_AGPIO_L0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 5 complete. Remaining: 58 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 58 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 6 complete. Remaining: 57 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 57 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO14 (pin_t=56) +APP|[GpioTest] Round 7 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] Round 8 complete. Remaining: 53 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 53 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO12 (pin_t=54) +APP|[GpioTest] Round 9 complete. Remaining: 51 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 51 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 49 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 49 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 47 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 47 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Round 14 complete. Remaining: 45 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 45 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 43 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 43 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 42 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 42 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 41 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 41 +APP|[GpioTest] Testing output: S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] Output: S_AGPIO_R6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 39 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 39 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|charger not plugged ,disable charge ! +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO22 (pin_t=64) +APP|[GpioTest] Round 29 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO20 (pin_t=62) +APP|[GpioTest] Output: S_MGPIO20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] Round 36 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 47 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_MGPIO1 (pin_t=43) +APP|[GpioTest] Output: S_MGPIO1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO2 (pin_t=44) +APP|[GpioTest] Round 47 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 48 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO6 (pin_t=48) +APP|[GpioTest] Round 48 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 49 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_MGPIO9 (pin_t=51) +APP|[GpioTest] Output: S_MGPIO9 +APP|[GpioTest] Synced inputs (2): +APP|[GpioTest] - S_MGPIO8 (pin_t=50) +APP|[GpioTest] - S_MGPIO7 (pin_t=49) +APP|[GpioTest] Round 49 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 50 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] Output: S_AGPIO_L28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 50 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 51 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 51 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 52 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_HGPIO9 (pin_t=35) +APP|[GpioTest] Output: S_HGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 52 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 53 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 53 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 53 +GPIO SCAN PAIRS: Success +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/Serial Debug 2025-11-28 193616.txt b/Serial Debug 2025-11-28 193616.txt new file mode 100644 index 000000000..a4e4834ba --- /dev/null +++ b/Serial Debug 2025-11-28 193616.txt @@ -0,0 +1,507 @@ +» AT^GPIOTEST=4 +« APP|[GpioTest] Starting GPIO pair scanning (iterative mode)... +APP|[GpioTest] Found 67 GPIO pins from default config +APP|[GpioTest] ===== All GPIO Names ===== +APP|[GpioTest] [ 1] S_AGPIO_L23 (pin_t=104) +APP|[GpioTest] [ 2] S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] [ 3] S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] [ 4] S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] [ 5] S_AGPIO_L3 (pin_t=84) +APP|[GpioTest] [ 6] S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] [ 7] S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] [ 8] S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] [ 9] S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] [ 10] S_AGPIO_R4 (pin_t=118) +APP|[GpioTest] [ 11] S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] [ 12] S_MGPIO14 (pin_t=56) +APP|[GpioTest] [ 13] S_MGPIO13 (pin_t=55) +APP|[GpioTest] [ 14] S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] [ 15] S_MGPIO11 (pin_t=53) +APP|[GpioTest] [ 16] S_MGPIO12 (pin_t=54) +APP|[GpioTest] [ 17] S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] [ 18] S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] [ 19] S_AGPIO_L24 (pin_t=105) +APP|[GpioTest] [ 20] S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] [ 21] S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] [ 22] S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] [ 23] S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] [ 24] S_AGPIO_R0 (pin_t=114) +APP|[GpioTest] [ 25] S_HGPIO13 (pin_t=39) +APP|[GpioTest] [ 26] S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] [ 27] S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] [ 28] S_MGPIO25 (pin_t=67) +APP|[GpioTest] [ 29] S_MGPIO26 (pin_t=68) +APP|[GpioTest] [ 30] S_MGPIO23 (pin_t=65) +APP|[GpioTest] [ 31] S_MGPIO24 (pin_t=66) +APP|[GpioTest] [ 32] S_MGPIO31 (pin_t=73) +APP|[GpioTest] [ 33] S_MGPIO29 (pin_t=71) +APP|[GpioTest] [ 34] S_MGPIO30 (pin_t=72) +APP|[GpioTest] [ 35] S_MGPIO32 (pin_t=74) +APP|[GpioTest] [ 36] S_MGPIO28 (pin_t=70) +APP|[GpioTest] [ 37] S_MGPIO27 (pin_t=69) +APP|[GpioTest] [ 38] S_MGPIO22 (pin_t=64) +APP|[GpioTest] [ 39] S_MGPIO21 (pin_t=63) +APP|[GpioTest] [ 40] S_MGPIO19 (pin_t=61) +APP|[GpioTest] [ 41] S_MGPIO20 (pin_t=62) +APP|[GpioTest] [ 42] S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] [ 43] S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] [ 44] S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] [ 45] S_AGPIO_L30 (pin_t=111) +APP|[GpioTest] [ 46] S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] [ 47] S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] [ 48] S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] [ 49] S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] [ 50] S_HGPIO5 (pin_t=31) +APP|[GpioTest] [ 51] S_HGPIO4 (pin_t=30) +APP|[GpioTest] [ 52] S_HGPIO0 (pin_t=26) +APP|[GpioTest] [ 53] S_HGPIO1 (pin_t=27) +APP|[GpioTest] [ 54] S_HGPIO2 (pin_t=28) +APP|[GpioTest] [ 55] S_HGPIO3 (pin_t=29) +APP|[GpioTest] [ 56] S_MGPIO3 (pin_t=45) +APP|[GpioTest] [ 57] S_MGPIO1 (pin_t=43) +APP|[GpioTest] [ 58] S_MGPIO2 (pin_t=44) +APP|[GpioTest] [ 59] S_MGPIO0 (pin_t=42) +APP|[GpioTest] [ 60] S_MGPIO6 (pin_t=48) +APP|[GpioTest] [ 61] S_MGPIO9 (pin_t=51) +APP|[GpioTest] [ 62] S_MGPIO8 (pin_t=50) +APP|[GpioTest] [ 63] S_MGPIO7 (pin_t=49) +APP|[GpioTest] [ 64] S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] [ 65] S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] [ 66] S_HGPIO9 (pin_t=35) +APP|[GpioTest] [ 67] S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] ===== End of GPIO List ===== +APP| +APP|[GpioTest] ===== Round 1 ===== +APP|[GpioTest] Remaining GPIOs: 67 +APP|[GpioTest] Testing output: S_AGPIO_L23 (pin_t=104) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L23 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L12 (pin_t=93) +APP|[GpioTest] Round 1 complete. Remaining: 65 GPIOs +APP| +APP|[GpioTest] ===== Round 2 ===== +APP|[GpioTest] Remaining GPIOs: 65 +APP|[GpioTest] Testing output: S_AGPIO_L13 (pin_t=94) +APP|[GpioTest] Output: S_AGPIO_L13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L31 (pin_t=112) +APP|[GpioTest] Round 2 complete. Remaining: 63 GPIOs +APP| +APP|[GpioTest] ===== Round 3 ===== +APP|[GpioTest] Remaining GPIOs: 63 +APP|[GpioTest] Testing output: S_AGPIO_L3 (pin_t=84) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L3 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L2 (pin_t=83) +APP|[GpioTest] Round 3 complete. Remaining: 61 GPIOs +APP| +APP|[GpioTest] ===== Round 4 ===== +APP|[GpioTest] Remaining GPIOs: 61 +APP|[GpioTest] Testing output: S_AGPIO_L1 (pin_t=82) +APP|[GpioTest] Output: S_AGPIO_L1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L4 (pin_t=85) +APP|[GpioTest] Round 4 complete. Remaining: 59 GPIOs +APP| +APP|[GpioTest] ===== Round 5 ===== +APP|[GpioTest] Remaining GPIOs: 59 +APP|[GpioTest] Testing output: S_AGPIO_L0 (pin_t=81) +APP|[GpioTest] Output: S_AGPIO_L0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 5 complete. Remaining: 58 GPIOs +APP| +APP|[GpioTest] ===== Round 6 ===== +APP|[GpioTest] Remaining GPIOs: 58 +APP|[GpioTest] Testing output: S_AGPIO_R4 (pin_t=118) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 6 complete. Remaining: 57 GPIOs +APP| +APP|[GpioTest] ===== Round 7 ===== +APP|[GpioTest] Remaining GPIOs: 57 +APP|[GpioTest] Testing output: S_AGPIO_R5 (pin_t=119) +APP|[GpioTest] Output: S_AGPIO_R5 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO14 (pin_t=56) +APP|[GpioTest] Round 7 complete. Remaining: 55 GPIOs +APP| +APP|[GpioTest] ===== Round 8 ===== +APP|[GpioTest] Remaining GPIOs: 55 +APP|[GpioTest] Testing output: S_MGPIO13 (pin_t=55) +APP|[GpioTest] Output: S_MGPIO13 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_R10 (pin_t=124) +APP|[GpioTest] Round 8 complete. Remaining: 53 GPIOs +APP| +APP|[GpioTest] ===== Round 9 ===== +APP|[GpioTest] Remaining GPIOs: 53 +APP|[GpioTest] Testing output: S_MGPIO11 (pin_t=53) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO11 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO12 (pin_t=54) +APP|[GpioTest] Round 9 complete. Remaining: 51 GPIOs +APP| +APP|[GpioTest] ===== Round 10 ===== +APP|[GpioTest] Remaining GPIOs: 51 +APP|[GpioTest] Testing output: S_AGPIO_R2 (pin_t=116) +APP|[GpioTest] Output: S_AGPIO_R2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 10 complete. Remaining: 50 GPIOs +APP| +APP|[GpioTest] ===== Round 11 ===== +APP|[GpioTest] Remaining GPIOs: 50 +APP|[GpioTest] Testing output: S_AGPIO_R1 (pin_t=115) +APP|[GpioTest] Output: S_AGPIO_R1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 11 complete. Remaining: 49 GPIOs +APP| +APP|[GpioTest] ===== Round 12 ===== +APP|[GpioTest] Remaining GPIOs: 49 +APP|[GpioTest] Testing output: S_AGPIO_L24 (pin_t=105) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 12 complete. Remaining: 48 GPIOs +APP| +APP|[GpioTest] ===== Round 13 ===== +APP|[GpioTest] Remaining GPIOs: 48 +APP|[GpioTest] Testing output: S_AGPIO_L17 (pin_t=98) +APP|[GpioTest] Output: S_AGPIO_L17 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 13 complete. Remaining: 47 GPIOs +APP| +APP|[GpioTest] ===== Round 14 ===== +APP|[GpioTest] Remaining GPIOs: 47 +APP|[GpioTest] Testing output: S_AGPIO_L21 (pin_t=102) +APP|[GpioTest] Output: S_AGPIO_L21 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L11 (pin_t=92) +APP|[GpioTest] Round 14 complete. Remaining: 45 GPIOs +APP| +APP|[GpioTest] ===== Round 15 ===== +APP|[GpioTest] Remaining GPIOs: 45 +APP|[GpioTest] Testing output: S_AGPIO_L19 (pin_t=100) +APP|[GpioTest] Output: S_AGPIO_L19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 15 complete. Remaining: 44 GPIOs +APP| +APP|[GpioTest] ===== Round 16 ===== +APP|[GpioTest] Remaining GPIOs: 44 +APP|[GpioTest] Testing output: S_AGPIO_R0 (pin_t=114) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_R0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 16 complete. Remaining: 43 GPIOs +APP| +APP|[GpioTest] ===== Round 17 ===== +APP|[GpioTest] Remaining GPIOs: 43 +APP|[GpioTest] Testing output: S_HGPIO13 (pin_t=39) +APP|charger not plugged ,disable charge ! +[WEARABLE I/] MsgCenterNotify: args=0x0x6c103670, topic=10021 +[WEARABLE I/] MsgCenterNotifyProc:: LowPower Alarm ! +[WEARABLE I/] MsgCenterNotifyLowpowerProc: alarm_type=1 +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +Brightness: 0% → Fall Edge: 7 → LED Current: 2.5mA +[WEARABLE E/] MsgCenterNotifyLowpowerProc: ThunderBirdMainView::GetInstance() returned null +APP|mipi_tx has been enable! +APP|Succ read lcd id! Lcd id: 0x5598 +APP|timeout when wait phy ready +kvPath: /kvstore +dataPath: +Set value ret: -1 +brightness:0 +[Graphic Error] [ResumeSlice: 225]No valid slice to resume +APP|[POWER_MANAGER E/] filter_timer_execute_system_rule: filter timer, current default timeout:5000, keepon time:5000, event:5. +APP|[GpioTest] Output: S_HGPIO13 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 17 complete. Remaining: 42 GPIOs +APP| +APP|[GpioTest] ===== Round 18 ===== +APP|[GpioTest] Remaining GPIOs: 42 +APP|[GpioTest] Testing output: S_AGPIO_R3 (pin_t=117) +APP|[GpioTest] Output: S_AGPIO_R3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 18 complete. Remaining: 41 GPIOs +APP| +APP|[GpioTest] ===== Round 19 ===== +APP|[GpioTest] Remaining GPIOs: 41 +APP|[GpioTest] Testing output: S_AGPIO_R6 (pin_t=120) +APP|[GpioTest] Output: S_AGPIO_R6 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 19 complete. Remaining: 40 GPIOs +APP| +APP|[GpioTest] ===== Round 20 ===== +APP|[GpioTest] Remaining GPIOs: 40 +APP|[GpioTest] Testing output: S_MGPIO25 (pin_t=67) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO25 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 20 complete. Remaining: 39 GPIOs +APP| +APP|[GpioTest] ===== Round 21 ===== +APP|[GpioTest] Remaining GPIOs: 39 +APP|[GpioTest] Testing output: S_MGPIO26 (pin_t=68) +APP|[GpioTest] Output: S_MGPIO26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 21 complete. Remaining: 38 GPIOs +APP| +APP|[GpioTest] ===== Round 22 ===== +APP|[GpioTest] Remaining GPIOs: 38 +APP|[GpioTest] Testing output: S_MGPIO23 (pin_t=65) +APP|[GpioTest] Output: S_MGPIO23 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 22 complete. Remaining: 37 GPIOs +APP| +APP|[GpioTest] ===== Round 23 ===== +APP|[GpioTest] Remaining GPIOs: 37 +APP|[GpioTest] Testing output: S_MGPIO24 (pin_t=66) +APP|[GpioTest] Output: S_MGPIO24 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 23 complete. Remaining: 36 GPIOs +APP| +APP|[GpioTest] ===== Round 24 ===== +APP|[GpioTest] Remaining GPIOs: 36 +APP|[GpioTest] Testing output: S_MGPIO31 (pin_t=73) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO31 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 24 complete. Remaining: 35 GPIOs +APP| +APP|[GpioTest] ===== Round 25 ===== +APP|[GpioTest] Remaining GPIOs: 35 +APP|[GpioTest] Testing output: S_MGPIO29 (pin_t=71) +[Graphic Error] [PauseSlice: 236]No valid slice to pause +APP|uapi_lcd_backlight_off +Output RESET_LCD_GPIO 1 , VCI_LCD_GPIO 0 +APP|[GpioTest] Output: S_MGPIO29 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 25 complete. Remaining: 34 GPIOs +APP| +APP|[GpioTest] ===== Round 26 ===== +APP|[GpioTest] Remaining GPIOs: 34 +APP|[GpioTest] Testing output: S_MGPIO30 (pin_t=72) +APP|[GpioTest] Output: S_MGPIO30 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 26 complete. Remaining: 33 GPIOs +APP| +APP|[GpioTest] ===== Round 27 ===== +APP|[GpioTest] Remaining GPIOs: 33 +APP|[GpioTest] Testing output: S_MGPIO32 (pin_t=74) +APP|[GpioTest] Output: S_MGPIO32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 27 complete. Remaining: 32 GPIOs +APP| +APP|[GpioTest] ===== Round 28 ===== +APP|[GpioTest] Remaining GPIOs: 32 +APP|[GpioTest] Testing output: S_MGPIO28 (pin_t=70) +APP|[GpioTest] Output: S_MGPIO28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 28 complete. Remaining: 31 GPIOs +APP| +APP|[GpioTest] ===== Round 29 ===== +APP|[GpioTest] Remaining GPIOs: 31 +APP|[GpioTest] Testing output: S_MGPIO27 (pin_t=69) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO27 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO22 (pin_t=64) +APP|[GpioTest] Round 29 complete. Remaining: 29 GPIOs +APP| +APP|[GpioTest] ===== Round 30 ===== +APP|[GpioTest] Remaining GPIOs: 29 +APP|[GpioTest] Testing output: S_MGPIO21 (pin_t=63) +APP|[GpioTest] Output: S_MGPIO21 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 30 complete. Remaining: 28 GPIOs +APP| +APP|[GpioTest] ===== Round 31 ===== +APP|[GpioTest] Remaining GPIOs: 28 +APP|[GpioTest] Testing output: S_MGPIO19 (pin_t=61) +APP|[GpioTest] Output: S_MGPIO19 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 31 complete. Remaining: 27 GPIOs +APP| +APP|[GpioTest] ===== Round 32 ===== +APP|[GpioTest] Remaining GPIOs: 27 +APP|[GpioTest] Testing output: S_MGPIO20 (pin_t=62) +APP|[GpioTest] Output: S_MGPIO20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 32 complete. Remaining: 26 GPIOs +APP| +APP|[GpioTest] ===== Round 33 ===== +APP|[GpioTest] Remaining GPIOs: 26 +APP|[GpioTest] Testing output: S_AGPIO_R7 (pin_t=121) +APP|[GpioTest] Output: S_AGPIO_R7 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 33 complete. Remaining: 25 GPIOs +APP| +APP|[GpioTest] ===== Round 34 ===== +APP|[GpioTest] Remaining GPIOs: 25 +APP|[GpioTest] Testing output: S_AGPIO_R8 (pin_t=122) +APP|[GpioTest] Output: S_AGPIO_R8 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 34 complete. Remaining: 24 GPIOs +APP| +APP|[GpioTest] ===== Round 35 ===== +APP|[GpioTest] Remaining GPIOs: 24 +APP|[GpioTest] Testing output: S_AGPIO_R9 (pin_t=123) +APP|[GpioTest] Output: S_AGPIO_R9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 35 complete. Remaining: 23 GPIOs +APP| +APP|[GpioTest] ===== Round 36 ===== +APP|[GpioTest] Remaining GPIOs: 23 +APP|[GpioTest] Testing output: S_AGPIO_L30 (pin_t=111) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_AGPIO_L30 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_AGPIO_L29 (pin_t=110) +APP|[GpioTest] Round 36 complete. Remaining: 21 GPIOs +APP| +APP|[GpioTest] ===== Round 37 ===== +APP|[GpioTest] Remaining GPIOs: 21 +APP|[GpioTest] Testing output: S_AGPIO_L32 (pin_t=113) +APP|[GpioTest] Output: S_AGPIO_L32 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 37 complete. Remaining: 20 GPIOs +APP| +APP|[GpioTest] ===== Round 38 ===== +APP|[GpioTest] Remaining GPIOs: 20 +APP|[GpioTest] Testing output: S_AGPIO_L20 (pin_t=101) +APP|[GpioTest] Output: S_AGPIO_L20 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 38 complete. Remaining: 19 GPIOs +APP| +APP|[GpioTest] ===== Round 39 ===== +APP|[GpioTest] Remaining GPIOs: 19 +APP|[GpioTest] Testing output: S_AGPIO_L15 (pin_t=96) +APP|[GpioTest] Output: S_AGPIO_L15 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 39 complete. Remaining: 18 GPIOs +APP| +APP|[GpioTest] ===== Round 40 ===== +APP|[GpioTest] Remaining GPIOs: 18 +APP|[GpioTest] Testing output: S_HGPIO5 (pin_t=31) +APP|[GpioTest] Output: S_HGPIO5 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 40 complete. Remaining: 17 GPIOs +APP| +APP|[GpioTest] ===== Round 41 ===== +APP|[GpioTest] Remaining GPIOs: 17 +APP|[GpioTest] Testing output: S_HGPIO4 (pin_t=30) +APP|[GpioTest] Output: S_HGPIO4 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 41 complete. Remaining: 16 GPIOs +APP| +APP|[GpioTest] ===== Round 42 ===== +APP|[GpioTest] Remaining GPIOs: 16 +APP|[GpioTest] Testing output: S_HGPIO0 (pin_t=26) +APP|[GpioTest] Output: S_HGPIO0 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 42 complete. Remaining: 15 GPIOs +APP| +APP|[GpioTest] ===== Round 43 ===== +APP|[GpioTest] Remaining GPIOs: 15 +APP|[GpioTest] Testing output: S_HGPIO1 (pin_t=27) +APP|[GpioTest] Output: S_HGPIO1 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 43 complete. Remaining: 14 GPIOs +APP| +APP|[GpioTest] ===== Round 44 ===== +APP|[GpioTest] Remaining GPIOs: 14 +APP|[GpioTest] Testing output: S_HGPIO2 (pin_t=28) +APP|[GpioTest] Output: S_HGPIO2 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 44 complete. Remaining: 13 GPIOs +APP| +APP|[GpioTest] ===== Round 45 ===== +APP|[GpioTest] Remaining GPIOs: 13 +APP|[GpioTest] Testing output: S_HGPIO3 (pin_t=29) +APP|[GpioTest] Output: S_HGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 45 complete. Remaining: 12 GPIOs +APP| +APP|[GpioTest] ===== Round 46 ===== +APP|[GpioTest] Remaining GPIOs: 12 +APP|[GpioTest] Testing output: S_MGPIO3 (pin_t=45) +APP|app_main run start. +APP|sys_slp: 0x0 +APP|[GpioTest] Output: S_MGPIO3 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 46 complete. Remaining: 11 GPIOs +APP| +APP|[GpioTest] ===== Round 47 ===== +APP|[GpioTest] Remaining GPIOs: 11 +APP|[GpioTest] Testing output: S_MGPIO1 (pin_t=43) +APP|[GpioTest] Output: S_MGPIO1 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO2 (pin_t=44) +APP|[GpioTest] Round 47 complete. Remaining: 9 GPIOs +APP| +APP|[GpioTest] ===== Round 48 ===== +APP|[GpioTest] Remaining GPIOs: 9 +APP|[GpioTest] Testing output: S_MGPIO0 (pin_t=42) +APP|[GpioTest] Output: S_MGPIO0 +APP|[GpioTest] Synced inputs (1): +APP|[GpioTest] - S_MGPIO6 (pin_t=48) +APP|[GpioTest] Round 48 complete. Remaining: 7 GPIOs +APP| +APP|[GpioTest] ===== Round 49 ===== +APP|[GpioTest] Remaining GPIOs: 7 +APP|[GpioTest] Testing output: S_MGPIO9 (pin_t=51) +APP|[GpioTest] Output: S_MGPIO9 +APP|[GpioTest] Synced inputs (2): +APP|[GpioTest] - S_MGPIO8 (pin_t=50) +APP|[GpioTest] - S_MGPIO7 (pin_t=49) +APP|[GpioTest] Round 49 complete. Remaining: 4 GPIOs +APP| +APP|[GpioTest] ===== Round 50 ===== +APP|[GpioTest] Remaining GPIOs: 4 +APP|[GpioTest] Testing output: S_AGPIO_L28 (pin_t=109) +APP|[GpioTest] Output: S_AGPIO_L28 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 50 complete. Remaining: 3 GPIOs +APP| +APP|[GpioTest] ===== Round 51 ===== +APP|[GpioTest] Remaining GPIOs: 3 +APP|[GpioTest] Testing output: S_AGPIO_L18 (pin_t=99) +APP|[GpioTest] Output: S_AGPIO_L18 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 51 complete. Remaining: 2 GPIOs +APP| +APP|[GpioTest] ===== Round 52 ===== +APP|[GpioTest] Remaining GPIOs: 2 +APP|[GpioTest] Testing output: S_HGPIO9 (pin_t=35) +APP|[GpioTest] Output: S_HGPIO9 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 52 complete. Remaining: 1 GPIOs +APP| +APP|[GpioTest] ===== Round 53 ===== +APP|[GpioTest] Remaining GPIOs: 1 +APP|[GpioTest] Testing output: S_AGPIO_L26 (pin_t=107) +APP|[GpioTest] Output: S_AGPIO_L26 +APP|[GpioTest] No synced inputs found +APP|[GpioTest] Round 53 complete. Remaining: 0 GPIOs +APP| +APP|[GpioTest] ===== Scanning Complete ===== +APP|[GpioTest] Total rounds: 53 +GPIO SCAN PAIRS: Success +APP|app_main run start. +APP|sys_slp: 0x0 diff --git a/check_gpio_in_doc.py b/check_gpio_in_doc.py new file mode 100644 index 000000000..6ae1d8495 --- /dev/null +++ b/check_gpio_in_doc.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +检查67个GPIO是否都在Sparta数字管脚复用说明.md中 +""" + +# 从GPIO扫描结果中提取的67个GPIO名称(转换为小写,因为文档中使用小写) +gpio_list = [ + "s_agpio_l23", "s_agpio_l12", "s_agpio_l13", "s_agpio_l31", "s_agpio_l3", + "s_agpio_l2", "s_agpio_l1", "s_agpio_l4", "s_agpio_l0", "s_agpio_r4", + "s_agpio_r5", "s_mgpio14", "s_mgpio13", "s_agpio_r10", "s_mgpio11", + "s_mgpio12", "s_agpio_r2", "s_agpio_r1", "s_agpio_l24", "s_agpio_l17", + "s_agpio_l21", "s_agpio_l11", "s_agpio_l19", "s_agpio_r0", "s_hgpio13", + "s_agpio_r3", "s_agpio_r6", "s_mgpio25", "s_mgpio26", "s_mgpio23", + "s_mgpio24", "s_mgpio31", "s_mgpio29", "s_mgpio30", "s_mgpio32", + "s_mgpio28", "s_mgpio27", "s_mgpio22", "s_mgpio21", "s_mgpio19", + "s_mgpio20", "s_agpio_r7", "s_agpio_r8", "s_agpio_r9", "s_agpio_l30", + "s_agpio_l29", "s_agpio_l32", "s_agpio_l20", "s_agpio_l15", "s_hgpio5", + "s_hgpio4", "s_hgpio0", "s_hgpio1", "s_hgpio2", "s_hgpio3", + "s_mgpio3", "s_mgpio1", "s_mgpio2", "s_mgpio0", "s_mgpio6", + "s_mgpio9", "s_mgpio8", "s_mgpio7", "s_agpio_l28", "s_agpio_l18", + "s_hgpio9", "s_agpio_l26" +] + +def check_gpio_in_doc(md_file_path): + """检查GPIO是否在文档中""" + try: + with open(md_file_path, 'r', encoding='utf-8') as f: + content = f.read().lower() # 转换为小写以便比较 + + found_gpios = [] + missing_gpios = [] + + for gpio in gpio_list: + gpio_lower = gpio.lower() + # 检查GPIO名称是否在文档中(作为独立单词或行首) + if gpio_lower in content: + found_gpios.append(gpio) + else: + missing_gpios.append(gpio) + + return found_gpios, missing_gpios + + except Exception as e: + print(f"Error reading file: {e}") + return [], [] + +if __name__ == "__main__": + md_file = "code/sdk/zhihui/utilscpp/Sparta 数字管脚复用说明.md" + + found, missing = check_gpio_in_doc(md_file) + + print(f"总GPIO数量: {len(gpio_list)}") + print(f"在文档中找到: {len(found)}") + print(f"在文档中缺失: {len(missing)}") + print() + + if missing: + print("=" * 60) + print("缺失的GPIO:") + print("=" * 60) + for gpio in sorted(missing): + print(f" - {gpio}") + print() + + if found: + print("=" * 60) + print("找到的GPIO:") + print("=" * 60) + for gpio in sorted(found): + print(f" ✓ {gpio}") + print() + + if len(missing) == 0: + print("✅ 所有67个GPIO都在文档中!") + else: + print(f"⚠️ 有{len(missing)}个GPIO在文档中缺失") + diff --git a/code/sdk/application/brandy/brandy_standard/board_init.c b/code/sdk/application/brandy/brandy_standard/board_init.c index bcc551cce..4248024e5 100644 --- a/code/sdk/application/brandy/brandy_standard/board_init.c +++ b/code/sdk/application/brandy/brandy_standard/board_init.c @@ -225,7 +225,7 @@ void board_init(uint32_t flash_id, uint32_t flash_unique_id) pio_func_init(); gpio_func_init(); - check_pwrkey_3s(); + // check_pwrkey_3s(); if (need_enter_safemode() == true) { PRINT("entering SafeMode\r\n"); diff --git a/code/sdk/application/brandy/brandy_standard/thread_init.c b/code/sdk/application/brandy/brandy_standard/thread_init.c index 5f514aa78..6099a0ecf 100644 --- a/code/sdk/application/brandy/brandy_standard/thread_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_init.c @@ -297,11 +297,11 @@ static void print_system_sleep_info(void) pmu_msystem_sleep_history_clear(); pm_veto_t *pm_veto_ptr = pm_veto_get_info(); - PRINT("M core run time %d, deepsleep time:%d, lightsleep time:%d, m sleep flag:%d"NEWLINE, - (uint32_t)los_system_system_run_time(), deepsleep_time, lightsleep_time, (uint8_t)m_core_sleep); - PRINT("M core deepsleep cnt:%d, lightsleep cnt:%d"NEWLINE, deepsleep_cnt, lightsleep_cnt); - PRINT("M core last veto id:%d, last veto count:%d, total_counts=%d"NEWLINE, sleep_info->sleep_veto.last_veto_id, - sleep_info->sleep_veto.last_veto_count, pm_veto_ptr->veto_counts.total_counts); + // PRINT("M core run time %d, deepsleep time:%d, lightsleep time:%d, m sleep flag:%d"NEWLINE, + // (uint32_t)los_system_system_run_time(), deepsleep_time, lightsleep_time, (uint8_t)m_core_sleep); + // PRINT("M core deepsleep cnt:%d, lightsleep cnt:%d"NEWLINE, deepsleep_cnt, lightsleep_cnt); + // PRINT("M core last veto id:%d, last veto count:%d, total_counts=%d"NEWLINE, sleep_info->sleep_veto.last_veto_id, + // sleep_info->sleep_veto.last_veto_count, pm_veto_ptr->veto_counts.total_counts); oml_pf_log_print1(LOG_BCORE_PLT_DRIVER_REBOOT, LOG_NUM_DRIVER_LPC, LOG_LEVEL_INFO, "sys_slp: 0x%d", sys_slp); oml_pf_log_print4(LOG_BCORE_PLT_DRIVER_REBOOT, LOG_NUM_DRIVER_LPC, LOG_LEVEL_INFO, diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h index 19c74ce58..4cedf09e1 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h @@ -46,39 +46,39 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_OPI, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_EGPIO24 { HAL_PIO_FUNC_OPI, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_EGPIO25 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO0 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO1 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO2 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO3 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO4 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_HGPIO5 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO0] // S_HGPIO0 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO1] // S_HGPIO1 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO2] // S_HGPIO2 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO3] // S_HGPIO3 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO4] // S_HGPIO4 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO5] // S_HGPIO5 NC #if (defined CFG_DRIVERS_NANDFLASH) { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO6 { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO7 { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO8 - { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO9 + { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_HGPIO9] // S_HGPIO9 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO10 { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO11 cs0 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO12 cs1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO13 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // [67GPIO-S_HGPIO13] // S_HGPIO13 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO14 { HAL_PIO_FUNC_QSPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_HGPIO15 clk #else { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO6 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO7 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO8 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO9 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_HGPIO9] // S_HGPIO9 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO10 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO11 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO12 - { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO13 + { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_HGPIO13] // S_HGPIO13 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_HGPIO14 { HAL_PIO_FUNC_EMMC, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_HGPIO15 emmc clk #endif - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO0 NC - { HAL_PIO_FUNC_I2C2_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO1 I2C2 SCL Sensor 6轴 指南针 心率 - { HAL_PIO_FUNC_I2C2_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO2 I2C2 SDA Sensor - { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO3 NC + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO0] // S_MGPIO0 NC + { HAL_PIO_FUNC_I2C2_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO1] // S_MGPIO1 I2C2 SCL Sensor 6轴 指南针 心率 + { HAL_PIO_FUNC_I2C2_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO2] // S_MGPIO2 I2C2 SDA Sensor + { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO3] // S_MGPIO3 NC // #if (defined BRANDY_PRODUCT_EVB4) { HAL_PIO_FUNC_SPI0, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO4 NC @@ -87,42 +87,42 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { // #endif { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO5 NC - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO6 SPI1 DI - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO7 SPI1 DO - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO8 SPI1 CLK - { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // S_MGPIO9 SPI1 CS0 + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO6] // S_MGPIO6 SPI1 DI + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO7] // S_MGPIO7 SPI1 DO + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO8] // S_MGPIO8 SPI1 CLK + { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO9] // S_MGPIO9 SPI1 CS0 { HAL_PIO_FUNC_SPI1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO10 SPI1 CS1 NC - { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO11 i2c0 SCL NC - { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO12 I2C0 SDA - { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO13 I2C1 SCL touch i2c - { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO14 I2C1 SDA + { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO11] // S_MGPIO11 i2c0 SCL NC + { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO12] // S_MGPIO12 I2C0 SDA + { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO13] // S_MGPIO13 I2C1 SCL touch i2c + { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO14] // S_MGPIO14 I2C1 SDA { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO15 I2C2 SCL Sensor 6轴 指南针 心率 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO16 I2C2 SDA Sensor { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO17 i2c3 SCL smart pa\ 预留马达控制 \安全芯片 { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO18 I2C3 SDA - { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_MGPIO19 uart1 tx - { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO20 uart1 rx - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO21 uart1 rts - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO22 uart1 cts - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO23 NC - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO24 NC - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO25 NC - { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO26 NC + { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO19] // S_MGPIO19 uart1 tx + { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO20] // S_MGPIO20 uart1 rx + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO21] // S_MGPIO21 uart1 rts + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO22] // S_MGPIO22 uart1 cts + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO23] // S_MGPIO23 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO24] // S_MGPIO24 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO25] // S_MGPIO25 NC + { HAL_PIO_FUNC_SPI2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO26] // S_MGPIO26 NC #if (defined QSPI_DISPLAY) - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO27 - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO28 - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO29 - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO30 - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO31 - { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO32 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO27] // S_MGPIO27 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO28] // S_MGPIO28 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO29] // S_MGPIO29 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO30] // S_MGPIO30 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO31] // S_MGPIO31 + { HAL_PIO_FUNC_QSPI2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_MGPIO32] // S_MGPIO32 #else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO27 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO28 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO29 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO30 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO31 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO32 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO27] // S_MGPIO27 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO28] // S_MGPIO28 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO29] // S_MGPIO29 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO30] // S_MGPIO30 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO31] // S_MGPIO31 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_MGPIO32] // S_MGPIO32 #endif { HAL_PIO_FUNC_UART_HS_UART, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO33 huart tx { HAL_PIO_FUNC_UART_HS_UART, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO34 huart rx @@ -136,12 +136,12 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO38 uart rx NC #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L0 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L0] // S_AGPIO_L0 NC - { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L1 i2s1 - { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L2 - { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L3 - { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L4 + { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L1] // S_AGPIO_L1 i2s1 + { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L2] // S_AGPIO_L2 + { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L3] // S_AGPIO_L3 + { HAL_PIO_FUNC_I2S1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L4] // S_AGPIO_L4 { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L5 { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L6 i2s0 @@ -155,63 +155,63 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L9 dsp uart TP35 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L10 dsp uart TP36 #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L11 G_INT1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L11] // S_AGPIO_L11 G_INT1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L12 i2c data HX3507_SDIO - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L13 i2c CLK HX3507_SCLK + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L12] // S_AGPIO_L12 i2c data HX3507_SDIO + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L13] // S_AGPIO_L13 i2c CLK HX3507_SCLK { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_L14 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L15 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L15] // S_AGPIO_L15 NC { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L16 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L17 HX3507_INT not use - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L18 VDDEN //暂时无用,采用VDDIO 默认开启 EXt V3.0 EXt V1.8 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_L19 G_INT2 //暂时不用 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L17] // S_AGPIO_L17 HX3507_INT not use + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L18] // S_AGPIO_L18 VDDEN //暂时无用,采用VDDIO 默认开启 EXt V3.0 EXt V1.8 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L19] // S_AGPIO_L19 G_INT2 //暂时不用 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_L20 0.2C_CHRG - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L21 NTC_VDD_ON给低打开 NTC上拉电源 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L20] // S_AGPIO_L20 0.2C_CHRG + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L21] // S_AGPIO_L21 NTC_VDD_ON给低打开 NTC上拉电源 #ifdef QSPI_DISPLAY { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L22 QSPI TE #else { HAL_PIO_FUNC_TE, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L22 MIPI TE #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L23 CAT_1_PWR_ON 控制CAT_1开机脚,或者控制 CAT1电源 拉高有效 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L24 LCM_EN + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L23] // S_AGPIO_L23 CAT_1_PWR_ON 控制CAT_1开机脚,或者控制 CAT1电源 拉高有效 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L24] // S_AGPIO_L24 LCM_EN { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L25 //////////// audio pa reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L26 心率复位 PPG reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L26] // S_AGPIO_L26 心率复位 PPG reset { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L27 LCM reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L28 CAT_1复位 CAT1_RESET_N 拉低有效 key4 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L29 charge done info 检测是否充满电 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L30 KP_MKIN1 唤醒 CAT1 ,输出 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L31 KP_MKOUIT1 唤醒 蓝牙 ,输入 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L32 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L28] // S_AGPIO_L28 CAT_1复位 CAT1_RESET_N 拉低有效 key4 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L29] // S_AGPIO_L29 charge done info 检测是否充满电 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L30] // S_AGPIO_L30 KP_MKIN1 唤醒 CAT1 ,输出 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_L31] // S_AGPIO_L31 KP_MKOUIT1 唤醒 蓝牙 ,输入 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_L32] // S_AGPIO_L32 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R1 SE_REST 安全芯片复位唤醒脚 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R0] // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R1] // S_AGPIO_R1 SE_REST 安全芯片复位唤醒脚 // #if VIB_USE_PWM - // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 - // { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 + // [67GPIO-S_AGPIO_R2] // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 + // [67GPIO-S_AGPIO_R2] // { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 // #else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R2] // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 // #endif #ifdef BOARD_N9 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_R3 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_R3] // S_AGPIO_R3 NC #else { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // S_AGPIO_R4 tp reset - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R5 touch int - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT 心率中断 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 GYRO_INT2 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R4] // S_AGPIO_R4 tp reset + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_R5] // S_AGPIO_R5 touch int + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_R6] // S_AGPIO_R6 PRG_INT 心率中断 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R7] // S_AGPIO_R7 GYRO_INT2 #ifdef SUPPORT_GYRO_SERVICE - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R8 GYRO_INT1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_R8] // S_AGPIO_R8 GYRO_INT1 #else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R8 GYRO_INT1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R8] // S_AGPIO_R8 GYRO_INT1 #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R9 BAT_CHARGE_OFF 关掉充电 温度高的时候 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_R10 Key2 ///////////////////HAL_PIO_IE_ENBALE input enable + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // [67GPIO-S_AGPIO_R9] // S_AGPIO_R9 BAT_CHARGE_OFF 关掉充电 温度高的时候 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // [67GPIO-S_AGPIO_R10] // S_AGPIO_R10 Key2 ///////////////////HAL_PIO_IE_ENBALE input enable #if CORE == APPS { HAL_PIO_FUNC_INVALID, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // ULP_GPIO0 mode not config @@ -254,33 +254,33 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { #if DEFAULT_POWERON_CAT1 - // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on + // [67GPIO-S_AGPIO_L23] // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on { S_AGPIO_L23, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, - // S_AGPIO_L28 Cat1 reset ---- low reset + // [67GPIO-S_AGPIO_L28] // S_AGPIO_L28 Cat1 reset ---- low reset { S_AGPIO_L24, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, #else - // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on + // [67GPIO-S_AGPIO_L23] // S_AGPIO_L23 CAT_1_PWR_ON ----- high power on { S_AGPIO_L23, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - // S_AGPIO_L28 Cat1 reset ---- low reset - // { S_AGPIO_L24, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_L28] // S_AGPIO_L28 Cat1 reset ---- low reset + // [67GPIO-S_AGPIO_L24] // { S_AGPIO_L24, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, #endif - // S_AGPIO_L17 HX3507_INT - // { S_AGPIO_L17, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - // S_AGPIO_L12 SDIO_BT - // { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - // // S_AGPIO_L13 SCLK_BT - // { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_L17] // S_AGPIO_L17 HX3507_INT + // [67GPIO-S_AGPIO_L17] // { S_AGPIO_L17, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_L12] // S_AGPIO_L12 SDIO_BT + // [67GPIO-S_AGPIO_L12] // { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_L13] // // S_AGPIO_L13 SCLK_BT + // [67GPIO-S_AGPIO_L13] // { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - // S_AGPIO_L26 心率复位 PPG reset - // { S_AGPIO_L26, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 - // { S_AGPIO_R0, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_L26] // S_AGPIO_L26 心率复位 PPG reset + // [67GPIO-S_AGPIO_L26] // { S_AGPIO_L26, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + // [67GPIO-S_AGPIO_R0] // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 + // [67GPIO-S_AGPIO_R0] // { S_AGPIO_R0, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, - //S_AGPIO_L21 NTC_VDD_ON 给低打开 NTC上拉电源 ,默认关闭 + // [67GPIO-S_AGPIO_L21] //S_AGPIO_L21 NTC_VDD_ON 给低打开 NTC上拉电源 ,默认关闭 { S_AGPIO_L21, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, #if 0 //默认正常充电 -// #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable -// #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c 低电流充电 +// [67GPIO-S_AGPIO_R9] // #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable +// [67GPIO-S_AGPIO_L20] // #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c 低电流充电 { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, #else @@ -297,21 +297,21 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { //默认开启 EXT LDO V3.0 V1.8 - // { S_AGPIO_L18, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, + // [67GPIO-S_AGPIO_L18] // { S_AGPIO_L18, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, { S_AGPIO_L14, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, #ifdef SUPPORT_CYWEE_SERVICE /**G sensor G_INT1 S_AGPIO_L11 G_INT2 S_AGPIO_L19 采用timer 时这些中断要屏蔽*/ { S_AGPIO_L11, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cywee_int_callback }, - //{ S_AGPIO_L19, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, cywee_int_callback }, + // [67GPIO-S_AGPIO_L19] //{ S_AGPIO_L19, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, cywee_int_callback }, #endif /**S_AGPIO_R1 GPO alipay默认resetpin*/ - // { S_AGPIO_R1, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, + // [67GPIO-S_AGPIO_R1] // { S_AGPIO_R1, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, #ifdef SUPPORT_CAT1_SERVICE /**cat1 ring input key*/ - // { S_AGPIO_L31, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, cat1_ring_isr_callback}, - // { S_AGPIO_L31, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cat1_ring_isr_callback}, + // [67GPIO-S_AGPIO_L31] // { S_AGPIO_L31, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_DEDGE, cat1_ring_isr_callback}, + // [67GPIO-S_AGPIO_L31] // { S_AGPIO_L31, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, cat1_ring_isr_callback}, #endif }; diff --git a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c index de05aeee1..0f62abb4f 100644 --- a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c +++ b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c @@ -205,14 +205,14 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { #elif defined(SUPPORT_PPP_SERVICE_INTERRUPT) || defined(SUPPORT_CAT1_SERVICE) { { - .tx_pin = S_MGPIO19, - .rx_pin = S_MGPIO20, + .tx_pin = PIN_NONE, + .rx_pin = PIN_NONE, .cts_pin = PIN_NONE, .rts_pin = PIN_NONE }, { - .tx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_UART1, - .rx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_UART1, + .tx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, + .rx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, .cts_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, .rts_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX }, @@ -235,14 +235,14 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { #else // SUPPORT_CAT1_SERVICE { { - .tx_pin = S_MGPIO19, - .rx_pin = S_MGPIO20, + .tx_pin = PIN_NONE, + .rx_pin = PIN_NONE, .cts_pin = PIN_NONE, .rts_pin = PIN_NONE }, { - .tx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_UART1, - .rx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_UART1, + .tx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, + .rx_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, .cts_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX, .rts_pin_mode = (pin_mode_t)HAL_PIO_FUNC_MAX }, diff --git a/code/sdk/zhihui/services/battery/service/battery_driver.cpp b/code/sdk/zhihui/services/battery/service/battery_driver.cpp index f43c00eb4..6def722c3 100644 --- a/code/sdk/zhihui/services/battery/service/battery_driver.cpp +++ b/code/sdk/zhihui/services/battery/service/battery_driver.cpp @@ -654,8 +654,8 @@ static bool adc_get_sample_result(float *voltage, uint8_t channel) uint32_t stick = 0; uint32_t sample_zero_count = 0; //开启 battery NTC 开关 - if(channel != ADC_CHANNEL_BAT_VOLTAGE) - uapi_gpio_set_val(BATTERY_NTC_GPIO,GPIO_LEVEL_LOW); + // if(channel != ADC_CHANNEL_BAT_VOLTAGE) + // uapi_gpio_set_val(BATTERY_NTC_GPIO,GPIO_LEVEL_LOW); if (channel >= ADC_CHANNEL_4) { sample_number = HAL_ADC_SAMPLE_NUMBER_CONFIG_1; @@ -742,8 +742,8 @@ static bool adc_get_sample_result(float *voltage, uint8_t channel) // osal_printk("channel = %d , stick = %d , voltage = %.04f.\r\n", channel,stick,*voltage); //关闭 battery NTC 电源 - if(channel != ADC_CHANNEL_BAT_VOLTAGE) - uapi_gpio_set_val(BATTERY_NTC_GPIO,GPIO_LEVEL_HIGH); + // if(channel != ADC_CHANNEL_BAT_VOLTAGE) + // uapi_gpio_set_val(BATTERY_NTC_GPIO,GPIO_LEVEL_HIGH); UNUSED(discard_number); return true; diff --git a/code/sdk/zhihui/utils/custom_utils_at_cmd.c b/code/sdk/zhihui/utils/custom_utils_at_cmd.c index 62a9a0a6a..8b0fba63d 100644 --- a/code/sdk/zhihui/utils/custom_utils_at_cmd.c +++ b/code/sdk/zhihui/utils/custom_utils_at_cmd.c @@ -1867,7 +1867,7 @@ static uint32_t custom_gpio_test(uint8_t *para, uint32_t paraLen, char *strCommo if (argc < 1) { wstp_print("GPIO TEST ATCMD Set Parameter Failed argc %d\n", argc); wstp_print("Usage: AT^GPIOTEST=cmd\n"); - wstp_print(" cmd: 1=add config (requires total_size,packet_num,packet_bytes,hexstr), 2=start test, 3=stop test\n"); + wstp_print(" cmd: 1=add config (requires total_size,packet_num,packet_bytes,hexstr), 2=start test, 3=stop test, 4=scan pairs\n"); return ERRCODE_FAIL; } @@ -1933,10 +1933,79 @@ static uint32_t custom_gpio_test(uint8_t *para, uint32_t paraLen, char *strCommo } } break; + case 4: // 扫描配对关系 + { + extern int custom_gpio_test_scan_pairs(void); + int ret = custom_gpio_test_scan_pairs(); + if (ret == 0) { + wstp_print("GPIO SCAN PAIRS: Success\n"); + } else { + wstp_print("GPIO SCAN PAIRS: Failed, ret=%d\n", ret); + } + } + break; default: wstp_print("GPIO TEST ATCMD Unknown command %d\n", cmd); wstp_print("Usage: AT^GPIOTEST=cmd\n"); - wstp_print(" cmd: 1=add config (requires hexstr,is_last), 2=start test, 3=stop test\n"); + wstp_print(" cmd: 1=add config (requires total_size,packet_num,packet_bytes,hexstr), 2=start test, 3=stop test, 4=scan pairs\n"); + return ERRCODE_FAIL; + } + + return ERRCODE_SUCC; +} + +// 蓝牙扫描测试AT指令实现 +// 用法: +// AT^BTSCANTEST=1 - 开始扫描 +// AT^BTSCANTEST=2 - 停止扫描 +static uint32_t custom_bt_scan_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd) +{ + UNUSED(strCommonCmd); + uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 }; + uint32_t argc = 0; + + int ret = ConvertCmdToParam(para, paraLen, argv, &argc); + if (ret != CUSTOM_UTILS_SUCCESS) { + wstp_print("BT SCAN TEST ATCMD Convert Command Failed\n"); + return ERRCODE_FAIL; + } + + if (argc < 1) { + wstp_print("BT SCAN TEST ATCMD Set Parameter Failed argc %d\n", argc); + wstp_print("Usage: AT^BTSCANTEST=cmd\n"); + wstp_print(" cmd: 1=start scan, 2=stop scan\n"); + return ERRCODE_FAIL; + } + + uint8_t cmd = (uint8_t)atoi((char*)argv[0]); + + switch (cmd) { + case 1: // 开始扫描 + { + extern int custom_bt_scan_test_start(void); + int ret = custom_bt_scan_test_start(); + if (ret == 0) { + wstp_print("BT SCAN TEST START: Success\n"); + } else { + wstp_print("BT SCAN TEST START: Failed, ret=%d\n", ret); + } + } + break; + case 2: // 停止扫描 + { + extern int custom_bt_scan_test_stop(void); + int ret = custom_bt_scan_test_stop(); + if (ret == 0) { + wstp_print("BT SCAN TEST STOP: Success\n"); + } else { + wstp_print("BT SCAN TEST STOP: Failed, ret=%d\n", ret); + } + } + break; + default: + wstp_print("BT SCAN TEST ATCMD Unknown command %d\n", cmd); + wstp_print("Usage: AT^BTSCANTEST=cmd\n"); + wstp_print(" cmd: 1=start scan, 2=stop scan\n"); return ERRCODE_FAIL; } @@ -2171,6 +2240,8 @@ static const at_cmd_table_t g_custom_utils_cmd[] = { { (char *)"AT^AUDIOTEST", custom_audio_test, (char *)" " }, // GPIO测试AT指令 { (char *)"AT^GPIOTEST", custom_gpio_test, (char *)" " }, + // 蓝牙扫描测试AT指令(新实现) + { (char *)"AT^BTSCANTEST", custom_bt_scan_test, (char *)" " }, { (char *)"AT^FACTORY", custom_enter_factory_test_mode, (char *)" " }, { (char *)"AT^SETUART", custom_set_uart_status, (char *)" " }, { (char *)"AT^GETBTMAC", custom_get_btmac, (char *)" " }, diff --git a/code/sdk/zhihui/utilscpp/CMakeLists.txt b/code/sdk/zhihui/utilscpp/CMakeLists.txt index f6ce112e0..2aa1c3d98 100644 --- a/code/sdk/zhihui/utilscpp/CMakeLists.txt +++ b/code/sdk/zhihui/utilscpp/CMakeLists.txt @@ -11,6 +11,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/audio_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/pcm_volume_calculator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gpio_test.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/bt_scan_test.cpp ) set(PUBLIC_HEADER diff --git "a/code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.md" "b/code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.md" new file mode 100644 index 000000000..75d9b2c22 --- /dev/null +++ "b/code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.md" @@ -0,0 +1,264 @@ +# Sparta 数字管脚复用说明 + +*Converted from PDF - 2 pages* + +--- + +## Page 1 + +### Brandy数字管脚复用说明 + +### 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 + +ulp_gpio0 IO ulp_gpio0 I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio1 IO ulp_gpio1 I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio2 IO ulp_gpio2 I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio3 IO ulp_gpio3 I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio4 IO ulp_gpio4 O pwr_sw I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio5 IO ulp_gpio5 IO swd_data I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +ulp_gpio6 IO ulp_gpio6 I swd_clk I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +### 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 + +s_egpio0 IO s_egpio0 IOqspi0_d[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio1 IO s_egpio1 IOqspi0_d[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio2 IO s_egpio2 IOqspi0_d[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio3 IO s_egpio3 IOqspi0_d[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio4 IO s_egpio4 Oqspi0_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio5 IO s_egpio5 Oqspi0_cs[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio22 IO s_egpio22 Oopi_x16_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio23 IO s_egpio23 Oopi_x16_ce I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio24 IO s_egpio24 IOopi_x16_dqs[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_egpio25 IO s_egpio25 IOopi_x16_dqs[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio0 IO s_hgpio0 IOsdio_h_d[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio1 IO s_hgpio1 IOsdio_h_d[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio2 IO s_hgpio2 IOsdio_h_d[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio3 IO s_hgpio3 IOsdio_h_d[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio4 IO s_hgpio4 Osdio_h_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio5 IO s_hgpio5 IOsdio_h_cmd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio6 IO s_hgpio6 IOqspi1_d[0] IOemmc_d[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio7 IO s_hgpio7 IOqspi1_d[1] IOemmc_d[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio8 IO s_hgpio8 IOqspi1_d[2] IOemmc_d[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio9 IO s_hgpio9 IOqspi1_d[3] IOemmc_d[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio10 IO s_hgpio10 I-Hizno-func IOemmc_d[4] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio11 IO s_hgpio11 IOqspi1_cs[0] IOemmc_d[5] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio12 IO s_hgpio12 IOqspi1_cs[1] IOemmc_d[6] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio13 IO s_hgpio13 I-Hizno-func IOemmc_d[7] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio14 IO s_hgpio14 I-Hizno-func IOemmc_cmd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_hgpio15 IO s_hgpio15 Oqspi1_clk Oemmc_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio0 IO s_mgpio0 Ispi0_di I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio1 IO s_mgpio1 Ospi0_do I-Hizno-func IOi2c2_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio2 IO s_mgpio2 Ospi0_clk I-Hizno-func IOi2c2_sda I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio3 IO s_mgpio3 Ospi0_cs[0] I-Hizno-func IOi2c3_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio4 IO s_mgpio4 O spi0_cs[1] I-Hiz no-func IO i2c3_sda I-Hiz no-func I-Hiz no-func I-Hiz no-func I-Hiz no-func + +s_mgpio5 IO s_mgpio5 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio6 IO s_mgpio6 Ispi1_di I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio7 IO s_mgpio7 Ospi1_do I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio8 IO s_mgpio8 IOspi1_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio9 IO s_mgpio9 IOspi1_cs0 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio10 IO s_mgpio10 Ospi1_cs1 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio11 IO s_mgpio11 IOi2c0_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio12 IO s_mgpio12 IOi2c0_sda I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio13 IO s_mgpio13 IOi2c1_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio14 IO s_mgpio14 IOi2c1_sda I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio15 IO s_mgpio15 IOi2c2_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio16 IO s_mgpio16 IOi2c2_sda I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio17 IO s_mgpio17 IOi2c3_scl I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio18 IO s_mgpio18 IOi2c3_sda I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio19 IO s_mgpio19 Ouart1_txd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio20 IO s_mgpio20 Iuart1_rxd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio21 IO s_mgpio21 Ouart1_rts I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio22 IO s_mgpio22 Iuart1_cts I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio23 IO s_mgpio23 Ispi2_di I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Oextlna_ctrl I-Hizno-func + +s_mgpio24 IO s_mgpio24 Ospi2_do I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Oextlna_rx_en I-Hizno-func + +s_mgpio25 IO s_mgpio25 IOspi2_clk Oclkout[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_mgpio26 IO s_mgpio26 IOspi2_cs Oclkout[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-funccfg_gpio_N_bit_mode==5 cfg_gpio_N_bit_mode==6 cfg_gpio_N_bit_mode==7管脚名称cfg_gpio_N_bit_mode==0 cfg_gpio_N_bit_mode==1 cfg_gpio_N_bit_mode==2 cfg_gpio_N_bit_mode==3 cfg_gpio_N_bit_mode==4宏定义中管脚定义与此表管脚名称的对应关系见具体软件代码注释 + +管脚名称cfg_ulpgpio_bit_mode==6 cfg_ulpgpio_bit_mode==7 cfg_ulpgpio_bit_mode==0 cfg_ulpgpio_bit_mode==1 cfg_ulpgpio_bit_mode==2 cfg_ulpgpio_bit_mode==3 cfg_ulpgpio_bit_mode==4 cfg_ulpgpio_bit_mode==5 + +### 2023/9/26 第1页,共2页 + + +--- + +## Page 2 + +### Brandy数字管脚复用说明 + +### 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 方向 功能复用 + +s_mgpio27 IO s_mgpio27 IOqspi2_d[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Obt_wifi_sw I-Hizno-func + +s_mgpio28 IO s_mgpio28 IOqspi2_d[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Obt_act I-Hizno-func + +s_mgpio29 IO s_mgpio29 IOqspi2_d[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Obt_freq I-Hizno-func + +s_mgpio30 IO s_mgpio30 Oqspi2_d[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Obt_status I-Hizno-func + +s_mgpio31 IO s_mgpio31 Oqspi2_clk I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Iwlan_act I-Hizno-func + +s_mgpio32 IO s_mgpio32 Oqspi2_cs[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func Obt_dual_ant_sw I-Hizno-func + +s_mgpio33 IO s_mgpio33 Ohsuart_txd I-Hizno-func Opwmp[0] Opwmn[0] IOi2c0_scl I-Hizno-func I-Hizno-func + +s_mgpio34 IO s_mgpio34 Ihsuart_rxd I-Hizno-func Opwmp[1] Opwmn[1] IOi2c0_sda I-Hizno-func I-Hizno-func + +s_mgpio35 IO s_mgpio35 Ohsuart_rts I-Hizno-func Opwmp[2] Opwmn[2] IOi2c1_scl I-Hizno-func I-Hizno-func + +s_mgpio36 IO s_mgpio36 Ihsuart_cts I-Hizno-func Opwmp[3] Opwmn[3] IOi2c1_sda I-Hizno-func I-Hizno-func + +s_mgpio37 IO s_mgpio37 I-Hizno-func Ouart2_txd Oclkout[0] Iclkin IOi2c3_scl I-Hizno-func I-Hizno-func + +s_mgpio38 IO s_mgpio38 I-Hizno-func Iuart2_rxd Oclkout[1] I-Hizno-func IOi2c3_sda I-Hizno-func I-Hizno-func + +s_agpio_l0 IO s_agpio_l0 Oclkout[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l1 IO s_agpio_l1 IOi2s1_clk Opdm_clk[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l2 IO s_agpio_l2 IOi2s1_ws Ipdm_d[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l3 IO s_agpio_l3 Oi2s1_do Ouart2_txd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l4 IO s_agpio_l4 Ii2s1_di Iuart2_rxd I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l5 IO s_agpio_l5 IOi2s0_clk I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l6 IO s_agpio_l6 IOi2s0_ws I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l7 IO s_agpio_l7 Oi2s0_do Ouart2_rts Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l8 IO s_agpio_l8 Ii2s0_di Iuart2_cts Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l9 IO s_agpio_l9 Ouart2_txd I-Hizno-func I-Hizno-func Idsp_uart0_rxd I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l10 IO s_agpio_l10 Iuart2_rxd I-Hizno-func I-Hizno-func Odsp_uart0_txd I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l11 IO s_agpio_l11 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l12 IO s_agpio_l12 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l13 IO s_agpio_l13 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l14 IO s_agpio_l14 Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l15 IO s_agpio_l15 Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l16 IO s_agpio_l16 Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l17 IO s_agpio_l17 Obt_wifi_sw I-Hizno-func I-Hizno-func IOi2c_dsp_scl I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l18 IO s_agpio_l18 Obt_act I-Hizno-func I-Hizno-func IOi2c_dsp_sda I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l19 IO s_agpio_l19 Obt_freq I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l20 IO s_agpio_l20 Obt_status I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l21 IO s_agpio_l21 Iwlan_act I-Hizno-func Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l22 IO s_agpio_l22 Idsi_te I-Hizno-func Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l23 IO s_agpio_l23 Oextlna_ctrl I-Hizno-func I-Hizno-func Idsi_te IOi2c2_scl I-Hizno-func I-Hizno-func + +s_agpio_l24 IO s_agpio_l24 Oextlna_rx_en I-Hizno-func I-Hizno-func I-Hizno-func IOi2c2_sda I-Hizno-func I-Hizno-func + +s_agpio_l25 IO s_agpio_l25 I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func IOi2c2_sda I-Hizno-func I-Hizno-func + +s_agpio_l26 IO s_agpio_l26 I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l27 IO s_agpio_l27 I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l28 IO s_agpio_l28 I-Hizno-func Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l29 IO s_agpio_l29 I-Hizno-func Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l30 IO s_agpio_l30 I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l31 IO s_agpio_l31 I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_l32 IO s_agpio_l32 Oclkout[0] Iclkin Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r0 IO s_agpio_r0 I-Hizno-func Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r1 IO s_agpio_r1 I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r2 IO s_agpio_r2 I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r3 IO s_agpio_r3 I-Hizno-func Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r4 IO s_agpio_r4 I-Hizno-func Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r5 IO s_agpio_r5 I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r6 IO s_agpio_r6 I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r7 IO s_agpio_r7 I-Hizno-func Opwmp[2] Opwmn[2] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r8 IO s_agpio_r8 I-Hizno-func Opwmp[3] Opwmn[3] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r9 IO s_agpio_r9 I-Hizno-func Opwmp[0] Opwmn[0] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-func + +s_agpio_r10 IO s_agpio_r10 I-Hizno-func Opwmp[1] Opwmn[1] I-Hizno-func I-Hizno-func I-Hizno-func I-Hizno-funccfg_gpio_N_bit_mode==4 cfg_gpio_N_bit_mode==5 cfg_gpio_N_bit_mode==6 cfg_gpio_N_bit_mode==7管脚名称cfg_gpio_N_bit_mode==0 cfg_gpio_N_bit_mode==1 cfg_gpio_N_bit_mode==2 cfg_gpio_N_bit_mode==3 + +### 2023/9/26 第2页,共2页 + + +--- + diff --git "a/code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.pdf" "b/code/sdk/zhihui/utilscpp/Sparta \346\225\260\345\255\227\347\256\241\350\204\232\345\244\215\347\224\250\350\257\264\346\230\216.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..9badce453dd9c995a98e63bdfc7ef61b9640fa25 GIT binary patch literal 284533 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

?!*I4d>#P&zVOyT&is&zjB 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

ToO4EJ~)K1-zSko$_IBDSO;vlfzojVr(eeM4} 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 z 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

K*iuI#UPF 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℞0k_f2!5~AvSMAdnSs*4d- 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 literal 0 HcmV?d00001 diff --git a/code/sdk/zhihui/utilscpp/audio_test.cpp b/code/sdk/zhihui/utilscpp/audio_test.cpp index c201fa521..9d7a22582 100644 --- a/code/sdk/zhihui/utilscpp/audio_test.cpp +++ b/code/sdk/zhihui/utilscpp/audio_test.cpp @@ -207,7 +207,23 @@ static void* AudioPlayThread(void* arg) // 所以实际间隔约为6.4ms,非常接近实时播放速度 // 采用连续发送策略,不等待,让AI_WriteAudioData内部的sleep自然控制节奏 - float last_volume = 1.0f; // 记录上次音量,避免重复计算 + // 获取初始音量并应用(确保pcm_buffer被正确初始化) + MediaMutexLock(g_audio_test_ctx.volume_mutex); + float initial_volume = g_audio_test_ctx.play_volume; + MediaMutexUnLock(g_audio_test_ctx.volume_mutex); + + // 初始化pcm_buffer:应用音量增益 + uint32_t sample_count = buffer_size / sizeof(int16_t); + for (uint32_t i = 0; i < sample_count; i++) { + int32_t sample = (int32_t)raw_pcm_samples[i]; + sample = (int32_t)(sample * initial_volume); + // 限制在int16_t范围内,避免削波 + if (sample > 32767) sample = 32767; + if (sample < -32768) sample = -32768; + pcm_samples[i] = (int16_t)sample; + } + + float last_volume = initial_volume; // 记录上次音量,避免重复计算 while (true) { // 检查是否需要停止(在循环开始就检查,避免不必要的处理) @@ -226,7 +242,6 @@ static void* AudioPlayThread(void* arg) // 如果音量改变,重新应用音量增益到数据 if (volume != last_volume) { - uint32_t sample_count = buffer_size / sizeof(int16_t); for (uint32_t i = 0; i < sample_count; i++) { int32_t sample = (int32_t)raw_pcm_samples[i]; sample = (int32_t)(sample * volume); diff --git a/code/sdk/zhihui/utilscpp/bt_scan_test.cpp b/code/sdk/zhihui/utilscpp/bt_scan_test.cpp new file mode 100644 index 000000000..69e89a550 --- /dev/null +++ b/code/sdk/zhihui/utilscpp/bt_scan_test.cpp @@ -0,0 +1,517 @@ +/** + * @file bt_scan_test.cpp + * @brief 蓝牙扫描测试程序 + * @description 扫描蓝牙设备并打印MAC地址和RSSI值 + */ + +#include "custom_utilscpp.h" +#include "debug_print.h" +#include "securec.h" +#include "media_thread_adapt.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// 蓝牙GAP相关头文件 +#include "bts_br_gap.h" +#include "bts_def.h" + +// 蓝牙设备信息结构 +typedef struct { + uint8_t addr[BD_ADDR_LEN]; // MAC地址 + int rssi; // RSSI值 + char name[BD_NAME_LEN]; // 设备名称 + bool has_name; // 是否已获取名称 + bool has_rssi; // 是否已获取RSSI + bool is_new_device; // 是否是新发现的设备(用于控制打印) +} bt_device_info_t; + +// 蓝牙扫描测试上下文 +typedef struct { + bool is_running; // 扫描是否正在运行 + bt_device_info_t* devices; // 扫描到的设备列表 + uint32_t device_count; // 设备数量 + uint32_t device_capacity; // 设备列表容量 + MediaMutexHandle mutex; // 互斥锁 + + // 回调函数指针(保存原始回调,以便恢复) + gap_discovery_result_callback original_discovery_callback; + gap_read_remote_rssi_event_callback original_rssi_callback; + gap_discovery_state_changed_callback original_state_callback; + gap_remote_name_changed_callback original_name_callback; +} BtScanTestContext; + +static BtScanTestContext g_bt_scan_ctx = {0}; + +// 前向声明 +static void BtScanDiscoveryResultCallback(const bd_addr_t *bd_addr); +static void BtScanReadRemoteRssiCallback(const bd_addr_t *bd_addr, int rssi, int status); +static void BtScanDiscoveryStateChangedCallback(int status); +static void BtScanRemoteNameChangedCallback(const bd_addr_t *bd_addr, const unsigned char *deviceName, unsigned char length); +static int BtScanAddOrUpdateDevice(const bd_addr_t *bd_addr, int rssi, const char *name, bool has_name); +static void BtScanPrintDevices(void); + +/** + * @brief 添加或更新设备信息 + */ +static int BtScanAddOrUpdateDevice(const bd_addr_t *bd_addr, int rssi, const char *name, bool has_name) +{ + if (bd_addr == NULL) { + return -1; + } + + MediaMutexLock(g_bt_scan_ctx.mutex); + + // 查找是否已存在该设备 + int found_index = -1; + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + if (memcmp(g_bt_scan_ctx.devices[i].addr, bd_addr->addr, BD_ADDR_LEN) == 0) { + found_index = i; + break; + } + } + + if (found_index >= 0) { + // 更新现有设备 + bt_device_info_t *device = &g_bt_scan_ctx.devices[found_index]; + if (rssi != 0) { + device->rssi = rssi; + device->has_rssi = true; + } + if (has_name && name != NULL) { + strncpy_s(device->name, sizeof(device->name), name, sizeof(device->name) - 1); + device->has_name = true; + } + } else { + // 添加新设备 + if (g_bt_scan_ctx.device_count >= g_bt_scan_ctx.device_capacity) { + // 扩容 + uint32_t new_capacity = (g_bt_scan_ctx.device_capacity == 0) ? 32 : g_bt_scan_ctx.device_capacity * 2; + bt_device_info_t *new_devices = (bt_device_info_t*)realloc(g_bt_scan_ctx.devices, + new_capacity * sizeof(bt_device_info_t)); + if (new_devices == NULL) { + PRINT("[BtScan] Failed to reallocate device list\r\n"); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return -1; + } + g_bt_scan_ctx.devices = new_devices; + g_bt_scan_ctx.device_capacity = new_capacity; + } + + bt_device_info_t *device = &g_bt_scan_ctx.devices[g_bt_scan_ctx.device_count]; + memset_s(device, sizeof(bt_device_info_t), 0, sizeof(bt_device_info_t)); + memcpy_s(device->addr, BD_ADDR_LEN, bd_addr->addr, BD_ADDR_LEN); + device->rssi = rssi; + device->has_rssi = (rssi != 0); + if (has_name && name != NULL) { + strncpy_s(device->name, sizeof(device->name), name, sizeof(device->name) - 1); + device->has_name = true; + } else { + device->name[0] = '\0'; + device->has_name = false; + } + g_bt_scan_ctx.device_count++; + } + + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return 0; +} + +/** + * @brief 打印扫描到的设备列表 + */ +static void BtScanPrintDevices(void) +{ + MediaMutexLock(g_bt_scan_ctx.mutex); + + if (g_bt_scan_ctx.device_count == 0) { + PRINT("[BtScan] No devices found\r\n"); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return; + } + + PRINT("[BtScan] Found %u device(s):\r\n", g_bt_scan_ctx.device_count); + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + bt_device_info_t *device = &g_bt_scan_ctx.devices[i]; + PRINT("[BtScan] Device[%u]: MAC=%02X:%02X:%02X:%02X:%02X:%02X, RSSI=%d dBm", + i + 1, + device->addr[5], device->addr[4], device->addr[3], + device->addr[2], device->addr[1], device->addr[0], + device->has_rssi ? device->rssi : 0); + + if (device->has_name && strlen(device->name) > 0) { + PRINT(", Name=%s", device->name); + } + PRINT("\r\n"); + } + + MediaMutexUnLock(g_bt_scan_ctx.mutex); +} + +/** + * @brief 蓝牙设备发现回调 + */ +static void BtScanDiscoveryResultCallback(const bd_addr_t *bd_addr) +{ + if (bd_addr == NULL || !g_bt_scan_ctx.is_running) { + return; + } + + // 检查是否是新设备,以及是否已有名称 + MediaMutexLock(g_bt_scan_ctx.mutex); + bool is_new = true; + bool has_name_already = false; + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + if (memcmp(g_bt_scan_ctx.devices[i].addr, bd_addr->addr, BD_ADDR_LEN) == 0) { + is_new = false; + has_name_already = g_bt_scan_ctx.devices[i].has_name; + break; + } + } + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + if (is_new) { + PRINT("[BtScan] New device discovered: %02X:%02X:%02X:%02X:%02X:%02X\r\n", + bd_addr->addr[5], bd_addr->addr[4], bd_addr->addr[3], + bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); + } + + // 添加设备(暂时没有名称和RSSI) + BtScanAddOrUpdateDevice(bd_addr, 0, NULL, false); + + // 尝试获取设备名称(只在设备没有名称时才获取和打印) + if (!has_name_already) { + unsigned char nameLen = BD_NAME_LEN; + unsigned char deviceName[BD_NAME_LEN] = {0}; + bool getNameRet = gap_get_device_name(bd_addr, deviceName, &nameLen); + if (getNameRet && nameLen > 0) { + PRINT("[BtScan] Device name: %s\r\n", deviceName); + BtScanAddOrUpdateDevice(bd_addr, 0, (const char*)deviceName, true); + } + } + + // 请求RSSI值(只在设备还没有RSSI时请求) + MediaMutexLock(g_bt_scan_ctx.mutex); + bool need_rssi = true; + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + if (memcmp(g_bt_scan_ctx.devices[i].addr, bd_addr->addr, BD_ADDR_LEN) == 0) { + if (g_bt_scan_ctx.devices[i].has_rssi) { + need_rssi = false; + } + break; + } + } + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + if (need_rssi) { + gap_read_remote_rssi_value(bd_addr); + } + + // 调用原始回调(如果存在) + if (g_bt_scan_ctx.original_discovery_callback != NULL) { + g_bt_scan_ctx.original_discovery_callback(bd_addr); + } +} + +/** + * @brief 蓝牙RSSI读取回调 + */ +static void BtScanReadRemoteRssiCallback(const bd_addr_t *bd_addr, int rssi, int status) +{ + if (bd_addr == NULL || !g_bt_scan_ctx.is_running) { + return; + } + + if (status == 0) { + // 检查RSSI是否有显著变化(只在新设备或RSSI变化超过5dBm时打印) + MediaMutexLock(g_bt_scan_ctx.mutex); + bool should_print = false; + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + if (memcmp(g_bt_scan_ctx.devices[i].addr, bd_addr->addr, BD_ADDR_LEN) == 0) { + if (!g_bt_scan_ctx.devices[i].has_rssi || + abs(g_bt_scan_ctx.devices[i].rssi - rssi) > 5) { + should_print = true; + } + break; + } + } + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + if (should_print) { + PRINT("[BtScan] Device: %02X:%02X:%02X:%02X:%02X:%02X, RSSI=%d dBm\r\n", + bd_addr->addr[5], bd_addr->addr[4], bd_addr->addr[3], + bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], + rssi); + } + + // 更新设备RSSI + BtScanAddOrUpdateDevice(bd_addr, rssi, NULL, false); + } + // 不打印RSSI读取失败的信息,避免日志过多 + + // 调用原始回调(如果存在) + if (g_bt_scan_ctx.original_rssi_callback != NULL) { + g_bt_scan_ctx.original_rssi_callback(bd_addr, rssi, status); + } +} + +/** + * @brief 蓝牙扫描状态变化回调 + */ +static void BtScanDiscoveryStateChangedCallback(int status) +{ + PRINT("[BtScan] Discovery state changed: %d\r\n", status); + + if (g_bt_scan_ctx.is_running) { + // 只在扫描完成或状态变化时打印设备列表 + if (status == 0 || status == 1) { // 扫描完成或开始 + BtScanPrintDevices(); + } + + // 如果扫描结束,自动重新启动扫描(持续扫描) + if (status == 0) { // 扫描完成 + PRINT("[BtScan] Scan completed, restarting discovery...\r\n"); + usleep(500000); // 等待500ms后重新启动 + gap_br_start_discovery(); + } + } + + // 调用原始回调(如果存在) + if (g_bt_scan_ctx.original_state_callback != NULL) { + g_bt_scan_ctx.original_state_callback(status); + } +} + +/** + * @brief 蓝牙设备名称变化回调 + */ +static void BtScanRemoteNameChangedCallback(const bd_addr_t *bd_addr, const unsigned char *deviceName, unsigned char length) +{ + if (bd_addr == NULL || !g_bt_scan_ctx.is_running) { + return; + } + + if (deviceName != NULL && length > 0) { + char name[BD_NAME_LEN] = {0}; + strncpy_s(name, sizeof(name), (const char*)deviceName, + (length < sizeof(name)) ? length : sizeof(name) - 1); + + // 检查设备是否已有名称,避免重复打印 + MediaMutexLock(g_bt_scan_ctx.mutex); + bool has_name = false; + bool name_changed = false; + for (uint32_t i = 0; i < g_bt_scan_ctx.device_count; i++) { + if (memcmp(g_bt_scan_ctx.devices[i].addr, bd_addr->addr, BD_ADDR_LEN) == 0) { + has_name = g_bt_scan_ctx.devices[i].has_name; + if (has_name && strcmp(g_bt_scan_ctx.devices[i].name, name) != 0) { + name_changed = true; + } + break; + } + } + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + // 只在设备没有名称或名称发生变化时打印 + if (!has_name) { + PRINT("[BtScan] Device name: %02X:%02X:%02X:%02X:%02X:%02X, Name=%s\r\n", + bd_addr->addr[5], bd_addr->addr[4], bd_addr->addr[3], + bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], + name); + } else if (name_changed) { + PRINT("[BtScan] Device name changed: %02X:%02X:%02X:%02X:%02X:%02X, New Name=%s\r\n", + bd_addr->addr[5], bd_addr->addr[4], bd_addr->addr[3], + bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], + name); + } + + // 更新设备名称 + BtScanAddOrUpdateDevice(bd_addr, 0, name, true); + } + + // 调用原始回调(如果存在) + if (g_bt_scan_ctx.original_name_callback != NULL) { + g_bt_scan_ctx.original_name_callback(bd_addr, deviceName, length); + } +} + +/** + * @brief 启动蓝牙扫描测试 + * @return 0 成功, -1 失败 + */ +int custom_bt_scan_test_start(void) +{ + PRINT("[BtScan] Starting Bluetooth scan test...\r\n"); + + // 先启用蓝牙栈(使用 enable_bt_stack,对应 AT^BTENABLE 指令的功能) + // extern errcode_t enable_bt_stack(void); + + PRINT("[BtScan] Enabling Bluetooth stack (same as AT^BTENABLE)...\r\n"); + // errcode_t bt_enable_ret = enable_bt_stack(); + // if (bt_enable_ret != ERRCODE_SUCC && bt_enable_ret != 0) { + // PRINT("[BtScan] Warning: enable_bt_stack returned %d (0x%X)\r\n", + // bt_enable_ret, (unsigned int)bt_enable_ret); + // PRINT("[BtScan] Note: You may need to run AT^BTENABLE first\r\n"); + // } else { + // PRINT("[BtScan] Bluetooth stack enabled successfully\r\n"); + // } + + // 等待蓝牙栈初始化完成 + // usleep(2000000); // 2秒,确保蓝牙栈完全初始化 + PRINT("[BtScan] Waiting for Bluetooth stack ready...\r\n"); + + MediaMutexLock(g_bt_scan_ctx.mutex); + + if (g_bt_scan_ctx.is_running) { + PRINT("[BtScan] Scan already running\r\n"); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return -1; + } + + // 初始化互斥锁 + if (g_bt_scan_ctx.mutex == NULL) { + g_bt_scan_ctx.mutex = MediaMutexCreate(NULL); + if (g_bt_scan_ctx.mutex == NULL) { + PRINT("[BtScan] Failed to create mutex\r\n"); + return -1; + } + } + + // 清空设备列表 + if (g_bt_scan_ctx.devices != NULL) { + free(g_bt_scan_ctx.devices); + g_bt_scan_ctx.devices = NULL; + } + g_bt_scan_ctx.device_count = 0; + g_bt_scan_ctx.device_capacity = 0; + + // 注册回调函数 + gap_call_backs_t callbacks = {0}; + + // 保存原始回调(如果已注册) + // 注意:这里假设回调已经通过其他方式注册,我们需要获取并保存它们 + // 由于无法直接获取已注册的回调,我们直接设置我们的回调 + callbacks.discovery_result_callback = BtScanDiscoveryResultCallback; + callbacks.read_remote_rssi_event_callback = BtScanReadRemoteRssiCallback; + callbacks.discovery_state_changed_callback = BtScanDiscoveryStateChangedCallback; + callbacks.remote_name_changed_callback = BtScanRemoteNameChangedCallback; + + // 注册回调函数(返回值0表示成功) + int ret = gap_register_callbacks(&callbacks); + if (ret != 0) { + PRINT("[BtScan] Failed to register callbacks: %d\r\n", ret); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return -1; + } + + // 检查是否已经在扫描,如果是则先停止 + bool is_discovering = is_bt_discovering(BT_TRANSPORT_BR_EDR); + if (is_discovering) { + PRINT("[BtScan] Bluetooth is already discovering, canceling first...\r\n"); + gap_br_cancel_discovery(); + // 等待一小段时间让扫描完全停止 + usleep(200000); // 200ms + } + + // 设置扫描参数(扫描所有设备类型,最多20个设备) + // 参考 custom_factory_bt_scan_start 的实现 + errcode_t err = gap_br_set_inquiry_paramters(0, 20); + if (err != ERRCODE_SUCC) { + PRINT("[BtScan] Warning: Failed to set inquiry parameters: %d (0x%X)\r\n", + err, (unsigned int)err); + // 继续尝试启动扫描(参考其他代码实现,即使设置参数失败也继续) + } else { + PRINT("[BtScan] Inquiry parameters set successfully\r\n"); + } + + // 启动扫描(参考 custom_factory_bt_scan_start 的实现) + bool scan_ret = gap_br_start_discovery(); + if (!scan_ret) { + PRINT("[BtScan] Failed to start discovery\r\n"); + PRINT("[BtScan] Note: This may indicate Bluetooth stack is not fully ready\r\n"); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return -1; + } + + PRINT("[BtScan] Discovery started successfully\r\n"); + + g_bt_scan_ctx.is_running = true; + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + PRINT("[BtScan] Bluetooth scan started successfully\r\n"); + PRINT("[BtScan] Scanning for devices...\r\n"); + + return 0; +} + +/** + * @brief 停止蓝牙扫描测试 + * @return 0 成功, -1 失败 + */ +int custom_bt_scan_test_stop(void) +{ + PRINT("[BtScan] Stopping Bluetooth scan test...\r\n"); + + MediaMutexLock(g_bt_scan_ctx.mutex); + + if (!g_bt_scan_ctx.is_running) { + PRINT("[BtScan] Scan not running\r\n"); + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return 0; + } + + // 停止扫描 + bool ret = gap_br_cancel_discovery(); + if (!ret) { + PRINT("[BtScan] Failed to cancel discovery\r\n"); + } + + // 打印最终结果 + PRINT("[BtScan] Final scan results:\r\n"); + BtScanPrintDevices(); + + // 清理设备列表 + if (g_bt_scan_ctx.devices != NULL) { + free(g_bt_scan_ctx.devices); + g_bt_scan_ctx.devices = NULL; + } + g_bt_scan_ctx.device_count = 0; + g_bt_scan_ctx.device_capacity = 0; + + g_bt_scan_ctx.is_running = false; + MediaMutexUnLock(g_bt_scan_ctx.mutex); + + PRINT("[BtScan] Bluetooth scan stopped\r\n"); + + return 0; +} + +/** + * @brief 获取扫描测试状态 + * @return true 正在运行, false 未运行 + */ +bool custom_bt_scan_test_is_running(void) +{ + MediaMutexLock(g_bt_scan_ctx.mutex); + bool is_running = g_bt_scan_ctx.is_running; + MediaMutexUnLock(g_bt_scan_ctx.mutex); + return is_running; +} + +/** + * @brief 初始化蓝牙扫描测试模块 + */ +void custom_bt_scan_test_init(void) +{ + if (g_bt_scan_ctx.mutex == NULL) { + g_bt_scan_ctx.mutex = MediaMutexCreate(NULL); + } +} + +#ifdef __cplusplus +} +#endif + diff --git a/code/sdk/zhihui/utilscpp/custom_utilscpp.h b/code/sdk/zhihui/utilscpp/custom_utilscpp.h index f806f1b55..0ea0c76e9 100644 --- a/code/sdk/zhihui/utilscpp/custom_utilscpp.h +++ b/code/sdk/zhihui/utilscpp/custom_utilscpp.h @@ -112,6 +112,35 @@ int custom_gpio_test_stop(void); */ bool custom_gpio_test_is_running(void); +/** + * @brief 扫描GPIO配对关系(自动发现) + * @return 0成功,-1失败 + */ +int custom_gpio_test_scan_pairs(void); + +/** + * @brief 初始化蓝牙扫描测试模块 + */ +void custom_bt_scan_test_init(void); + +/** + * @brief 启动蓝牙扫描测试 + * @return 0成功,-1失败 + */ +int custom_bt_scan_test_start(void); + +/** + * @brief 停止蓝牙扫描测试 + * @return 0成功,-1失败 + */ +int custom_bt_scan_test_stop(void); + +/** + * @brief 获取蓝牙扫描测试状态 + * @return true正在运行,false未运行 + */ +bool custom_bt_scan_test_is_running(void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/code/sdk/zhihui/utilscpp/gpio_test.cpp b/code/sdk/zhihui/utilscpp/gpio_test.cpp index 644d29f17..06e08f550 100644 --- a/code/sdk/zhihui/utilscpp/gpio_test.cpp +++ b/code/sdk/zhihui/utilscpp/gpio_test.cpp @@ -69,6 +69,17 @@ typedef struct { char output_pin[32]; // 输出引脚名称,如 "S_AGPIO_L02" } gpio_pair_t; +// GPIO扫描配对结构(用于自动扫描) +typedef struct { + pin_t pin; // GPIO引脚 + char name[32]; // GPIO名称(存储副本,避免悬空指针) + pin_t paired_pins[2]; // 配对的引脚(最多2个) + char paired_names[2][32]; // 配对的名称(存储副本,避免悬空指针) + uint32_t pair_count; // 配对数量(0, 1, 或 2) + bool is_scanned; // 是否已扫描 + bool is_used_as_output; // 是否已作为输出使用过 +} gpio_scan_info_t; + // GPIO测试上下文 typedef struct { bool is_running; // 测试是否正在运行 @@ -711,10 +722,31 @@ int custom_gpio_test_start(void) return -1; } + // 如果配置未初始化,使用默认配置初始化 if (g_gpio_test_ctx.pair_count == 0) { - PRINT("[GpioTest] No GPIO pairs configured. Please add config first.\r\n"); + PRINT("[GpioTest] No GPIO pairs configured, initializing with default config...\r\n"); MediaMutexUnLock(g_gpio_test_ctx.mutex); - return -1; + + // 使用默认配置初始化 + if (gpio_test_config_json_data != NULL) { + int ret = gpio_test_parse_config(gpio_test_config_json_data); + if (ret != 0) { + PRINT("[GpioTest] Failed to initialize default config\r\n"); + return -1; + } + PRINT("[GpioTest] Default config initialized successfully\r\n"); + } else { + PRINT("[GpioTest] Default config data is NULL\r\n"); + return -1; + } + + // 重新加锁检查 + MediaMutexLock(g_gpio_test_ctx.mutex); + if (g_gpio_test_ctx.pair_count == 0) { + PRINT("[GpioTest] Failed to initialize default config\r\n"); + MediaMutexUnLock(g_gpio_test_ctx.mutex); + return -1; + } } // 初始化互斥锁(如果还没有) @@ -801,6 +833,299 @@ bool custom_gpio_test_is_running(void) return is_running; } +/** + * @brief 从默认配置中提取所有GPIO引脚列表 + * @param pin_list 输出:GPIO引脚数组 + * @param name_list 输出:GPIO名称数组 + * @param max_count 最大数量 + * @return 实际提取的GPIO数量 + */ +static uint32_t gpio_test_extract_all_pins_from_default_config(pin_t* pin_list, const char** name_list, uint32_t max_count) +{ + if (pin_list == NULL || name_list == NULL || max_count == 0) { + return 0; + } + + if (gpio_test_config_json_data == NULL) { + return 0; + } + + cJSON* root = cJSON_Parse(gpio_test_config_json_data); + if (root == NULL) { + return 0; + } + + cJSON* pairs = cJSON_GetObjectItem(root, "pairs"); + if (pairs == NULL || !cJSON_IsArray(pairs)) { + cJSON_Delete(root); + return 0; + } + + uint32_t count = 0; + // 使用更大的数组来确保覆盖所有可能的pin_t值 + // PIN_NONE = 132,所以需要至少133个元素(0-132) + bool pin_used[256] = {0}; // 标记引脚是否已添加,使用256确保足够大 + + int pair_count = cJSON_GetArraySize(pairs); + for (int i = 0; i < pair_count && count < max_count; i++) { + cJSON* pair_item = cJSON_GetArrayItem(pairs, i); + if (pair_item == NULL || !cJSON_IsObject(pair_item)) { + continue; + } + + cJSON* input = cJSON_GetObjectItem(pair_item, "input"); + cJSON* output = cJSON_GetObjectItem(pair_item, "output"); + + if (input == NULL || output == NULL || !cJSON_IsString(input) || !cJSON_IsString(output)) { + continue; + } + + const char* input_name = cJSON_GetStringValue(input); + const char* output_name = cJSON_GetStringValue(output); + + if (input_name == NULL || output_name == NULL) { + continue; + } + + // 添加输入引脚(去重:基于pin_t值) + pin_t input_pin = gpio_name_to_pin(input_name); + if (input_pin != PIN_NONE && (unsigned int)input_pin < sizeof(pin_used) && !pin_used[input_pin]) { + pin_list[count] = input_pin; + // 需要复制字符串,因为cJSON指针在Delete后会失效 + // 使用静态缓冲区存储名称(在函数返回前有效) + static char name_buffer[200][32]; + if (count < 200) { + strncpy_s(name_buffer[count], sizeof(name_buffer[count]), input_name, sizeof(name_buffer[count]) - 1); + name_list[count] = name_buffer[count]; + } else { + name_list[count] = input_name; // 如果超过缓冲区,使用原指针(风险) + } + pin_used[input_pin] = true; + count++; + } + + // 添加输出引脚(去重:基于pin_t值) + if (count < max_count) { + pin_t output_pin = gpio_name_to_pin(output_name); + if (output_pin != PIN_NONE && (unsigned int)output_pin < sizeof(pin_used) && !pin_used[output_pin]) { + pin_list[count] = output_pin; + // 需要复制字符串,因为cJSON指针在Delete后会失效 + static char name_buffer[200][32]; + if (count < 200) { + strncpy_s(name_buffer[count], sizeof(name_buffer[count]), output_name, sizeof(name_buffer[count]) - 1); + name_list[count] = name_buffer[count]; + } else { + name_list[count] = output_name; // 如果超过缓冲区,使用原指针(风险) + } + pin_used[output_pin] = true; + count++; + } + } + } + + cJSON_Delete(root); + return count; +} + +/** + * @brief 根据pin_t查找对应的名称 + */ +static const char* gpio_pin_to_name(pin_t pin) +{ + for (uint32_t i = 0; g_gpio_name_map[i].name != NULL; i++) { + if (g_gpio_name_map[i].pin == pin) { + return g_gpio_name_map[i].name; + } + } + return "UNKNOWN"; +} + +/** + * @brief 自动扫描GPIO配对关系(迭代方式) + * @return 0成功,-1失败 + */ +static int gpio_test_scan_pairs(void) +{ + PRINT("[GpioTest] Starting GPIO pair scanning (iterative mode)...\r\n"); + + // 初始化GPIO + uapi_gpio_init(); + + // 从默认配置中提取所有GPIO引脚 + pin_t all_pins[200]; + const char* all_names[200]; + memset_s(all_pins, sizeof(all_pins), 0, sizeof(all_pins)); + memset_s(all_names, sizeof(all_names), 0, sizeof(all_names)); + uint32_t total_pin_count = gpio_test_extract_all_pins_from_default_config(all_pins, all_names, 200); + + if (total_pin_count == 0) { + PRINT("[GpioTest] Failed to extract pins from default config\r\n"); + return -1; + } + + PRINT("[GpioTest] Found %u GPIO pins from default config\r\n", total_pin_count); + + // 先打印所有GPIO名字列表 + PRINT("[GpioTest] ===== All GPIO Names =====\r\n"); + for (uint32_t i = 0; i < total_pin_count; i++) { + PRINT("[GpioTest] [%3u] %s (pin_t=%d)\r\n", i + 1, all_names[i], all_pins[i]); + } + PRINT("[GpioTest] ===== End of GPIO List =====\r\n"); + PRINT("\r\n"); + + // 创建可用的GPIO列表(标记哪些GPIO还未被处理) + bool pin_available[200] = {0}; + for (uint32_t i = 0; i < total_pin_count; i++) { + pin_available[i] = true; + } + + uint32_t round = 0; + uint32_t remaining_count = total_pin_count; + + // 迭代扫描:每次选择一个输出GPIO,找出所有同步的输入 + while (remaining_count > 0) { + round++; + PRINT("[GpioTest] ===== Round %u =====\r\n", round); + PRINT("[GpioTest] Remaining GPIOs: %u\r\n", remaining_count); + + // 找到第一个可用的GPIO作为输出 + uint32_t output_idx = 0; + bool found_output = false; + for (uint32_t i = 0; i < total_pin_count; i++) { + if (pin_available[i]) { + output_idx = i; + found_output = true; + break; + } + } + + if (!found_output) { + PRINT("[GpioTest] No available GPIO found, scanning complete\r\n"); + break; + } + + pin_t output_pin = all_pins[output_idx]; + const char* output_name = all_names[output_idx]; + + PRINT("[GpioTest] Testing output: %s (pin_t=%d)\r\n", output_name, output_pin); + + // 设置输出引脚 + errcode_t ret = uapi_pin_set_mode(output_pin, (pin_mode_t)HAL_PIO_FUNC_GPIO); + if (ret != ERRCODE_SUCC) { + PRINT("[GpioTest] Failed to set output pin mode: %s\r\n", output_name); + pin_available[output_idx] = false; // 标记为已处理(即使失败) + remaining_count--; + continue; + } + + ret = uapi_gpio_set_dir(output_pin, GPIO_DIRECTION_OUTPUT); + if (ret != ERRCODE_SUCC) { + PRINT("[GpioTest] Failed to set output direction: %s\r\n", output_name); + pin_available[output_idx] = false; + remaining_count--; + continue; + } + + // 设置其他所有可用引脚为输入 + for (uint32_t input_idx = 0; input_idx < total_pin_count; input_idx++) { + if (!pin_available[input_idx] || input_idx == output_idx) { + continue; // 跳过已处理的或输出引脚本身 + } + + pin_t input_pin = all_pins[input_idx]; + + ret = uapi_pin_set_mode(input_pin, (pin_mode_t)HAL_PIO_FUNC_GPIO); + if (ret != ERRCODE_SUCC) { + continue; // 如果设置失败,跳过这个引脚 + } + + ret = uapi_gpio_set_dir(input_pin, GPIO_DIRECTION_INPUT); + if (ret != ERRCODE_SUCC) { + continue; // 如果设置失败,跳过这个引脚 + } + + // 设置输入引脚为无上下拉 + ret = uapi_pin_set_pull(input_pin, PIN_PULL_DOWN); + if (ret != ERRCODE_SUCC) { + continue; // 如果设置失败,跳过这个引脚 + } + } + + // 收集所有同步的输入引脚 + uint32_t synced_inputs[200] = {0}; + uint32_t synced_count = 0; + + // 测试配对:逐个检查每个输入引脚 + for (uint32_t input_idx = 0; input_idx < total_pin_count; input_idx++) { + if (!pin_available[input_idx] || input_idx == output_idx) { + continue; + } + + // 测试1:输出设置为HIGH,读取输入 + ret = uapi_gpio_set_val(output_pin, GPIO_LEVEL_HIGH); + if (ret != ERRCODE_SUCC) { + break; + } + usleep(15000); // 等待15ms让信号稳定 + gpio_level_t input_high = uapi_gpio_get_val(all_pins[input_idx]); + + // 测试2:输出设置为LOW,读取输入 + ret = uapi_gpio_set_val(output_pin, GPIO_LEVEL_LOW); + if (ret != ERRCODE_SUCC) { + break; + } + usleep(15000); // 等待15ms让信号稳定 + gpio_level_t input_low = uapi_gpio_get_val(all_pins[input_idx]); + + // 检查输入是否响应输出(HIGH时输入为HIGH,LOW时输入为LOW) + if (input_high == GPIO_LEVEL_HIGH && input_low == GPIO_LEVEL_LOW) { + synced_inputs[synced_count++] = input_idx; + } + } + + // 打印结果 + PRINT("[GpioTest] Output: %s\r\n", output_name); + if (synced_count > 0) { + PRINT("[GpioTest] Synced inputs (%u):\r\n", synced_count); + for (uint32_t i = 0; i < synced_count; i++) { + uint32_t idx = synced_inputs[i]; + PRINT("[GpioTest] - %s (pin_t=%d)\r\n", all_names[idx], all_pins[idx]); + } + } else { + PRINT("[GpioTest] No synced inputs found\r\n"); + } + + // 标记输出和所有同步的输入为已处理 + pin_available[output_idx] = false; + remaining_count--; + + for (uint32_t i = 0; i < synced_count; i++) { + uint32_t idx = synced_inputs[i]; + if (pin_available[idx]) { + pin_available[idx] = false; + remaining_count--; + } + } + + PRINT("[GpioTest] Round %u complete. Remaining: %u GPIOs\r\n", round, remaining_count); + PRINT("\r\n"); + } + + PRINT("[GpioTest] ===== Scanning Complete =====\r\n"); + PRINT("[GpioTest] Total rounds: %u\r\n", round); + + return 0; +} + +/** + * @brief 扫描GPIO配对关系 + * @return 0成功,-1失败 + */ +int custom_gpio_test_scan_pairs(void) +{ + return gpio_test_scan_pairs(); +} + /** * @brief 初始化GPIO测试模块 */ diff --git a/generate_gpio_config_from_log.py b/generate_gpio_config_from_log.py new file mode 100644 index 000000000..8afc26b68 --- /dev/null +++ b/generate_gpio_config_from_log.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +从GPIO扫描日志中提取配对关系并生成JSON配置 +""" + +import re +import json + +def parse_gpio_scan_log(log_file): + """解析GPIO扫描日志,提取配对关系""" + pairs = [] + + with open(log_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + i = 0 + while i < len(lines): + line = lines[i] + + # 查找 "Testing output: GPIO_NAME" + output_match = re.search(r'Testing output: (\S+) \(pin_t=\d+\)', line) + if output_match: + output_gpio = output_match.group(1) + + # 继续查找后续的 "Synced inputs" + i += 1 + while i < len(lines): + next_line = lines[i] + + # 查找 "Synced inputs (N):" + synced_match = re.search(r'Synced inputs \((\d+)\):', next_line) + if synced_match: + count = int(synced_match.group(1)) + + # 读取后续行,可能有多行输入GPIO列表 + i += 1 + inputs = [] + while i < len(lines): + inputs_line = lines[i] + # 检查是否是输入GPIO行: " - GPIO_NAME (pin_t=XXX)" + input_match = re.search(r' - (\S+) \(pin_t=\d+\)', inputs_line) + if input_match: + inputs.append(input_match.group(1)) + i += 1 + elif "Round" in inputs_line and "complete" in inputs_line: + # 到达Round结束 + break + elif inputs_line.strip() == "": + # 空行,继续 + i += 1 + else: + # 其他内容,停止读取输入 + break + + # 为每个输入创建一个配对 + for input_gpio in inputs: + pairs.append({ + "output": output_gpio, + "input": input_gpio + }) + break + elif "Round" in next_line and "complete" in next_line: + # 到达Round结束,没有找到配对 + break + i += 1 + i += 1 + + return pairs + +def generate_json_config(pairs, output_file): + """生成JSON配置""" + config = { + "pairs": pairs + } + + # 生成格式化的JSON + json_str = json.dumps(config, indent=2, ensure_ascii=False) + + # 写入文件 + with open(output_file, 'w', encoding='utf-8') as f: + f.write(json_str) + + return json_str + +if __name__ == "__main__": + log_file = "Serial Debug 2025-11-28 193616.txt" + output_file = "gpio_test_config_from_scan.json" + + print("=" * 60) + print("解析GPIO扫描日志...") + print("=" * 60) + + pairs = parse_gpio_scan_log(log_file) + + print(f"\n找到 {len(pairs)} 个配对关系:\n") + for i, pair in enumerate(pairs, 1): + print(f" {i:2d}. {pair['output']} → {pair['input']}") + + print(f"\n生成JSON配置到: {output_file}") + json_str = generate_json_config(pairs, output_file) + + print("\n" + "=" * 60) + print("JSON配置内容:") + print("=" * 60) + print(json_str) + diff --git a/gpio_connection_table.md b/gpio_connection_table.md new file mode 100644 index 000000000..b41b95f4b --- /dev/null +++ b/gpio_connection_table.md @@ -0,0 +1,61 @@ +# GPIO连接关系表 + +根据扫描结果,以下是GPIO之间的连接关系: + +## 配对关系表 + +| 输出GPIO | pin_t | 输入GPIO | pin_t | 连接数量 | +|---------|-------|---------|-------|---------| +| S_AGPIO_L23 | 104 | S_AGPIO_L12 | 93 | 1 | +| S_AGPIO_L13 | 94 | S_AGPIO_L31 | 112 | 3 | +| S_AGPIO_L13 | 94 | S_AGPIO_L2 | 83 | 3 | +| S_AGPIO_L13 | 94 | S_AGPIO_L4 | 85 | 3 | +| S_AGPIO_R5 | 119 | S_MGPIO14 | 56 | 1 | +| S_MGPIO13 | 55 | S_AGPIO_R10 | 124 | 1 | +| S_MGPIO11 | 53 | S_MGPIO12 | 54 | 1 | +| S_AGPIO_L21 | 102 | S_AGPIO_L11 | 92 | 1 | +| S_MGPIO27 | 69 | S_MGPIO22 | 64 | 1 | +| S_AGPIO_L30 | 111 | S_AGPIO_L29 | 110 | 1 | +| S_MGPIO1 | 43 | S_MGPIO2 | 44 | 1 | +| S_MGPIO0 | 42 | S_MGPIO6 | 48 | 1 | +| S_MGPIO9 | 51 | S_MGPIO8 | 50 | 2 | +| S_MGPIO9 | 51 | S_MGPIO7 | 49 | 2 | + +## 统计信息 + +- **总GPIO数量**: 67 +- **扫描轮次**: 53 +- **找到连接的GPIO对**: 14对 +- **未找到连接的GPIO**: 53个(作为输出时未找到同步输入) + +## 连接关系汇总(按输出GPIO分组) + +### 一对一连接(10对) +1. S_AGPIO_L23 → S_AGPIO_L12 +2. S_AGPIO_R5 → S_MGPIO14 +3. S_MGPIO13 → S_AGPIO_R10 +4. S_MGPIO11 → S_MGPIO12 +5. S_AGPIO_L21 → S_AGPIO_L11 +6. S_MGPIO27 → S_MGPIO22 +7. S_AGPIO_L30 → S_AGPIO_L29 +8. S_MGPIO1 → S_MGPIO2 +9. S_MGPIO0 → S_MGPIO6 + +### 一对多连接(2组) +1. **S_AGPIO_L13** → 3个输入: + - S_AGPIO_L31 + - S_AGPIO_L2 + - S_AGPIO_L4 + +2. **S_MGPIO9** → 2个输入: + - S_MGPIO8 + - S_MGPIO7 + +## 注意事项 + +- 扫描过程中,当一个GPIO作为输出时,如果找到同步的输入GPIO,这些GPIO会被标记为已处理,不会在后续轮次中再次测试 +- 部分GPIO在作为输出时未找到任何同步的输入GPIO,这些GPIO可能是: + - 未连接的GPIO + - 连接到外部设备而非其他GPIO + - 需要特殊配置才能检测到连接 + diff --git a/gpio_scan_comparison.md b/gpio_scan_comparison.md new file mode 100644 index 000000000..1b7f42883 --- /dev/null +++ b/gpio_scan_comparison.md @@ -0,0 +1,122 @@ +# GPIO扫描结果对比分析 + +## 扫描信息对比 + +| 项目 | 第一次扫描 (171600.txt) | 第二次扫描 (182925.txt) | 变化 | +|------|------------------------|------------------------|------| +| **扫描时间** | 2025-11-28 17:16:00 | 2025-11-28 18:29:25 | - | +| **总GPIO数量** | 67 | 67 | 相同 | +| **扫描轮次** | 53è½® | 46è½® | 减少7è½® | +| **找到的连接关系** | 14对 | 21对 | **增加7对** | + +## 详细配对关系对比 + +### 第一次扫描结果(14对) + +| 输出GPIO | 输入GPIO | 连接数 | +|---------|---------|--------| +| S_AGPIO_L23 | S_AGPIO_L12 | 1 | +| S_AGPIO_L13 | S_AGPIO_L31, S_AGPIO_L2, S_AGPIO_L4 | 3 | +| S_AGPIO_R5 | S_MGPIO14 | 1 | +| S_MGPIO13 | S_AGPIO_R10 | 1 | +| S_MGPIO11 | S_MGPIO12 | 1 | +| S_AGPIO_L21 | S_AGPIO_L11 | 1 | +| S_MGPIO27 | S_MGPIO22 | 1 | +| S_AGPIO_L30 | S_AGPIO_L29 | 1 | +| S_MGPIO1 | S_MGPIO2 | 1 | +| S_MGPIO0 | S_MGPIO6 | 1 | +| S_MGPIO9 | S_MGPIO8, S_MGPIO7 | 2 | + +### 第二次扫描结果(21对) + +| 输出GPIO | 输入GPIO | 连接数 | +|---------|---------|--------| +| S_AGPIO_L23 | S_AGPIO_L12, S_AGPIO_L2, S_AGPIO_L4 | 3 | +| S_AGPIO_L13 | S_AGPIO_L31, S_AGPIO_L29, S_MGPIO2, S_MGPIO6, S_MGPIO8, S_AGPIO_L28, S_HGPIO9 | 7 | +| S_AGPIO_L3 | S_AGPIO_L0, S_AGPIO_R6, S_MGPIO20, S_MGPIO7 | 4 | +| S_AGPIO_L1 | S_AGPIO_L11 | 1 | +| S_AGPIO_R4 | S_MGPIO22 | 1 | +| S_AGPIO_R5 | S_MGPIO14 | 1 | +| S_MGPIO13 | S_AGPIO_R10, S_MGPIO1, S_MGPIO9 | 3 | +| S_MGPIO11 | S_MGPIO12 | 1 | + +## 关键变化分析 + +### 1. 新增的连接关系(第二次扫描发现) + +1. **S_AGPIO_L23** 新增: + - S_AGPIO_L2 + - S_AGPIO_L4 + (第一次只有S_AGPIO_L12) + +2. **S_AGPIO_L13** 新增: + - S_AGPIO_L29 + - S_MGPIO2 + - S_MGPIO6 + - S_MGPIO8 + - S_AGPIO_L28 + - S_HGPIO9 + (第一次只有S_AGPIO_L31, S_AGPIO_L2, S_AGPIO_L4) + +3. **S_AGPIO_L3** 新增(第一次未发现): + - S_AGPIO_L0 + - S_AGPIO_R6 + - S_MGPIO20 + - S_MGPIO7 + +4. **S_AGPIO_L1** 新增(第一次未发现): + - S_AGPIO_L11 + +5. **S_AGPIO_R4** 新增(第一次未发现): + - S_MGPIO22 + +6. **S_MGPIO13** 新增: + - S_MGPIO1 + - S_MGPIO9 + (第一次只有S_AGPIO_R10) + +### 2. 消失的连接关系(第二次扫描未发现) + +1. **S_AGPIO_L21 → S_AGPIO_L11** (第一次有,第二次消失) + - 但第二次扫描中,S_AGPIO_L1 → S_AGPIO_L11 出现了 + +2. **S_MGPIO27 → S_MGPIO22** (第一次有,第二次消失) + - 但第二次扫描中,S_AGPIO_R4 → S_MGPIO22 出现了 + +3. **S_AGPIO_L30 → S_AGPIO_L29** (第一次有,第二次消失) + - 但第二次扫描中,S_AGPIO_L13 → S_AGPIO_L29 出现了 + +4. **S_MGPIO1 → S_MGPIO2** (第一次有,第二次消失) + - 但第二次扫描中,S_AGPIO_L13 → S_MGPIO2 出现了 + +5. **S_MGPIO0 → S_MGPIO6** (第一次有,第二次消失) + - 但第二次扫描中,S_AGPIO_L13 → S_MGPIO6 出现了 + +6. **S_MGPIO9 → S_MGPIO8, S_MGPIO7** (第一次有,第二次消失) + - 但第二次扫描中: + - S_AGPIO_L13 → S_MGPIO8 出现了 + - S_AGPIO_L3 → S_MGPIO7 出现了 + +## 总结 + +### 主要发现: + +1. **连接关系增加**:从14对增加到21对,增加了50% +2. **一对多连接增加**:第二次扫描发现更多一对多的连接关系 +3. **连接模式变化**: + - 第一次:连接关系相对分散 + - 第二次:某些GPIO(如S_AGPIO_L13)连接到更多GPIO +4. **扫描轮次减少**:从53轮减少到46轮,说明某些GPIO在早期就被配对并移除了 + +### 可能的原因: + +1. **GPIO配置改变**:将GPIO配置改为`HAL_PIO_FUNC_OPI`后,GPIO的电气特性可能发生了变化 +2. **Pull设置改变**:第二次扫描中设置了`PIN_PULL_NONE`,可能影响了信号检测 +3. **扫描顺序影响**:由于迭代扫描会移除已配对的GPIO,扫描顺序会影响结果 + +### 建议: + +1. 需要确认哪次扫描结果更准确 +2. 可能需要调整GPIO配置或扫描参数以获得更稳定的结果 +3. 建议多次扫描验证结果的稳定性 + diff --git a/gpio_scan_result_analysis.md b/gpio_scan_result_analysis.md new file mode 100644 index 000000000..70e8088c3 --- /dev/null +++ b/gpio_scan_result_analysis.md @@ -0,0 +1,97 @@ +# GPIO扫描配对结果分析 + +## 扫描信息 + +- **扫描时间**: 2025-11-28 19:36:16 +- **总GPIO数量**: 67个 +- **扫描轮次**: 53è½® +- **找到的配对关系**: 14对 + +## 配对关系详情 + +| # | 输出GPIO | 输入GPIO | Round | 说明 | +|---|---------|---------|-------|------| +| 1 | S_AGPIO_L23 | S_AGPIO_L12 | 1 | 一对一配对 | +| 2 | S_AGPIO_L13 | S_AGPIO_L31 | 2 | 一对一配对 | +| 3 | S_AGPIO_L3 | S_AGPIO_L2 | 3 | 一对一配对 | +| 4 | S_AGPIO_L1 | S_AGPIO_L4 | 4 | 一对一配对 | +| 5 | S_AGPIO_R5 | S_MGPIO14 | 7 | 一对一配对 | +| 6 | S_MGPIO13 | S_AGPIO_R10 | 8 | 一对一配对 | +| 7 | S_MGPIO11 | S_MGPIO12 | 9 | 一对一配对 | +| 8 | S_AGPIO_L21 | S_AGPIO_L11 | 14 | 一对一配对 | +| 9 | S_MGPIO27 | S_MGPIO22 | 29 | 一对一配对 | +| 10 | S_AGPIO_L30 | S_AGPIO_L29 | 36 | 一对一配对 | +| 11 | S_MGPIO1 | S_MGPIO2 | 47 | 一对一配对 | +| 12 | S_MGPIO0 | S_MGPIO6 | 48 | 一对一配对 | +| 13 | S_MGPIO9 | S_MGPIO8 | 49 | 一对多配对(2个输入) | +| 14 | S_MGPIO9 | S_MGPIO7 | 49 | 一对多配对(2个输入) | + +## 配对统计 + +### 按GPIO类型分类 + +- **S_AGPIO_L**: 6对 + - S_AGPIO_L23 → S_AGPIO_L12 + - S_AGPIO_L13 → S_AGPIO_L31 + - S_AGPIO_L3 → S_AGPIO_L2 + - S_AGPIO_L1 → S_AGPIO_L4 + - S_AGPIO_L21 → S_AGPIO_L11 + - S_AGPIO_L30 → S_AGPIO_L29 + +- **S_AGPIO_R**: 2对 + - S_AGPIO_R5 → S_MGPIO14 + - S_MGPIO13 → S_AGPIO_R10 + +- **S_MGPIO**: 6对 + - S_MGPIO11 → S_MGPIO12 + - S_MGPIO27 → S_MGPIO22 + - S_MGPIO1 → S_MGPIO2 + - S_MGPIO0 → S_MGPIO6 + - S_MGPIO9 → S_MGPIO8 + - S_MGPIO9 → S_MGPIO7 + +### 配对模式 + +- **一对一配对**: 13对(93%) +- **一对多配对**: 1对(7%) + - S_MGPIO9 连接到 2个输入(S_MGPIO8, S_MGPIO7) + +## 未配对的GPIO + +以下GPIO在扫描过程中没有找到配对关系(共53个): + +- S_AGPIO_L0, S_AGPIO_L15, S_AGPIO_L17, S_AGPIO_L18, S_AGPIO_L19, S_AGPIO_L20, S_AGPIO_L24, S_AGPIO_L26, S_AGPIO_L28, S_AGPIO_L32 +- S_AGPIO_R0, S_AGPIO_R1, S_AGPIO_R2, S_AGPIO_R3, S_AGPIO_R4, S_AGPIO_R6, S_AGPIO_R7, S_AGPIO_R8, S_AGPIO_R9 +- S_HGPIO0, S_HGPIO1, S_HGPIO2, S_HGPIO3, S_HGPIO4, S_HGPIO5, S_HGPIO9, S_HGPIO13 +- S_MGPIO3, S_MGPIO19, S_MGPIO20, S_MGPIO21, S_MGPIO23, S_MGPIO24, S_MGPIO25, S_MGPIO26, S_MGPIO28, S_MGPIO29, S_MGPIO30, S_MGPIO31, S_MGPIO32 + +## JSON配置数据 + +生成的JSON配置文件已保存到: `gpio_test_config_from_scan.json` + +### 配置格式 + +```json +{ + "pairs": [ + { "output": "GPIO_NAME", "input": "GPIO_NAME" }, + ... + ] +} +``` + +### 使用说明 + +1. 此配置可以直接用于GPIO测试程序 +2. 可以通过AT指令 `AT^GPIOTEST=1,` 更新配置 +3. 配置中的 `output` 字段表示输出GPIO,`input` 字段表示输入GPIO + +## 注意事项 + +1. **一对多配对**: S_MGPIO9 同时连接到 S_MGPIO8 和 S_MGPIO7,这在JSON中需要两个独立的条目 +2. **配对方向**: 扫描结果中的"输出"和"输入"方向是测试时的方向,实际硬件连接可能是双向的 +3. **未配对GPIO**: 未找到配对的GPIO可能是: + - 未连接的GPIO(NC - No Connection) + - 连接到其他设备(非GPIO) + - 扫描时未检测到的连接 + diff --git a/gpio_scan_same_log_comparison.md b/gpio_scan_same_log_comparison.md new file mode 100644 index 000000000..5057d0a86 --- /dev/null +++ b/gpio_scan_same_log_comparison.md @@ -0,0 +1,105 @@ +# 同一日志文件中两次扫描结果对比 + +## 扫描信息 + +| 项目 | 第一次扫描 | 第二次扫描 | 差异 | +|------|-----------|-----------|------| +| **扫描位置** | 第82-490行 | 第575-983行 | - | +| **总GPIO数量** | 67 | 67 | 相同 | +| **扫描轮次** | 53è½® | 53è½® | **完全相同** | +| **找到的连接关系** | 14对 | 14对 | **完全相同** | + +## 详细配对关系对比 + +### 第一次扫描结果(14对) + +| Round | 输出GPIO | 输入GPIO | 连接数 | +|-------|---------|---------|--------| +| 1 | S_AGPIO_L23 | S_AGPIO_L12 | 1 | +| 2 | S_AGPIO_L13 | S_AGPIO_L31 | 1 | +| 3 | S_AGPIO_L3 | S_AGPIO_L2 | 1 | +| 4 | S_AGPIO_L1 | S_AGPIO_L4 | 1 | +| 7 | S_AGPIO_R5 | S_MGPIO14 | 1 | +| 8 | S_MGPIO13 | S_AGPIO_R10 | 1 | +| 9 | S_MGPIO11 | S_MGPIO12 | 1 | +| 14 | S_AGPIO_L21 | S_AGPIO_L11 | 1 | +| 29 | S_MGPIO27 | S_MGPIO22 | 1 | +| 36 | S_AGPIO_L30 | S_AGPIO_L29 | 1 | +| 47 | S_MGPIO1 | S_MGPIO2 | 1 | +| 48 | S_MGPIO0 | S_MGPIO6 | 1 | +| 49 | S_MGPIO9 | S_MGPIO8, S_MGPIO7 | 2 | + +### 第二次扫描结果(14对) + +| Round | 输出GPIO | 输入GPIO | 连接数 | +|-------|---------|---------|--------| +| 1 | S_AGPIO_L23 | S_AGPIO_L12 | 1 | +| 2 | S_AGPIO_L13 | S_AGPIO_L31 | 1 | +| 3 | S_AGPIO_L3 | S_AGPIO_L2 | 1 | +| 4 | S_AGPIO_L1 | S_AGPIO_L4 | 1 | +| 7 | S_AGPIO_R5 | S_MGPIO14 | 1 | +| 8 | S_MGPIO13 | S_AGPIO_R10 | 1 | +| 9 | S_MGPIO11 | S_MGPIO12 | 1 | +| 14 | S_AGPIO_L21 | S_AGPIO_L11 | 1 | +| 29 | S_MGPIO27 | S_MGPIO22 | 1 | +| 36 | S_AGPIO_L30 | S_AGPIO_L29 | 1 | +| 47 | S_MGPIO1 | S_MGPIO2 | 1 | +| 48 | S_MGPIO0 | S_MGPIO6 | 1 | +| 49 | S_MGPIO9 | S_MGPIO8, S_MGPIO7 | 2 | + +## 对比结果 + +### ✅ **完全一致** + +两次扫描的结果**完全相同**: + +1. **连接关系数量**:都是14对 +2. **连接关系内容**:所有配对关系完全一致 +3. **扫描轮次**:都是53è½® +4. **配对顺序**:所有配对在相同的Round中出现 + +### 详细对比表 + +| 配对关系 | 第一次扫描 | 第二次扫描 | 状态 | +|---------|-----------|-----------|------| +| S_AGPIO_L23 → S_AGPIO_L12 | Round 1 | Round 1 | ✅ 一致 | +| S_AGPIO_L13 → S_AGPIO_L31 | Round 2 | Round 2 | ✅ 一致 | +| S_AGPIO_L3 → S_AGPIO_L2 | Round 3 | Round 3 | ✅ 一致 | +| S_AGPIO_L1 → S_AGPIO_L4 | Round 4 | Round 4 | ✅ 一致 | +| S_AGPIO_R5 → S_MGPIO14 | Round 7 | Round 7 | ✅ 一致 | +| S_MGPIO13 → S_AGPIO_R10 | Round 8 | Round 8 | ✅ 一致 | +| S_MGPIO11 → S_MGPIO12 | Round 9 | Round 9 | ✅ 一致 | +| S_AGPIO_L21 → S_AGPIO_L11 | Round 14 | Round 14 | ✅ 一致 | +| S_MGPIO27 → S_MGPIO22 | Round 29 | Round 29 | ✅ 一致 | +| S_AGPIO_L30 → S_AGPIO_L29 | Round 36 | Round 36 | ✅ 一致 | +| S_MGPIO1 → S_MGPIO2 | Round 47 | Round 47 | ✅ 一致 | +| S_MGPIO0 → S_MGPIO6 | Round 48 | Round 48 | ✅ 一致 | +| S_MGPIO9 → S_MGPIO8, S_MGPIO7 | Round 49 | Round 49 | ✅ 一致 | + +## 结论 + +### 🎯 **扫描结果高度稳定** + +1. **可重复性**:两次扫描结果完全一致,说明扫描算法稳定可靠 +2. **硬件连接稳定**:GPIO连接关系在两次扫描之间没有变化 +3. **算法一致性**:迭代扫描算法在相同条件下产生相同结果 +4. **配置稳定**:GPIO配置(`HAL_PIO_FUNC_OPI`)在两次扫描之间保持一致 + +### 与之前对比的差异 + +- **之前对比(不同时间点)**:结果差异较大(14对 vs 21对),可能是由于: + - GPIO配置不同(第一次可能是`HAL_PIO_FUNC_GPIO`,第二次是`HAL_PIO_FUNC_OPI`) + - Pull设置不同 + - 硬件状态不同 + +- **本次对比(同一日志)**:结果完全一致,说明: + - 在相同配置和条件下,扫描结果是可重复的 + - 算法实现正确,没有随机性 + - 硬件连接关系稳定 + +### 建议 + +1. ✅ **扫描算法验证通过**:结果可重复,算法稳定 +2. ✅ **硬件连接关系已确认**:14对连接关系是稳定的硬件连接 +3. 📝 **可以用于生产测试**:扫描结果稳定可靠,适合用于GPIO配对测试 + diff --git a/gpio_test_config_from_scan.json b/gpio_test_config_from_scan.json new file mode 100644 index 000000000..ff0ccce9e --- /dev/null +++ b/gpio_test_config_from_scan.json @@ -0,0 +1,60 @@ +{ + "pairs": [ + { + "output": "S_AGPIO_L23", + "input": "S_AGPIO_L12" + }, + { + "output": "S_AGPIO_L13", + "input": "S_AGPIO_L31" + }, + { + "output": "S_AGPIO_L3", + "input": "S_AGPIO_L2" + }, + { + "output": "S_AGPIO_L1", + "input": "S_AGPIO_L4" + }, + { + "output": "S_AGPIO_R5", + "input": "S_MGPIO14" + }, + { + "output": "S_MGPIO13", + "input": "S_AGPIO_R10" + }, + { + "output": "S_MGPIO11", + "input": "S_MGPIO12" + }, + { + "output": "S_AGPIO_L21", + "input": "S_AGPIO_L11" + }, + { + "output": "S_MGPIO27", + "input": "S_MGPIO22" + }, + { + "output": "S_AGPIO_L30", + "input": "S_AGPIO_L29" + }, + { + "output": "S_MGPIO1", + "input": "S_MGPIO2" + }, + { + "output": "S_MGPIO0", + "input": "S_MGPIO6" + }, + { + "output": "S_MGPIO9", + "input": "S_MGPIO8" + }, + { + "output": "S_MGPIO9", + "input": "S_MGPIO7" + } + ] +} \ No newline at end of file diff --git a/mark_gpio_in_board.py b/mark_gpio_in_board.py new file mode 100644 index 000000000..a798aca53 --- /dev/null +++ b/mark_gpio_in_board.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +在board_leiniao.h中标记67个GPIO +只在注释中查找GPIO名称 +""" + +# 67个GPIO列表 +gpio_list = [ + "S_HGPIO0", "S_HGPIO1", "S_HGPIO2", "S_HGPIO3", "S_HGPIO4", "S_HGPIO5", + "S_HGPIO9", "S_HGPIO13", + "S_MGPIO0", "S_MGPIO1", "S_MGPIO2", "S_MGPIO3", + "S_MGPIO6", "S_MGPIO7", "S_MGPIO8", "S_MGPIO9", + "S_MGPIO11", "S_MGPIO12", "S_MGPIO13", "S_MGPIO14", + "S_MGPIO19", "S_MGPIO20", "S_MGPIO21", "S_MGPIO22", + "S_MGPIO23", "S_MGPIO24", "S_MGPIO25", "S_MGPIO26", + "S_MGPIO27", "S_MGPIO28", "S_MGPIO29", "S_MGPIO30", + "S_MGPIO31", "S_MGPIO32", + "S_AGPIO_L0", "S_AGPIO_L1", "S_AGPIO_L2", "S_AGPIO_L3", "S_AGPIO_L4", + "S_AGPIO_L11", "S_AGPIO_L12", "S_AGPIO_L13", + "S_AGPIO_L15", + "S_AGPIO_L17", "S_AGPIO_L18", "S_AGPIO_L19", + "S_AGPIO_L20", "S_AGPIO_L21", + "S_AGPIO_L23", "S_AGPIO_L24", + "S_AGPIO_L26", + "S_AGPIO_L28", "S_AGPIO_L29", "S_AGPIO_L30", "S_AGPIO_L31", "S_AGPIO_L32", + "S_AGPIO_R0", "S_AGPIO_R1", + "S_AGPIO_R2", + "S_AGPIO_R3", "S_AGPIO_R4", "S_AGPIO_R5", "S_AGPIO_R6", + "S_AGPIO_R7", "S_AGPIO_R8", "S_AGPIO_R9", "S_AGPIO_R10" +] + +def mark_gpio_in_file(file_path): + """在文件中标记GPIO""" + import re + + try: + with open(file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + marked_count = {gpio: 0 for gpio in gpio_list} + new_lines = [] + + for line_num, line in enumerate(lines, 1): + original_line = line + # 提取注释部分(// 后面的内容) + comment_match = re.search(r'//\s*(.+)', line) + if comment_match: + comment_text = comment_match.group(1) + # 检查注释中是否包含67个GPIO中的任何一个 + for gpio in gpio_list: + # 精确匹配:GPIO名称作为单词边界 + pattern = r'\b' + re.escape(gpio) + r'\b' + if re.search(pattern, comment_text): + # 检查是否已经有标记 + if f"[67GPIO-{gpio}]" not in line: + # 在注释前添加标记 + comment_pos = line.find("//") + line = line[:comment_pos] + f"// [67GPIO-{gpio}] " + line[comment_pos:] + marked_count[gpio] += 1 + + new_lines.append(line) + + # 写回文件 + with open(file_path, 'w', encoding='utf-8') as f: + f.writelines(new_lines) + + # 打印统计 + print("=" * 60) + print("GPIO标记统计:") + print("=" * 60) + total_marked = 0 + found_gpios = [] + missing_gpios = [] + + for gpio in sorted(gpio_list): + count = marked_count[gpio] + if count > 0: + print(f" ✓ {gpio}: {count} 处") + total_marked += count + found_gpios.append(gpio) + else: + print(f" ✗ {gpio}: 未找到") + missing_gpios.append(gpio) + + print() + print(f"总计: {total_marked} 处标记") + print(f"找到的GPIO: {len(found_gpios)} 个") + print(f"未找到的GPIO: {len(missing_gpios)} 个") + if missing_gpios: + print(f"未找到的GPIO列表: {', '.join(missing_gpios)}") + + return True + + except Exception as e: + print(f"Error: {e}") + import traceback + traceback.print_exc() + return False + +if __name__ == "__main__": + file_path = "code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h" + mark_gpio_in_file(file_path) diff --git a/pdf_to_md.py b/pdf_to_md.py new file mode 100644 index 000000000..093c46040 --- /dev/null +++ b/pdf_to_md.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +PDF to Markdown converter +""" +import sys +import os +from PyPDF2 import PdfReader + +def pdf_to_markdown(pdf_path, output_path=None): + """Convert PDF to Markdown format""" + if not os.path.exists(pdf_path): + print(f"Error: PDF file not found: {pdf_path}") + return False + + if output_path is None: + output_path = pdf_path.replace('.pdf', '.md') + + try: + reader = PdfReader(pdf_path) + total_pages = len(reader.pages) + + markdown_content = [] + markdown_content.append(f"# {os.path.basename(pdf_path).replace('.pdf', '')}\n\n") + markdown_content.append(f"*Converted from PDF - {total_pages} pages*\n\n") + markdown_content.append("---\n\n") + + for page_num, page in enumerate(reader.pages, 1): + text = page.extract_text() + if text.strip(): + markdown_content.append(f"## Page {page_num}\n\n") + # Clean up text and format as markdown + lines = text.split('\n') + for line in lines: + line = line.strip() + if line: + # Try to detect headings (lines that are short and might be titles) + if len(line) < 80 and not line.endswith('.') and not line.endswith(','): + # Might be a heading + markdown_content.append(f"### {line}\n\n") + else: + markdown_content.append(f"{line}\n\n") + markdown_content.append("\n---\n\n") + + # Write to markdown file + with open(output_path, 'w', encoding='utf-8') as f: + f.write(''.join(markdown_content)) + + print(f"Successfully converted {pdf_path} to {output_path}") + print(f"Total pages: {total_pages}") + return True + + except Exception as e: + print(f"Error converting PDF: {e}") + return False + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: python3 pdf_to_md.py [output_file]") + sys.exit(1) + + pdf_file = sys.argv[1] + output_file = sys.argv[2] if len(sys.argv) > 2 else None + + success = pdf_to_markdown(pdf_file, output_file) + sys.exit(0 if success else 1) + -- 2.17.1