project_config.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. /**
  2. * ===================================================
  3. * project_config.h — 全局可调配置集中管理
  4. * ===================================================
  5. *
  6. * 本文件汇集 APP 内所有可修改的硬件、时序、阈值参数。
  7. * 修改任何参数后重新编译即可生效,无需逐文件查找。
  8. *
  9. * 使用 #ifndef 守卫允许编译选项(-D)或上游头文件覆盖。
  10. *
  11. * 本文件不包含:
  12. * - 内存/缓冲大小 (memory_pool_c.h 自行管理)
  13. * - BLE 连接参数 (peripheral.c 自行管理)
  14. * - NRF 寄存器地址/位定义 (sir24drv.h 芯片手册常量)
  15. * - GATT UUID (gattprofile.h Profile 定义)
  16. * - GPIO 引脚映射 (pindef.h 硬件绑定)
  17. *
  18. * 编码: GBK (与项目保持一致)
  19. */
  20. #ifndef PROJECT_CONFIG_H
  21. #define PROJECT_CONFIG_H
  22. /* ==================== 1. RF 构建变体 ==================== */
  23. /* 由 build 脚本通过 -d 选项重写,每台设备编译时生成不同 .hex。
  24. * 也可直接修改此处手工构建。 */
  25. #ifndef INIT_ADDR
  26. #define INIT_ADDR 0x34,0x43,0x10,0x10,0x02 /* SI24R1 5字节地址 */
  27. #endif
  28. #ifndef SI24R1_CH
  29. #define SI24R1_CH 16 /* SI24R1 信道 (0-127, 1MHz步进) */
  30. #endif
  31. /* ==================== 2. 跳频参数 ==================== */
  32. /* 【重要】中控与从机两端必须完全一致,否则无法通信。
  33. * 修改后两端同步重新编译部署。 */
  34. #ifndef HOP_POOL
  35. /* 跳频信道池:避开 WiFi ch1/6/11/13。
  36. * 4 信道:16(低端夹缝),84(中段),98(中高),112(高端) */
  37. #define HOP_POOL {16,84,98,112}
  38. #endif
  39. #ifndef HOP_POOL_SIZE
  40. #define HOP_POOL_SIZE 4 /* 信道池大小 */
  41. #endif
  42. #ifndef HOP_SLOT_MS
  43. #define HOP_SLOT_MS 32 /* 跳频时隙 (ms),与中控 MODE_TICK_MS 对齐 */
  44. #endif
  45. #ifndef HOP_RX_TIMEOUT_MS
  46. #define HOP_RX_TIMEOUT_MS 320 /* 失步阈值 (ms),作为 HOP_CREDIT_MAX 导出基准 */
  47. #endif
  48. #define HOP_CREDIT_MAX (HOP_RX_TIMEOUT_MS / HOP_SLOT_MS) /* 信用桶满额 (=10) */
  49. #ifndef HOP_CREDIT_RX_GAIN
  50. #define HOP_CREDIT_RX_GAIN 2 /* 每 slot 收包信用增益 */
  51. #endif
  52. #ifndef HOP_RX_SELF_HEAL_MS
  53. #define HOP_RX_SELF_HEAL_MS 10000 /* 硬件自愈超时 (ms): 连续无包此时间后软复位 SI24R1 */
  54. #endif
  55. /* SipHash-2-4 共享密钥 (16 字节)
  56. * 两端必须完全一致,否则 MAC 校验失败→灯光包全部丢弃。
  57. * 当前为占位测试密钥,正式部署前替换。 */
  58. #ifndef HOP_KEY_BYTE_0
  59. #define HOP_KEY_INIT { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, \
  60. 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }
  61. #endif
  62. /* ==================== 3. 灯光相位同步 ==================== */
  63. /* 丢包兜底:从机 RTC 外推 phase 保持动画连续,直到重新收包或 RF 超时。 */
  64. /* 相位模式值:与中控 MODE_VALUE_* 一致 */
  65. #ifndef RF_PHASE_MODE_CONST
  66. #define RF_PHASE_MODE_CONST 0u
  67. #endif
  68. #ifndef RF_PHASE_MODE_BLINK
  69. #define RF_PHASE_MODE_BLINK 2u
  70. #endif
  71. #ifndef RF_PHASE_MODE_GRADIENT
  72. #define RF_PHASE_MODE_GRADIENT 3u
  73. #endif
  74. #ifndef RF_PHASE_FALLBACK_MS
  75. #define RF_PHASE_FALLBACK_MS 80u /* 丢包超过此毫秒数后才启用相位外推 */
  76. #endif
  77. /* 相位软同步参数 */
  78. #ifndef PHASE_SOFT_ALPHA_N
  79. #define PHASE_SOFT_ALPHA_N 77 /* alpha 分子, α≈0.3 */
  80. #endif
  81. #ifndef PHASE_SOFT_ALPHA_D
  82. #define PHASE_SOFT_ALPHA_D 256 /* alpha 分母 (>>8 免除法) */
  83. #endif
  84. #ifndef PHASE_SOFT_LIMIT
  85. #define PHASE_SOFT_LIMIT 8192 /* 单次校正限幅,防丢包大跳 */
  86. #endif
  87. /* 相位外推启用延迟:距上次收包超过此毫秒数才从每包亮度切换到 RTC 外推 */
  88. #ifndef RF_PHASE_EXTRAPOLATE_DT_MS
  89. #define RF_PHASE_EXTRAPOLATE_DT_MS 100u
  90. #endif
  91. /* 默认 blink_period_units:老固件不发该字节时的兜底值,退化为慢闪速率 */
  92. #ifndef DEFAULT_BLINK_PERIOD_UNITS
  93. #define DEFAULT_BLINK_PERIOD_UNITS 20
  94. #endif
  95. /* ==================== 4. TMOS / 时序任务间隔 ==================== */
  96. /* TMOS 时基: 1 tick = 1/32768 s ≈ 0.0305 ms. 以下为 tick 数。 */
  97. /* PERIODIC 渲染任务重排间隔: 16*1 = 16 ticks ≈ 10ms */
  98. #ifndef RF_PERIODIC_RETICK
  99. #define RF_PERIODIC_RETICK (16*1)
  100. #endif
  101. /* 渲染采样间隔:16ms, <= BURST 半周期 32ms/2 (奈奎斯特) */
  102. #ifndef RENDER_SAMPLE_TICK
  103. #define RENDER_SAMPLE_TICK MS_TO_RTC(16)
  104. #endif
  105. /* RF 超时计数上限: 16ms×3000≈48s 无中控包 → isRFOn=false */
  106. #ifndef RF_TIMEOUT_COUNT
  107. #define RF_TIMEOUT_COUNT 3000
  108. #endif
  109. /* 按键轮询 */
  110. #ifndef KEY_POLL_INIT_TICK
  111. #define KEY_POLL_INIT_TICK (16*50) /* 按键事件后加速轮询 */
  112. #endif
  113. #ifndef KEY_POLL_CONT_TICK
  114. #define KEY_POLL_CONT_TICK (16*10) /* 常规轮询间隔 */
  115. #endif
  116. /* 近距离感应/群控状态检查 (SELF_LIGHT_EVT) */
  117. #ifndef SELF_LIGHT_PERIOD_TICK
  118. #define SELF_LIGHT_PERIOD_TICK 1600 /* ≈50ms */
  119. #endif
  120. /* 节能 (ECO) 任务 */
  121. #ifndef OPENVOICE_SHORT_TICK
  122. #define OPENVOICE_SHORT_TICK (1600*2) /* ≈100ms, 过渡阶段 */
  123. #endif
  124. #ifndef OPENVOICE_NORMAL_TICK
  125. #define OPENVOICE_NORMAL_TICK 1600 /* ≈50ms, 正常阶段 */
  126. #endif
  127. #ifndef OPENVOICE_LONG_TICK
  128. #define OPENVOICE_LONG_TICK (1600*3600) /* ≈180s, 长间隔阶段 */
  129. #endif
  130. /* 系统定时器 */
  131. #ifndef SYSTICK_INTERVAL
  132. #define SYSTICK_INTERVAL 1000
  133. #endif
  134. /* 看门狗周期: FREQ_SYS / WDT_PERIOD_DIV */
  135. #ifndef WDT_PERIOD_DIV
  136. #define WDT_PERIOD_DIV 10 /* 100ms */
  137. #endif
  138. /* ==================== 5. LED PWM / 亮度控制 ==================== */
  139. #ifndef PWM_CLOCK_DIVX
  140. #define PWM_CLOCK_DIVX 2 /* PWM 时钟分频 */
  141. #endif
  142. #ifndef PWM_LED_ECHO_INIT
  143. #define PWM_LED_ECHO_INIT 9500 /* 初始 PWM 回显 (95.00%) */
  144. #endif
  145. #ifndef BRIGHTNESS_SCALE_DEN
  146. #define BRIGHTNESS_SCALE_DEN 10000 /* 亮度缩放分母 */
  147. #endif
  148. #ifndef BRIGHTNESS_MIN_THRESHOLD
  149. #define BRIGHTNESS_MIN_THRESHOLD 10 /* 低于此值直接关断 LED */
  150. #endif
  151. #ifndef BRIGHTNESS_FULL_THRESHOLD
  152. #define BRIGHTNESS_FULL_THRESHOLD 0xf0 /* 高于此值视为满亮 */
  153. #endif
  154. /* LED 各模式最大计数值 */
  155. #ifndef MAX_SLOW
  156. #define MAX_SLOW 8
  157. #endif
  158. #ifndef MAX_FAST
  159. #define MAX_FAST 4
  160. #endif
  161. #ifndef MAX_FLASH
  162. #define MAX_FLASH 2
  163. #endif
  164. #ifndef MAX_GLOW
  165. #define MAX_GLOW 160
  166. #endif
  167. #ifndef MAX_PARIR
  168. #define MAX_PARIR 300
  169. #endif
  170. /* 呼吸灯间隔 (RTC tick) */
  171. #ifndef GLOW_INTERVAL_TICK
  172. #define GLOW_INTERVAL_TICK 100
  173. #endif
  174. /* 闪烁模式分频: flashMode() 每 N 次 tick 执行一次 */
  175. #ifndef FLASH_MODE_DIVIDER
  176. #define FLASH_MODE_DIVIDER 6
  177. #endif
  178. /* ==================== 6. 声音检测 ==================== */
  179. #ifndef SOUND_DEBOUNCE_COUNT
  180. #define SOUND_DEBOUNCE_COUNT 2 /* 去抖动连续采样次数 */
  181. #endif
  182. #ifndef SOUND_ACTIVE_DURATION
  183. #define SOUND_ACTIVE_DURATION 10 /* 检测到声音后 LED 保持亮起的轮次 */
  184. #endif
  185. #ifndef SOUND_CHECK_INTERVAL_MS
  186. #define SOUND_CHECK_INTERVAL_MS 2 /* 声音检测间隔 (ms) */
  187. #endif
  188. /* ==================== 7. 按键 / 电源管理 ==================== */
  189. /* 操作模式 */
  190. #ifndef OPMODE_UNKNOWN
  191. #define OPMODE_UNKNOWN 0
  192. #endif
  193. #ifndef OPMODE_NORMAL
  194. #define OPMODE_NORMAL 1
  195. #endif
  196. #ifndef OPMODE_BLE
  197. #define OPMODE_BLE 7
  198. #endif
  199. #ifndef OPMODE_PAIRE
  200. #define OPMODE_PAIRE 8
  201. #endif
  202. #ifndef OPMODE_SHUTDOWN
  203. #define OPMODE_SHUTDOWN 9
  204. #endif
  205. /* 模式存储 Flash 地址 */
  206. #ifndef MODE_ADDR
  207. #define MODE_ADDR 0x1000
  208. #endif
  209. /* 长按阈值: poll 周期计数, ~3s */
  210. #ifndef KEY_LONG_PRESS_THRESHOLD
  211. #define KEY_LONG_PRESS_THRESHOLD 25
  212. #endif
  213. /* 按键序列超时: RTC 周期, 释放后此时间内再次按下视为连续 */
  214. #ifndef KEY_SEQUENCE_TIMEOUT
  215. #define KEY_SEQUENCE_TIMEOUT 12000
  216. #endif
  217. /* 自动关机空闲计数 */
  218. #ifndef AUTO_SHUTDOWN_COUNT
  219. #define AUTO_SHUTDOWN_COUNT 150
  220. #endif
  221. /* 开机防抖: 上电后此时长内长按不触发关机 */
  222. #ifndef STARTUP_GUARD_MS
  223. #define STARTUP_GUARD_MS 10
  224. #endif
  225. /* ==================== 8. SI24R1 模式/配置值 ==================== */
  226. /* CONFIG 寄存器 (详见 sir24drv.h 位定义) */
  227. #ifndef CONFIG_TX_MODE
  228. #define CONFIG_TX_MODE 0x0e /* TX 模式 CONFIG 值 */
  229. #endif
  230. #ifndef CONFIG_RX_MODE
  231. #define CONFIG_RX_MODE 0x0f /* RX 模式 CONFIG 值 */
  232. #endif
  233. /* RF_SETUP 寄存器初始化值 (250K_1Mbps + LNA_HCURR + PWR_0DB) */
  234. #ifndef RF_SETUP_INIT_VALUE
  235. #define RF_SETUP_INIT_VALUE 0x26
  236. #endif
  237. /* TX 重试超时 */
  238. #ifndef TX_RETRY_TIMEOUT_MS
  239. #define TX_RETRY_TIMEOUT_MS 500
  240. #endif
  241. /* 自动重传 */
  242. #ifndef AUTO_RETRANSMIT_COUNT
  243. #define AUTO_RETRANSMIT_COUNT 15
  244. #endif
  245. #ifndef AUTO_RETRANSMIT_DELAY
  246. #define AUTO_RETRANSMIT_DELAY ARD_4000US
  247. #endif
  248. /* 固定包长 (动态包关闭时) */
  249. #ifndef FIXED_PACKET_LEN
  250. #define FIXED_PACKET_LEN 32
  251. #endif
  252. /* SI24R1 默认模式 (init 后) */
  253. #ifndef SI24_DEFAULT_MODE
  254. #define SI24_DEFAULT_MODE 8
  255. #endif
  256. /* ==================== 9. SI24R1 位bang SPI 引脚 ==================== */
  257. /* SI24R1 使用 GPIO 模拟 SPI 时序 (非硬件 SPI0 外设)。
  258. *
  259. * SI24R1_SPI_USE_PORTB = 0: PA12(CSN) PA13(SCK) PA14(MOSI) PA15(MISO)
  260. * PA11(CE) PA5(IRQ) — 默认,无需 remap
  261. * SI24R1_SPI_USE_PORTB = 1: 开启 SPI0 引脚重映射到 PB12-PB15,
  262. * CE/IRQ 也切到 PB 对应引脚。
  263. *
  264. * 注意: CE 和 IRQ 是普通 GPIO,不随 SPI0 remap 自动切换,需手动指定 PB 引脚。
  265. * 切换端口后需调用 SI24R1_SPI_REMAP_INIT() 执行 GPIOPinRemap。 */
  266. #ifndef SI24R1_SPI_USE_PORTB
  267. #define SI24R1_SPI_USE_PORTB 0 /* 0=Port A (默认), 1=Port B (开 remap) */
  268. #endif
  269. #if SI24R1_SPI_USE_PORTB
  270. /* ---- Port B (开启 GPIOPinRemap ENABLE, RB_PIN_SPI0 后) ---- */
  271. #ifndef SPI_CLK_GPIO_PIN
  272. #define SPI_CLK_GPIO_PIN GPIO_Pin_13
  273. #endif
  274. #define SPI_CLK_PORT B
  275. #ifndef SPI_MISO_GPIO_PIN
  276. #define SPI_MISO_GPIO_PIN GPIO_Pin_15
  277. #endif
  278. #define SPI_MISO_PORT B
  279. #ifndef SPI_MOSI_GPIO_PIN
  280. #define SPI_MOSI_GPIO_PIN GPIO_Pin_14
  281. #endif
  282. #define SPI_MOSI_PORT B
  283. #ifndef SPI_NSS_GPIO_PIN
  284. #define SPI_NSS_GPIO_PIN GPIO_Pin_12
  285. #endif
  286. #define SPI_NSS_PORT B
  287. /* CE 和 IRQ 是普通 GPIO,不在 SPI0 remap 范围内,按需改引脚 */
  288. #ifndef RF24L01_CE_GPIO_PIN
  289. #define RF24L01_CE_GPIO_PIN GPIO_Pin_11
  290. #endif
  291. #define RF24L01_CE_PORT B
  292. #ifndef RF24L01_IRQ_GPIO_PIN
  293. #define RF24L01_IRQ_GPIO_PIN GPIO_Pin_5
  294. #endif
  295. #define RF24L01_IRQ_PORT B
  296. /* 初始化时调用此宏执行硬件重映射 */
  297. #define SI24R1_SPI_REMAP_INIT() GPIOPinRemap(ENABLE, RB_PIN_SPI0)
  298. #else
  299. /* ---- Port A (默认, 无需 remap) ---- */
  300. #ifndef SPI_CLK_GPIO_PIN
  301. #define SPI_CLK_GPIO_PIN GPIO_Pin_13
  302. #endif
  303. #define SPI_CLK_PORT A
  304. #ifndef SPI_MISO_GPIO_PIN
  305. #define SPI_MISO_GPIO_PIN GPIO_Pin_15
  306. #endif
  307. #define SPI_MISO_PORT A
  308. #ifndef SPI_MOSI_GPIO_PIN
  309. #define SPI_MOSI_GPIO_PIN GPIO_Pin_14
  310. #endif
  311. #define SPI_MOSI_PORT A
  312. #ifndef SPI_NSS_GPIO_PIN
  313. #define SPI_NSS_GPIO_PIN GPIO_Pin_12
  314. #endif
  315. #define SPI_NSS_PORT A
  316. #ifndef RF24L01_CE_GPIO_PIN
  317. #define RF24L01_CE_GPIO_PIN GPIO_Pin_11
  318. #endif
  319. #define RF24L01_CE_PORT A
  320. #ifndef RF24L01_IRQ_GPIO_PIN
  321. #define RF24L01_IRQ_GPIO_PIN GPIO_Pin_5
  322. #endif
  323. #define RF24L01_IRQ_PORT A
  324. #define SI24R1_SPI_REMAP_INIT() /* 无需操作 */
  325. #endif
  326. /* ==================== 10. 通用 GPIO 操作宏 ==================== */
  327. /* 将 port + pin 自动派发到 GPIOA_xxx / GPIOB_xxx 函数。
  328. * 与 pindef.h 的 xxx_PORT / xxx_PIN 配合使用。
  329. *
  330. * 用法:
  331. * GPIO_PIN_ModeCfg(SW_KEY_PORT, SW_KEY, GPIO_ModeIN_PU);
  332. * GPIO_PIN_SetBits(SOUND_SW_PORT, SOUND_SW);
  333. * GPIO_PIN_ClearITFlagBit(SW_KEY_PORT, SW_KEY);
  334. *
  335. * 端口用单字母 A/B, pin 用 GPIO_Pin_* 宏。零运行时开销。 */
  336. /* 内层宏: 接收已展开的端口字母 (A/B), 用 ## 拼出 GPIOx_xxx 函数名 */
  337. #define _GPIO_PIN_ModeCfg(port, pin, mode) GPIO##port##_ModeCfg(pin, mode)
  338. #define _GPIO_PIN_SetBits(port, pin) GPIO##port##_SetBits(pin)
  339. #define _GPIO_PIN_ResetBits(port, pin) GPIO##port##_ResetBits(pin)
  340. #define _GPIO_PIN_ITModeCfg(port, pin, mode) GPIO##port##_ITModeCfg(pin, mode)
  341. #define _GPIO_PIN_ClearITFlagBit(port, pin) GPIO##port##_ClearITFlagBit(pin)
  342. #define _GPIO_PIN_ReadPortPin(port, pin) GPIO##port##_ReadPortPin(pin)
  343. /* 外层宏: 先展开 xxx_PORT 为 A/B, 再交给内层粘贴 */
  344. #define GPIO_PIN_ModeCfg(port, pin, mode) _GPIO_PIN_ModeCfg(port, pin, mode)
  345. #define GPIO_PIN_SetBits(port, pin) _GPIO_PIN_SetBits(port, pin)
  346. #define GPIO_PIN_ResetBits(port, pin) _GPIO_PIN_ResetBits(port, pin)
  347. #define GPIO_PIN_ITModeCfg(port, pin, mode) _GPIO_PIN_ITModeCfg(port, pin, mode)
  348. #define GPIO_PIN_ClearITFlagBit(port, pin) _GPIO_PIN_ClearITFlagBit(port, pin)
  349. #define GPIO_PIN_ReadPortPin(port, pin) _GPIO_PIN_ReadPortPin(port, pin)
  350. /* ==================== 11. 协议封包类型标识 ==================== */
  351. /* 无线/蓝牙包首字节 */
  352. #ifndef PKT_TYPE_CENTRAL_CTRL
  353. #define PKT_TYPE_CENTRAL_CTRL 0xaa /* 中控广播包 */
  354. #endif
  355. #ifndef PKT_TYPE_PAIR_DATA
  356. #define PKT_TYPE_PAIR_DATA 0x56 /* 配对/群控数据包 */
  357. #endif
  358. #ifndef PKT_TYPE_FLASH_WRITE
  359. #define PKT_TYPE_FLASH_WRITE 0x57 /* 闪存写入 (BLE) */
  360. #endif
  361. #ifndef PKT_TYPE_RESET
  362. #define PKT_TYPE_RESET 0x58 /* 复位 (BLE) */
  363. #endif
  364. #ifndef PKT_TYPE_BLE_LIGHT_CTRL
  365. #define PKT_TYPE_BLE_LIGHT_CTRL 0x60 /* BLE 灯光控制 */
  366. #endif
  367. #ifndef PKT_TYPE_INFO_RESP
  368. #define PKT_TYPE_INFO_RESP 0x61 /* 信息响应 (BLE) */
  369. #endif
  370. #ifndef PKT_TYPE_OTA
  371. #define PKT_TYPE_OTA 0x62 /* OTA 跳转 (BLE, +magic) */
  372. #endif
  373. #ifndef PKT_TYPE_RELOAD_COLORDB
  374. #define PKT_TYPE_RELOAD_COLORDB 0x63 /* 重载颜色数据库 (BLE) */
  375. #endif
  376. #ifndef PKT_TYPE_SET_COLOR_MODE
  377. #define PKT_TYPE_SET_COLOR_MODE 0x64 /* 设置颜色模式 (BLE) */
  378. #endif
  379. /* ==================== 12. 颜色数据库 ==================== */
  380. #ifndef COLORDB_FILE_MAGIC
  381. #define COLORDB_FILE_MAGIC 0x59 /* 颜色数据库文件头魔数 */
  382. #endif
  383. #ifndef COLORDB_MAX_FRAMES_NOINDEX
  384. #define COLORDB_MAX_FRAMES_NOINDEX 1024 /* 无索引时最大帧数 */
  385. #endif
  386. #ifndef COLORDB_CACHE_SIZE
  387. #define COLORDB_CACHE_SIZE 8 /* 颜色数据库缓存条目数 */
  388. #endif
  389. #ifndef COLORDB_REPEAT_MARKER
  390. #define COLORDB_REPEAT_MARKER 0xEF /* 颜色数据库重复标记 */
  391. #endif
  392. /* ==================== 13. 命令/协议通用 ==================== */
  393. #ifndef CMDLEN
  394. #define CMDLEN 240 /* 单条命令最大长度 */
  395. #endif
  396. /* 命令行表/跟随路径初始容量 */
  397. #ifndef CMD_LIST_INIT_CAPACITY
  398. #define CMD_LIST_INIT_CAPACITY 8
  399. #endif
  400. #ifndef FOLLOW_PATH_INIT_CAPACITY
  401. #define FOLLOW_PATH_INIT_CAPACITY 4
  402. #endif
  403. /* 模式值 (亮度/颜色模式,与 ledx COLORMODE 对齐) */
  404. #ifndef MODE_CONST
  405. #define MODE_CONST 0 /* 常亮 */
  406. #endif
  407. #ifndef MODE_BREATH
  408. #define MODE_BREATH 1 /* 呼吸 */
  409. #endif
  410. #ifndef MODE_BLINK_VAL
  411. #define MODE_BLINK_VAL 2 /* 闪烁 */
  412. #endif
  413. #endif /* PROJECT_CONFIG_H */