KT25-1015_AC695x_SDK310/apps/kaotings/kt_led7.h
2026-04-20 14:50:04 +08:00

102 lines
4.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __KT_LED7_H__
#define __KT_LED7_H__
#include "system/includes.h"
#include "kt.h"
/*
* =============================================================================
* kt_led7 架构说明(与产品功能条目 L7L14 对应)
* =============================================================================
*
* 硬件层
* - 3 位共阴/动态扫描 + 2 个小数点6 根位选/公共线 + 段线,由 6 个 GPIO 分时拉低选通
* - 段逻辑与 PCB 走线存在交叉,逻辑段 AG/DP 经映射后写入显示缓冲(见 kt_led7.c 注释)
*
* 时基层
* - 扫描回调 kt_led7_scan 由 usr_timersys_s_hi_timer_add约 2ms触发6 相轮转完成一轮刷新
*
* 数据层
* - 显示缓冲:每位 1 字节段码 + dp1/dp2业务侧只写“逻辑段码”扫描里做线序映射
*
* 策略层kt_led7_show_* 入参)
* - show_time显示保持时间urgent高优先级插入闪烁/抢占规则见下表 L13
*
* -----------------------------------------------------------------------------
* 功能条目 L7L14与 kt.h 中风扇/空调/灯光/电量等业务一致)
* -----------------------------------------------------------------------------
* L7 动态扫描显示:分时选通,避免常亮串扰(扫描状态机在 kt_led7_scan
* L8 字符集:数字 09 + 字母(用于前缀 L / F / C 及 AC 等缩写)
* L9 前风扇状态可视化与「L-0L-6」一致对应 kt_fan_ac 前风扇档位 fan_level_06
* L10 后风扇状态可视化与「F-0F-6」一致对应后风扇档位
* L11 左右风扇状态可视化与「C-0C-6」一致对应左右风扇档位
* L12 空调状态可视化与「AC0 / AC1 / AC2」一致对应断续/连续/关闭
* L13 显示策略:紧急插入(urgent)、可编程显示时长(show_time)、闪烁(dp/全闪)、
* 高优先级打断后低优先级计时暂停不清零(见本文件历史注释)
* L14 联动USB 插拔电量提示、LED 灯光模式等仅语音/灯控时数码管可关闭或让路给 L13 高优先级条
*
* 调用关系(建议)
* - 档位变更kt_fan_level_change() → 业务调用 kt_led7_show_string / kt_led7_show_number 更新缓冲
* - 初始化kt_boot_init / kt_init 路径中调用 kt_led7_init() 注册扫描定时器
* =============================================================================
*/
/**
* 脚位:脚 N = led7_pin[N-1],对应 IO_PORTC_0(N-1)脚1=PC0 … 脚6=PC5
* 「XHYL」= 该扫描相内脚 X 高、脚 Y 低(与 kt_led7_scan 中 PINx_L/H 一致)。
*
* 下表为实测「物理段AG」与缓冲区里的 LED_AG **不是**一一同名,同一物理段可能落在
* b[0..2]&LED_x 的不同 x 上。B2 全段与代码分支对应已核对并写在 kt_led7.c kt_led7_scan()
* B0/B1 各段与每个 if(b[0|1|2]&LED_*) 的逐项注释也在该函数内(与上表同一编号)。
*
* B2b[2],百位)实测:
* A:2H3L B:2H4L C:5H2L D:2H6L E:2H5L F:3H2L G:4H2L DP:2H1L
* B1b[1],十位)实测:
* A:5H4L B:3H5L C:4H5L D:3H4L E:6H3L F:4H3L G:5H3L DP:3H1L
* B0b[0],个位)实测:
* A:1H6L B:3H6L C:5H6L D:6H4L E:4H6L F:6H5L G:1H5L DP:NONE
*/
/**
* 动态数码管扫描模块(实现见上 L7L14
* 用于显示数字和字符
* 支持紧急插入显示(高优先级显示)
* 支持闪烁显示
* 支持各种显示时间设置
* 高优先级显示打断低优先级显示后,低优先级时间不清零,继续计数
*/
#define LED_A BIT(0)
#define LED_B BIT(1)
#define LED_C BIT(2)
#define LED_D BIT(3)
#define LED_E BIT(4)
#define LED_F BIT(5)
#define LED_G BIT(6)
#define LED_H BIT(7)
struct led7_pin6 {
u8 pin[6];
};
void kt_led7_init(void);
/** 正常电量显示:从当前时刻起再显示 60s与临时显示结束后的行为一致 */
void kt_led7_battery_show_restart(void);
/**
* 临时显示高优先级打断当前电量或上一次临时显示sec 为持续秒数0 按 1 秒处理。
*/
void kt_led7_temp_show_number(u16 number, u32 sec);
void kt_led7_temp_show_string(const u8 *str, u32 sec);
/**
* 临时显示show_time 为持续秒数urgent 预留(当前与 temp 等同,均抢占)。
*/
void kt_led7_show_number(u32 show_time, u8 urgent, u16 number, u8 dp1, u8 dp2);
void kt_led7_show_string(u32 show_time, u8 urgent, const u8 *str, u8 dp1, u8 dp2);
/** 音量提示:三位数码管显示 U + 两位数字(如 U15表示「U-音量」,持续 show_time 秒 */
void kt_led7_show_u_volume(u8 vol_level, u32 show_time);
#endif