support factory restore key
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
#include "debug_print.h"
|
#include "debug_print.h"
|
||||||
#include "roleswitchflag.h"
|
#include "roleswitchflag.h"
|
||||||
#include "xua_hid_report.h"
|
#include "xua_hid_report.h"
|
||||||
|
#include "lfs_io.h"
|
||||||
|
|
||||||
#if defined (CODEC_AIC3204)
|
#if defined (CODEC_AIC3204)
|
||||||
#include "eq_flash_storage.h"
|
#include "eq_flash_storage.h"
|
||||||
@@ -266,6 +267,9 @@ in port p_button_ai71_onoff = PORT_BUTTON_AI71_ONOFF; // 1M
|
|||||||
|
|
||||||
#define KEY_POLLING_INTERVAL 10000000L // 100ms polling interval
|
#define KEY_POLLING_INTERVAL 10000000L // 100ms polling interval
|
||||||
#define TIMER_PERIOD (100000)
|
#define TIMER_PERIOD (100000)
|
||||||
|
#define FACTORY_RESET_HOLD_TICKS 3000 // 3000 × 1ms = 3秒
|
||||||
|
#define FACTORY_RESET_BLINK_TICKS 400 // 每相400ms
|
||||||
|
#define BTN_COMBO_DELAY_TICKS 40 // 单键去抖/组合检测窗口(50ms)
|
||||||
|
|
||||||
unsigned g_windows_detect_done = 0;
|
unsigned g_windows_detect_done = 0;
|
||||||
|
|
||||||
@@ -388,6 +392,16 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
unsigned push_button_mic_mute_state_old = 1; // Active low
|
unsigned push_button_mic_mute_state_old = 1; // Active low
|
||||||
unsigned push_button_hp_mute_state_old = 1; // Active low
|
unsigned push_button_hp_mute_state_old = 1; // Active low
|
||||||
|
|
||||||
|
// 出厂恢复长按状态机:音乐+游戏同时长按3秒
|
||||||
|
unsigned factory_reset_hold_count = 0; // 两键同时按住计数(×1ms)
|
||||||
|
unsigned factory_reset_blink_state = 0; // 0=空闲,1-6=闪烁相位
|
||||||
|
unsigned factory_reset_blink_tick = 0; // 当前相位内计数
|
||||||
|
// 组合键去抖:单键动作延迟 BTN_COMBO_DELAY_TICKS 后触发,期间若另一键也按下则切换为组合模式
|
||||||
|
unsigned btn_music_hold_ticks = 0; // music键连续按住计数
|
||||||
|
unsigned btn_game_hold_ticks = 0; // game键连续按住计数
|
||||||
|
unsigned btn_combo_active = 0; // 1=处于组合键模式(单键动作已抑制)
|
||||||
|
unsigned fr_inhibit = 0; // 1=出厂恢复重启后抑制状态,必须松键后才允许重新触发
|
||||||
|
|
||||||
int current_mic_led_pos = 0;
|
int current_mic_led_pos = 0;
|
||||||
|
|
||||||
htr3236_t htr3236_dev;
|
htr3236_t htr3236_dev;
|
||||||
@@ -427,22 +441,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
#if defined(UAC1_MODE)
|
#if defined(UAC1_MODE)
|
||||||
delay_milliseconds(300);
|
delay_milliseconds(300);
|
||||||
GET_SHARED_GLOBAL(host_os, g_host_os);
|
GET_SHARED_GLOBAL(host_os, g_host_os);
|
||||||
if (saved_mode == 255) {
|
|
||||||
#if defined(F5_MUSIC_UAC1)
|
|
||||||
saved_mode = 1; // f5: default music mode
|
|
||||||
#else
|
|
||||||
saved_mode = 0; // f6/f7: default off
|
|
||||||
#endif
|
|
||||||
save_value(path, saved_mode);
|
|
||||||
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (saved_mode == 255) {
|
|
||||||
// 出厂默认:AI7.1开启(mode=3)
|
|
||||||
saved_mode = 3;
|
|
||||||
save_value(path, saved_mode);
|
|
||||||
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("host_os: %d\n", host_os);
|
printf("host_os: %d\n", host_os);
|
||||||
@@ -467,6 +465,25 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
|
|
||||||
g_windows_detect_done = 1;
|
g_windows_detect_done = 1;
|
||||||
|
|
||||||
|
#if defined(UAC1_MODE)
|
||||||
|
if (saved_mode == 255) {
|
||||||
|
#if defined(F5_MUSIC_UAC1)
|
||||||
|
saved_mode = 1; // f5: default music mode
|
||||||
|
#else
|
||||||
|
saved_mode = 0; // f6/f7: default off
|
||||||
|
#endif
|
||||||
|
save_value(path, saved_mode);
|
||||||
|
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (saved_mode == 255) {
|
||||||
|
// 出厂默认:AI7.1开启(mode=3)
|
||||||
|
saved_mode = 3;
|
||||||
|
save_value(path, saved_mode);
|
||||||
|
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
active_mode = (saved_mode <= 3) ? saved_mode : 0;
|
active_mode = (saved_mode <= 3) ? saved_mode : 0;
|
||||||
{
|
{
|
||||||
@@ -642,13 +659,22 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
last_ctrl_keys ^= KEY_MUTE;
|
last_ctrl_keys ^= KEY_MUTE;
|
||||||
|
|
||||||
|
|
||||||
|
// 启动时若两键同时按住,设置抑制标志,必须松开后才允许触发出厂恢复
|
||||||
|
{
|
||||||
|
unsigned music_init, game_init;
|
||||||
|
p_button_music_mode :> music_init;
|
||||||
|
p_button_game_mode :> game_init;
|
||||||
|
if (music_init == 0 && game_init == 0) {
|
||||||
|
fr_inhibit = 1;
|
||||||
|
btn_combo_active = 1;
|
||||||
|
debug_printf("Boot: both keys held, FR inhibited until release\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL);
|
//hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL);
|
||||||
tmr :> time; /* Input the time */
|
tmr :> time; /* Input the time */
|
||||||
time += TIMER_PERIOD; /* Increment the time */
|
time += TIMER_PERIOD; /* Increment the time */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
select
|
select
|
||||||
{
|
{
|
||||||
@@ -896,21 +922,108 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
unsigned mode_btn_change = 0;
|
unsigned mode_btn_change = 0;
|
||||||
unsigned need_reboot = 0;
|
unsigned need_reboot = 0;
|
||||||
|
|
||||||
if (button_music_mode == 0) {
|
// --- Music + Game 按键:组合检测 + 去抖 ---
|
||||||
if (push_button_music_mode_state_old == 1) {
|
// 两键同时按住3秒 → 出厂恢复;单键需持续 BTN_COMBO_DELAY_TICKS 后生效
|
||||||
|
// (50ms 窗口内若另一键也按下则进入组合模式,单键动作取消)
|
||||||
|
{
|
||||||
|
int music_is_down = (button_music_mode == 0);
|
||||||
|
int game_is_down = (button_game_mode == 0);
|
||||||
|
int factory_combo_is_down = ( music_is_down && game_is_down);
|
||||||
|
|
||||||
|
// 更新各键连续按住计数(断开则清零,用于去抖和窗口判断)
|
||||||
|
if (music_is_down && !factory_combo_is_down)
|
||||||
|
{
|
||||||
|
if (btn_music_hold_ticks < 0xFFFFu) btn_music_hold_ticks++;
|
||||||
|
debug_printf("btn_music_hold_ticks=%d\n", btn_music_hold_ticks);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
btn_music_hold_ticks = 0;
|
||||||
|
}
|
||||||
|
if (game_is_down && !factory_combo_is_down)
|
||||||
|
{
|
||||||
|
if (btn_game_hold_ticks < 0xFFFFu)
|
||||||
|
{
|
||||||
|
btn_game_hold_ticks++;
|
||||||
|
}
|
||||||
|
debug_printf("btn_game_hold_ticks=%d\n", btn_game_hold_ticks);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
btn_game_hold_ticks = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 场景1:两键同时按住(参照 fosi_ds1 else-if 结构)
|
||||||
|
if (factory_combo_is_down) {
|
||||||
|
btn_combo_active = 1; // 粘性锁定
|
||||||
|
// fr_inhibit=1 时(出厂恢复重启后):不计时,必须松键后重新按下才触发
|
||||||
|
if (factory_reset_blink_state == 0 && !fr_inhibit) {
|
||||||
|
factory_reset_hold_count++;
|
||||||
|
if (factory_reset_hold_count >= FACTORY_RESET_HOLD_TICKS) {
|
||||||
|
factory_reset_hold_count = 0;
|
||||||
|
factory_reset_blink_state = 1;
|
||||||
|
factory_reset_blink_tick = 0;
|
||||||
|
// 清除所有Flash设置并重启
|
||||||
|
debug_printf("Factory reset: clearing flash "
|
||||||
|
"and rebooting\n");
|
||||||
|
unsafe {
|
||||||
|
lfs_remove_file("game_mode");
|
||||||
|
lfs_remove_file("mic_vol");
|
||||||
|
lfs_remove_file("dac_vol");
|
||||||
|
lfs_remove_file("footstep");
|
||||||
|
}
|
||||||
|
|
||||||
|
led_on(&led_ctx, LED_MUSIC);
|
||||||
|
led_on(&led_ctx, LED_ANC);
|
||||||
|
led_on(&led_ctx, LED_FOOTSTEP_MODE);
|
||||||
|
led_on(&led_ctx, LED_AI7_1);
|
||||||
|
led_on(&led_ctx, LED_GAME_MODE);
|
||||||
|
led_update_all(&led_ctx);
|
||||||
|
debug_printf("Factory reset: 3s hold detected, starting blink\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 场景2:仅 Music 按住
|
||||||
|
else if (music_is_down) {
|
||||||
|
factory_reset_hold_count = 0;
|
||||||
|
if (!btn_combo_active) {
|
||||||
|
if (btn_music_hold_ticks == BTN_COMBO_DELAY_TICKS) {
|
||||||
|
debug_printf("========= Music button pressed for %d ticks\n", BTN_COMBO_DELAY_TICKS);
|
||||||
#if (F3_F4_FPS_UAC2 == 1)
|
#if (F3_F4_FPS_UAC2 == 1)
|
||||||
// FPS firmware: switching to music needs different USB config
|
active_mode = 1;
|
||||||
active_mode = 1;
|
need_reboot = 1;
|
||||||
need_reboot = 1;
|
SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2);
|
||||||
SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2);
|
|
||||||
#else
|
#else
|
||||||
// Music-only firmware: toggle music LED locally
|
active_mode = (active_mode == 1) ? 0 : 1;
|
||||||
active_mode = (active_mode == 1) ? 0 : 1;
|
mode_btn_change = 1;
|
||||||
mode_btn_change = 1;
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 场景3:仅 Game 按住
|
||||||
|
else if (game_is_down) {
|
||||||
|
factory_reset_hold_count = 0;
|
||||||
|
if (!btn_combo_active) {
|
||||||
|
if (btn_game_hold_ticks == BTN_COMBO_DELAY_TICKS) {
|
||||||
|
debug_printf("========= Game button pressed for %d ticks\n", BTN_COMBO_DELAY_TICKS);
|
||||||
|
#if F1_MUSIC_UAC2 == 1
|
||||||
|
active_mode = 2;
|
||||||
|
need_reboot = 1;
|
||||||
|
SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2);
|
||||||
|
#else
|
||||||
|
active_mode = (active_mode == 2) ? 0 : 2;
|
||||||
|
mode_btn_change = 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 场景4:两键全松开 → 解除组合锁定及抑制标志
|
||||||
|
else {
|
||||||
|
factory_reset_hold_count = 0;
|
||||||
|
btn_combo_active = 0;
|
||||||
|
fr_inhibit = 0; // 松键后允许下次同时按下重新触发出厂恢复
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
push_button_music_mode_state_old = button_music_mode;
|
|
||||||
|
|
||||||
if (button_ai71_onoff == 0) {
|
if (button_ai71_onoff == 0) {
|
||||||
if (push_button_ai71_onoff_state_old == 1) {
|
if (push_button_ai71_onoff_state_old == 1) {
|
||||||
@@ -929,22 +1042,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
}
|
}
|
||||||
push_button_ai71_onoff_state_old = button_ai71_onoff;
|
push_button_ai71_onoff_state_old = button_ai71_onoff;
|
||||||
|
|
||||||
if (button_game_mode == 0) {
|
|
||||||
if (push_button_game_mode_state_old == 1) {
|
|
||||||
#if F1_MUSIC_UAC2 == 1
|
|
||||||
// Music-only firmware: game needs FPS firmware
|
|
||||||
active_mode = 2;
|
|
||||||
need_reboot = 1;
|
|
||||||
SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2);
|
|
||||||
#else
|
|
||||||
// FPS firmware: switch algorithm locally (toggle off or activate)
|
|
||||||
active_mode = (active_mode == 2) ? 0 : 2;
|
|
||||||
mode_btn_change = 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
push_button_game_mode_state_old = button_game_mode;
|
|
||||||
|
|
||||||
// 处理HID SET_SOUND_EFFECT_MODE (0xA4) 请求,等同于按键效果
|
// 处理HID SET_SOUND_EFFECT_MODE (0xA4) 请求,等同于按键效果
|
||||||
if (!mode_btn_change && !need_reboot) {
|
if (!mode_btn_change && !need_reboot) {
|
||||||
unsigned hid_req_mode;
|
unsigned hid_req_mode;
|
||||||
@@ -987,7 +1084,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
if (need_reboot) {
|
if (need_reboot) {
|
||||||
// Reboot: F5 will re-detect OS and route to correct firmware
|
// Reboot: F5 will re-detect OS and route to correct firmware
|
||||||
debug_printf("Mode %d requires firmware switch, rebooting\n", active_mode);
|
debug_printf("Mode %d requires firmware switch, rebooting\n", active_mode);
|
||||||
delay_milliseconds(20);
|
delay_milliseconds(200);
|
||||||
device_reboot();
|
device_reboot();
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
@@ -1016,6 +1113,69 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 出厂恢复闪烁状态机:5个按键LED闪3次后清除Flash并重启
|
||||||
|
if (factory_reset_blink_state > 0) {
|
||||||
|
factory_reset_blink_tick++;
|
||||||
|
if (factory_reset_blink_tick >= FACTORY_RESET_BLINK_TICKS) {
|
||||||
|
factory_reset_blink_tick = 0;
|
||||||
|
factory_reset_blink_state++;
|
||||||
|
if (factory_reset_blink_state > 6) {
|
||||||
|
#if 1
|
||||||
|
// 3次闪烁完成:恢复原始LED显示
|
||||||
|
factory_reset_blink_state = 0;
|
||||||
|
led_off(&led_ctx, LED_MUSIC);
|
||||||
|
led_off(&led_ctx, LED_ANC);
|
||||||
|
led_off(&led_ctx, LED_FOOTSTEP_MODE);
|
||||||
|
led_off(&led_ctx, LED_AI7_1);
|
||||||
|
led_off(&led_ctx, LED_GAME_MODE);
|
||||||
|
switch (active_mode) {
|
||||||
|
case 1: led_on(&led_ctx, LED_MUSIC); break;
|
||||||
|
case 2: led_on(&led_ctx, LED_GAME_MODE); break;
|
||||||
|
case 3: led_on(&led_ctx, LED_AI7_1); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (flag_footsteps_enhancement == 1) led_on(&led_ctx, LED_FOOTSTEP_MODE);
|
||||||
|
else if (flag_footsteps_enhancement == 2) led_set_brightness(&led_ctx, LED_FOOTSTEP_MODE, 128);
|
||||||
|
if (flag_aidenoise_onoff) led_on(&led_ctx, LED_ANC);
|
||||||
|
led_update_all(&led_ctx);
|
||||||
|
// 等待松键,防止重启后再次触发出厂恢复循环
|
||||||
|
{
|
||||||
|
unsigned mw, gw;
|
||||||
|
do {
|
||||||
|
delay_milliseconds(10);
|
||||||
|
p_button_music_mode :> mw;
|
||||||
|
p_button_game_mode :> gw;
|
||||||
|
} while (mw == 0 || gw == 0);
|
||||||
|
delay_milliseconds(100);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// 出厂恢复默认AI7.1模式(mode=3),需要F3/F4固件
|
||||||
|
SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2);
|
||||||
|
delay_milliseconds(20);
|
||||||
|
device_reboot();
|
||||||
|
while (1);
|
||||||
|
} else if (factory_reset_blink_state % 2 == 0) {
|
||||||
|
// 偶数相:全灭
|
||||||
|
led_off(&led_ctx, LED_MUSIC);
|
||||||
|
led_off(&led_ctx, LED_ANC);
|
||||||
|
led_off(&led_ctx, LED_FOOTSTEP_MODE);
|
||||||
|
led_off(&led_ctx, LED_AI7_1);
|
||||||
|
led_off(&led_ctx, LED_GAME_MODE);
|
||||||
|
led_update_all(&led_ctx);
|
||||||
|
delay_milliseconds(200);
|
||||||
|
} else {
|
||||||
|
// 奇数相:全亮
|
||||||
|
led_on(&led_ctx, LED_MUSIC);
|
||||||
|
led_on(&led_ctx, LED_ANC);
|
||||||
|
led_on(&led_ctx, LED_FOOTSTEP_MODE);
|
||||||
|
led_on(&led_ctx, LED_AI7_1);
|
||||||
|
led_on(&led_ctx, LED_GAME_MODE);
|
||||||
|
led_update_all(&led_ctx);
|
||||||
|
delay_milliseconds(200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if USE_EX3D == 1
|
#if USE_EX3D == 1
|
||||||
mode_change = 0;
|
mode_change = 0;
|
||||||
if(button_footsteps_enhancement == 0)
|
if(button_footsteps_enhancement == 0)
|
||||||
@@ -1429,74 +1589,6 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
|||||||
led_update_all(&led_ctx);
|
led_update_all(&led_ctx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
|
||||||
curr_ctrl_keys = (port_in(p_ctrl_keys)) & KEY_BITS;
|
|
||||||
|
|
||||||
|
|
||||||
if (curr_ctrl_keys != last_ctrl_keys) {
|
|
||||||
debounce_cnt++;
|
|
||||||
if (debounce_cnt >= 2) {
|
|
||||||
debounce_cnt = 0;
|
|
||||||
keys_changed = curr_ctrl_keys ^ last_ctrl_keys;
|
|
||||||
tmp = 0;
|
|
||||||
switch (keys_changed) {
|
|
||||||
case KEY_MIC_VOL_DN:
|
|
||||||
case KEY_MIC_VOL_UP:
|
|
||||||
|
|
||||||
if ((isMute == 0) && ((curr_ctrl_keys & KEY_MIC_VOL_DN) == 0)) {
|
|
||||||
tmp = KEY_MIC_VOL_DN;
|
|
||||||
debug_printf("KEY_MIC_VOL_DN pressed\n");
|
|
||||||
} else {
|
|
||||||
if ((isMute == 0) && ((curr_ctrl_keys & KEY_MIC_VOL_UP) == 0)) {
|
|
||||||
tmp = KEY_MIC_VOL_UP;
|
|
||||||
debug_printf("KEY_MIC_VOL_UP pressed\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tmp) {
|
|
||||||
g_mic_vol_cmd_pending = (unsigned)tmp;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case KEY_MUTE:
|
|
||||||
|
|
||||||
if ((curr_ctrl_keys & KEY_MUTE) == 0) {
|
|
||||||
// mute switch off (unmuted)
|
|
||||||
isMute = 0;
|
|
||||||
SET_SHARED_GLOBAL(g_mute_on_off_t0, MUTE_OFF); // 更新tile0静音状态
|
|
||||||
chan_out_byte(cc_mic_level, (uint8_t) UNMUTED_MIC);
|
|
||||||
debug_printf("MUTE: unmuted\n");
|
|
||||||
} else {
|
|
||||||
// mute switch on (muted)
|
|
||||||
isMute = 1;
|
|
||||||
SET_SHARED_GLOBAL(g_mute_on_off_t0, MUTE_ON); // 更新tile0静音状态
|
|
||||||
chan_out_byte(cc_mic_level, (uint8_t) MUTED_MIC);
|
|
||||||
debug_printf("MUTE: muted\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#if (HID_CONTROLS == 1)
|
|
||||||
case KEY_PLAY_VOL_DN:
|
|
||||||
|
|
||||||
if ((curr_ctrl_keys & KEY_PLAY_VOL_DN) == 0) {
|
|
||||||
debug_printf("KEY_PLAY_VOL_DN pressed\n");
|
|
||||||
update_button(HID_CONTROL_VOLDN); // 更新HID报告
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case KEY_PLAY_VOL_UP:
|
|
||||||
|
|
||||||
if ((curr_ctrl_keys & KEY_PLAY_VOL_UP) == 0) {
|
|
||||||
update_button(HID_CONTROL_VOLUP); // 更新HID报告
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
last_ctrl_keys = curr_ctrl_keys; // 更新上次按键状态
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
debounce_cnt = 0; // 状态未变化,重置防抖计数器
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GET_SHARED_GLOBAL(uac_vol, g_uac_vol);
|
GET_SHARED_GLOBAL(uac_vol, g_uac_vol);
|
||||||
if (uac_vol != last_uac_vol) {
|
if (uac_vol != last_uac_vol) {
|
||||||
unsigned conv_vol = (0xffffffff - uac_vol + 1) >> 8;
|
unsigned conv_vol = (0xffffffff - uac_vol + 1) >> 8;
|
||||||
|
|||||||
@@ -1,5 +1,18 @@
|
|||||||
#ifndef _LFS_IO_H_
|
#ifndef _LFS_IO_H_
|
||||||
#define _LFS_IO_H_
|
#define _LFS_IO_H_
|
||||||
|
#if __XC__
|
||||||
|
int lfs_init(void);
|
||||||
|
void lfs_deinit(void);
|
||||||
|
void lfs_read_config(unsigned char * unsafe config, unsigned char * unsafe buffer, unsigned size);
|
||||||
|
void lfs_write_config(unsigned char * unsafe config, unsigned char * unsafe buffer, unsigned size);
|
||||||
|
// EQ参数专用函数
|
||||||
|
void lfs_read_eq_config(const char * unsafe file_path, unsigned char * unsafe buffer, unsigned size);
|
||||||
|
void lfs_write_eq_config(const char * unsafe file_path, unsigned char * unsafe buffer, unsigned size);
|
||||||
|
int lfs_file_exists(const char * unsafe file_path);
|
||||||
|
int lfs_remove_file(const char * unsafe file_path);
|
||||||
|
int lfs_create_directory(const char * unsafe dir_path);
|
||||||
|
#else
|
||||||
|
|
||||||
int lfs_init(void);
|
int lfs_init(void);
|
||||||
void lfs_deinit(void);
|
void lfs_deinit(void);
|
||||||
void lfs_read_config(unsigned char * config, unsigned char * buffer, unsigned size);
|
void lfs_read_config(unsigned char * config, unsigned char * buffer, unsigned size);
|
||||||
@@ -10,4 +23,6 @@ void lfs_write_eq_config(const char * file_path, unsigned char * buffer, unsigne
|
|||||||
int lfs_file_exists(const char * file_path);
|
int lfs_file_exists(const char * file_path);
|
||||||
int lfs_remove_file(const char * file_path);
|
int lfs_remove_file(const char * file_path);
|
||||||
int lfs_create_directory(const char * dir_path);
|
int lfs_create_directory(const char * dir_path);
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user