-void bk_key_init(void)
+#include "bk_key.h"
+#include "AI_AMP_2_5.h"
+#include "kpc.h"
+// #include "aic_gpio_pin.h"
+// #include "gpio_inc.h"
+// #include "eipu.h"
+#include "aic_osa.h"
+#include <stdio.h>
+#include <stdint.h>
+#include "alog_api.h"
+
+// /******************** 硬件配置 ********************/
+// #define KEY_GPIO_PIN GPIO_1 // 使用TOP GPIO1
+// #define DEBOUNCE_MS 20 // 去抖时间
+// #define LONG_PRESS_MS 1500 // 长按判定时间
+// #define POLLING_INTERVAL 10 // 检测周期(ms)
+
+// /******************** 状态机定义 ********************/
+// typedef enum {
+// KEY_STATE_RELEASED,
+// KEY_STATE_PRESSED,
+// KEY_STATE_DEBOUNCE_DOWN,
+// KEY_STATE_DEBOUNCE_UP
+// } KeyState;
+
+// /******************** 全局变量 ********************/
+// static struct {
+// KeyState state;
+// uint32_t press_start;
+// uint8_t debounce_cnt;
+// uint8_t last_level;
+// } key_ctrl;
+
+// static aos_timer_ptr key_timer;
+
+// /******************** 定时器回调 ********************/
+// static void key_scan_cb(void *arg)
+// {
+// static uint32_t cnt = 0;
+// u32 current = aic_gpio_level_get(KEY_GPIO_PIN);
+
+// if(cnt++ % 10 == 0){ // 每10次打印一次其他信息
+// bk_printf("[System] Free heap: %d\n", aos_get_heap_size());
+// }
+
+// if (current == 0) {
+// bk_printf("key_scan_cb: LOW level\n");
+// } else {
+// bk_printf("key_scan_cb: HIGH level\n");
+// }
+// // bk_printf("key_scan_cb:current=%d",current);
+
+// // switch(key_ctrl.state){
+// // case KEY_STATE_RELEASED:
+// // if(current == 0){ // 低电平表示按下
+// // key_ctrl.state = KEY_STATE_DEBOUNCE_DOWN;
+// // key_ctrl.debounce_cnt = 0;
+// // }
+// // break;
+
+// // case KEY_STATE_DEBOUNCE_DOWN:
+// // if(current == 0){
+// // if(++key_ctrl.debounce_cnt >= (DEBOUNCE_MS/POLLING_INTERVAL)){
+// // key_ctrl.state = KEY_STATE_PRESSED;
+// // key_ctrl.press_start = aos_now_ms();
+// // AI_AMP_MSG_put(NULL, 0, AI_KEY_PRESS);
+// // }
+// // }else{
+// // key_ctrl.state = KEY_STATE_RELEASED;
+// // }
+// // break;
+
+// // case KEY_STATE_PRESSED:
+// // if(current != 0){ // 高电平表示释放
+// // key_ctrl.state = KEY_STATE_DEBOUNCE_UP;
+// // key_ctrl.debounce_cnt = 0;
+// // } else if((aos_now_ms() - key_ctrl.press_start) >= LONG_PRESS_MS){
+// // AI_AMP_MSG_put(NULL, 0, AI_KEY_LONG_PRESS);
+// // key_ctrl.press_start = aos_now_ms(); // 重置计时
+// // }
+// // break;
+
+// // case KEY_STATE_DEBOUNCE_UP:
+// // if(current != 0){
+// // if(++key_ctrl.debounce_cnt >= (DEBOUNCE_MS/POLLING_INTERVAL)){
+// // key_ctrl.state = KEY_STATE_RELEASED;
+// // AI_AMP_MSG_put(NULL, 0, AI_KEY_RELEASE);
+// // }
+// // }else{
+// // key_ctrl.state = KEY_STATE_PRESSED;
+// // }
+// // break;
+// // }
+// }
+
+// /******************** 初始化函数 ********************/
+// void bk_key_init(void)
+// {
+// // 配置GPIO为输入模式(无中断回调)
+// aic_gpio_input(KEY_GPIO_PIN,
+// GPIO_TRIGGER_LVL_LOW, // 低电平触发
+// NULL, // 不使用中断回调
+// NULL);
+
+// // 初始化状态机
+// key_ctrl.state = KEY_STATE_RELEASED;
+// key_ctrl.press_start = 0;
+// key_ctrl.debounce_cnt = 0;
+// key_ctrl.last_level = aic_gpio_level_get(KEY_GPIO_PIN);
+
+// // 创建周期定时器
+// key_timer = aos_create_timer(
+// "key_detect",
+// key_scan_cb
+// NULL,
+// 100,
+// AOS_AUTO_ACTIVATE, AOS_BE_PERIOD
+// );
+// }
+
+// /******************** 反初始化函数 ********************/
+// void bk_key_deinit(void)
+// {
+// if(key_timer){
+// aos_delete_timer(key_timer);
+// key_timer = NULL;
+// }
+// aic_gpio_output(KEY_GPIO_PIN, GPIO_OUTPUT_LVL_LOW); // 恢复默认输出
+// }
+
+
+#define KEY_GPIO_PIN_ID GPIO_1
+#define LOG_MODULE AMOD_KPC
+
+
+static srv_func_callback g_kpc_callback = NULL;
+static int32_t g_kpc_handle = 0;
+
+
+
+
+// int32_t aic_srv_kpc_register(char *client_name, srv_func_callback _srv_callback)
+// {
+// g_kpc_callback = _srv_callback;
+// g_kpc_handle++;
+// aicx_info(0x0202e8, "d", "g_kpc_handle = %d \n", g_kpc_handle);
+// return g_kpc_handle;
+// }
+
+static int32_t bk_kpc_callback(void *p_param, uint32_t size)
{
+ kpc_key_array_t *key_arr = (kpc_key_array_t *)p_param;
+ if (key_arr == NULL) {
+ alog_error("kpc_callback: p_param is NULL\n"); // 使用 alog_error 输出错误信息
+ return -1;
+ }
+
+ for (int i = 0; i < 5; i++) {
+ switch (key_arr->key[i].key_event) {
+ case KPC_KEY_EVENT_PRESS:
+ // bk_printf("[%d]AI_key_press",key_arr->key[i].key_value);
+
+ if (key_arr->key[i].key_value == 0) {
+ bk_printf("[0]AI_key_press");
+ AI_AMP_MSG_put(0, 0, VC_START);
+ }
+ break;
+ case KPC_KEY_EVENT_RELEASE:
+ if (key_arr->key[i].key_value == 1) {
+ bk_printf("[1]AI_key_release");
+ }
+
+
+ // bk_printf("[%d]AI_key_release",key_arr->key[i].key_value);
+
+
+ break;
+ case KPC_KEY_EVENT_LONGKEY:
+ if (key_arr->key[i].key_value == 4) {
+ bk_printf("[4]pwk_key_press");
+ AI_AMP_MSG_put(0, 0, VC_CLOSE);
+ AI_AMP_MSG_put(0,0,PWK_KEY_RELEASE);
+ }
+ // bk_printf("[%d]AI_key_long_press",key_arr->key[i].key_value);
+
+
+ break;
+
+ case KPC_KEY_EVENT_LONGKEY_RELEASE:
+ if (key_arr->key[i].key_value == 2) {
+ bk_printf("[2]AI_key_long_press");
+ }
+
+
+ // bk_printf("[%d]AI_key_long_press",key_arr->key[i].key_value);
+
+ break;
+ default:
+ // bk_printf("power key");
+ break;
+ }
+ }
+ bk_printf("\n");
+
+ return 0;
+
}
+
+void bk_key_init(void)
+{
+ // bk_printf("开始初始化按键模块\n"); 不注释掉就卡住没日志
+
+ int32_t handle = aic_srv_kpc_register("app", bk_kpc_callback);
+ if (handle < 0) {
+ alog_error("Failed to register KPC callback\n"); // 使用 alog_error 输出错误信息
+ } else {
+ aicx_info(0x0202e8, "d", "g_kpc_handle = %d \n", handle); //
+ }
+
+}
+
+// 按键处理函数
+void bk_key_process(void) {
+ kpc_key_array_t key_arr;
+ int valid_key_num = kpc_read_key(&key_arr);
+ if (valid_key_num > 0) {
+ // 调用回调函数处理按键事件
+ bk_kpc_callback(&key_arr, sizeof(key_arr));
+ }
+}
\ No newline at end of file