fix(sdk+launcher): 图标不渲染真根因(agent-219) — meow_ui_img.c scale_buf cover 采样把乘写成除(÷缩放比→采到源图左上角透明区,全丢); 改乘+居中裁剪偏移修正; 宿主旧测试用纯色图掩盖了该bug。+ main_menu App退出/结构变化重绘时 fb_pan_buf0_force 无条件pan回buffer0(防App翻页留buffer1致菜单残帧)
meow_ui.a→3e0ee8f7 launcher→9d0efc2f hello→9609ea6e files→90f5cf07 ncm→be8be221(均已上卡); 真机截图证据 .tmp/meowbug/fix1.png+fix_b2_after.png
This commit is contained in:
1 parent
05a19a9ea3
commit
ab4da09e75
45 files changed
+1926
-147
No files matched your search
@@ -6,12 +6,20 @@
|
||||
* meow_ui_run / IME 循环弹出分发。应用不再自读 event*。
|
||||
*
|
||||
* 触摸:BTN_TOUCH 按下记录原点,抬起时位移 < 阈值 → TAP,否则按主导轴 → SWIPE。
|
||||
* 物理键:EV_KEY 值 1=按下 / 0=抬起(重复值 2 忽略)。M2.24 全面按键接管:电源/音量/播放/
|
||||
* 上下曲全部由系统(watchdog/launcher)消费,SDK 吞噬不发给 APP(应用只收 tap/swipe/tick)。
|
||||
* 物理键:EV_KEY 值 1=按下 / 0=抬起(重复值 2 忽略)。M2.55 起系统按键语义在 SDK 输入层消化:
|
||||
* 电源 116 → 维持现状(息屏/亮屏/长按菜单由内核/sys_server/watchdog),SDK 不动、不下发 APP;
|
||||
* 音量 114/115 → 调系统音量(meow_settings audio.volume + CS43198 DAC 写,volume_step/volume_max
|
||||
* 约束,与 launcher 设置页/watchdog 同源);
|
||||
* 播放/暂停 164、上一曲 165/19、下一曲 163 → 转发到当前媒体会话(App 是媒体源→本地回调,
|
||||
* 否则经 IPC 发 launcher 转发)。
|
||||
* 「App 收到的是语义事件」:上述音量/媒体键在 SDK 消化后**仍下发 MEOW_EV_KEY**(on_key),但
|
||||
* App 不得把它们映射成自定义行为(APPS.md §3.4.1 语义不变)。
|
||||
*/
|
||||
#include "meow_ui.h"
|
||||
#include "meow_ui_internal.h"
|
||||
#include "meow_ui_sys.h"
|
||||
#include "meow_ui_vol.h"
|
||||
#include "meow_ui_media.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -81,6 +89,45 @@ static uint64_t now_ms(void)
|
||||
return (uint64_t)ts.tv_sec * 1000u + (uint64_t)ts.tv_nsec / 1000000u;
|
||||
}
|
||||
|
||||
/* settings.conf 路径(可被 env MEOW_SETTINGS_FILE 覆盖,宿主测试用;设备默认同 meow_ui_sys.c)。 */
|
||||
static const char *meow_settings_path(void)
|
||||
{
|
||||
const char *e = getenv("MEOW_SETTINGS_FILE");
|
||||
return (e && e[0]) ? e : "/usr/data/meow/settings.conf";
|
||||
}
|
||||
|
||||
/* ---- 系统按键语义(M2.55:SDK 输入层消化,App 前台也生效)----
|
||||
* 物理键是系统资源(APPS.md §3.4.1),语义全局统一。本函数在输入线程执行系统动作:
|
||||
* 电源 116 → 息屏/亮屏/长按菜单(内核/sys_server/watchdog),SDK 不动(维持现状);
|
||||
* 音量 114/115 → 调系统音量(meow_settings audio.volume + CS43198 DAC 写,与 launcher
|
||||
* 设置页/watchdog 同源:volume_step/volume_max 约束),仅按下边沿(1)一步;
|
||||
* 播放/上次曲 164/165/19/163 → 转发到当前媒体会话(App 是媒体源→本地回调;否则 IPC→launcher)。
|
||||
* 仅处理按下边沿(val==1)触发系统动作;重复(2)/抬起(0)不重复执行。on_key 的下发由输入线程
|
||||
* 在调用本函数后另行 push(音量/媒体键仍通知 App,App 不得映射)。 */
|
||||
static void meow_input_handle_sys_key(int code, int val)
|
||||
{
|
||||
switch (code) {
|
||||
case MEOW_KEY_POWER: /* 电源:维持现状,SDK 不动 */
|
||||
break;
|
||||
case MEOW_KEY_VOLUMEDOWN:
|
||||
case MEOW_KEY_VOLUMEUP:
|
||||
if (val == 1) {
|
||||
int dir = (code == MEOW_KEY_VOLUMEUP) ? +1 : -1;
|
||||
int nv = meow_ui_vol_step(meow_settings_path(), dir); /* settings 语义+持久化 */
|
||||
meow_ui_vol_dac_write(nv); /* 写真实 CS43198 DAC */
|
||||
}
|
||||
break;
|
||||
case MEOW_KEY_PLAYPAUSE:
|
||||
case MEOW_KEY_PREVIOUS:
|
||||
case MEOW_KEY_NEXT:
|
||||
case 19: /* KEY_PREVIOUSSONG 旧码 */
|
||||
if (val == 1) meow_ui_media_sys_key(code);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void meow_input_drain(void)
|
||||
{
|
||||
pthread_mutex_lock(&g_qm);
|
||||
@@ -335,14 +382,25 @@ static void *input_thread(void *arg)
|
||||
if (code == BTN_TOUCH) {
|
||||
if (val && !t_down) touch_press(t_cx, t_cy);
|
||||
else if (!val && t_down) touch_release();
|
||||
} else if (code == MEOW_KEY_POWER || code == MEOW_KEY_VOLUMEDOWN ||
|
||||
code == MEOW_KEY_VOLUMEUP || code == MEOW_KEY_PLAYPAUSE ||
|
||||
code == MEOW_KEY_PREVIOUS || code == MEOW_KEY_NEXT || code == 19) {
|
||||
/* M2.22(A)/M2.24 纪律:物理键(电源 116 / 音量 114,115 / 播放 164 /
|
||||
* 上一曲 165(MEOW_KEY_PREVIOUS)/19(旧码) / 下一曲 163)全部是系统语义 —— watchdog/launcher 统一消费,
|
||||
* 绝不下发 APP。应用不碰物理键、不把任何物理键映射成确认/exit/返回/翻页
|
||||
* (KEY_CONTROL_DESIGN §1.3 / APPS.md §3.4.1);APP 只接收 tap/swipe/tick。
|
||||
* 忽略该键,不发 MEOW_EV_KEY。 */
|
||||
} else if (code == MEOW_KEY_POWER) {
|
||||
/* M2.55(接 M2.24 纪律):电源=息屏/亮屏/长按菜单,由内核/sys_server/
|
||||
* watchdog 统一处理,SDK 不动、也不下发 APP。维持现状。 */
|
||||
} else if (code == MEOW_KEY_VOLUMEDOWN || code == MEOW_KEY_VOLUMEUP) {
|
||||
/* 音量键=系统音量(M2.55:SDK 输入层消化,App 前台也生效)。
|
||||
* 语义动作在 meow_input_handle_sys_key(仅按下边沿一步);随后仍下发
|
||||
* MEOW_EV_KEY(App on_key 收到语义事件,但不得映射成自定义行为)。 */
|
||||
if (val == 1 || val == 0) {
|
||||
meow_input_handle_sys_key(code, val);
|
||||
push_ev(MEOW_EV_KEY, code, (val == 1) ? 1 : 0);
|
||||
}
|
||||
} else if (code == MEOW_KEY_PLAYPAUSE || code == MEOW_KEY_PREVIOUS ||
|
||||
code == MEOW_KEY_NEXT || code == 19) {
|
||||
/* 媒体键=转发到当前媒体会话(M2.55:SDK 输入层消化)。语义动作在
|
||||
* meow_input_handle_sys_key;随后仍下发 MEOW_EV_KEY(App 不得映射)。 */
|
||||
if (val == 1 || val == 0) {
|
||||
meow_input_handle_sys_key(code, val);
|
||||
push_ev(MEOW_EV_KEY, code, (val == 1) ? 1 : 0);
|
||||
}
|
||||
} else if (val == 1) { /* 按下边沿(忽略重复=2)——仅未知键(本设备无) */
|
||||
push_ev(MEOW_EV_KEY, code, 1);
|
||||
} else if (val == 0) { /* 抬起 */
|
||||
|
||||
Reference in new issue
Block a user