KT25-1015_AC695x_SDK310/apps/kaotings/kt.c

174 lines
5.4 KiB
C
Raw Permalink Normal View History

2026-04-20 06:50:04 +00:00
#include "kt.h"
#include "key_event_deal.h"
#include "asm/mcpwm.h"
2026-04-24 08:03:25 +00:00
#include "system/timer.h"
2026-04-20 06:50:04 +00:00
#include "kt_fan_ac.h"
#include "kt_led7.h"
2026-04-24 08:03:25 +00:00
#include "kt_light_led.h"
2026-05-07 14:11:18 +00:00
#include "kt_battery.h"
2026-04-24 08:03:25 +00:00
#define KT_VBUS_DEBOUNCE_CNT 3
#define KT_VBUS_POLL_MS 200
2026-04-20 06:50:04 +00:00
2026-05-07 14:11:18 +00:00
/* 在 cpu/br23/setup.c 里早期已经调用过一次,这里在所有 PWM/IO 映射完成后再调一次,
* IO_PORT_DP MCPWM output_channel */
extern void debug_uart_init(const struct uart_platform_data *data);
2026-04-20 06:50:04 +00:00
void kt_boot_init(void)
{
printf("kt_boot_init\n");
// 初始化GPIO PA Mute
gpio_set_pull_down(KT_CFG_PA_MUTE_PIN, 0);
gpio_set_pull_up(KT_CFG_PA_MUTE_PIN, 0);
gpio_set_direction(KT_CFG_PA_MUTE_PIN, 0);
PA_MUTE();
2026-05-07 14:11:18 +00:00
// 初始化GPIO Vbat Detect
gpio_set_pull_down(KT_CFG_VBAT_DET_PIN, 0);
gpio_set_pull_up(KT_CFG_VBAT_DET_PIN, 0);
gpio_set_direction(KT_CFG_VBAT_DET_PIN, 1);
gpio_set_die(KT_CFG_VBAT_DET_PIN, 0);
adc_add_sample_ch(AD_CH_PA12);
2026-04-20 06:50:04 +00:00
// 初始化GPIO USB Plug Detect
gpio_set_pull_down(KT_CFG_USB_PLUG_DET_PIN, 0);
gpio_set_pull_up(KT_CFG_USB_PLUG_DET_PIN, 0);
gpio_set_die(KT_CFG_USB_PLUG_DET_PIN, 1);
gpio_set_direction(KT_CFG_USB_PLUG_DET_PIN, 1);
// 初始化GPIO Vibration Switch
gpio_set_pull_down(KT_CFG_VIBRATION_SW_PIN, 0);
gpio_set_pull_up(KT_CFG_VIBRATION_SW_PIN, 0);
gpio_set_die(KT_CFG_VIBRATION_SW_PIN, 1);
gpio_set_direction(KT_CFG_VIBRATION_SW_PIN, 1);
// 初始化GPIO Front Fan
gpio_set_pull_down(KT_CFG_FRONT_FAN_PIN, 0);
gpio_set_pull_up(KT_CFG_FRONT_FAN_PIN, 0);
gpio_set_direction(KT_CFG_FRONT_FAN_PIN, 0);
gpio_set_output_value(KT_CFG_FRONT_FAN_PIN, 0);
// 初始化GPIO Rear Fan
gpio_set_pull_down(KT_CFG_REAR_FAN_PIN, 0);
gpio_set_pull_up(KT_CFG_REAR_FAN_PIN, 0);
gpio_set_direction(KT_CFG_REAR_FAN_PIN, 0);
gpio_set_output_value(KT_CFG_REAR_FAN_PIN, 0);
// 初始化GPIO LR Fan
gpio_set_pull_down(KT_CFG_LR_FAN_PIN, 0);
gpio_set_pull_up(KT_CFG_LR_FAN_PIN, 0);
gpio_set_die(KT_CFG_LR_FAN_PIN, 1);
gpio_set_direction(KT_CFG_LR_FAN_PIN, 0);
gpio_set_output_value(KT_CFG_LR_FAN_PIN, 0);
2026-05-20 20:03:53 +00:00
// 初始化GPIO Air Cond
gpio_set_pull_down(KT_CFG_AIR_COND_PIN, 0);
gpio_set_pull_up(KT_CFG_AIR_COND_PIN, 0);
gpio_set_die(KT_CFG_AIR_COND_PIN, 1);
gpio_set_direction(KT_CFG_AIR_COND_PIN, 0);
gpio_set_output_value(KT_CFG_AIR_COND_PIN, 0);
2026-04-20 06:50:04 +00:00
}
2026-04-24 08:03:25 +00:00
static u16 vbus_timer = 0;
static u8 vbus_high_cnt = 0;
static u8 vbus_low_cnt = 0;
static u8 vbus_inserted = 0;
static void vbus_detect(void *priv)
{
(void)priv;
if (gpio_read(KT_CFG_USB_PLUG_DET_PIN)) {
vbus_low_cnt = 0;
if (!vbus_inserted) {
vbus_high_cnt++;
if (vbus_high_cnt >= KT_VBUS_DEBOUNCE_CNT) {
vbus_inserted = 1;
2026-05-07 14:11:18 +00:00
kt_set_charging(1);
2026-04-24 08:03:25 +00:00
kt_led7_usb_charge_set(1);
}
}
} else {
vbus_high_cnt = 0;
if (vbus_inserted) {
vbus_low_cnt++;
if (vbus_low_cnt >= KT_VBUS_DEBOUNCE_CNT) {
vbus_inserted = 0;
2026-05-07 14:11:18 +00:00
kt_set_charging(0);
2026-04-24 08:03:25 +00:00
kt_led7_usb_charge_set(0);
}
} else {
vbus_low_cnt = 0;
}
}
}
void start_chk_det_start(void)
{
if (vbus_timer) {
sys_timer_del(vbus_timer);
vbus_timer = 0;
}
2026-05-07 14:11:18 +00:00
/* 启动周期检测前先做一次"零去抖"判断,避免开机时若 USB 已插入,
* 200ms × KT_VBUS_DEBOUNCE_CNT ,
* kt_battery % */
if (gpio_read(KT_CFG_USB_PLUG_DET_PIN)) {
vbus_inserted = 1;
vbus_high_cnt = KT_VBUS_DEBOUNCE_CNT;
vbus_low_cnt = 0;
kt_set_charging(1);
kt_led7_usb_charge_set(1);
}
2026-04-24 08:03:25 +00:00
vbus_timer = sys_timer_add(NULL, vbus_detect, KT_VBUS_POLL_MS);
}
2026-04-20 06:50:04 +00:00
void kt_init(void)
{
printf("kt_init\n");
2026-04-24 08:03:25 +00:00
kt_light_led_init();
kt_fan_ac_init();
2026-04-20 06:50:04 +00:00
kt_led7_init();
2026-05-07 14:11:18 +00:00
/* kt_battery_init 必须在 start_chk_det_start 之前:
* vbus_detect kt_set_charging(1),
* ,, */
kt_battery_init();
2026-04-24 08:03:25 +00:00
start_chk_det_start();
2026-05-07 14:11:18 +00:00
/* 所有 PWM/IO 映射完成后,重新初始化调试串口,
* TCFG_UART0_TX_PORT(IO_PORT_DP) MCPWM */
debug_uart_init(NULL);
printf("kt_init: debug uart re-init done\n");
2026-04-20 06:50:04 +00:00
}
u8 kt_key_event_filter_after(int key_event, int key_value)
{
u8 ret = true;
switch (key_event)
{
case KEY_KT_FRONT_FAN:
printf("KEY_KT_FRONT_FAN = %d\n", key_value);
kt_fan_level_change(fan_type_front);
break;
case KEY_KT_REAR_FAN:
printf("KEY_KT_REAR_FAN = %d\n", key_value);
kt_fan_level_change(fan_type_rear);
break;
case KEY_KT_LR_FAN:
printf("KEY_KT_LR_FAN = %d\n", key_value);
kt_fan_level_change(fan_type_lr);
break;
2026-04-24 08:03:25 +00:00
case KEY_KT_LED:
printf("KEY_KT_LED = %d\n", key_value);
kt_light_led_level_change();
break;
2026-04-20 06:50:04 +00:00
case KEY_KT_AIR_COND:
printf("KEY_KT_AIR_COND = %d\n", key_value);
kt_fan_level_change(fan_type_ac);
break;
default:
printf("KEY_KT_DEFAULT = %d\n", key_value);
ret = false;
break;
}
return ret;
// return false;
}