取消指令调试日志
authorsnickersun <snickersun@163.com>
Tue, 19 May 2026 11:01:28 +0000 (19:01 +0800)
committersnickersun <snickersun@163.com>
Tue, 19 May 2026 11:01:28 +0000 (19:01 +0800)
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC.py
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/default_config.py
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/versions.py

index 8329c4f..8401205 100644 (file)
@@ -5201,10 +5201,6 @@ class AI_VC(Abstract):
             usys.print_exception(e)\r
         #配置词\r
         self.commands_mode = 2 #=1用大模型判断命令,=0用服务器本地插件判断命令 =2用设备本地判断方式\r
-        try:\r
-            self._vc_intent_selftest_once()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
         self.commands = []\r
         if self.VC_TTS_volume == None:\r
             self.VC_TTS_volume = 100\r
@@ -7522,50 +7518,9 @@ class AI_VC(Abstract):
     def check_text_server(self,cmd):\r
         return -1\r
 \r
-    def _vc_cmd_diag(self, tag, text):\r
-        """本地指令诊断日志(保留,便于确认表驱动匹配情况)。"""\r
-        try:\r
-            print("[VC][cmd] {} type={} len={} repr={}".format(\r
-                tag, type(text).__name__, len(text) if text else 0, repr(text)[:72]))\r
-            if vc_text_intent is None:\r
-                print("[VC][cmd] {} vc_text_intent import=None".format(tag))\r
-                return\r
-            nt = vc_text_intent.normalize_vc_command_text(text)\r
-            print("[VC][cmd] {} norm_len={} norm_repr={}".format(tag, len(nt), repr(nt)[:72]))\r
-            if nt:\r
-                print("[VC][cmd] {} find 查询={} 信号={} 版本={}".format(\r
-                    tag, nt.find("查询"), nt.find("信号"), nt.find("版本")))\r
-                for rule in vc_text_intent._INTENT_RULES:\r
-                    if rule.get("id") == "query_signal":\r
-                        subs = rule.get("all", ())\r
-                        if subs:\r
-                            kw = subs[0]\r
-                            print("[VC][cmd] {} rule_kw0 repr={} kw_in_norm={}".format(\r
-                                tag, repr(kw), nt.find(kw)))\r
-                        break\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-\r
-    def _vc_intent_selftest_once(self):\r
-        if getattr(self, "_vc_intent_selftest_done", 0):\r
-            return\r
-        self._vc_intent_selftest_done = 1\r
-        try:\r
-            print("[VC][cmd] selftest start")\r
-            if vc_text_intent is None:\r
-                print("[VC][cmd] selftest FAIL vc_text_intent=None")\r
-                return\r
-            sample = "查询信号"\r
-            r = vc_text_intent.match_vc_command(sample, {})\r
-            print("[VC][cmd] selftest sample={} match={}".format(repr(sample), r))\r
-            self._vc_cmd_diag("selftest", sample)\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-\r
     def _apply_vc_text_intent(self, text, cmd, llm_style_tts):\r
         """表驱动文本意图(vc_text_intent)。未命中返回 None;命中返回 0/1/-1。"""\r
         if vc_text_intent is None:\r
-            print("[VC][cmd] vc_text_intent is None")\r
             return None\r
         try:\r
             try:\r
@@ -7577,15 +7532,11 @@ class AI_VC(Abstract):
             usys.print_exception(e)\r
             return None\r
         if not r:\r
-            print("[VC][cmd] match_vc_command r is None")\r
-            self._vc_cmd_diag("match_fail", text)\r
             return None\r
-        print("[VC][cmd] match intent={}".format(r.get("intent")))\r
         return self._apply_vc_text_intent_matched(r, cmd, llm_style_tts)\r
 \r
     def _apply_vc_text_intent_matched(self, r, cmd, llm_style_tts):\r
         if r.get("needs_payload") and cmd is None:\r
-            print("[VC][cmd] needs_payload skip intent={}".format(r.get("intent")))\r
             return None\r
         it = r["intent"]\r
         if r.get("tts"):\r
@@ -7946,19 +7897,14 @@ class AI_VC(Abstract):
 \r
     def check_text(self, text):\r
         print("check_text:len:{}".format(len(text)))\r
-        self._vc_cmd_diag("check_text_in", text)\r
         if len(text) > 60:\r
-            print("[VC][cmd] check_text skip len>60")\r
             return -1\r
         try:\r
             if not isinstance(text, str):\r
-                print("[VC][cmd] check_text skip not str type={}".format(type(text).__name__))\r
                 return -1\r
             ret = self._apply_vc_text_intent(text, None, False)\r
             if ret is not None:\r
-                print("[VC][cmd] check_text table ret={}".format(ret))\r
                 return ret\r
-            print("[VC][cmd] check_text no_match ret=-1")\r
         except Exception as e:\r
             usys.print_exception(e)\r
         return -1\r
index 4360c21..d26ea6f 100644 (file)
-# -*- coding: utf-8 -*-\r
-# k8 产品 — 设备侧默认配置(编译期 freeze 进固件)\r
-#\r
-# 加载优先级(vc_config.py):\r
-#   1) usr/default_config.py(现场覆盖)\r
-#   2) 本文件(由 new_clean.bat 按 product_k8.ini 的 DEV_TYPE 拷贝到 core/default_config.py)\r
-#\r
-# 约定:仅放「机型/产品差异」常量,勿放运行态变量。\r
-\r
-# =============================================================================\r
-# 1. 产品与区域\r
-# =============================================================================\r
-\r
-# 硬件平台类型(与 products/configs/<DEV_TYPE>/ 目录名一致)\r
-DEV_TYPE = "7PIN"\r
-\r
-# 文案/逻辑用语言(如 zh / en)\r
-LANG = "zh"\r
-\r
-# 设备鉴权(device_res_author:HMAC 签名与 AES 加解密)产品名“小量博士”\r
-PRODUCT_PID = "DieBeXahZHLrjSnORbgN"\r
-PRODUCT_KEY = "FuXG4ptpGbzvKbdB4vpUypisbENgy2nB"  # 32 字节,运行时转为 bytes\r
-\r
-# =============================================================================\r
-# 2. GPIO 引脚\r
-# =============================================================================\r
-\r
-# --- 2.1 三色 LED(Pin 属性名字符串,vc_config 转为 Pin.GPIOxx)---\r
-LED_GPIO = ("GPIO36", "GPIO44", "GPIO43")  # (R, G, B)\r
-\r
-# 点亮电平:False=高电平亮;True=低电平亮;仅某路反相用 LED_ACTIVE_LOW_RGB\r
-LED_ACTIVE_LOW = False\r
-LED_ACTIVE_LOW_RGB = None  # 例 (True, False, False) 仅红灯反相\r
-\r
-# --- 2.2 按键 ExtInt ---\r
-EXTINT_AI_GPIO = "GPIO22"   # AI 键\r
-PWK_KEY_GPIO = "GPIO26"     # 电源键(短按/双击切模式等)\r
-\r
-# btn_device_ec800m:扩展按键(本机型未用)\r
-BTN_WECHAT_GPIO = None\r
-BTN_SOS_GPIO = None\r
-\r
-# --- 2.3 马达(motor.py / motorEventManager)---\r
-MOTOR_PIN_GPIO = "GPIO20"   # None 表示无马达\r
-MOTOR_TICK_MS = 100\r
-MOTOR_ACTIVE_LOW = False\r
-MOTOR_BOOT_VIBRATE_MS = 200  # 开机震动时长(ms)\r
-\r
-# --- 2.4 蓝牙电源 / 音频 IIS(本机型关闭)---\r
-BT_POWER_MOTOR_ENABLED = False\r
-PIN_BT_ON_GPIO = None\r
-PIN_MOT_GPIO = None\r
-AUDIO_QDAI_CFG = None  # 非 None 时调用 audio.set_qdai_cfg(...)\r
-\r
-# --- 2.5 蓝牙↔4G 唤醒(本机型关闭)---\r
-BT_WAKEUP_4G_ENABLED = False\r
-EXTINT_WAKEUP_CTA1_GPIO = None\r
-PIN_WAKEUP_BT_GPIO = None\r
-\r
-# =============================================================================\r
-# 3. LED 灯效策略(AI_led / ai_VC,对齐交互规范)\r
-# =============================================================================\r
-\r
-# 正常待机 idle:off=灭灯(REQ-BAT-01);green_blink=旧工程绿灯慢闪\r
-LED_IDLE_MODE = "off"\r
-\r
-# green_blink 模式下的亮/灭时长(ms);LED_IDLE_MODE=off 时不生效\r
-LED_IDLE_GREEN_BLINK_MS = 1000\r
-LED_IDLE_GREEN_BLINK_OFF_MS = 2000\r
-\r
-# LLM 思考阶段:flicker_blue_green | open_red_green\r
-THINKING_LED_MODE = "flicker_blue_green"\r
-\r
-# 收到 vad.active 是否强制回蓝灯(长对话)\r
-VAD_ACTIVE_BLUE_LED = True\r
-\r
-# 收音 listening:长对话蓝慢闪(1000ms)、单对话蓝快闪(250ms) 由 VC_mode 在 AI_led 内切换,无需本文件单独配置\r
-\r
-# =============================================================================\r
-# 4. 电池与硬件状态(AI_hw_status / AI_dev)\r
-# =============================================================================\r
-\r
-HW_STATUS_PERIOD_MS = 10000\r
-SIGNAL_WEAK_CSQ = 10  # 0≤CSQ<此值 → signal=weak(REQ-ERR-02)\r
-\r
-# SoC 百分比门限(OCV 模式,对齐 REQ-BAT-02/03)\r
-BATTERY_LOW_SOC_PERCENT = 30\r
-BATTERY_EMPTY_SOC_PERCENT = 10\r
-BATTERY_LOW_WARN_INTERVAL_MS = 300000  # 低电语音间隔 5min\r
-BATTERY_EMPTY_FLASH_COUNT = 3\r
-BATTERY_EMPTY_FLASH_PERIOD_MS = 500    # 空电红快闪约 2 次/秒\r
-\r
-# 电压门限(mV):充满 / 低电 / 空电(与 get_battery、simple 模式共用)\r
-USE_SIMPLE_VBATT_THRESH = False  # True 时忽略 BATTERY_OCV_MAP,仅用三档电压\r
-VBATT_CHARGE_FULL_MV = 4290\r
-VBATT_LOW_MV = 3699\r
-VBATT_EMPTY_MV = 3629\r
-\r
-# 开路电压(mV)→SoC(%) 插值表;None 则用 ai_VC 内置默认表\r
-BATTERY_OCV_MAP = {\r
-    4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-    3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-}\r
-\r
-# =============================================================================\r
-# 5. 可选外设与协议\r
-# =============================================================================\r
-\r
-GNSS_ENABLED = False           # 无 GNSS 硬件时 False,避免 import quecgnss\r
-UART_SUPPORTED = False\r
-BT_OTA_ENABLED = False\r
-UPLOAD_START_TONE_ENABLED = False  # 开始上传语音时是否播成功提示音\r
-\r
-# =============================================================================\r
-# 6. 按键逻辑(AI_dev / btn_device)\r
-# =============================================================================\r
-\r
-KEY_RELEASE_DEBOUNCE_COUNT = 5\r
-AI_LONG_PRESS_POWER_OFF_ENABLED = False  # AI 键长按 8s 关机\r
-SOS_ENABLED = False                      # AI 长按 3s SOS、板载 SOS 入口\r
-\r
-# =============================================================================\r
-# 7. VC 会话 / WebSocket / 空闲与休眠\r
-# =============================================================================\r
-\r
-# 语音 WS 路径段(无首尾斜杠);完整 URL 见 default_srv.AMP_SERVER + 文首拼接说明\r
-VC_WS_PATH = "vc/agent"\r
-VC_WS_PING_INTERVAL_SEC = 55  # 文本 ping 间隔,过大影响保活,过小费电\r
-\r
-# 长对话:无有效业务下行累计达此秒数结束会话(代码最小 5)\r
-VC_IDLE_AUTO_CLOSE_SEC = 20\r
-VC_IDLE_AUTO_CLOSE_SEC_PTT = 0  # 单对话预留,当前与 idle 统一处理\r
-\r
-# 业务 idle 达此秒数触发深睡断开(最小 10;ENABLE=0 关闭)\r
-VC_IDLE_DEEP_SLEEP_SEC = 60\r
-VC_IDLE_DEEP_SLEEP_ENABLE = 1\r
-\r
-VAD_SILENCE_DEFAULT = 300  # VAD 静音阈值(ms)\r
-\r
-# =============================================================================\r
-# 8. 语音对话 / TTS / 智能体\r
-# =============================================================================\r
-\r
-POWER_ON_TONE_ENABLED = True\r
-POWER_ON_TONE_DEFAULT = "你好,我来了"\r
-\r
-VC_TTS_VOICE_TYPE_DEFAULT = None   # dict 或 None\r
-VC_TTS_VOICE_KEY_DEFAULT = None    # 如 "男" / "童"\r
-\r
-DIALOG_BOT_OPTION = None           # {"bot_id", "workflow_id", "use_workflow"}\r
-VC_BOT_ID = "7462617881076351002"\r
-VC_WORKFLOW_ID = "7462621757327196187"\r
-DIALOG_PROVIDER_DEFAULT = None\r
-KEYWORDS_FROM_VOICE_TYPE = False\r
-\r
-BT_VOICE_FEATURES_ENABLED = False\r
-\r
-# =============================================================================\r
-# 9. 本地指令与固定话术\r
-# =============================================================================\r
-\r
-# protocol.ai_cmd_handle:云端 NLP 扩展(会议纪要 / 实时翻译 / 历史留言)\r
-NLP_EXTENDED_CMDS = False\r
-\r
-CMD_TOGGLE_MODE_TO_PTT_TTS = "已切换到单对话模式"\r
-CMD_TOGGLE_MODE_TO_LONG_TTS = "已切换到长对话模式"\r
-POWEROFF_CMD_CLOSE_ONLY = False     # 「关机」指令仅 Close,不真断电\r
-\r
-KWS_PTT_HINT = "请您按住圆形的按钮开始讲话,讲完松开即可 "\r
-PTT_HINT = "请您按住圆形的按钮开始讲话,讲完松开即可 "\r
-\r
-# =============================================================================\r
-# 10. 按键音 / 开录音 / PTT 时序(k8:开录仅以灯提示,不播专用开录音)\r
-# =============================================================================\r
-\r
-KEY_PRESS_TONE_FILE = None         # AI 短按操作音;None=不播\r
-KEY_PRESS_TONE_DELAY_MS = 300\r
-\r
-RECORD_START_TONE_FILE = None      # 单对话长按开录提示音;None=仅蓝快闪\r
-RECORD_START_TONE_GAP_MS = 180\r
-\r
-PTT_RELEASE_END_SPEECH_DELAY_MS = 200   # 松手后发 audio.completed 前延迟\r
-PTT_CANCEL_WAIT_MS = 2500               # 打断后等 canceled 最长时间\r
-PTT_POST_MUTE_MS = 30                   # 本地硬静音后 codec 收尾\r
-\r
-# =============================================================================\r
-# 11. 调试开关(量产可全 False)\r
-# =============================================================================\r
-\r
-LED_DEBUG = True\r
-LED_STATE_DEBUG = True\r
-KEY_LED_DEBUG = True\r
+# -*- coding: utf-8 -*-
+# k8 产品 — 设备侧默认配置(编译期 freeze 进固件)
+#
+# 加载优先级(vc_config.py):
+#   1) usr/default_config.py(现场覆盖)
+#   2) 本文件(由 new_clean.bat 按 product_k8.ini 的 DEV_TYPE 拷贝到 core/default_config.py)
+#
+# 约定:仅放「机型/产品差异」常量,勿放运行态变量。
+
+# =============================================================================
+# 1. 产品与区域
+# =============================================================================
+
+# 硬件平台类型(与 products/configs/<DEV_TYPE>/ 目录名一致)
+DEV_TYPE = "7PIN"
+
+# 文案/逻辑用语言(如 zh / en)
+LANG = "zh"
+
+# 设备鉴权(device_res_author:HMAC 签名与 AES 加解密)产品名“小量博士” 、“浪漫挂坠”
+PRODUCT_PID = "cqxJZi5CNgzjS3mX21Zw"
+PRODUCT_KEY = "uKLrChwrxA1LklgBc3VwawYjUkbT3BgX"  # 32 字节,运行时转为 bytes
+
+# =============================================================================
+# 2. GPIO 引脚
+# =============================================================================
+
+# --- 2.1 三色 LED(Pin 属性名字符串,vc_config 转为 Pin.GPIOxx)---
+LED_GPIO = ("GPIO36", "GPIO44", "GPIO43")  # (R, G, B)
+
+# 点亮电平:False=高电平亮;True=低电平亮;仅某路反相用 LED_ACTIVE_LOW_RGB
+LED_ACTIVE_LOW = False
+LED_ACTIVE_LOW_RGB = None  # 例 (True, False, False) 仅红灯反相
+
+# --- 2.2 按键 ExtInt ---
+EXTINT_AI_GPIO = "GPIO22"   # AI 键
+PWK_KEY_GPIO = "GPIO26"     # 电源键(短按/双击切模式等)
+
+# btn_device_ec800m:扩展按键(本机型未用)
+BTN_WECHAT_GPIO = None
+BTN_SOS_GPIO = None
+
+# --- 2.3 马达(motor.py / motorEventManager)---
+MOTOR_PIN_GPIO = "GPIO20"   # None 表示无马达
+MOTOR_TICK_MS = 100
+MOTOR_ACTIVE_LOW = False
+MOTOR_BOOT_VIBRATE_MS = 200  # 开机震动时长(ms)
+
+# --- 2.4 蓝牙电源 / 音频 IIS(本机型关闭)---
+BT_POWER_MOTOR_ENABLED = False
+PIN_BT_ON_GPIO = None
+PIN_MOT_GPIO = None
+AUDIO_QDAI_CFG = None  # 非 None 时调用 audio.set_qdai_cfg(...)
+
+# --- 2.5 蓝牙↔4G 唤醒(本机型关闭)---
+BT_WAKEUP_4G_ENABLED = False
+EXTINT_WAKEUP_CTA1_GPIO = None
+PIN_WAKEUP_BT_GPIO = None
+
+# =============================================================================
+# 3. LED 灯效策略(AI_led / ai_VC,对齐交互规范)
+# =============================================================================
+
+# 正常待机 idle:off=灭灯(REQ-BAT-01);green_blink=旧工程绿灯慢闪
+LED_IDLE_MODE = "off"
+
+# green_blink 模式下的亮/灭时长(ms);LED_IDLE_MODE=off 时不生效
+LED_IDLE_GREEN_BLINK_MS = 1000
+LED_IDLE_GREEN_BLINK_OFF_MS = 2000
+
+# LLM 思考阶段:flicker_blue_green | open_red_green
+THINKING_LED_MODE = "flicker_blue_green"
+
+# 收到 vad.active 是否强制回蓝灯(长对话)
+VAD_ACTIVE_BLUE_LED = True
+
+# 收音 listening:长对话蓝慢闪(1000ms)、单对话蓝快闪(250ms) 由 VC_mode 在 AI_led 内切换,无需本文件单独配置
+
+# =============================================================================
+# 4. 电池与硬件状态(AI_hw_status / AI_dev)
+# =============================================================================
+
+HW_STATUS_PERIOD_MS = 10000
+SIGNAL_WEAK_CSQ = 10  # 0≤CSQ<此值 → signal=weak(REQ-ERR-02)
+
+# SoC 百分比门限(OCV 模式,对齐 REQ-BAT-02/03)
+BATTERY_LOW_SOC_PERCENT = 30
+BATTERY_EMPTY_SOC_PERCENT = 10
+BATTERY_LOW_WARN_INTERVAL_MS = 300000  # 低电语音间隔 5min
+BATTERY_EMPTY_FLASH_COUNT = 3
+BATTERY_EMPTY_FLASH_PERIOD_MS = 500    # 空电红快闪约 2 次/秒
+
+# 电压门限(mV):充满 / 低电 / 空电(与 get_battery、simple 模式共用)
+USE_SIMPLE_VBATT_THRESH = False  # True 时忽略 BATTERY_OCV_MAP,仅用三档电压
+VBATT_CHARGE_FULL_MV = 4290
+VBATT_LOW_MV = 3699
+VBATT_EMPTY_MV = 3629
+
+# 开路电压(mV)→SoC(%) 插值表;None 则用 ai_VC 内置默认表
+BATTERY_OCV_MAP = {
+    4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+    3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,
+}
+
+# =============================================================================
+# 5. 可选外设与协议
+# =============================================================================
+
+GNSS_ENABLED = False           # 无 GNSS 硬件时 False,避免 import quecgnss
+UART_SUPPORTED = False
+BT_OTA_ENABLED = False
+UPLOAD_START_TONE_ENABLED = False  # 开始上传语音时是否播成功提示音
+
+# =============================================================================
+# 6. 按键逻辑(AI_dev / btn_device)
+# =============================================================================
+
+KEY_RELEASE_DEBOUNCE_COUNT = 5
+AI_LONG_PRESS_POWER_OFF_ENABLED = False  # AI 键长按 8s 关机
+SOS_ENABLED = False                      # AI 长按 3s SOS、板载 SOS 入口
+
+# =============================================================================
+# 7. VC 会话 / WebSocket / 空闲与休眠
+# =============================================================================
+
+# 语音 WS 路径段(无首尾斜杠);完整 URL 见 default_srv.AMP_SERVER + 文首拼接说明
+VC_WS_PATH = "vc/agent"
+VC_WS_PING_INTERVAL_SEC = 55  # 文本 ping 间隔,过大影响保活,过小费电
+
+# 长对话:无有效业务下行累计达此秒数结束会话(代码最小 5)
+VC_IDLE_AUTO_CLOSE_SEC = 20
+VC_IDLE_AUTO_CLOSE_SEC_PTT = 0  # 单对话预留,当前与 idle 统一处理
+
+# 业务 idle 达此秒数触发深睡断开(最小 10;ENABLE=0 关闭)
+VC_IDLE_DEEP_SLEEP_SEC = 60
+VC_IDLE_DEEP_SLEEP_ENABLE = 1
+
+VAD_SILENCE_DEFAULT = 300  # VAD 静音阈值(ms)
+
+# =============================================================================
+# 8. 语音对话 / TTS / 智能体
+# =============================================================================
+
+POWER_ON_TONE_ENABLED = True
+POWER_ON_TONE_DEFAULT = "你好,我来了"
+
+VC_TTS_VOICE_TYPE_DEFAULT = None   # dict 或 None
+VC_TTS_VOICE_KEY_DEFAULT = None    # 如 "男" / "童"
+
+DIALOG_BOT_OPTION = None           # {"bot_id", "workflow_id", "use_workflow"}
+VC_BOT_ID = "7462617881076351002"
+VC_WORKFLOW_ID = "7462621757327196187"
+DIALOG_PROVIDER_DEFAULT = None
+KEYWORDS_FROM_VOICE_TYPE = False
+
+BT_VOICE_FEATURES_ENABLED = False
+
+# =============================================================================
+# 9. 本地指令与固定话术
+# =============================================================================
+
+# protocol.ai_cmd_handle:云端 NLP 扩展(会议纪要 / 实时翻译 / 历史留言)
+NLP_EXTENDED_CMDS = False
+
+CMD_TOGGLE_MODE_TO_PTT_TTS = "已切换到单对话模式"
+CMD_TOGGLE_MODE_TO_LONG_TTS = "已切换到长对话模式"
+POWEROFF_CMD_CLOSE_ONLY = False     # 「关机」指令仅 Close,不真断电
+
+KWS_PTT_HINT = "请您按住圆形的按钮开始讲话,讲完松开即可 "
+PTT_HINT = "请您按住圆形的按钮开始讲话,讲完松开即可 "
+
+# =============================================================================
+# 10. 按键音 / 开录音 / PTT 时序(k8:开录仅以灯提示,不播专用开录音)
+# =============================================================================
+
+KEY_PRESS_TONE_FILE = None         # AI 短按操作音;None=不播
+KEY_PRESS_TONE_DELAY_MS = 300
+
+RECORD_START_TONE_FILE = None      # 单对话长按开录提示音;None=仅蓝快闪
+RECORD_START_TONE_GAP_MS = 180
+
+PTT_RELEASE_END_SPEECH_DELAY_MS = 200   # 松手后发 audio.completed 前延迟
+PTT_CANCEL_WAIT_MS = 2500               # 打断后等 canceled 最长时间
+PTT_POST_MUTE_MS = 30                   # 本地硬静音后 codec 收尾
+
+# =============================================================================
+# 11. 调试开关(量产可全 False)
+# =============================================================================
+
+LED_DEBUG = True
+LED_STATE_DEBUG = True
+KEY_LED_DEBUG = True
 HW_STATUS_DEBUG = True
\ No newline at end of file