Fix mode-select touch area IDs and keep touch thread from blocking on LCD dump.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-08-31 08:21:58 +08:00
parent 68e3a37883
commit ba31d91aef
2 changed files with 101 additions and 38 deletions

View File

@ -95,10 +95,11 @@ void UI_DrawModeSelectScreen(void)
}
const Touch_AreaTypeDef Touch_ModeSelect_Areas[] = {
// Xmin, Xmax, Ymin, Ymax, flag, ID, action
{ 10, 229, 40, 126, 0, 0, GUI_MODE_SELECT3, NULL }, //<2F><><EFBFBD><EFBFBD>
{ 10, 229, 132, 218, 1, 0, GUI_MODE_SELECT1, NULL }, //????/<2F><><EFBFBD><EFBFBD>
{ 10, 229, 224, 310, 2, 0, GUI_MODE_SELECT2, NULL }, //רҵ/ר???
/* Xmin,Xmax,Ymin,Ymax, Flag, Value, ID, action
* Flag=ID= TAB0Song / 1Expert / 2Free */
{ 10, 229, 40, 126, 0, 0, 0, NULL }, /* 万能模式 → SongMode */
{ 10, 229, 132, 218, 1, 0, 2, NULL }, /* 普通模式 → FreeMode */
{ 10, 229, 224, 310, 2, 0, 1, NULL }, /* 专业模式 → ExpertMode */
};
#define TOUCH_AREA_MODE_SELECT_NUM (sizeof(Touch_ModeSelect_Areas)/sizeof(Touch_AreaTypeDef))
@ -141,44 +142,36 @@ void LoadConfig()
void Touch_Mode_Select_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex)
{
(void)areaIndex;
StartTask();
s_mode_select_focus = (uint8_t)FLAG;
/* ID 为 TAB 索引0=万能(Song) 1=专业(Expert) 2=普通(Free) */
mGuiData[GUI_TAB_INDEX].Current = ID;
InModeFlag = true;
// <20>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD>
switch(ID)
switch (ID)
{
case 0:
if(mGuiData[GUI_AUTOBAND_SW].Current)
{
case 0: /* 万能 */
if (mGuiData[GUI_AUTOBAND_SW].Current)
ADDRESS = 0x0009EB5F;
}
else
{
ADDRESS = 0x0001B8F0;
}
ADDRESS = 0x0001B8F0;
MenuPage_SongMode_Proc();
break;
case 1:
if(mGuiData[GUI_AUTOBAND_SW].Current)
{
break;
case 1: /* 专业 */
if (mGuiData[GUI_AUTOBAND_SW].Current)
ADDRESS = 0x0009EB5F;
}
else
{
// ADDRESS = 0x0001B8F0;
ADDRESS = 0x00000000;
}
ADDRESS = 0x00000000;
MenuPage_ExpertMode_Proc();
break;
case 2:
break;
case 2: /* 普通 */
ADDRESS = 0x0009598F;
MenuPage_FreeMode_Proc();
break;
break;
default:
break;
}
}
extern uint8_t bat_init_done;

View File

@ -48,7 +48,7 @@ void TaskTouchThread_entry(void* parameter)
{
TP_Point tp = TP_Read(); /* 读 XPT2046 触摸坐标 */
app_touch_process(240-tp.x, tp.y, tp.pressed);
LCD_Dump_Poll();
/* DUMP 由 lcd_dump 专用线程轮询,勿在触摸线程里做 SPI 读屏,避免卡死触摸 */
Read_Cur_Measure();
rt_thread_mdelay(10);
}
@ -220,20 +220,90 @@ rt_err_t TaskInit(void)
void StartTask(void)
{
rt_thread_startup(&TaskScanThread);
rt_thread_startup(&TaskBTHandleThread);
rt_thread_startup(&TaskBTRecvThread);
rt_thread_startup(&TaskAutobandThread);
/* 扫描任务可能已由 StartScanTask 拉起;重复 startup 会被 RT-Thread 忽略 */
StartScanTask();
if ((TaskBTHandleThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_CLOSE)
{
rt_thread_init(&TaskBTHandleThread,
"TaskBTHandleThread",
TaskBTHandleThread_entry,
RT_NULL,
&TaskBTTHandlehread_Stack,
sizeof(TaskBTTHandlehread_Stack),
5,
20);
}
if ((TaskBTHandleThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_INIT)
rt_thread_startup(&TaskBTHandleThread);
if ((TaskBTRecvThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_CLOSE)
{
rt_thread_init(&TaskBTRecvThread,
"TaskBTRecvThread",
TaskBTRecvThread_entry,
RT_NULL,
&TaskBTRecvThread_Stack,
sizeof(TaskBTRecvThread_Stack),
5,
20);
}
if ((TaskBTRecvThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_INIT)
rt_thread_startup(&TaskBTRecvThread);
if ((TaskAutobandThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_CLOSE)
{
rt_thread_init(&TaskAutobandThread,
"TaskAutobandThread",
TaskAutobandThread_entry,
RT_NULL,
&TaskAutobandThread_Stack,
sizeof(TaskAutobandThread_Stack),
4,
20);
}
if ((TaskAutobandThread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_INIT)
rt_thread_startup(&TaskAutobandThread);
}
void StartTouchTask(void)
{
rt_thread_startup(&TaskTouchThread);
rt_uint8_t st = (rt_uint8_t)(TaskTouchThread.stat & RT_THREAD_STAT_MASK);
if (st == RT_THREAD_CLOSE)
{
rt_thread_init(&TaskTouchThread,
"TaskTouchThread",
TaskTouchThread_entry,
RT_NULL,
&TaskTouchThread_Stack,
sizeof(TaskTouchThread_Stack),
5,
20);
st = RT_THREAD_INIT;
}
if (st == RT_THREAD_INIT)
rt_thread_startup(&TaskTouchThread);
}
void StartScanTask(void)
{
rt_thread_startup(&TaskScanThread);
rt_uint8_t st = (rt_uint8_t)(TaskScanThread.stat & RT_THREAD_STAT_MASK);
if (st == RT_THREAD_CLOSE)
{
rt_thread_init(&TaskScanThread,
"TaskScanThread",
TaskScanThread_entry,
RT_NULL,
&TaskScanThread_Stack,
sizeof(TaskScanThread_Stack),
5,
20);
st = RT_THREAD_INIT;
}
if (st == RT_THREAD_INIT)
rt_thread_startup(&TaskScanThread);
}
void StopFullTask(void)