From ade0a573536c345a298f6ce215b883722d744785 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 22:40:08 +0800 Subject: [PATCH] =?UTF-8?q?A1:=20meow=5Faudiod=20=E7=8B=AC=E5=8D=A0?= =?UTF-8?q?=E9=9F=B3=E9=A2=91=E6=9C=8D=E5=8A=A1=EF=BC=88agent-244=20?= =?UTF-8?q?=E9=AA=A8=E6=9E=B6=20+=20agent-246=20=E7=9C=9F=E6=9C=BA?= =?UTF-8?q?=E6=94=B6=E5=B0=BE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - meow_audiod:启动门控(/tmp/meow_boot_mode 非 meow exit 0)、IO/播放/路由三线程、 ring ~200ms、ALSA UAPI 独占直开、切率 mute-重配-恢复、抢占(后开赢+PREEMPTED)、 socket EOF 回收、xrun PREPARE 恢复;meow_route 轮询逻辑并入路由线程 - meow_audio CLI:status/tone/route/vol;services.d/audiod.conf(trigger=manual,on-fail) - SDK meow_ui_audio.c 编进 meow_ui.a:懒连接/读线程分发 PREEMPTED 回调/EPIPE 标死/ 无 audiod 返回 MEOW_ERR_NOENT 不隐式直开(MEOW_AUDIO_DIRECT=1 仅调试) - launcher:确认 MeowOS 模式后 meow_svcd start audiod(double-fork best-effort 不阻塞) - meow_route 退役:S89 预置换 audiod.conf + 清理旧 meow_route.conf(防拉起已删二进制 重启循环);fw_content.conf 删 meow_route、加 meow_audiod+meow_audio(md5 打包时填) - 真机定位并修复 ALSA UAPI 两大坑(即 ncm 播放无声根因): ① hw_params 须全放行初始化(mask 全 1/interval [0,UINT_MAX]),memset 0 interval 等价只能取 0 → refine 必空 → HW_PARAMS 恒 EINVAL ② access/format mask 先清零再单点(pmask 只 OR),全 1 被 choose 成 MMAP_INTERLEAVED → write() 恒 EINVAL - 附带修复:dev_write fd<0 防日志风暴丢 PCM 限频日志;SDK state 解析 app_id 截空白; meow_ui.h 文档负错误码表述修正 - 验证:宿主 FILE sink 全 IPC 链+抢占+tone WAV 20/20,SDK 客户端 13/13; qemu-mipsel 同过;真机 tone 44.1k/96k 切率 written=played、underrun=0、日志完整 - meow_ui.a 53a3edd2 → ncm 重链 d2031829(已热更到卡);launcher a2f932a1 --- patch_v2/meow_audiod/build_audiod.sh | 40 + patch_v2/meow_audiod/meow_audio | Bin 0 -> 78016 bytes patch_v2/meow_audiod/meow_audio.c | 309 +++++ patch_v2/meow_audiod/meow_audio_host | Bin 0 -> 72032 bytes patch_v2/meow_audiod/meow_audiod | Bin 0 -> 144236 bytes patch_v2/meow_audiod/meow_audiod.c | 1203 +++++++++++++++++++ patch_v2/meow_audiod/meow_audiod_host | Bin 0 -> 75744 bytes patch_v2/meow_audiod/probe_alsa | Bin 0 -> 55616 bytes patch_v2/meow_audiod/probe_alsa.c | 75 ++ patch_v2/meow_audiod/services.d/audiod.conf | 14 + patch_v2/meow_audiod/test_audiod_host | Bin 0 -> 72224 bytes patch_v2/meow_audiod/test_audiod_host.c | 310 +++++ patch_v2/meow_launcherd/main_menu.c | 25 + patch_v2/meow_launcherd/meow_ipc.h | 69 ++ patch_v2/meow_launcherd/meow_launcherd | Bin 584540 -> 584940 bytes patch_v2/meow_route/README.md | 10 + patch_v2/meow_svcd/S89meow_svcd | 23 +- patch_v2/ncm_app/ncm | Bin 937340 -> 937308 bytes patch_v2/sdk/build_sdk.sh | 2 +- patch_v2/sdk/meow_ui.h | 46 + patch_v2/sdk/meow_ui_audio.c | 515 ++++++++ patch_v2/sdk/test_ui_audio_host | Bin 0 -> 74112 bytes patch_v2/sdk/test_ui_audio_host.c | 158 +++ scripts/build/fw_content.conf | 7 +- 24 files changed, 2795 insertions(+), 11 deletions(-) create mode 100755 patch_v2/meow_audiod/build_audiod.sh create mode 100755 patch_v2/meow_audiod/meow_audio create mode 100644 patch_v2/meow_audiod/meow_audio.c create mode 100755 patch_v2/meow_audiod/meow_audio_host create mode 100755 patch_v2/meow_audiod/meow_audiod create mode 100644 patch_v2/meow_audiod/meow_audiod.c create mode 100755 patch_v2/meow_audiod/meow_audiod_host create mode 100755 patch_v2/meow_audiod/probe_alsa create mode 100644 patch_v2/meow_audiod/probe_alsa.c create mode 100644 patch_v2/meow_audiod/services.d/audiod.conf create mode 100755 patch_v2/meow_audiod/test_audiod_host create mode 100644 patch_v2/meow_audiod/test_audiod_host.c create mode 100644 patch_v2/meow_route/README.md create mode 100644 patch_v2/sdk/meow_ui_audio.c create mode 100755 patch_v2/sdk/test_ui_audio_host create mode 100644 patch_v2/sdk/test_ui_audio_host.c diff --git a/patch_v2/meow_audiod/build_audiod.sh b/patch_v2/meow_audiod/build_audiod.sh new file mode 100755 index 0000000..762ecfc --- /dev/null +++ b/patch_v2/meow_audiod/build_audiod.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# build_audiod.sh — meow_audiod 交叉编译(mipsel 静态)+ 宿主多目标可选。 +# +# 目标:R3 Pro II / MeowOS(mipsel-linux-muslsf,静态)。audiod 复用 meow_ipc.h(共享协议头, +# -I../meow_launcherd)。audiod 为 svcd 托管的独立守护;meow_audio 为用户侧 CLI。 +# +# 用法: +# ./build_audiod.sh # 交叉编译 → meow_audiod(mipsel 静态) +# ./build_audiod.sh cli # 交叉编译 meow_audio CLI → meow_audio(mipsel 静态) +# ./build_audiod.sh host # 宿主编译 meow_audiod_host + meow_audio_host(集成测试) +set -e +cd "$(dirname "$0")" +ROOT="$HOME/Project/R3ProII" +CC="$ROOT/.tools/zig-mipsel-cc" +INC="-I$ROOT/patch_v2/meow_launcherd" + +if [ "$1" = "host" ]; then + HOST_CC="${CC_HOST:-cc}" + "$HOST_CC" $INC -Os -Wall -Wextra meow_audiod.c -o meow_audiod_host -lpthread + "$HOST_CC" $INC -Os -Wall -Wextra meow_audio.c -o meow_audio_host -lm + echo "== host builds ==" + ls -la meow_audiod_host meow_audio_host + file meow_audiod_host meow_audio_host + exit 0 +fi + +if [ "$1" = "cli" ]; then + "$CC" $INC -Os -Wall -Wextra -static meow_audio.c -o meow_audio -lm + echo "== meow_audio (mipsel static CLI) ==" + ls -la meow_audio + md5sum meow_audio + file meow_audio + exit 0 +fi + +"$CC" $INC -Os -Wall -Wextra -static meow_audiod.c -o meow_audiod -lpthread +echo "== meow_audiod (mipsel static) ==" +ls -la meow_audiod +md5sum meow_audiod +file meow_audiod diff --git a/patch_v2/meow_audiod/meow_audio b/patch_v2/meow_audiod/meow_audio new file mode 100755 index 0000000000000000000000000000000000000000..e809d35395049d863dcd0ab79b11596b4864e3f6 GIT binary patch literal 78016 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 literal 0 HcmV?d00001 diff --git a/patch_v2/meow_audiod/meow_audio.c b/patch_v2/meow_audiod/meow_audio.c new file mode 100644 index 0000000..1029153 --- /dev/null +++ b/patch_v2/meow_audiod/meow_audio.c @@ -0,0 +1,309 @@ +#define _GNU_SOURCE + +/* meow_audio.c — meow_audiod 用户侧 CLI(root 免鉴权,ssh 直呼)。 + * + * 命令: + * meow_audio status 当前流/参数/帧数/underrun/路由/音量 + * meow_audio tone [freq] [ms] [rate] 正弦测试音(默认 440Hz 500ms 44100;排查无声不须开 App) + * meow_audio route <0|2|3> 手动切路由(0=auto 2=3.5 3=4.4;调试/面板) + * meow_audio vol [0-100] 设置音量(无参=查询;v1 透传写 DAC numid=1/2 + settings.conf) + * + * 传输:AF_UNIX SOCK_STREAM 到 audiod socket(env MEOW_AUDIO_SOCK / --sock 覆盖,宿主/qemu)。 + * 帧格式复用 meow_ipc.h 16B 头 + m_audio_* 负载。无 audiod → 连接失败/超时 → 打印友好错误并退出。 + * + * 编译(mipsel 静态):build_audiod.sh cli。宿主编译:build_audiod.sh host。 + */ +#include "meow_ipc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define AUD_SOCK_DEFAULT "/usr/data/meow_audio.sock" + +static char g_sock[108] = AUD_SOCK_DEFAULT; +static int g_fd = -1; + +static int write_all(int fd, const uint8_t *p, size_t n) +{ + size_t off = 0; + while (off < n) { + ssize_t w = write(fd, p + off, n - off); + if (w < 0) { if (errno == EINTR) continue; return -1; } + if (w == 0) return -1; + off += (size_t)w; + } + return 0; +} + +static int read_all(int fd, uint8_t *p, size_t n) +{ + size_t off = 0; + while (off < n) { + ssize_t r = read(fd, p + off, n - off); + if (r < 0) { if (errno == EINTR) continue; return -1; } + if (r == 0) return -1; + off += (size_t)r; + } + return 0; +} + +static int connect_sock(void) +{ + int fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) return -1; + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + snprintf(a.sun_path, sizeof a.sun_path, "%s", g_sock); + if (connect(fd, (struct sockaddr *)&a, sizeof a) < 0) { close(fd); return -1; } + return fd; +} + +static int send_frame(int fd, uint16_t type, uint32_t req_id, const void *payload, uint32_t len) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC; + uint16_t ver = MEOW_IPC_VERSION; + memcpy(hdr + 0, &magic, 4); + memcpy(hdr + 4, &ver, 2); + memcpy(hdr + 6, &type, 2); + memcpy(hdr + 8, &req_id, 4); + memcpy(hdr + 12, &len, 4); + if (write_all(fd, hdr, sizeof hdr) != 0) return -1; + if (len && payload && write_all(fd, payload, len) != 0) return -1; + return 0; +} + + +/* 读一帧头部+负载;返回负载长(≥0),-1=断/坏帧/超时。 */ +static int read_frame(int fd, uint16_t *type, uint8_t *rbuf, uint32_t rcap) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + if (read_all(fd, hdr, sizeof hdr) != 0) return -1; + uint32_t magic, len; uint16_t ver; + memcpy(&magic, hdr, 4); memcpy(&ver, hdr + 4, 2); memcpy(type, hdr + 6, 2); + memcpy(&len, hdr + 12, 4); + if (magic != MEOW_IPC_MAGIC || ver != MEOW_IPC_VERSION) return -1; + if (len > rcap) len = rcap; + if (len > 0 && read_all(fd, rbuf, len) != 0) return -1; + return (int)len; +} + +/* 请求-响应:发一帧、读响应(带 3s 超时防挂)。返回响应负载长;-1=失败。 */ +static int req_resp(uint16_t type, const void *pl, uint32_t len, + uint16_t *otype, uint8_t *obuf, uint32_t ocap) +{ + if (send_frame(g_fd, type, 1, pl, len) != 0) return -1; + struct pollfd p; + p.fd = g_fd; p.events = POLLIN; p.revents = 0; + int r = poll(&p, 1, 3000); + if (r <= 0 || !(p.revents & POLLIN)) return -1; + return read_frame(g_fd, otype, obuf, ocap); +} + +static int fmt_bps(int fmt) +{ + switch (fmt) { + case AUDIO_FMT_S16: return 2; + case AUDIO_FMT_S24: + case AUDIO_FMT_S32: + case AUDIO_FMT_FLOAT: return 4; + default: return 2; + } +} +static const char *fmt_name(int fmt) +{ + switch (fmt) { + case AUDIO_FMT_S16: return "S16"; + case AUDIO_FMT_S24: return "S24"; + case AUDIO_FMT_S32: return "S32"; + case AUDIO_FMT_FLOAT: return "FLOAT"; + default: return "?"; + } +} + +static int cmd_status(void) +{ + uint8_t rbuf[MEOW_IPC_MAX]; + uint16_t rt; + int n = req_resp(MSG_AUDIO_QUERY, NULL, 0, &rt, rbuf, sizeof rbuf); + if (n < 0) { fprintf(stderr, "meow_audio: no audiod (%s), status unavailable\n", g_sock); return 1; } + if (rt != MSG_AUDIO_STATE) { fprintf(stderr, "meow_audio: unexpected reply type 0x%04x\n", rt); return 1; } + rbuf[n < (int)sizeof rbuf - 1 ? n : (int)sizeof rbuf - 1] = 0; + fputs((const char *)rbuf, stdout); + return 0; +} + +static int cmd_route(int port) +{ + m_audio_route_t r; r.port = (uint32_t)port; + uint8_t rbuf[256]; uint16_t rt; + int n = req_resp(MSG_AUDIO_ROUTE, &r, sizeof r, &rt, rbuf, sizeof rbuf); + if (n < 0) { fprintf(stderr, "meow_audio: no audiod (%s)\n", g_sock); return 1; } + printf("route %d -> %s\n", port, (port == 0) ? "auto" : (port == 3 ? "4.4" : "3.5")); + return 0; +} + +static int cmd_vol(int pct) +{ + m_audio_volume_t v; v.pct = (int32_t)pct; + uint8_t rbuf[256]; uint16_t rt; + int n = req_resp(MSG_AUDIO_VOLUME, &v, sizeof v, &rt, rbuf, sizeof rbuf); + if (n < 0 || rt != MSG_ACK) { fprintf(stderr, "meow_audio: no audiod (%s)\n", g_sock); return 1; } + m_ack_t a; memcpy(&a, rbuf, sizeof a); + printf("vol %u%%%s\n", (unsigned)a.status, (pct >= 0 ? " (set)" : " (query)")); + return 0; +} + +/* 正弦生成:填 nframes 帧(grant 交织格式)到 buf(上限 bufcap,帧对齐)。 + * start 为起始帧号;返回实际写入字节数。 */ +static size_t gen_sine(uint8_t *buf, size_t bufcap, int grant_fmt, int grant_ch, + double freq, int rate, size_t start, size_t nframes, double amp) +{ + int bps = fmt_bps(grant_fmt); + size_t fs = (size_t)grant_ch * (size_t)bps; + if (fs == 0) fs = 1; + size_t n = (bufcap / fs) * fs; + if (n / fs > nframes) n = nframes * fs; + size_t done = 0; + for (size_t i = 0; i < n / fs; i++) { + double ph = 2.0 * M_PI * freq * (double)(start + i) / (double)rate; + double s = sin(ph) * amp; + long v = (long)(s * 32767.0); + if (v > 32767) v = 32767; + if (v < -32768) v = -32768; + long vs = v; /* S16 值 */ + if (grant_fmt == AUDIO_FMT_S32 || grant_fmt == AUDIO_FMT_S24) vs = v << 16; + for (int c = 0; c < grant_ch; c++) { + if (grant_fmt == AUDIO_FMT_S16) { + int16_t xx = (int16_t)v; + memcpy(buf + done, &xx, 2); done += 2; + } else { + int32_t xx = (int32_t)(vs); + memcpy(buf + done, &xx, 4); done += 4; + } + } + } + return done; +} + +static int cmd_tone(int freq, int ms, int rate) +{ + m_audio_open_t o; + memset(&o, 0, sizeof o); + snprintf(o.app_id, sizeof o.app_id, "audio-cli"); + o.rate = (uint32_t)rate; + o.ch = 2; + o.fmt = AUDIO_FMT_S16; + uint8_t rbuf[512]; uint16_t rt; + int n = req_resp(MSG_AUDIO_OPEN, &o, sizeof o, &rt, rbuf, sizeof rbuf); + if (n < 0) { fprintf(stderr, "meow_audio: no audiod (%s) — 音频服务不可用\n", g_sock); return 1; } + if (rt != MSG_AUDIO_OPEN_ACK) { fprintf(stderr, "meow_audio: unexpected reply 0x%04x\n", rt); return 1; } + m_audio_open_ack_t a; memcpy(&a, rbuf, sizeof a); + if (a.err != MEOW_OK) { + fprintf(stderr, "meow_audio: open failed (err=%d): %s\n", a.err, + a.err == MEOW_ERR_NODEV ? "no usable PCM device" : + a.err == MEOW_ERR_INVAL ? "invalid params" : "error"); + return 1; + } + printf("tone: sid=%u grant=%uHz/%uch/%s\n", (unsigned)a.stream_id, + (unsigned)a.grant_rate, (unsigned)a.grant_ch, fmt_name((int)a.grant_fmt)); + + double amp = 0.3; + size_t total_frames = (size_t)((uint64_t)ms * (uint64_t)rate / 1000); + uint8_t pcm[MEOW_IPC_MAX]; + size_t fs = (size_t)a.grant_ch * (size_t)fmt_bps((int)a.grant_fmt); + if (fs == 0) fs = 1; + size_t sent_frames = 0; + while (sent_frames < total_frames) { + size_t want = total_frames - sent_frames; + if (want > (size_t)(sizeof pcm / fs)) want = sizeof pcm / fs; + size_t by = gen_sine(pcm, sizeof pcm, (int)a.grant_fmt, (int)a.grant_ch, + (double)freq, rate, sent_frames, want, amp); + if (by == 0) break; + if (send_frame(g_fd, MSG_AUDIO_WRITE, 0, pcm, (uint32_t)by) != 0) { + fprintf(stderr, "meow_audio: write failed (audiod died?)\n"); + return 1; + } + sent_frames += by / fs; + } + + /* 停止 + 等待排空(WAV 完整落盘 / 真实 DAC 播放完) */ + m_audio_stream_t s; s.stream_id = a.stream_id; + req_resp(MSG_AUDIO_STOP, &s, sizeof s, &rt, rbuf, sizeof rbuf); + uint64_t deadline_ms = (uint64_t)ms + 3000; + uint64_t t0 = 0; + { + struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); + t0 = (uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000; + } + for (;;) { + struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); + uint64_t now = (uint64_t)ts.tv_sec * 1000 + ts.tv_nsec / 1000000; + if (now - t0 > deadline_ms) break; + req_resp(MSG_AUDIO_QUERY, NULL, 0, &rt, rbuf, sizeof rbuf); + if (rt == MSG_AUDIO_STATE) { + if (strstr((const char *)rbuf, "active=0")) break; + } + usleep(100000); /* 100ms 轮询 */ + } + printf("tone done: sent %zu frames\n", sent_frames); + close(g_fd); + g_fd = -1; + return 0; +} + +static void usage(const char *argv0) +{ + fprintf(stderr, "usage: %s status | tone [freq] [ms] [rate] | route <0|2|3> | vol [0-100]\n" + " env: MEOW_AUDIO_SOCK (socket 缺省 %s)\n", argv0, AUD_SOCK_DEFAULT); +} + +int main(int argc, char **argv) +{ + const char *e = getenv("MEOW_AUDIO_SOCK"); + if (e && e[0]) snprintf(g_sock, sizeof g_sock, "%s", e); + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--sock") && i + 1 < argc) { snprintf(g_sock, sizeof g_sock, "%s", argv[++i]); } + else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { usage(argv[0]); return 0; } + } + if (argc < 2) { usage(argv[0]); return 2; } + + g_fd = connect_sock(); + if (g_fd < 0 && strcmp(argv[1], "status") != 0 && strcmp(argv[1], "vol") != 0 + && strcmp(argv[1], "route") != 0 && strcmp(argv[1], "tone") != 0) { + /* 未知命令用 status 兜底说明 */ + } + /* 连接失败:status/vol/route/tone 各自报错;未知命令直接 usage */ + const char *cmd = argv[1]; + if (!strcmp(cmd, "status")) { + return cmd_status(); + } else if (!strcmp(cmd, "route")) { + if (argc < 3) { usage(argv[0]); return 2; } + int port = atoi(argv[2]); + if (port != 0 && port != 2 && port != 3) { fprintf(stderr, "route: port 0/2/3\n"); return 2; } + if (g_fd < 0) { fprintf(stderr, "meow_audio: no audiod (%s)\n", g_sock); return 1; } + int rc = cmd_route(port); close(g_fd); return rc; + } else if (!strcmp(cmd, "vol")) { + if (g_fd < 0) { fprintf(stderr, "meow_audio: no audiod (%s)\n", g_sock); return 1; } + int pct = (argc >= 3) ? atoi(argv[2]) : -1; + if (pct > 100) pct = 100; + int rc = cmd_vol(pct); close(g_fd); return rc; + } else if (!strcmp(cmd, "tone")) { + int freq = (argc >= 3) ? atoi(argv[2]) : 440; + int ms = (argc >= 4) ? atoi(argv[3]) : 500; + int rate = (argc >= 5) ? atoi(argv[4]) : 44100; + if (freq <= 0 || ms <= 0 || rate <= 0) { fprintf(stderr, "tone: bad params\n"); return 2; } + if (g_fd < 0) { fprintf(stderr, "meow_audio: no audiod (%s) — 音频服务不可用\n", g_sock); return 1; } + return cmd_tone(freq, ms, rate); + } + usage(argv[0]); + return 2; +} diff --git a/patch_v2/meow_audiod/meow_audio_host b/patch_v2/meow_audiod/meow_audio_host new file mode 100755 index 0000000000000000000000000000000000000000..f246e3fb6f372b760bd22834092fea699640fe2d GIT binary patch literal 72032 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 W>9PdpUHk=m!{1IvQ~=!=P5&QvKzVim literal 0 HcmV?d00001 diff --git a/patch_v2/meow_audiod/meow_audiod.c b/patch_v2/meow_audiod/meow_audiod.c new file mode 100644 index 0000000..561e7d0 --- /dev/null +++ b/patch_v2/meow_audiod/meow_audiod.c @@ -0,0 +1,1203 @@ +#define _GNU_SOURCE + +/* meow_audiod.c — MeowOS 独占音频服务(devdocs/plan/AUDIOD_DESIGN.md)。 + * + * 定位:把**所有与声卡硬件的交互**收敛到本守护(svcd 托管,板载 /usr/bin/meow_audiod)。 + * App 只经 SDK 客户端 API(meow_ui_audio.c)喂 PCM;audiod 独占持有 hw:0,0。 + * + * 核心设计(用户定案,勿推翻): + * - 独占 + 抢占(后开流赢,旧流收 MSG_AUDIO_PREEMPTED 并被置 draining,PCM 丢弃); + * 软混音已否决(MIPS32 软 SRC 伤音质),留混音器接口位(v1 不实现)。 + * - 单进程双线程(+路由线程):IO 线程(accept/读帧/解析/ring 写)、播放线程 + * (独占 ALSA 直开,从 ring 取数写 DAC,xrun PREPARE 恢复)、路由线程 + * (轮询 headset/balance 插孔 switch 状态 → amixer cset numid=9)。 + * - 格式归一 = 协商:grant_rate/ch/fmt 回客户端应产出的格式(SDK 负责 mono→stereo + * 复制 / S16↔S32 定值升降位);audiod 只做「硬件最优」格式的字节管道。 + * - DAC 原生率跟随(无 SRC);切率 mute-重配-恢复。 + * - meow_route 已并入(§5):本进程在=路由在;独立 meow_route 服务退役。 + * + * 启动门控(红线):main() 先读 /tmp/meow_boot_mode;非 "meow" → 日志一行 → exit(0) + * (HibyOS 模式下 audiod 物理不存在,绝不碰声卡)。测试/宿主用 env MEOW_AUDIO_FORCE=1 + * 跳过门控。 + * + * 音频路径双形态: + * - 真机/ALSA:env MEOW_AUDIO_SINK 缺省自动检测 /dev/snd/pcmC0D0p ∈ 存在 → open ALSA UAPI + * (非 mmap:HW_PARAMS + PREPARE + write)。musl 的 sound/asound.h masks/intervals 是 + * 重索引数组(见 audio_out.c 注释),访问须减 FIRST_MASK/FIRST_INTERVAL。 + * - 无 ALSA(宿主/qemu):自动回退 FILE sink(写 WAV)或 NULL(env MEOW_AUDIO_SINK=null)。 + * + * 编译(mipsel 静态):build_audiod.sh。宿主编译:build_audiod.sh host。 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "meow_ipc.h" + +#ifdef __linux__ +#include +#include +#define AUDIOD_HAVE_ALSA 1 +#endif + +/* ---- 缺省路径 ---- */ +#define AUD_SOCK_DEFAULT "/usr/data/meow_audio.sock" +#define DEV_PCM "/dev/snd/pcmC0D0p" +#define LOG_DIR_CARD "/usr/data/mnt/sd_0/MeowOS/logs" +#define BOOT_MODE_PATH "/tmp/meow_boot_mode" +#define BOOTTS_CACHE "/tmp/meow_bootts" +#define SETTINGS_CONF "/usr/data/meow/settings.conf" +#define DEFAULT_OUT_WAV "/tmp/meow_audiod.wav" + +#define CLI_MAX 8 /* 同连客户端上限(防 fd 泄漏) */ +#define READ_BUF_MAX (MEOW_IPC_MAX + MEOW_IPC_HDR_LEN) +#define FRAME_READ_MAX (MEOW_IPC_MAX + MEOW_IPC_HDR_LEN) +#define READ_CHUNK 8192 /* 播放线程单次从 ring 取出的字节上限(帧对齐裁剪) */ +#define VOL_DEFAULT 60 /* settings.conf audio.volume 缺省 */ +#define RING_MIN 4096 +#define RING_MAX (1u << 20) + +/* 客户端流状态 */ +enum { CLS_OPEN = 0, CLS_PAUSED = 1, CLS_DRAINING = 2 }; /* DRAINING=被抢占,PCM 丢弃 */ + +/* Sink 枚举 */ +enum { SINK_ALSA = 0, SINK_FILE = 1, SINK_NULL = 2 }; +static int g_sink = SINK_ALSA; +static int g_hw_fmt = AUDIO_FMT_S16; /* 硬件最优格式(ALSA 探测;FILE/NULL=S16) */ +static int g_hw_probed = 0; + +static char g_sock[108] = AUD_SOCK_DEFAULT; +static char g_out_wav[256] = DEFAULT_OUT_WAV; +static const char *g_amixer = "/usr/bin/amixer"; /* 环境可覆盖 */ +static int g_route_manual = -1; /* -1=auto;2=3.5;3=4.4 */ +static int g_route_cur = -1; /* 最近已知路由;-1=未知 */ +static int g_vol_pct = VOL_DEFAULT; /* 当前音量 0-100(缓存) */ +static int g_force = 0; /* MEOW_AUDIO_FORCE=1 跳过启动门控(宿主/qemu 测试) */ + +/* ---- 缓冲状态(+日志) ---- */ +static char g_logfile[300] = ""; +static int g_logfd = -1; + +static volatile sig_atomic_t g_stop = 0; + +/* ---- 共享态(g_mu 保护 + g_cond 唤醒) ---- */ +/* 前向声明(供 cli_free/dispatch 使用;定义见下) */ +static void g_sid_reset(void); +static void _audio_mark_reconfig_needed(void); +static pthread_mutex_t g_mu = PTHREAD_MUTEX_INITIALIZER; +static pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; + +struct client { + int used; + int fd; + char app_id[MEOW_APP_ID_MAX]; + uint32_t sid; + int state; /* CLS_* */ + uint8_t rbuf[READ_BUF_MAX]; + size_t rlen; +}; +static struct client g_cli[CLI_MAX]; + +/* 当前授权流(喂养 DAC 的唯一流) */ +struct stream_info { + int active; + uint32_t sid; + char app_id[MEOW_APP_ID_MAX]; + uint32_t rate; + uint16_t ch; /* grant ch(DAC 双声道 → 2) */ + uint16_t fmt; /* grant fmt */ +}; +static struct stream_info g_st; + +static int g_paused = 0; /* 当前流被暂停 */ +static uint32_t g_next_sid = 1; +static uint64_t g_written_frames = 0; /* 当前流:客户端写入 ring 的帧 */ +static uint64_t g_played_frames = 0; /* 当前流:播放线程写到设备的帧 */ +static uint32_t g_underrun = 0; + +/* ring(SPSC:IO 线程写,播放线程读;g_mu + g_cond 保护) */ +static uint8_t *g_ring = NULL; +static size_t g_ring_cap = 0; +static size_t g_rpos = 0, g_wpos = 0; + +/* 播放线程设备状态 */ +static int g_dev_fd = -1; +static int g_dev_open = 0; +static uint32_t g_dev_rate = 0, g_dev_ch = 0, g_dev_fmt = 0; +static int g_reconfig_pending = 0; + +/* ---- 日志 ---- */ +static void logmsg(const char *fmt, ...) +{ + if (g_logfd < 0) return; + char b[512]; + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(b, sizeof b, fmt, ap); + va_end(ap); + if (n < 0) return; + if (n > (int)sizeof b - 1) n = (int)sizeof b - 1; + if (write(g_logfd, "[audiod] ", 9) < 0) { } + if (write(g_logfd, b, (size_t)n) < 0) { } + if (write(g_logfd, "\n", 1) < 0) { } + /* 同时到 stderr(supervisor/svcd 捕获 + 真机 SSH 直达) */ + fprintf(stderr, "[audiod] %s\n", b); +} + +/* ---- bootts 复用(与 launcher 共用 /tmp/meow_bootts 缓存,一次开机一份日志) ---- */ +static void get_bootts(char *out, size_t n) +{ + int fd = open(BOOTTS_CACHE, O_RDONLY); + if (fd >= 0) { + int r = read(fd, out, (int)n - 1); + close(fd); + if (r > 0) { out[r] = 0; return; } + } + time_t now = time(NULL), up = 0; + fd = open("/proc/uptime", O_RDONLY); + if (fd >= 0) { + char buf[64]; + int r = read(fd, buf, sizeof buf - 1); + close(fd); + if (r > 0) { buf[r] = 0; char *p = strchr(buf, ' '); if (p) *p = 0; up = (time_t)atof(buf); } + } + struct tm tm; + localtime_r(&now - up, &tm); + strftime(out, n, "meow_%Y%m%d_%H%M%S", &tm); + fd = open(BOOTTS_CACHE, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd >= 0) { if (write(fd, out, strlen(out)) < 0) { } close(fd); } +} + +static void log_open(void) +{ + char ts[64]; + get_bootts(ts, sizeof ts); + if (access(LOG_DIR_CARD, W_OK) == 0) + snprintf(g_logfile, sizeof g_logfile, "%s/%s.log", LOG_DIR_CARD, ts); + else + snprintf(g_logfile, sizeof g_logfile, "/tmp/%s.log", ts); + g_logfd = open(g_logfile, O_WRONLY | O_CREAT | O_APPEND, 0644); +} + +/* ---- 启动门控 ---- */ +static int boot_mode_ok(void) +{ + if (g_force) return 1; + FILE *f = fopen(BOOT_MODE_PATH, "r"); + if (!f) return 0; /* 文件缺失=非 meow(未知安全默认) */ + char buf[16] = ""; + if (fscanf(f, "%15s", buf) != 1) { fclose(f); return 0; } + fclose(f); + return strcmp(buf, "meow") == 0; +} + +/* ---- 帧发送(仅 IO 线程用:OPEN_ACK/STATE/PREEMPTED/ACK) ---- */ +static int write_all(int fd, const uint8_t *p, size_t n) +{ + size_t off = 0; + while (off < n) { + ssize_t w = write(fd, p + off, n - off); + if (w < 0) { if (errno == EINTR) continue; return -1; } + if (w == 0) return -1; + off += (size_t)w; + } + return 0; +} + +static int send_frame(int fd, uint16_t type, uint32_t req_id, const void *payload, uint32_t len) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC; + uint16_t ver = MEOW_IPC_VERSION; + memcpy(hdr + 0, &magic, 4); + memcpy(hdr + 4, &ver, 2); + memcpy(hdr + 6, &type, 2); + memcpy(hdr + 8, &req_id, 4); + memcpy(hdr + 12, &len, 4); + if (write_all(fd, hdr, sizeof hdr) != 0) return -1; + if (len && payload && write_all(fd, payload, len) != 0) return -1; + return 0; +} + +/* ---- frame 大小/位深 ---- */ +static int fmt_bps(int fmt) +{ + switch (fmt) { + case AUDIO_FMT_S16: return 2; + case AUDIO_FMT_S24: + case AUDIO_FMT_S32: + case AUDIO_FMT_FLOAT: return 4; + default: return 2; + } +} +static const char *fmt_name(int fmt) +{ + switch (fmt) { + case AUDIO_FMT_S16: return "S16"; + case AUDIO_FMT_S24: return "S24"; + case AUDIO_FMT_S32: return "S32"; + case AUDIO_FMT_FLOAT: return "FLOAT"; + default: return "?"; + } +} +static int frame_size(void) { return g_st.ch * fmt_bps(g_st.fmt); } + +static size_t ring_bytes(void) /* 已缓冲字节 */ +{ + return (g_wpos >= g_rpos) ? (g_wpos - g_rpos) : (g_ring_cap - g_rpos + g_wpos); +} + +/* 播放线程读整块(调用方已持 g_mu;返回实际移动字节,帧对齐裁剪) */ +static size_t ring_read_locked(uint8_t *dst, size_t want) +{ + size_t avail = ring_bytes(); + size_t fs = (size_t)frame_size(); + if (fs == 0) fs = 1; + if (avail > want) avail = want; + size_t n = (avail / fs) * fs; /* 帧对齐 */ + if (n == 0) return 0; + size_t first = g_ring_cap - g_rpos; + size_t take = n < first ? n : first; + memcpy(dst, g_ring + g_rpos, take); + if (take < n) memcpy(dst + take, g_ring, n - take); + g_rpos = (g_rpos + n) % g_ring_cap; + pthread_cond_signal(&g_cond); /* 腾出空间唤醒阻塞的 ring 写入方(IO 线程) */ + return n; +} + +/* IO 线程写整块(调用方已持 g_mu,但可能阻塞等待空间——返回后释放由调用方负责)。 + * 返回 0=写入;-1=流已失效(被抢占/停止,丢弃)。 */ +static int ring_write_locked(const uint8_t *src, size_t want) +{ + size_t fs = (size_t)frame_size(); + if (fs == 0) fs = 1; + size_t n = (want / fs) * fs; + if (n == 0) return 0; + for (;;) { + if (g_stop) return -1; + /* 流失效:非当前授权/被抢占/暂停(PAUSE 不新增,但已缓冲保留) */ + if (!g_st.active) + return -1; + size_t freeb = g_ring_cap - ring_bytes(); + if (freeb >= n) break; + pthread_cond_wait(&g_cond, &g_mu); + } + size_t wpos = g_wpos; + size_t first = g_ring_cap - wpos; + size_t take = n < first ? n : first; + memcpy(g_ring + wpos, src, take); + if (take < n) memcpy(g_ring, src + take, n - take); + g_wpos = (g_wpos + n) % g_ring_cap; + pthread_cond_signal(&g_cond); + return 0; +} + +/* 重建 ring(调用方已持 g_mu;按当前授权流参数算 ~200ms 容量;重建=清空旧流缓冲) */ +static void ring_rebuild(void) +{ + size_t fs = (size_t)frame_size(); + if (fs == 0) fs = 1; + size_t want = (size_t)((uint64_t)g_st.rate * fs / 5); /* 0.2s */ + if (want < RING_MIN) want = RING_MIN; + if (want > RING_MAX) want = RING_MAX; + size_t cap = (want / fs) * fs; + if (cap < fs) cap = fs; + free(g_ring); + g_ring = malloc(cap); + g_ring_cap = g_ring ? cap : 0; + if (!g_ring) g_ring_cap = 0; + g_rpos = g_wpos = 0; + logmsg("ring rebuilt: cap=%zu bytes (~%u ms @ %uHz %s x%u)", + g_ring_cap, (unsigned)(g_ring_cap ? g_ring_cap * 1000 / ((uint64_t)g_st.rate * fs) : 0), + (unsigned)g_st.rate, fmt_name(g_st.fmt), (unsigned)g_st.ch); +} + +/* ---- amixer 封装(popen 限时;无 amixer → 优雅失败) ---- */ +static char *popen_read_tmo(int tmo_ms, const char *cmd) +{ + int p[2]; + if (pipe(p) < 0) return NULL; + pid_t pid = fork(); + if (pid < 0) { close(p[0]); close(p[1]); return NULL; } + if (pid == 0) { dup2(p[1], 1); close(p[0]); close(p[1]); execl("/bin/sh", "sh", "-c", cmd, (char *)0); _exit(127); } + close(p[1]); + fcntl(p[0], F_SETFL, fcntl(p[0], F_GETFL, 0) | O_NONBLOCK); + static char buf[4096]; + size_t off = 0; + int remain = tmo_ms; + while (remain > 0 && off < sizeof buf - 1) { + struct pollfd pf = { p[0], POLLIN, 0 }; + int r = poll(&pf, 1, remain); + if (r < 0) { if (errno == EINTR) continue; break; } + if (r == 0) break; + ssize_t rd = read(p[0], buf + off, sizeof buf - 1 - off); + if (rd == 0) break; + if (rd < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) continue; break; } + off += (size_t)rd; + } + close(p[0]); + waitpid(pid, NULL, 0); + buf[off] = 0; + return buf; +} + +static int amixer_set(int numid, int val, int card) +{ + char cmd[160]; + snprintf(cmd, sizeof cmd, "%s%s cset numid=%d %d >/dev/null 2>&1", + g_amixer, (card ? " -c 0" : ""), numid, val); + char *o = popen_read_tmo(1500, cmd); + if (!o) return -1; + /* popen_read_tmo 用的是静态缓冲,这里不 free(与 meow_route.c 同权衡) */ + return 0; +} + +static int amixer_get(int numid, int card) +{ + char cmd[160]; + snprintf(cmd, sizeof cmd, "%s%s cget numid=%d 2>/dev/null", g_amixer, (card ? " -c 0" : ""), numid); + char *o = popen_read_tmo(1500, cmd); + if (!o) return -1; + const char *ln = o; + while (ln && *ln) { + const char *nl = strchr(ln, '\n'); + const char *p = ln; + while (*p == ' ' || *p == '\t') p++; + if (p[0] == ':' && strncmp(p, ": values=", 9) == 0) { int v = atoi(p + 9); return v; } + if (!nl) break; + ln = nl + 1; + } + return -1; +} + +static void dac_vol_set(int pct) +{ + int dac = pct * 255 / 100; + if (dac < 0) dac = 0; + if (dac > 255) dac = 255; + amixer_set(1, dac, 1); + amixer_set(2, dac, 1); + logmsg("DAC vol -> %d%% (L/R=%d)", pct, dac); +} + +static void dac_vol_mute(void) +{ + amixer_set(1, 0, 1); + amixer_set(2, 0, 1); +} + +static const char *port_name(int port) +{ + switch (port) { + case 2: return "3.5 headset"; + case 3: return "4.4 balance"; + default: return "idle"; + } +} + +/* 应用路由(numid=9)。port 0=idle;写后 cget 校验,失败记日志不重试风暴。 */ +static void apply_route(int port) +{ + if (amixer_set(9, port, 1) < 0) { + logmsg("route: amixer cset numid=9 %d exec failed", port); + return; + } + int rb = amixer_get(9, 1); + if (rb == port) logmsg("route: numid=9 -> %d (%s) ok", port, port_name(port)); + else logmsg("route: verify failed (wanted %d got %d)", port, rb); + g_route_cur = port; +} + +/* 读 switch 文件(0/1 插孔态,-1 读失败) */ +static int read_switch(const char *path) +{ + char buf[32]; + int fd = open(path, O_RDONLY); + if (fd < 0) return -1; + ssize_t n = read(fd, buf, sizeof buf - 1); + close(fd); + if (n <= 0) return -1; + buf[n] = 0; + return atoi(buf); +} + +/* 路由评估(移植自 meow_route.c):4.4 优先;都不插不动;写失败不重试风暴。 */ +static void route_evaluate(int *last_hb, int *last_bal, int *last_target) +{ + if (g_route_manual != -1) return; /* 手动模式:不自动切 */ + int hb = read_switch("/sys/class/switch/headset/state"); + int bal = read_switch("/sys/class/switch/balance/state"); + if (hb < 0 || bal < 0) return; + int prev_hb = *last_hb, prev_bal = *last_bal; + *last_hb = hb; *last_bal = bal; + int target; + if (bal == 1) target = 3; /* 4.4 优先 */ + else if (hb == 1) target = 2; + else target = 0; /* 都不插:保持上次(0=不动?) 用 -1 表示不动 */ + if (bal == 0 && hb == 0) { + if (prev_hb != hb || prev_bal != bal) + logmsg("route: no jack (hs=%d bal=%d), keep last port", hb, bal); + *last_target = -1; + return; + } + int changed = (prev_hb != hb || prev_bal != bal); + if (!changed && *last_target == target) return; + int cur = amixer_get(9, 1); + if (cur == target) { *last_target = target; if (changed) logmsg("route: %s already", port_name(target)); return; } + logmsg("route: jack changed -> %s (wanted %d, was %d)", port_name(target), target, cur); + apply_route(target); + *last_target = target; +} + +/* ---- settings.conf 写 audio.volume(同 launcher 同源同键) ---- */ +static void settings_set_volume(int pct) +{ + FILE *f = fopen(SETTINGS_CONF, "r"); + char *data = NULL; + size_t len = 0; + if (f) { + fseek(f, 0, SEEK_END); + long sz = ftell(f); + if (sz > 0 && sz < 64 * 1024) { + fseek(f, 0, SEEK_SET); + data = malloc((size_t)sz + 1); + if (data) { len = fread(data, 1, (size_t)sz, f); data[len] = 0; } + } + fclose(f); + } + char val[16]; + snprintf(val, sizeof val, "%d", pct); + char *out = malloc(len + 64); + if (!out) { free(data); return; } + out[0] = 0; + size_t o = 0; + int replaced = 0; + if (data) { + char *save = NULL; + char *ln = strtok_r(data, "\n", &save); + while (ln) { + char *k = ln; + while (*k == ' ' || *k == '\t') k++; + int m = strncmp(k, "audio.volume", 12); + if (m != 0) { + int n = snprintf(out + o, len + 64 - o, "%s\n", ln); + if (n > 0) o += (size_t)n; + } else { + int t = snprintf(out + o, len + 64 - o, "audio.volume = %s\n", val); + if (t > 0) o += (size_t)t; + replaced = 1; + } + ln = strtok_r(NULL, "\n", &save); + } + free(data); + } + if (!replaced) { + int n = snprintf(out + o, len + 64 - o, "audio.volume = %s\n", val); + if (n > 0) o += (size_t)n; + } + mkdir("/usr/data/meow", 0755); + int fd = open(SETTINGS_CONF, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd >= 0) { + /* 若原文件带 "# meow-settings 1" 头则保留——我们已被动保留了内容(含头)。 + * 无头(新文件)补一行头,符合 meow_settings 的解析预期。 */ + if (!replaced && o > 0) { + /* 检查首行是否已含头 */ + int has_hdr = (strncmp(out, "# meow-settings", 15) == 0); + if (!has_hdr) { + char tmp[64]; + int hn = snprintf(tmp, sizeof tmp, "# meow-settings 1\n"); + if (write(fd, tmp, (size_t)hn) < 0) { } + } + } + if (write(fd, out, o) < 0) { } + close(fd); + } + free(out); + logmsg("audio.volume persisted -> %d (%s)", pct, SETTINGS_CONF); +} + +static int settings_get_volume(void) +{ + FILE *f = fopen(SETTINGS_CONF, "r"); + if (!f) return g_vol_pct; + char line[128]; + int v = g_vol_pct; + while (fgets(line, sizeof line, f)) { + char *k = line; + while (*k == ' ' || *k == '\t') k++; + if (strncmp(k, "audio.volume", 12) == 0) { + char *eq = strchr(k, '='); + if (eq) { v = atoi(eq + 1); break; } + } + } + fclose(f); + return v; +} + +/* ---- ALSA UAPI ---- */ +#ifdef AUDIOD_HAVE_ALSA +static void pmask(struct snd_mask *m, unsigned bit) { m->bits[bit / 32] |= 1u << (bit % 32); } +static void pivset(struct snd_interval *iv, unsigned val) +{ + iv->min = iv->max = val; + iv->integer = 1; + iv->openmin = iv->openmax = 0; + iv->empty = 0; +} +/* 初始化为「全放行」(libasound snd_pcm_hw_params_any 语义):所有 mask 全 1、所有 interval + * [0, UINT_MAX]。**必须**:memset 0 的 interval(min=max=0)等价于「只能取 0」,内核 refine + * 与设备真实约束求交必为空 → HW_PARAMS 恒 EINVAL(真机踩过,agent-244 probe_alsa 全灭定位)。 */ +static void alsa_params_any(struct snd_pcm_hw_params *p) +{ + memset(p, 0, sizeof *p); + unsigned nm = SNDRV_PCM_HW_PARAM_LAST_MASK - SNDRV_PCM_HW_PARAM_FIRST_MASK + 1; + for (unsigned i = 0; i < nm; i++) + for (unsigned b = 0; b < sizeof p->masks[i].bits / sizeof p->masks[i].bits[0]; b++) + p->masks[i].bits[b] = ~0u; + unsigned ni = SNDRV_PCM_HW_PARAM_LAST_INTERVAL - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1; + for (unsigned i = 0; i < ni; i++) { + p->intervals[i].min = 0; + p->intervals[i].max = ~0u; + } +} +static int alsa_hw_params(int fd, unsigned rate, unsigned ch, unsigned fmt) +{ + struct snd_pcm_hw_params p; + alsa_params_any(&p); + p.flags = 0; + /* mask 必须「先清零再单点」:params_any 已把 mask 置全 1,pmask 只 OR 不清位—— + * 若 access 留全 1,内核 choose 取最低 bit=MMAP_INTERLEAVED,runtime->access≠RW_INTERLEAVED + * → 之后 write() 恒 EINVAL(真机踩过第二坑;libasound 靠 plug 层自动转 mmap 掩盖了它)。 */ + struct snd_mask *am = &p.masks[SNDRV_PCM_HW_PARAM_ACCESS - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(am, 0, sizeof *am); pmask(am, SNDRV_PCM_ACCESS_RW_INTERLEAVED); + struct snd_mask *fm = &p.masks[SNDRV_PCM_HW_PARAM_FORMAT - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(fm, 0, sizeof *fm); pmask(fm, fmt); + struct snd_mask *sm = &p.masks[SNDRV_PCM_HW_PARAM_SUBFORMAT - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(sm, 0, sizeof *sm); pmask(sm, SNDRV_PCM_SUBFORMAT_STD); + pivset(&p.intervals[SNDRV_PCM_HW_PARAM_CHANNELS - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL], ch); + pivset(&p.intervals[SNDRV_PCM_HW_PARAM_RATE - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL], rate); + p.rmask = ~0u; p.info = 0; p.msbits = 0; p.rate_num = 0; p.rate_den = 0; + return ioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, &p); +} +#endif + +static int alsa_fmt_to_snd(int fmt) +{ + switch (fmt) { + case AUDIO_FMT_S16: return SNDRV_PCM_FORMAT_S16_LE; + case AUDIO_FMT_S24: return SNDRV_PCM_FORMAT_S24_LE; + case AUDIO_FMT_S32: return SNDRV_PCM_FORMAT_S32_LE; + case AUDIO_FMT_FLOAT: return SNDRV_PCM_FORMAT_FLOAT_LE; + default: return SNDRV_PCM_FORMAT_S16_LE; + } +} + +/* 探测硬件最优格式(设备空闲时调用;缓存 g_hw_fmt)。返回 0=确定,-1=无法探测。 */ +static int hw_probe(void) +{ + if (g_sink != SINK_ALSA) { g_hw_fmt = AUDIO_FMT_S16; g_hw_probed = 1; return 0; } + if (g_hw_probed) return 0; +#ifdef AUDIOD_HAVE_ALSA + int fd = open(DEV_PCM, O_RDWR); + if (fd >= 0) { + if (alsa_hw_params(fd, 44100, 2, SNDRV_PCM_FORMAT_S16_LE) == 0) { g_hw_fmt = AUDIO_FMT_S16; close(fd); g_hw_probed = 1; return 0; } + close(fd); + } + fd = open(DEV_PCM, O_RDWR); + if (fd >= 0) { + if (alsa_hw_params(fd, 44100, 2, SNDRV_PCM_FORMAT_S32_LE) == 0) { g_hw_fmt = AUDIO_FMT_S32; close(fd); g_hw_probed = 1; return 0; } + close(fd); + } +#endif + g_hw_fmt = AUDIO_FMT_S16; + g_hw_probed = 1; + return -1; +} + +/* ---- FILE/NULL sink ---- */ +static void wav_header(int fd, int rate, int ch, int bits, uint32_t data_len) +{ + unsigned char h[44]; + memset(h, 0, sizeof h); + memcpy(h + 0, "RIFF", 4); + uint32_t le = 36 + data_len; memcpy(h + 4, &le, 4); + memcpy(h + 8, "WAVE", 4); + memcpy(h + 12, "fmt ", 4); + le = 16; memcpy(h + 16, &le, 4); + uint16_t s16 = 1; memcpy(h + 20, &s16, 2); + s16 = (uint16_t)ch; memcpy(h + 22, &s16, 2); + le = (uint32_t)rate; memcpy(h + 24, &le, 4); + le = (uint32_t)(rate * ch * bits / 8); memcpy(h + 28, &le, 4); + s16 = (uint16_t)(ch * bits / 8); memcpy(h + 32, &s16, 2); + s16 = (uint16_t)bits; memcpy(h + 34, &s16, 2); + memcpy(h + 36, "data", 4); + le = data_len; memcpy(h + 40, &le, 4); + if (write(fd, h, 44) != 44) { } +} + +/* ---- 播放线程设备管理(dev_open/close/write 皆在播放线程调用) ---- */ + +static int dev_open(void) +{ + uint32_t rate = g_st.rate, ch = g_st.ch, fmt = g_st.fmt; + int bits = fmt_bps((int)fmt) * 8; + if (g_sink == SINK_ALSA) { +#ifdef AUDIOD_HAVE_ALSA + int fd = open(DEV_PCM, O_RDWR); + if (fd < 0) { logmsg("dev open %s: %s", DEV_PCM, strerror(errno)); return -1; } + if (alsa_hw_params(fd, rate, ch, alsa_fmt_to_snd((int)fmt)) != 0) { + logmsg("dev hw_params %u/%u/%s failed", (unsigned)rate, (unsigned)ch, fmt_name((int)fmt)); + close(fd); + return -1; + } + ioctl(fd, SNDRV_PCM_IOCTL_PREPARE, 0); + return fd; +#else + return -1; +#endif + } + if (g_sink == SINK_FILE) { + int fd = open(g_out_wav, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) { logmsg("dev open wav %s: %s", g_out_wav, strerror(errno)); return -1; } + wav_header(fd, (int)rate, (int)ch, bits, 0); + return fd; + } + return -2; /* NULL sink */ +} + +static void dev_write(uint8_t *buf, size_t n) +{ + if (g_sink == SINK_NULL) { g_played_frames += n / (size_t)frame_size(); return; } + if (g_sink == SINK_ALSA) { +#ifdef AUDIOD_HAVE_ALSA + if (g_dev_fd < 0) { + /* 设备开失败(hw_params 拒/无卡):丢弃 PCM 防 ring 堵死 + 背压卡死客户端; + * 日志限频(每 256 次一记),避免 write(-1) 错误风暴(真机踩过)。 */ + static unsigned s_drop = 0; + if ((s_drop++ % 256) == 0) + logmsg("dev_write dropped %zu bytes (device not open, x%u)", n, s_drop); + g_played_frames += n / (size_t)frame_size(); + return; + } + size_t off = 0; + while (off < n) { + ssize_t w = write(g_dev_fd, buf + off, n - off); + if (w > 0) { off += (size_t)w; continue; } + if (w < 0) { + if (errno == EINTR || errno == EAGAIN) continue; + if (errno == EPIPE) { /* xrun:重备 + 恢复(设计 §2) */ + g_underrun++; + logmsg("xrun #%u -> PREPARE", (unsigned)g_underrun); + ioctl(g_dev_fd, SNDRV_PCM_IOCTL_PREPARE, 0); + continue; + } + logmsg("alsa write err: %s", strerror(errno)); + break; + } + break; + } + size_t done = (off / (size_t)frame_size()) * (size_t)frame_size(); + g_played_frames += done / (size_t)frame_size(); +#endif + return; + } + if (g_sink == SINK_FILE) { + if (write(g_dev_fd, buf, n) > 0) + g_played_frames += n / (size_t)frame_size(); + } +} + +static void dev_close(void) +{ + if (g_sink == SINK_FILE && g_dev_fd >= 0 && g_dev_fd != -2) { + off_t end = lseek(g_dev_fd, 0, SEEK_END); + if (end > 44) { + uint32_t data_len = (uint32_t)(end - 44); + lseek(g_dev_fd, 4, SEEK_SET); /* RIFF 总长(36 + data) */ + uint32_t le = 36 + data_len; if (write(g_dev_fd, &le, 4) != 4) { } + lseek(g_dev_fd, 40, SEEK_SET); /* data 块长(rate/ch/bits 头已由 wav_header 写入) */ + if (write(g_dev_fd, &data_len, 4) != 4) { } + } + close(g_dev_fd); + } else if (g_dev_fd >= 0 && g_dev_fd != -2) { + close(g_dev_fd); + } + g_dev_fd = -1; + g_dev_open = 0; +} + +/* 播放线程:处理一次重配(静音 → 关旧 → 开新 → 复原)。调用方已持 g_mu。 */ +static void reconfigure_locked(void) +{ + uint32_t rate = g_st.rate, ch = g_st.ch, fmt = g_st.fmt; + logmsg("reconfigure device: %u/%u/%s", (unsigned)rate, (unsigned)ch, fmt_name((int)fmt)); + int saved_vol = g_vol_pct; + if (g_sink == SINK_ALSA) dac_vol_mute(); /* 防爆音:重配前静音 */ + dev_close(); + g_dev_fd = dev_open(); + if (g_dev_fd >= 0 || (g_sink == SINK_NULL && g_dev_fd == -2)) { + g_dev_open = 1; + g_dev_rate = rate; g_dev_ch = ch; g_dev_fmt = fmt; + if (g_dev_fd == -2) g_dev_fd = -1; /* NULL sink:无真实 fd */ + if (g_sink == SINK_ALSA) dac_vol_set(saved_vol); /* 复原 */ + logmsg("device open ok: %u/%u/%s sink=%d", (unsigned)rate, (unsigned)ch, fmt_name((int)fmt), g_sink); + } else { + logmsg("device open FAILED !!"); + } + g_reconfig_pending = 0; +} + +/* 播放线程主体。 + * 语义:只有当前授权流(g_st.active)喂 DAC;暂停时不读 ring(保留已缓冲); + * 停止/EOF 时不丢尾——先排空 ring 再关设备(否则 tone 末尾/缓冲尾被截断)。 */ +static void *playback_thread(void *arg) +{ + (void)arg; + static uint8_t buf[READ_CHUNK]; + for (;;) { + int have = 0; + pthread_mutex_lock(&g_mu); + for (;;) { + if (g_stop) { have = -1; break; } + int fs = frame_size(); + if (fs <= 0) { pthread_cond_wait(&g_cond, &g_mu); continue; } /* 无流 param → 等 */ + if (g_reconfig_pending) { have = 1; break; } /* 重配 */ + int draining = !g_st.active; + int paused = g_st.active && g_paused; + size_t av = ring_bytes(); + if ((draining && av < (size_t)fs) || paused) { + /* 排空完毕(或暂停):若设备仍开且已排空 → 关;否则等待 */ + if (draining && g_dev_open) dev_close(); + pthread_cond_wait(&g_cond, &g_mu); + continue; + } + if (draining || av >= (size_t)fs) { have = 2; break; } /* 有数据可读(或排空态) */ + pthread_cond_wait(&g_cond, &g_mu); + } + if (have == -1) { pthread_mutex_unlock(&g_mu); break; } + if (have == 1) { reconfigure_locked(); pthread_mutex_unlock(&g_mu); continue; } + if (have == 0) { if (g_dev_open) dev_close(); pthread_mutex_unlock(&g_mu); continue; } + size_t want = READ_CHUNK; + size_t fs = (size_t)frame_size(); + if (fs > 0) want = (want / fs) * fs; + size_t n = ring_read_locked(buf, want); + pthread_mutex_unlock(&g_mu); + if (n == 0) continue; + dev_write(buf, n); + } + pthread_mutex_lock(&g_mu); + if (g_dev_open) dev_close(); + pthread_mutex_unlock(&g_mu); + return NULL; +} + +/* ---- 客户端管理 ---- */ +static struct client *cli_by_fd(int fd) +{ + for (int i = 0; i < CLI_MAX; i++) + if (g_cli[i].used && g_cli[i].fd == fd) return &g_cli[i]; + return NULL; +} +static struct client *cli_alloc(int fd) +{ + struct client *freec = NULL; + for (int i = 0; i < CLI_MAX; i++) { + if (g_cli[i].used) continue; + freec = &g_cli[i]; + break; + } + if (!freec) return NULL; + memset(freec, 0, sizeof *freec); + freec->used = 1; + freec->fd = fd; + freec->state = CLS_OPEN; + freec->sid = 0; + return freec; +} +static void cli_free(struct client *c) +{ + if (!c || !c->used) return; + if (c->fd >= 0) close(c->fd); + c->used = 0; + c->fd = -1; + if (g_st.active && g_st.sid == c->sid) { + logmsg("client EOF: stream %u recycled (app=%s)", (unsigned)c->sid, g_st.app_id); + g_st.active = 0; + g_sid_reset(); + } +} +static void g_sid_reset(void) +{ + /* 停止/EOF 只标记流结束 + 唤醒播放线程排空 ring(**不清空 ring**:未播完的缓冲要写完 + * 才关设备,否则 tone/播放末尾被截断)。ring 的重置只发生在 OPEN 授予新流时(ring_rebuild)。 */ + g_paused = 0; + g_reconfig_pending = 0; + pthread_cond_signal(&g_cond); +} + +/* 处理一个客户端帧(调用方已持 g_mu) */ +static void dispatch(struct client *c, uint16_t type, uint32_t req_id, const uint8_t *pl, uint32_t len) +{ + switch (type) { + case MSG_AUDIO_OPEN: { + if (len < sizeof(m_audio_open_t)) { m_audio_open_ack_t a; memset(&a, 0, sizeof a); a.err = MEOW_ERR_INVAL; send_frame(c->fd, MSG_AUDIO_OPEN_ACK, req_id, &a, sizeof a); return; } + m_audio_open_t o; + memcpy(&o, pl, sizeof o); + if (o.ch > 2 || o.fmt < AUDIO_FMT_S16 || o.fmt > AUDIO_FMT_FLOAT || o.fmt == AUDIO_FMT_FLOAT || o.rate == 0) { + m_audio_open_ack_t a; memset(&a, 0, sizeof a); a.err = MEOW_ERR_INVAL; + send_frame(c->fd, MSG_AUDIO_OPEN_ACK, req_id, &a, sizeof a); + logmsg("open rejected: ch=%u fmt=%d rate=%u", (unsigned)o.ch, o.fmt, (unsigned)o.rate); + return; + } + hw_probe(); + if (g_sink == SINK_ALSA && !g_hw_probed) { + m_audio_open_ack_t a; memset(&a, 0, sizeof a); a.err = MEOW_ERR_NODEV; + send_frame(c->fd, MSG_AUDIO_OPEN_ACK, req_id, &a, sizeof a); + logmsg("open rejected: no usable PCM device"); + return; + } + int grant_fmt = (g_sink == SINK_ALSA) ? g_hw_fmt : AUDIO_FMT_S16; + uint32_t sid = g_next_sid++; + /* 抢占:已有当前流 → 旧客户端收 PREEMPTED */ + if (g_st.active) { + struct client *old = NULL; + for (int i = 0; i < CLI_MAX; i++) + if (g_cli[i].used && g_cli[i].sid == g_st.sid) { old = &g_cli[i]; break; } + if (old && old != c) { + m_audio_preempted_t p; + memset(&p, 0, sizeof p); + p.stream_id = g_st.sid; + snprintf(p.by_app, sizeof p.by_app, "%s", o.app_id); + send_frame(old->fd, MSG_AUDIO_PREEMPTED, 0, &p, sizeof p); + old->state = CLS_DRAINING; + logmsg("PREEMPTED stream %u by %s", (unsigned)g_st.sid, o.app_id); + } + } + /* 授权新流 */ + c->sid = sid; + c->state = CLS_OPEN; + snprintf(c->app_id, sizeof c->app_id, "%s", o.app_id); + g_st.active = 1; + g_st.sid = sid; + snprintf(g_st.app_id, sizeof g_st.app_id, "%s", o.app_id); + g_st.rate = o.rate; + g_st.ch = 2; /* DAC 双声道:mCh→stereo 由 SDK 复制 */ + g_st.fmt = (uint16_t)grant_fmt; + g_paused = 0; + g_written_frames = g_played_frames = 0; + g_underrun = 0; + /* 重建 ring + 标记重配 */ + ring_rebuild(); + _audio_mark_reconfig_needed(); + m_audio_open_ack_t a; + memset(&a, 0, sizeof a); + a.stream_id = sid; + a.grant_rate = o.rate; + a.grant_ch = g_st.ch; + a.grant_fmt = g_st.fmt; + a.err = MEOW_OK; + send_frame(c->fd, MSG_AUDIO_OPEN_ACK, req_id, &a, sizeof a); + logmsg("OPEN grant: sid=%u app=%s rate=%u ch=%u fmt=%s", (unsigned)sid, g_st.app_id, (unsigned)o.rate, (unsigned)g_st.ch, fmt_name((int)g_st.fmt)); + break; + } + case MSG_AUDIO_WRITE: { + /* 仅当前授权流、非 draining、非 paused 才入 ring;否则丢弃 */ + if (g_st.active && c->sid == g_st.sid && c->state != CLS_DRAINING && !g_paused && c->state != CLS_PAUSED) { + if (g_ring) { + ring_write_locked(pl, len); + int fs = frame_size(); + if (fs > 0) + g_written_frames += len / (uint32_t)fs; + } + } + break; + } + case MSG_AUDIO_PAUSE: + case MSG_AUDIO_RESUME: + case MSG_AUDIO_STOP: { + uint32_t sid = 0; + if (len >= sizeof(uint32_t)) memcpy(&sid, pl, sizeof sid); + if (sid == g_st.sid && g_st.active) { + if (type == MSG_AUDIO_PAUSE) { g_paused = 1; c->state = CLS_PAUSED; logmsg("pause sid=%u", (unsigned)sid); } + else if (type == MSG_AUDIO_RESUME){ g_paused = 0; c->state = CLS_OPEN; logmsg("resume sid=%u", (unsigned)sid); } + else /* STOP */ { + logmsg("STOP sid=%u (app=%s)", (unsigned)sid, g_st.app_id); + g_st.active = 0; + g_st.sid = 0; + c->sid = 0; + c->state = CLS_OPEN; + g_sid_reset(); + } + } else if (type == MSG_AUDIO_STOP) { + /* 非当前/已 draining 流:仅清客户端绑定 */ + if (c->sid == sid) { c->sid = 0; } + } + m_ack_t a; a.code = MEOW_OK; a.status = 0; + send_frame(c->fd, MSG_ACK, req_id, &a, sizeof a); + break; + } + case MSG_AUDIO_QUERY: { + char txt[1024]; + int rb = amixer_get(9, 1); + int vol = g_vol_pct; + snprintf(txt, sizeof txt, + "active=%d app=%s sid=%u rate=%u ch=%u fmt=%s " + "written=%llu played=%llu underrun=%u paused=%d " + "route_mode=%s port=%d vol=%d\n", + g_st.active ? 1 : 0, + g_st.active ? g_st.app_id : "-", + (unsigned)g_st.sid, (unsigned)g_st.rate, (unsigned)g_st.ch, + g_st.active ? fmt_name((int)g_st.fmt) : "-", + (unsigned long long)g_written_frames, + (unsigned long long)g_played_frames, + (unsigned)g_underrun, g_paused, + g_route_manual == -1 ? "auto" : "manual", + (g_route_manual != -1 ? g_route_manual : rb), + vol); + send_frame(c->fd, MSG_AUDIO_STATE, req_id, txt, (uint32_t)strlen(txt) + 1); + break; + } + case MSG_AUDIO_ROUTE: { + uint32_t port = 0; + if (len >= sizeof(uint32_t)) memcpy(&port, pl, sizeof port); + if (port == 0) { g_route_manual = -1; logmsg("route manual -> auto"); } + else if (port == 2 || port == 3) { g_route_manual = (int)port; apply_route((int)port); } + else { logmsg("route: invalid port %u", (unsigned)port); } + m_ack_t a; a.code = MEOW_OK; a.status = 0; + send_frame(c->fd, MSG_ACK, req_id, &a, sizeof a); + break; + } + case MSG_AUDIO_VOLUME: { + int32_t pct = -1; + if (len >= sizeof(int32_t)) memcpy(&pct, pl, sizeof pct); + if (pct >= 0) { + if (pct > 100) pct = 100; + g_vol_pct = (int)pct; + dac_vol_set((int)pct); + settings_set_volume((int)pct); + } else { + g_vol_pct = settings_get_volume(); + } + m_ack_t a; a.code = MEOW_OK; a.status = (uint32_t)g_vol_pct; + send_frame(c->fd, MSG_ACK, req_id, &a, sizeof a); + break; + } + default: + break; + } +} + +/* 需要时标着重配:参数与当前设备不同才重开 */ +static void _audio_mark_reconfig_needed(void) +{ + if (!g_dev_open || g_dev_rate != g_st.rate || g_dev_ch != g_st.ch || g_dev_fmt != g_st.fmt) + g_reconfig_pending = 1; + pthread_cond_signal(&g_cond); +} + +/* 读客户端帧(调用方已持 g_mu)。读失败(EOF/错)→ 回收。 */ +static void cx_read_frames(struct client *c) +{ + ssize_t r = read(c->fd, c->rbuf + c->rlen, sizeof c->rbuf - c->rlen); + if (r <= 0) { + if (r < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) return; + cli_free(c); + return; + } + c->rlen += (size_t)r; + /* 处理所有完整帧 */ + while (c->rlen >= MEOW_IPC_HDR_LEN) { + uint32_t magic, len; + uint16_t ver, type; + memcpy(&magic, c->rbuf, 4); + memcpy(&ver, c->rbuf + 4, 2); + memcpy(&type, c->rbuf + 6, 2); + memcpy(&len, c->rbuf + 12, 4); + if (magic != MEOW_IPC_MAGIC || ver != MEOW_IPC_VERSION) { + logmsg("bad frame from client (magic=%08x ver=%u) -> drop conn", (unsigned)magic, (unsigned)ver); + cli_free(c); + return; + } + if (len > MEOW_IPC_MAX) { + logmsg("frame too long (%u) -> drop conn", (unsigned)len); + cli_free(c); + return; + } + size_t total = MEOW_IPC_HDR_LEN + len; + if (c->rlen < total) break; + uint32_t req_id; + memcpy(&req_id, c->rbuf + 8, 4); + dispatch(c, type, req_id, c->rbuf + MEOW_IPC_HDR_LEN, len); + memmove(c->rbuf, c->rbuf + total, c->rlen - total); + c->rlen -= total; + } +} + +/* ---- IO 线程主体 ---- */ +static void *io_thread(void *arg) +{ + (void)arg; + int lfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (lfd < 0) { logmsg("io: socket: %s", strerror(errno)); return NULL; } + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + snprintf(a.sun_path, sizeof a.sun_path, "%s", g_sock); + unlink(g_sock); + if (bind(lfd, (struct sockaddr *)&a, sizeof a) != 0) { + logmsg("io: bind %s: %s", g_sock, strerror(errno)); + close(lfd); + return NULL; + } + chmod(g_sock, 0666); + if (listen(lfd, 4) != 0) { logmsg("io: listen: %s", strerror(errno)); close(lfd); return NULL; } + logmsg("io thread listening on %s", g_sock); + + for (;;) { + if (g_stop) break; + struct pollfd pfds[CLI_MAX + 1]; + int n = 1; + pfds[0].fd = lfd; pfds[0].events = POLLIN; pfds[0].revents = 0; + for (int i = 0; i < CLI_MAX; i++) { + if (!g_cli[i].used) continue; + pfds[n].fd = g_cli[i].fd; pfds[n].events = POLLIN; pfds[n].revents = 0; + n++; + } + int pr = poll(pfds, (nfds_t)n, 200); + if (pr < 0) { if (errno == EINTR) continue; break; } + /* pfds 是本轮新数组(revents 本轮清零),直接以 revents 为准(238 教训:每圈重建, + * 杜绝陈旧 revents。勿在此清零)。 */ + struct pollfd snaps[CLI_MAX + 1]; + memcpy(snaps, pfds, sizeof snaps); + pthread_mutex_lock(&g_mu); + (void)pr; + /* 处理 listen */ + if ((snaps[0].revents & POLLIN)) { + int cfd = accept(lfd, NULL, NULL); + if (cfd >= 0) { + fcntl(cfd, F_SETFL, fcntl(cfd, F_GETFL, 0) | O_NONBLOCK); + int one = 1; + setsockopt(cfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one); + struct client *c = cli_alloc(cfd); + if (!c) { close(cfd); logmsg("io: client limit reached, drop"); } + else logmsg("io: client connected (fd=%d)", cfd); + } + } + /* 处理客户读数(用本轮 revents 快照,避免连接被 cli_free 后误用) */ + for (int i = 1; i < n; i++) { + if (snaps[i].revents == 0) continue; + struct client *c = cli_by_fd(snaps[i].fd); + if (!c) continue; + if (snaps[i].revents & (POLLHUP | POLLERR | POLLNVAL)) { cli_free(c); continue; } + if (snaps[i].revents & POLLIN) cx_read_frames(c); + } + pthread_mutex_unlock(&g_mu); + /* 路由线程与播放线程独立;此处不再做 */ + } + pthread_mutex_lock(&g_mu); + for (int i = 0; i < CLI_MAX; i++) if (g_cli[i].used) cli_free(&g_cli[i]); + pthread_mutex_unlock(&g_mu); + close(lfd); + return NULL; +} + +/* ---- 路由线程主体 ---- */ +static void *route_thread(void *arg) +{ + (void)arg; + int last_hb = -1, last_bal = -1, last_target = -1; + logmsg("route thread init (numid=9, %s)", g_amixer); + while (!g_stop) { + pthread_mutex_lock(&g_mu); + route_evaluate(&last_hb, &last_bal, &last_target); + pthread_mutex_unlock(&g_mu); + int naps = 5; /* 1000ms / 200ms 分段,即时响应 SIGTERM */ + for (int k = 0; k < naps && !g_stop; k++) { + struct timespec ts = { 0, 200 * 1000000L }; + nanosleep(&ts, NULL); + } + } + return NULL; +} + +static void on_sig(int sig) +{ + (void)sig; + g_stop = 1; + pthread_cond_signal(&g_cond); +} + +int main(int argc, char **argv) +{ + const char *e; + /* 参数/env 覆盖 */ + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "--sock") && i + 1 < argc) snprintf(g_sock, sizeof g_sock, "%s", argv[++i]); + else if (!strcmp(argv[i], "--out") && i + 1 < argc) snprintf(g_out_wav, sizeof g_out_wav, "%s", argv[++i]); + else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { + printf("meow_audiod [--sock ] [--out ]\n env: MEOW_AUDIO_SOCK/MEOW_AUDIO_OUT/MEOW_AUDIO_SINK(alsa|file|null)/MEOW_AUDIO_AMIXER/MEOW_AUDIO_FORCE=1\n"); + return 0; + } + } + if ((e = getenv("MEOW_AUDIO_SOCK")) && e[0]) snprintf(g_sock, sizeof g_sock, "%s", e); + if ((e = getenv("MEOW_AUDIO_OUT")) && e[0]) snprintf(g_out_wav, sizeof g_out_wav, "%s", e); + if ((e = getenv("MEOW_AUDIO_AMIXER")) && e[0]) g_amixer = e; + if ((e = getenv("MEOW_AUDIO_FORCE")) && e[0] == '1') g_force = 1; + const char *sink = getenv("MEOW_AUDIO_SINK"); + if (sink && sink[0]) { + if (!strcmp(sink, "file")) g_sink = SINK_FILE; + else if (!strcmp(sink, "null")) g_sink = SINK_NULL; + else if (!strcmp(sink, "alsa")) g_sink = SINK_ALSA; + } else { + /* 自动:/dev/snd/pcmC0D0p 存在 → ALSA;否则 FILE */ + if (access(DEV_PCM, F_OK) == 0) g_sink = SINK_ALSA; + else g_sink = SINK_FILE; + } + + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, on_sig); + signal(SIGINT, on_sig); + + /* --- 启动门控(红线) --- */ + if (!boot_mode_ok()) { + fprintf(stderr, "[audiod] not MeowOS mode (/tmp/meow_boot_mode != meow), exit\n"); + return 0; + } + + log_open(); + logmsg("meow_audiod start: sock=%s sink=%d wav=%s force=%d", g_sock, g_sink, g_out_wav, g_force); + if (g_sink == SINK_ALSA) hw_probe(); + g_vol_pct = settings_get_volume(); + logmsg("volume init = %d%%", g_vol_pct); + + pthread_t ti, tp, tr; + pthread_create(&ti, NULL, io_thread, NULL); + pthread_create(&tp, NULL, playback_thread, NULL); + pthread_create(&tr, NULL, route_thread, NULL); + + while (!g_stop) { + struct timespec ts = { 1, 0 }; + nanosleep(&ts, NULL); + } + logmsg("meow_audiod shutdown"); + pthread_join(ti, NULL); + pthread_join(tp, NULL); + pthread_join(tr, NULL); + unlink(g_sock); + if (g_logfd >= 0) close(g_logfd); + return 0; +} diff --git a/patch_v2/meow_audiod/meow_audiod_host b/patch_v2/meow_audiod/meow_audiod_host new file mode 100755 index 0000000000000000000000000000000000000000..d1e5517f87893d0ace3c5f1b27a88f2e02767c25 GIT binary patch literal 75744 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 Ve-J0rW*=YsA>nT)Pabw(|36sH!%P4G literal 0 HcmV?d00001 diff --git a/patch_v2/meow_audiod/probe_alsa.c b/patch_v2/meow_audiod/probe_alsa.c new file mode 100644 index 0000000..3d0ab05 --- /dev/null +++ b/patch_v2/meow_audiod/probe_alsa.c @@ -0,0 +1,75 @@ +#define _GNU_SOURCE +/* probe_alsa.c — 探测 R3 Pro II CS43198 PCM 设备的 hw_params 约束(找可用的 access/format/rate)。 + * mipsel 交叉编译后推到设备运行,输出 kernel 支持哪些组合,诊断「hw_params ioctl 失败」。 */ +#include +#include +#include +#include +#include +#include +#include +#include + +static void pmask(struct snd_mask *m, unsigned bit) { m->bits[bit / 32] |= 1u << (bit % 32); } +static void pivset(struct snd_interval *iv, unsigned val) +{ + iv->min = iv->max = val; iv->integer = 1; iv->openmin = iv->openmax = 0; iv->empty = 0; +} +static const char *fmt_name(unsigned f) +{ +#define N(x) case x: return #x + switch (f) { + N(SNDRV_PCM_FORMAT_S8); N(SNDRV_PCM_FORMAT_U8); N(SNDRV_PCM_FORMAT_S16_LE); + N(SNDRV_PCM_FORMAT_S16_BE); N(SNDRV_PCM_FORMAT_U16_LE); N(SNDRV_PCM_FORMAT_U16_BE); + N(SNDRV_PCM_FORMAT_S24_LE); N(SNDRV_PCM_FORMAT_S24_BE); N(SNDRV_PCM_FORMAT_S32_LE); + N(SNDRV_PCM_FORMAT_S32_BE); N(SNDRV_PCM_FORMAT_FLOAT_LE); N(SNDRV_PCM_FORMAT_FLOAT_BE); + N(SNDRV_PCM_FORMAT_S24_3LE); N(SNDRV_PCM_FORMAT_S24_3BE); N(SNDRV_PCM_FORMAT_U24_LE); + N(SNDRV_PCM_FORMAT_S20_3LE); N(SNDRV_PCM_FORMAT_S20_3BE); + default: return "?"; + } +#undef N +} + +int main(void) +{ + setvbuf(stdout, NULL, _IONBF, 0); /* 每行立即刷出,防 kill 丢输出 */ + const char *dev = "/dev/snd/pcmC0D0p"; + unsigned access[] = { SNDRV_PCM_ACCESS_MMAP_INTERLEAVED, SNDRV_PCM_ACCESS_RW_INTERLEAVED, + SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED, SNDRV_PCM_ACCESS_RW_NONINTERLEAVED, ~0u }; + unsigned fmts[] = { SNDRV_PCM_FORMAT_S16_LE, SNDRV_PCM_FORMAT_S24_LE, SNDRV_PCM_FORMAT_S32_LE, + SNDRV_PCM_FORMAT_S24_3LE, ~0u }; + unsigned rates[] = { 44100, 48000, 96000, 88200, ~0u }; + for (unsigned ai = 0; access[ai] != ~0u; ai++) { + for (unsigned fi = 0; fmts[fi] != ~0u; fi++) { + printf("== access=%u fmt=%s ==\n", access[ai], fmt_name(fmts[fi])); + struct snd_pcm_hw_params p; + for (unsigned ri = 0; rates[ri] != ~0u; ri++) { + int fd = open(dev, O_RDWR | O_NONBLOCK); + if (fd < 0) { printf(" open: %s\n", strerror(errno)); break; } + /* 「全放行」初始化:memset 0 的 interval =「只能取 0」→ refine 必空 EINVAL + *(2026-08-31 真机全灭的根因;libasound snd_pcm_hw_params_any 语义) */ + memset(&p, 0, sizeof p); + unsigned nm = SNDRV_PCM_HW_PARAM_LAST_MASK - SNDRV_PCM_HW_PARAM_FIRST_MASK + 1; + for (unsigned i = 0; i < nm; i++) + for (unsigned b = 0; b < sizeof p.masks[i].bits / sizeof p.masks[i].bits[0]; b++) + p.masks[i].bits[b] = ~0u; + unsigned ni = SNDRV_PCM_HW_PARAM_LAST_INTERVAL - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1; + for (unsigned i = 0; i < ni; i++) { p.intervals[i].min = 0; p.intervals[i].max = ~0u; } + /* mask 先清零再单点:全 1 会被 choose 取最低 bit(access→MMAP_INTERLEAVED) */ + struct snd_mask *am = &p.masks[SNDRV_PCM_HW_PARAM_ACCESS - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(am, 0, sizeof *am); pmask(am, access[ai]); + struct snd_mask *fm = &p.masks[SNDRV_PCM_HW_PARAM_FORMAT - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(fm, 0, sizeof *fm); pmask(fm, fmts[fi]); + struct snd_mask *sm = &p.masks[SNDRV_PCM_HW_PARAM_SUBFORMAT - SNDRV_PCM_HW_PARAM_FIRST_MASK]; + memset(sm, 0, sizeof *sm); pmask(sm, SNDRV_PCM_SUBFORMAT_STD); + pivset(&p.intervals[SNDRV_PCM_HW_PARAM_CHANNELS - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL], 2); + pivset(&p.intervals[SNDRV_PCM_HW_PARAM_RATE - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL], rates[ri]); + p.rmask = ~0u; p.info = 0; p.msbits = 0; p.rate_num = 0; p.rate_den = 0; p.flags = 0; + int rc = ioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, &p); + printf(" @%u: %s\n", rates[ri], rc ? strerror(errno) : "OK"); + close(fd); + } + } + } + return 0; +} diff --git a/patch_v2/meow_audiod/services.d/audiod.conf b/patch_v2/meow_audiod/services.d/audiod.conf new file mode 100644 index 0000000..0bd466e --- /dev/null +++ b/patch_v2/meow_audiod/services.d/audiod.conf @@ -0,0 +1,14 @@ +# meow_audiod 板载服务配置(svcd 托管;由 S89meow_svcd 首启预置到 /usr/data/meow/services.d/) +# +# trigger=manual:audiod 不在开机自动拉起 —— 由 launcher 在确认 MeowOS 模式后 `meow_svcd start +# audiod`(幂等)。audiod 自身还有启动门控(/tmp/meow_boot_mode != meow → exit(0)),双重保证 +# HibyOS 模式下它物理不存在、绝不碰声卡。 +# restart=on-fail:运行中崩溃 → svcd 重拉(关流状态由客户端 socket EOF 回收兜底),不级联。 +exec=/usr/bin/meow_audiod +args= +enabled=1 +restart=on-fail +backoff_ms=2000 +max_restart=5 +trigger=manual +cap= diff --git a/patch_v2/meow_audiod/test_audiod_host b/patch_v2/meow_audiod/test_audiod_host new file mode 100755 index 0000000000000000000000000000000000000000..b89bf2d72d07a92416c3332f0750debd4ff1dba1 GIT binary patch literal 72224 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 JFvt+ue*rx@egyyk literal 0 HcmV?d00001 diff --git a/patch_v2/meow_audiod/test_audiod_host.c b/patch_v2/meow_audiod/test_audiod_host.c new file mode 100644 index 0000000..15a6508 --- /dev/null +++ b/patch_v2/meow_audiod/test_audiod_host.c @@ -0,0 +1,310 @@ +#define _GNU_SOURCE + +/* test_audiod_host.c — meow_audiod 宿主集成测试(FILE sink,无 /dev/snd 环境)。 + * + * 验证 AUDIOD_DESIGN.md 里程碑 A1: + * - 全 IPC 链路:OPEN→WRITE→QUERY→PAUSE/RESUME→STOP→EOF 回收 + * - 两个客户端抢占:旧流收 MSG_AUDIO_PREEMPTED(PCM 丢弃) + * - tone 生成 WAV 可核验正弦(440Hz,帧数/过零率粗检) + * + * 启动被测试 audiod(宿主二进制,env MEOW_AUDIO_SINK=file / MEOW_AUDIO_OUT= / + * MEOW_AUDIO_SOCK= / MEOW_AUDIO_FORCE=1 跳过门控)。 + * + * 编译(宿主):cc -I../meow_launcherd -Os -Wall -Wextra test_audiod_host.c -o test_audiod_host + */ +#include "meow_ipc.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TSOCK "/tmp/meow_audio_test.sock" +#define TWAV "/tmp/meow_audio_test.wav" + +static int g_audiod_pid = -1; +static int g_pass = 0, g_fail = 0; + +static void check(int cond, const char *name) +{ + if (cond) { printf(" PASS %s\n", name); g_pass++; } + else { printf(" FAIL %s\n", name); g_fail++; } +} + +/* ---- 原始 IPC 客户端 ---- */ +struct cli { int fd; }; +static int cli_connect(struct cli *c) +{ + c->fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (c->fd < 0) return -1; + struct sockaddr_un a; + memset(&a, 0, sizeof a); + a.sun_family = AF_UNIX; + snprintf(a.sun_path, sizeof a.sun_path, "%s", TSOCK); + if (connect(c->fd, (struct sockaddr *)&a, sizeof a) < 0) { close(c->fd); return -1; } + return 0; +} +static int w_all(int fd, const void *p, size_t n) +{ + const uint8_t *b = p; size_t o = 0; + while (o < n) { ssize_t r = write(fd, b + o, n - o); if (r < 0) { if (errno == EINTR) continue; return -1; } o += (size_t)r; } + return 0; +} +static int r_all(int fd, void *p, size_t n) +{ + uint8_t *b = p; size_t o = 0; + while (o < n) { ssize_t r = read(fd, b + o, n - o); if (r <= 0) return -1; o += (size_t)r; } + return 0; +} +static int sf(int fd, uint16_t type, uint32_t req, const void *pl, uint32_t len) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + uint32_t magic = MEOW_IPC_MAGIC; uint16_t ver = MEOW_IPC_VERSION; + memcpy(hdr, &magic, 4); memcpy(hdr + 4, &ver, 2); memcpy(hdr + 6, &type, 2); memcpy(hdr + 8, &req, 4); memcpy(hdr + 12, &len, 4); + if (w_all(fd, hdr, sizeof hdr)) return -1; + if (len && pl && w_all(fd, pl, len)) return -1; + return 0; +} +static int rf(int fd, uint16_t *type, uint8_t *rbuf, uint32_t rcap) +{ + uint8_t hdr[MEOW_IPC_HDR_LEN]; + if (r_all(fd, hdr, sizeof hdr)) return -1; + uint32_t magic, len; uint16_t ver; + memcpy(&magic, hdr, 4); memcpy(&ver, hdr + 4, 2); memcpy(type, hdr + 6, 2); memcpy(&len, hdr + 12, 4); + if (magic != MEOW_IPC_MAGIC || ver != MEOW_IPC_VERSION) return -1; + if (len > rcap) len = rcap; + if (len && r_all(fd, rbuf, len)) return -1; + return (int)len; +} +/* 带超时读一帧(poll) */ +static int rf_tmo(int fd, int tmo_ms, uint16_t *type, uint8_t *rbuf, uint32_t rcap) +{ + struct pollfd p; p.fd = fd; p.events = POLLIN; p.revents = 0; + if (poll(&p, 1, tmo_ms) <= 0) return -2; + return rf(fd, type, rbuf, rcap); +} + +static void stop_audiod(void) +{ + if (g_audiod_pid > 0) { kill(g_audiod_pid, SIGTERM); waitpid(g_audiod_pid, NULL, 0); g_audiod_pid = -1; } +} + +static int start_audiod(void) +{ + pid_t pid = fork(); + if (pid == 0) { + setenv("MEOW_AUDIO_SINK", "file", 1); + setenv("MEOW_AUDIO_OUT", TWAV, 1); + setenv("MEOW_AUDIO_SOCK", TSOCK, 1); + setenv("MEOW_AUDIO_FORCE", "1", 1); + execl("./meow_audiod_host", "meow_audiod_host", (char *)0); + _exit(127); + } + return pid; +} + +/* 直接客户端 open */ +static int do_open(struct cli *c, int rate, int ch, int fmt, m_audio_open_ack_t *ack) +{ + m_audio_open_t o; memset(&o, 0, sizeof o); + snprintf(o.app_id, sizeof o.app_id, "test"); + o.rate = (uint32_t)rate; o.ch = (uint16_t)ch; o.fmt = (uint16_t)fmt; o.flags = 0; + if (sf(c->fd, MSG_AUDIO_OPEN, 1, &o, sizeof o)) return -1; + uint8_t rbuf[256]; uint16_t rt; + if (rf(c->fd, &rt, rbuf, sizeof rbuf) < 0) return -1; + if (rt != MSG_AUDIO_OPEN_ACK) return -2; + memcpy(ack, rbuf, sizeof *ack); + return 0; +} + +static int do_write(struct cli *c, const void *pcm, uint32_t len) +{ + return sf(c->fd, MSG_AUDIO_WRITE, 0, pcm, len); +} +static int do_ctrl(struct cli *c, uint16_t type, uint32_t sid) +{ + m_audio_stream_t s; s.stream_id = sid; + if (sf(c->fd, type, 2, &s, sizeof s)) return -1; + uint8_t rbuf[64]; uint16_t rt; + if (rf(c->fd, &rt, rbuf, sizeof rbuf) < 0) return -1; + return (rt == MSG_ACK) ? 0 : -2; +} +static int do_query(struct cli *c, char *out, size_t n) +{ + if (sf(c->fd, MSG_AUDIO_QUERY, 3, NULL, 0)) return -1; + uint8_t rbuf[MEOW_IPC_MAX]; uint16_t rt; + int r = rf(c->fd, &rt, rbuf, sizeof rbuf); + if (r < 0 || rt != MSG_AUDIO_STATE) return -1; + size_t m = ((size_t)r < n - 1) ? (size_t)r : (n - 1); + memcpy(out, rbuf, m); + out[m] = 0; + return 0; +} + +/* 生成正弦 PCM(S16 or S32,stereo 交织),返回字节数 */ +static size_t gen_sine(uint8_t *buf, size_t cap, int fmt, int frames, double freq, int rate) +{ + int bps = (fmt == AUDIO_FMT_S16) ? 2 : 4; + size_t fs = 2; /* 双声道 */ + size_t n = (frames > (int)(cap / (fs * bps))) ? (cap / (fs * bps)) : (size_t)frames; + size_t o = 0; + for (size_t i = 0; i < n; i++) { + double ph = 2.0 * M_PI * freq * (double)i / (double)rate; + int16_t s = (int16_t)(sin(ph) * 0.3 * 32767); + for (int c = 0; c < 2; c++) { + int32_t v = (fmt == AUDIO_FMT_S16) ? (int32_t)s : ((int32_t)s << 16); + if (fmt == AUDIO_FMT_S16) { memcpy(buf + o, &s, 2); o += 2; } + else { memcpy(buf + o, &v, 4); o += 4; } + } + } + return o; +} + +/* ---- WAV 校验:合法 + 近似正弦(逐帧过零/幅度粗检) ---- */ +static int verify_wav(const char *path, int rate_expect, int ch_expect, int bits_expect) +{ + FILE *f = fopen(path, "rb"); + if (!f) return -1; + unsigned char h[44]; + if (fread(h, 1, 44, f) != 44) { fclose(f); return -1; } + if (memcmp(h, "RIFF", 4) || memcmp(h + 8, "WAVE", 4) || memcmp(h + 12, "fmt ", 4)) { fclose(f); return -1; } + uint16_t ch, bits; uint32_t rate, byterate; + memcpy(&ch, h + 22, 2); memcpy(&rate, h + 24, 4); memcpy(&byterate, h + 28, 4); memcpy(&bits, h + 34, 2); + if (ch != ch_expect || rate != (uint32_t)rate_expect || bits != bits_expect) { fclose(f); return -1; } + if (byterate != rate * ch * bits / 8) { fclose(f); return -1; } + uint32_t data_len; memcpy(&data_len, h + 40, 4); + if (data_len < 44) { fclose(f); return -1; } + /* 读「左声道」样本(跳右声道)统计过零比例:正弦 freq@rate 单声道期望过零比例 ≈ 2*freq/rate。 + * 仅对「近似正弦」做粗检(40% 容差),确认不是静音/噪声/满幅方波。 */ + int bytes_samp = bits / 8; + int frame_bytes = ch * bytes_samp; + uint8_t framebuf[8]; + long zero_cross = 0, total = 0, prev_neg = 0; + for (long i = 0; i < (long)(data_len / frame_bytes); i++) { + if (fread(framebuf, 1, (size_t)frame_bytes, f) != (size_t)frame_bytes) break; + int32_t val = 0; + if (bytes_samp == 2) { int16_t v; memcpy(&v, framebuf, 2); val = v; } + else { int32_t v; memcpy(&v, framebuf, 4); val = v >> 16; } + if (val != 0) { + int neg = val < 0; + if (total > 0 && neg != prev_neg) zero_cross++; + prev_neg = neg; + } + total++; + } + fclose(f); + if (total < 100) return -3; + double obs = (double)zero_cross / (double)total; + double exp = 2.0 * 440.0 / (double)rate_expect; + if (obs < exp * 0.6 || obs > exp * 1.4) return -2; + return 0; +} + +int main(void) +{ + unlink(TSOCK); unlink(TWAV); + g_audiod_pid = start_audiod(); + if (g_audiod_pid < 0) { printf("cannot fork audiod\n"); return 1; } + usleep(300000); + printf("=== meow_audiod host test (FILE sink) ===\n"); + + /* ---- T1:全链路 OPEN→WRITE→QUERY→PAUSE/RESUME→STOP ---- */ + printf("[T1 full chain]\n"); + struct cli a; + check(cli_connect(&a) == 0, "connect A"); + m_audio_open_ack_t ack; + check(do_open(&a, 44100, 2, AUDIO_FMT_S16, &ack) == 0 && ack.err == MEOW_OK && ack.stream_id > 0, "open A"); + printf(" grant=%u/%u/%s sid=%u\n", (unsigned)ack.grant_rate, (unsigned)ack.grant_ch, (ack.grant_fmt == AUDIO_FMT_S16 ? "S16" : "S32"), (unsigned)ack.stream_id); + uint8_t pcm[4096]; + size_t wb = gen_sine(pcm, sizeof pcm, (int)(ack.grant_fmt ? ack.grant_fmt : AUDIO_FMT_S16), 100, 440, 44100); + check(wb > 0 && do_write(&a, pcm, (uint32_t)wb) == 0, "write A"); + usleep(150000); + char q[1024]; + check(do_query(&a, q, sizeof q) == 0 && strstr(q, "active=1"), "query active"); + printf(" query: %s\n", q); + check(do_ctrl(&a, MSG_AUDIO_PAUSE, ack.stream_id) == 0, "pause A"); + usleep(50000); + do_query(&a, q, sizeof q); + check(strstr(q, "paused=1") != NULL, "query paused"); + check(do_ctrl(&a, MSG_AUDIO_RESUME, ack.stream_id) == 0, "resume A"); + usleep(50000); + check(do_ctrl(&a, MSG_AUDIO_STOP, ack.stream_id) == 0, "stop A"); + usleep(100000); + do_query(&a, q, sizeof q); + check(strstr(q, "active=0") != NULL, "stop -> inactive"); + close(a.fd); + + /* ---- T2:两个客户端抢占(旧收 PREEMPTED,PCM 丢弃) ---- */ + printf("[T2 preemption]\n"); + struct cli a2, b2; + check(cli_connect(&a2) == 0, "connect A2"); + m_audio_open_ack_t ackA2; + check(do_open(&a2, 48000, 2, AUDIO_FMT_S16, &ackA2) == 0 && ackA2.err == MEOW_OK, "open A2"); + size_t wb2 = gen_sine(pcm, sizeof pcm, (int)(ackA2.grant_fmt ? ackA2.grant_fmt : AUDIO_FMT_S16), 100, 440, 48000); + do_write(&a2, pcm, (uint32_t)wb2); + check(cli_connect(&b2) == 0, "connect B2"); + m_audio_open_ack_t ackB2; + check(do_open(&b2, 96000, 2, AUDIO_FMT_S16, &ackB2) == 0 && ackB2.err == MEOW_OK, "open B2 (preempt)"); + /* A2 应收到 PREEMPTED */ + uint8_t rbuf[128]; uint16_t rt; + int npr = rf_tmo(a2.fd, 1000, &rt, rbuf, sizeof rbuf); + check(npr >= (int)sizeof(m_audio_preempted_t) && rt == MSG_AUDIO_PREEMPTED, "A2 got PREEMPTED"); + if (npr >= (int)sizeof(m_audio_preempted_t)) { + m_audio_preempted_t pm; memcpy(&pm, rbuf, sizeof pm); + printf(" preempted by %s (stream %u)\n", pm.by_app, (unsigned)pm.stream_id); + } + /* A2 写被丢弃;B2 写生效 */ + do_write(&a2, pcm, (uint32_t)wb2); /* 应丢弃(A2 已 draining) */ + usleep(100000); + do_query(&a2, q, sizeof q); + printf(" after preempt, A2 query: %s\n", q); + do_write(&b2, pcm, (uint32_t)wb2); + usleep(100000); + do_query(&b2, q, sizeof q); + check(strstr(q, "active=1") && strstr(q, "rate=96000"), "B2 active after preempt"); + do_ctrl(&b2, MSG_AUDIO_STOP, ackB2.stream_id); + do_ctrl(&a2, MSG_AUDIO_STOP, ackA2.stream_id); + close(a2.fd); close(b2.fd); + + /* ---- T3:EOF 回收(客户端直接断链) ---- */ + printf("[T3 EOF recycle]\n"); + struct cli c3; + check(cli_connect(&c3) == 0, "connect C3"); + m_audio_open_ack_t ackC3; + check(do_open(&c3, 44100, 2, AUDIO_FMT_S16, &ackC3) == 0, "open C3"); + /* 不 STOP,直接断链(close fd)→ audiod poll 读到 EOF → 回收 */ + do_write(&c3, pcm, (uint32_t)gen_sine(pcm, sizeof pcm, AUDIO_FMT_S16, 100, 440, 44100)); + close(c3.fd); + usleep(200000); + struct cli c3q; check(cli_connect(&c3q) == 0, "connect C3q"); + do_query(&c3q, q, sizeof q); + printf(" after EOF: %s\n", q); + check(strstr(q, "active=0") != NULL, "EOF recycle -> inactive"); + close(c3q.fd); + + /* ---- T4:tone 写 WAV(由 CLI 走完整 IPC 链路;mipsel/host CLI 共用) ---- */ + printf("[T4 tone -> WAV]\n"); + unlink(TWAV); + pid_t tone_pid = fork(); + if (tone_pid == 0) { + setenv("MEOW_AUDIO_SOCK", TSOCK, 1); + execl("./meow_audio_host", "meow_audio_host", "tone", "440", "500", "44100", (char *)0); + _exit(127); + } + waitpid(tone_pid, NULL, 0); + usleep(300000); + check(verify_wav(TWAV, 44100, 2, 16) == 0, "WAV valid sine"); + printf(" wav size: "); + { FILE *f = fopen(TWAV, "rb"); if (f) { fseek(f, 0, SEEK_END); printf("%ld bytes\n", ftell(f)); fclose(f); } } + + stop_audiod(); + printf("=== SUMMARY: pass=%d fail=%d ===\n", g_pass, g_fail); + return g_fail ? 1 : 0; +} diff --git a/patch_v2/meow_launcherd/main_menu.c b/patch_v2/meow_launcherd/main_menu.c index fba3a9b..b6551ef 100644 --- a/patch_v2/meow_launcherd/main_menu.c +++ b/patch_v2/meow_launcherd/main_menu.c @@ -1684,6 +1684,30 @@ static void usage(void) * M2.89 回归修复用,见 main() 内「开机选单期不抢屏」。 */ #define MEOW_BOOT_MODE_PATH "/tmp/meow_boot_mode" +/* 拉起独占音频服务(AUDIOD_DESIGN.md §1):launcher 确认 MeowOS 模式后 `meow_svcd start audiod`。 + * 幂等(svcd cmd_start 在 pid>0 时 no-op)、best-effort(audiod 未装/失败静默)、 + * 不阻塞主循环(double-fork + 仅 waitpid 立即退出的中间子进程,避免僵尸 + 不占用 fb)。 + * 双重门控:audiod 自身读 /tmp/meow_boot_mode,非 meow 即 exit(0)——HibyOS 下物理不存在。 */ +static void meow_audiod_kick(void) +{ + if (access("/usr/bin/meow_audiod", X_OK) != 0) return; /* 固件未装 audiod → 静默 */ + pid_t pid = fork(); + if (pid < 0) return; + if (pid == 0) { + pid_t pid2 = fork(); /* double-fork:隔离执行者,防僵尸 */ + if (pid2 != 0) _exit(0); /* 中间子进程立即退出,由父进程 waitpid 回收 */ + { + /* 执行者:重定向 stdio 到 /dev/null,exec meow_svcd start audiod */ + int devnull = open("/dev/null", O_RDWR); + if (devnull >= 0) { dup2(devnull, 1); dup2(devnull, 2); if (devnull > 2) close(devnull); } + execl("/usr/bin/meow_svcd", "meow_svcd", "start", "audiod", (char *)0); + _exit(127); + } + } + waitpid(pid, NULL, 0); /* 等中间子进程退出(即刻返回,不实质阻塞) */ + logmsg("audiod: meow_svcd start audiod requested"); +} + int main(int argc, char **argv) { long sim_hotkey = 0, sim_tap = 0, sim_exit = 0, dumpkeys = 0; @@ -1931,6 +1955,7 @@ int main(int argc, char **argv) /* M2.2 拔营:启动即尝试挂 TF 卡 + 联网(非阻塞);失败由 run_menu 后台周期重试。 */ ensure_card_mounted(); ensure_wifi(); + meow_audiod_kick(); /* 确认 MeowOS 模式 → 拉起独占音频服务(幂等、best-effort、不阻塞主循环) */ struct app apps[MAX_APPS]; int n = scan_apps(apps); int state = (n < 0) ? (n == -1 ? 1 : 2) : (n == 0 ? 2 : 0); diff --git a/patch_v2/meow_launcherd/meow_ipc.h b/patch_v2/meow_launcherd/meow_ipc.h index 8a8f693..7adbd46 100644 --- a/patch_v2/meow_launcherd/meow_ipc.h +++ b/patch_v2/meow_launcherd/meow_ipc.h @@ -78,6 +78,20 @@ enum { * 语义:amsd 为「启动/终止」决策者 → launcher(执行器)执行。payload 见下。 */ MSG_AMS_START = 0x00A0, /* → 请求 launcher 拉起某 App(pkg + 可选 activity) */ MSG_AMS_KILL = 0x00A1, /* → 请求 launcher 终止某 App(SIGTERM 语义) */ + /* ---- audiod 独占音频服务(devdocs/plan/AUDIOD_DESIGN.md §2):0x00C0-0x00CA ---- + * 语义:App 只经 SDK 客户端 API(meow_ui_audio.c)喂 PCM,audiod 独占 hw:0,0。 + * 独占+抢占(后开赢);软混音已否决(MIPS32 软 SRC 伤音质,留混音器接口位)。 */ + MSG_AUDIO_OPEN = 0x00C0, /* ↑ 开流(m_audio_open;client 原生 rate/ch/fmt/flags) */ + MSG_AUDIO_OPEN_ACK = 0x00C1, /* ↓ 授权(stream_id + grant_rate/ch/fmt + err;grant=客户端应产出的格式) */ + MSG_AUDIO_WRITE = 0x00C2, /* ↑ PCM 字节流(按 grant 格式交织;单帧 ≤4096B,多帧连续发,无回执) */ + MSG_AUDIO_PAUSE = 0x00C3, /* ↑ 暂停(u32 stream_id) */ + MSG_AUDIO_RESUME = 0x00C4, /* ↑ 恢复(u32 stream_id) */ + MSG_AUDIO_STOP = 0x00C5, /* ↑ 停止并关流(u32 stream_id) */ + MSG_AUDIO_PREEMPTED= 0x00C6, /* ↓ 被抢占通知(m_audio_preempted;旧流被后开流赶走,App 收 UI 提示) */ + MSG_AUDIO_QUERY = 0x00C7, /* ↑ 状态快照查询(空负载) */ + MSG_AUDIO_STATE = 0x00C8, /* ↓ 状态快照文本(NUL 结尾;当前流/参数/帧数/underrun/路由/音量) */ + MSG_AUDIO_ROUTE = 0x00C9, /* ↑ 手动路由(u32 port:0=auto 2=3.5 3=4.4;调试/面板用) */ + MSG_AUDIO_VOLUME = 0x00CA, /* ↑ 音量(i32 pct:-1=查询 0-100=设置;v1 透传写 DAC numid=1/2) */ MSG_SYS = 0x00F0 /* ↓ 系统事件(守护关闭/服务死亡/播放器状态) */ }; @@ -369,4 +383,59 @@ typedef struct m_picker_result { char value[256]; /* 返回项(路径/文本);空=cancel */ } m_picker_result_t; /* 320 B */ +/* ================= audiod 独占音频服务(AUDIOD_DESIGN.md) = */ + +/* PCM 格式枚举(客户端原生 fmt 与 grant_fmt 共用):1=S16_LE 2=S24_LE 3=S32_LE 4=FLOAT_LE。 + * v1 实装 S16/S32(S16 直通 + S32 升位);S24 按 32-in-32 处理;FLOAT v1 拒绝。 */ +enum { + AUDIO_FMT_S16 = 1, + AUDIO_FMT_S24 = 2, + AUDIO_FMT_S32 = 3, + AUDIO_FMT_FLOAT = 4 +}; + +/* MSG_AUDIO_OPEN ↑:请求开流(App 原生声源参数)。grant_*(ACK)回 audiod 实际授权给客户端的 + * 产出格式(率/声道/位深)——客户端必须按 grant 格式产出 PCM(SDK meow_ui_audio 负责归一: + * mono→stereo 复制 / S16↔S32 定值升降位)。ch>2 或 FLOAT → ERR_INVAL。 */ +typedef struct m_audio_open { + char app_id[MEOW_APP_ID_MAX]; /* 32 */ + uint32_t rate; /* 原生采样率(应用源,如 44100/48000) */ + uint16_t ch; /* 原生声道数(1=mono 2=stereo) */ + uint16_t fmt; /* 原生格式(AUDIO_FMT_*) */ + uint32_t flags; /* 预留(0) */ +} m_audio_open_t; /* 32+4+2+2+4 = 44 B */ + +/* MSG_AUDIO_OPEN_ACK ↓:授权结果。err=MEOW_OK 才有效(stream_id>0 且 grant_* 为实际授权值); + * err<0 时 stream_id=0、grant_* 视为无效(客户端 open 返回负错误码)。 */ +typedef struct m_audio_open_ack { + uint32_t stream_id; /* 授权流 id(>0) */ + uint32_t grant_rate; /* 客户端应产出的采样率(=客户端 rate,无 SRC) */ + uint16_t grant_ch; /* 客户端应产出的声道数(DAC 双声道 → 通常 2) */ + uint16_t grant_fmt; /* 客户端应产出的格式(AUDIO_FMT_*,=硬件最优) */ + int32_t err; /* MEOW_OK / MEOW_ERR_INVAL / MEOW_ERR_NODEV / MEOW_ERR_BUSY 等 */ +} m_audio_open_ack_t; /* 4+4+2+2+4 = 16 B */ + +/* MSG_AUDIO_PAUSE/RESUME/STOP ↑:流控制(按 stream_id 定位)。 */ +typedef struct m_audio_stream { + uint32_t stream_id; +} m_audio_stream_t; /* 4 B */ + +/* MSG_AUDIO_PREEMPTED ↓:被抢占通知(后开流赢;旧流收此消息,App 应暂停 UI/提示)。 + * 旧流仍可读但 PCM 被丢弃(draining),直到客户端 CLOSE/断开。 */ +typedef struct m_audio_preempted { + uint32_t stream_id; /* 被抢占的流 id */ + char by_app[MEOW_APP_ID_MAX]; /* 32:抢占者 app_id */ +} m_audio_preempted_t; /* 4+32 = 36 B */ + +/* MSG_AUDIO_ROUTE ↑:手动切换输出路由(调试/面板用)。port:0=auto(跟随插孔) 2=3.5 3=4.4。 */ +typedef struct m_audio_route { + uint32_t port; /* 0=auto 2=3.5 3=4.4 */ +} m_audio_route_t; /* 4 B */ + +/* MSG_AUDIO_VOLUME ↑:音量查询/设置。pct<0(-1)=查询当前音量;0-100=设置(写 DAC numid=1/2 + * + 持久化 settings.conf `audio.volume`,与 watchdog/launcher 同源同键)。 */ +typedef struct m_audio_volume { + int32_t pct; /* -1=查询;0-100=设置 */ +} m_audio_volume_t; /* 4 B */ + #endif /* MEOW_IPC_H */ diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index 8c9ce220422b3a0e797203cd5db797580ee11241..5c742a14e0f0ca932d8b430a1bcf463e1f357a06 100755 GIT binary patch delta 167293 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

wSPYWN-Maz*m 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%0AdIf?kHJP(Iv0Q+EJpG=E;os9VOTA64nDcq(LRl zyOsLY{YdY~GCNBAAz@|K?kKUfKEr%>5H*Hd!Pj}RwO!^{zaqN;h%40b6S$?gz9d+& zNK-pFY+wgt_;FTtpyU!%R#e#qQf(-Do^_yPL1mYm;Z|&53q;LwJ?V4)LiI$PbBt$Br8q*!30Vepjo(_MLDEAcKj^{Lk;A5r3Kgus%3hUs3~a;H#qos(Ozt zk_pye^e~joMA;~9?t|;3tSHC-HDU#;8Skx zB~#Okav%)Lbdg{en^_*1(A42xGNHHE1*2aG*q^#xIW4Q+A1&A12fc!d=`9D68%q6E z8aE<37_$cm=-nHJCgYui!5=mF(B`OG@vF?>5wb*oll2hW278>PPV|-?O83Lh)9cMZ zw;XY273QDwUI?{kY;}e%atOd9Uq%r}mx0L{`p|R^(g2?CMh{oyI*qCT9mH$i5pl6> zbwyCasj`nu&W&4^52^|-5!9A211I1CCkgahLrYiG1f96v@aRqKC%eXY>`*%u{1xQ5i38Hp zySyKim@gew_xF>7W2!MKs#(UWkNe5KM2PhMXGI8A+FwS;cZc5!-40J+us&;2-if2? z>i)8i)NXWYe}4$#9o5_YWl!VofQuYx9U+3bk{P?3`kpxXWw0L~tq9 zp)By9Uk;M(4Q0ej-h)Nxq$0CnSFc^js| zKSXBZ(SL{>>)WJm1@MBSiH7D0i<1;9IXJlLAgSQsi;?0)8TF5O(v^D`zImzYh)X9)XC zie-o8nj6YHZm&3I5LsF`hsbl1rT4z^ofcotK^Qf9d0QYaKvvc4uF_mjG`=xP)oI_< z$zu3Uc-4BJUtpBMLYH7XpGP-r3Nge8SYYQh+3r5#>n%N2EI!AQ4B;KTHVwA zjj;J+u$HE(_r}N}Z7xM>)`1!n^f{NR+_7jJ*L;nI8WE1vJIBfqn1YjIA!sG4v~jXs z8gU~JxDkLhuOCE&f1x}H9cV`3b~Sk%a&A}Gj+342f4!>iA16b}UXH99%Wf`(E90Ns?!@&`uZsAyh$y!w-!g!QZ?btMK+oa-#jxU)B4Q&ix}%9i0sH8lZleEQh9Zpd9!)E}k^YB~gXP zOVr#ca27mXGGDWpbaLBUrf!-d2S=ftdTxr$g_hvt6!a9)fTm)FqEv#VYt6dhB zs=EOo9B(XD1=E0tH>f$&93pdcZ9izh>)!w zoNkubbUCER(<@AKxA|$^xvhcO0g^%M(UI`!=hiS#KW)d$!y~d%O`n0e@22jUA!p{! zNq`Z$^=fs?OxeK%v#4t5gU1x&NqMI9Tu)cACTM4SUHm zbPZVdC((~2qev-lI>cx`rOg5-vhQ`(XO>J)BgJ4~pNZCSP0IrCaE<}l;fR*1i)R51 z7O6XC$sYcf&}(8U6{+M=Zcwkx!YrM5U4=@pZT{&f29tgZmht=DNpOLJ-EYZYu-fS=yj}B}G7MQ=T%=J3F)00*HY-~+lCD0XVIP&v{ z`ZG$CLSHpo_J~=(FkAP&OzoL1JG41G-PMbMr&*=mMh*j1zPdoQ;d>bcg0)Ho&y|_x z1PVSgc>pfV0vc>mx1TE?viH5A`kW`br+x(atF4O)&5O%d_)&?v?mQV9@1=bNaS)^! zYBkFq^ExS=gvW(=8V7=Sc&UCU}59yQUVYJy-9i9WL zc0HUJ=EzWb-#2~H_5PaN4A$W?W?-RL{)? zotmUh&Xw)Z7s8>&(x8K3s~-L5`u4!u46EPfp|t)*Np=PEzL?K7c=kMByLn!Y{!O0M z|5an3x)tTi-&E98Pi=cM!MtnqY#oXmSiL{m zLz7Uz#DTj9Nz_Zqn^MS(RnjVIQV}w*4y6n5vULVXW2oK8vK~?Fl4DyekB}=(FZ=j5s1x%+{c@G>0#MqA-CQ1CdzFn=y)VFSo~u|_?x$|9pWiar|1bBQ-Iy%1 z(0kKHqB@L9gJ<@h*#_%u+BF2*`Y#t?10JM;WpZMO=v{-QWBk%B+Z(e-ZHUU)-tR7h z*>sNDUna9t=1j`i_;>W7-gPJaS2X*uEgONy@Hxh7-%?o%z`5S0HZ71-F_teE$ac9z zJ~mm3CL0j5gPr@Q>zTq+XnemYhkIVPg;1*ZeVg0ETF0`=YY=E>Jyd0dTh+A-!Q>f| z7PgFN8L;OdtG7PO)t-gm+{@K73n7X@zC&Fpi*#KVpsv!IHTX@@kj-sYMT=xY(q@e6 zQhVzom)Z~fVLd*tw733Yjasruc1hbxYg@kztK4TgyeVL)KL;^D?O7z-Wlh6j;BS4x zfsAb!7FUh(3@(}7g~I?lKo|?um&gi!N-mZ?Qx@Pp8xIoCMD+bmHF+`mey7S`B0G)W z2069{|Lkb*3ji0iGs`}EJKNAs4cnnHGZ40HILO=XhQc}qs8`r+RXEf2?ZNi&~ernGWIkwHPcYM*+QQQ6y1}8N@#VnOQ zyG@N~nV-Gsx)lLPyzM|mJ@81BHEi9jYROXBsYnE~wJw%-SagJLfVJSoy56}do5&3-=$^`9}PFWd@H7xCvwN>asXr3P(XAFt$g1wzE zqI9y@W8>7^3uP)8m#Z$s(j_NKiMDCN^>NGNU|@FRv%Z=-3*lUTuUby)&h`dFOz9_ z|7;m3?;w@796p!P2s_B#NB~BKuH;U4?tP#=#)aD;I$gSVMO@Lc4jKh2(agw=)?l$t zYd#@@t2tcAnD04fysx$Ts)QBtM(=u-`&Y=&U@w0DPmNQ}V%XSVZ-myzqbbxU^7q%) z19j^#q5QoTzYpl&%DzZ;_g$v)FOoO=?p9A+B!{f-euAX0`KCV4^VO^II7;&V1cHGM z(Fix7TmBY6jXJ{(f;Wonb8i;eh2d~=%W$X$7sgas*6@nh9CNUS8qBu_VRwNm;FT-o z$*f;z2Z0UE*N9AWVcqBtB6iFcy+$o{`^EBxtd;&eZLT<0(hJVnxa}Ad?0L-Y^4?YN zOQgQ~W9KCxuGgp+E&;m)JM|}*$O(M*xfF-3JO^0P;bYL?n+fnaU!%duiCcHZ#4JAJ zebgE6`_6Lx$F7KQ18#4JfK{-X;_LI^8&x-J078BB6{wu|uCM=qa>#q%h9N^U8Go6~ zh~@MJd^@UedDY;{8NhS_`#E;?^Ph|5ujFPELtY0qJFd)}3E#M)7H z;RoDY5*=naa$Nm-xy%UCm-yd4gFLNq`Ng-WA{uwQMx!TGIbNfRu7IF}*_nL>-1pb1 z-B&=JhjG4hg&b_Z{+>#`60+txHT+5l*m%9^N_jov8^^4YH}JJ`72K*{e~;~^JA85p z@IMYW&JtO@rL&-MibmkB>b+GElW%)G<|_G!uQQ80W$nbw8w}vPIppPG1VpuU7Mpti zYMILCk5|j3x|~_+zb$9FL2UA&ORDmBkVUqY0LV>g?=zwtY{H{t>&(@naqgzpo* zPHCMkFGVp5_n+KhP(^)>OfT_NN$UX4NbFsF#`~x<-uJm@Cr?{Pk=Uy8uazV7iI=>l zZ3D=Ghlj*d9+>jpiKj=rclGeKa%zf!Vw`i_I#ksiNRb0Awf?P=u9JU;?(M{NU~sQc z{?#(Og}EO=4PK3T&QVKN%f3zbAWX7Oy9eR1)p9OP>&fM^fWiF7l*438s=|HG^MwXv zt}B=6!~gG)F(QzLj5<*+69##NCUWH(h%{e)U?5`Nn<0XCmA?k+H4JQxJfEF@ag7{& z)*A>&jL`Xv>t#W%t(%qE@glF+ zgI!p8++d&C)Iv=Rz?sp{nb+G1h^eR#d&r@>ebyem6Tom^(cN{NW?fv|ovlDCy|N5J zRV!|gmmqe@i5p-%JXT`D+K+O(jhi`R*UIjz&kUo!4sEPO8yldCKvZ%22>Q_gLgDr0 zh}-`&zjKwuWea^7DRJP;U903LLwM@{X2!n^XnM@rmRk2b8Zt1pEH}}lsaMv@zTG_V zgN{wIA>!`28MF`2 z$8Ls1R;GTr87kOHRkRLzX+-tAdL8`05Eb#Bb+S9(U&Pb@7seH*vFL>9ex-`J1zH_8 z$T*9>4^46+x&?J_)$i5hTi^z>N-e(yidBRGJamg3qXS_wNMj!`mDU=!+y_0t|W$1;h?>zRSx$PZ#Zw$wcZl}Zi-36JZFlXk7ALi+g~pStKaneRqT zdhj+mascIX%J__mOd;54se(Fmb8D+P*feN>Rui&*t_zTrP=%bL4R%@8?;&c6*7Ul?)D0q(V4~KkmYag98p*#Vt87i22osFY7YxRME|A&MzLYL$&K2knQ$=2glu>ejbpsM9_iLiq>S8siU{cdt)}Z0zsL&xDuMX&1!cgl=s)E zq$)v~^TGuVI`G!l2fZXUH6 zJ&O~v;6*D*Jl`ximJqS}27SMu^ z=xJ92_tYl+$NcrO02gE3h3pU^o>?!mvpiw_a^&_wz7p1@AseOHKvGN=8h{_I^52PJ z4pRN^lp{L_&OaT=%33xf*}LnDondzxBpbI8_ejZ%(8l%6h;*?uh(vvd14Q!lct5|R zR@{cORbFIktq4+C8|1)2o{pzM<506#%Q$$oc*V~QbPb0LjZXz?^9DIJiz=kNmgVrz zvf{h8yuOy4K*e8;CNO~aQhRMks-(N%n)@TbKnx7DTvG{Sg5d9uK2l@ulBubl@{rtT zD+GGXLD60<*M`1$LtS?lB$jx!`!0DeqUDXgTN^esQmngMZo}+%Q!?AG`$Wx9P-^3O zosxZ8JoK?IdepaS!rd}i9aA#SV9A@nt|vCiD}60g{-)-NR&J7)(Wv&xCKRquPC zi19Fqll7I)agKdrXh)^G{2n<`hwY`w^O&{e&ak^99|MDi_TRrpW}H@hdQ4>TlzU1fnmIZKh^%XvnirSzm$Wce{g{o^y>;Uc2F zPkid-^IN2;VfVqUce7e@ALO8epQxMegMDV2df`5}A{#AzSR+2ffW%)!fyU7iSOm5DSCFsP>_lSNnLL2C16In@(`zuzp=yEpHQhDr9wCbvPJ9cEjU$=myQeY`5Z zAAW6Ko?#%vVUXmFS~EeTt&z#g(G-q|p2j@$XxXiw8I8EdMtQ6Vw_6It-hEJ58Z9_Z z&jpCWaCp3+>g1WT^`q3%sa1Ch9NcC9_6dbpy zv@LQhV|FvtOyjknR#&C|&ZVsH?WhkwI?? zW;7aRX5Xh~n*ZHc6Q5NRw!qqNg>`xgl6gfGOOC@v7YFy9Da!u<7>_9`_W^XMrJBsg zbamAO*!DN6yYLp=)K7?dRcBWVZkIcQ2gq#(y2>%J@w~ zp`a#j!)7#H-M&p`#&Gn6#&q?>wkAj02D=oCVw5#GL`2%GKHDZQieZRr;=pt@??KsN zo(Yg0w(06)xU*0NgPL>4w*byBaB_nj+ERiV`wh)>L^=6SP#ZX-nKHqO$QxVs;>MO_ zpe&(qi+b-t1T3I-swqnV@-IH$!YaUYnJQHJc9|MHJ&j#4U7)W&yRcA|YzJA)RX1*z zna1i?6R`WiIdzl=rs6iNpYM{=kqN>N^*jY~N zm3}3MZaXDSgK0aUBi?{RbtyQC?|v=n;vt z*bhtLUIJ8V-{WrLo=~tAO%rP=w^c9f4FN)5!L|2c**%sa$NTwOI;0E_%XEMB!fa?l zO#u3?I1)BprR+phB(Uj&cYH0Mmvk4wJ{6cXi{Qs< z#m%nQ!>hu`md10j)V6D;t#oCG^}A%Bc;lc`4hNlmwgq1|9IAR}mywfx+y#}mmP^2W z{^U-BTNd8}qLkp9v0Ki^BA-{;-g>$s4!c1;;-hO>4N;GXu`RH8F+uO_mfd4K(%n`0 zYo(6rKB5-twDD?FE%<6!$Lc_3b5&X$&c*7Mfi-3g=VN3#zWtawBl#?>lUF32E#~|> zb+Qgp!r%X?TGY#oRCa;RuYdce!K0rLXZ|NdjK}w4e2;DZu2$5`f;N2T%?Zb^* zemmNtb1P< znC!z~b@5&~F!ovZ=;MKqdTg&uA6>R6PfITpA2JZ4cH0+b%n5E3lcnxEtMK*0xp1h% z83(dI`u>%BK89&GtF%Yq@xf{mZPTI;;lfz#W;Oaz1ZKIpAA-8KX}+?ApO}3r4z&D# zlzjf}-L!ir}cDh!|896v+Qq-S;L@`M&S`b572Ew{I`i)z#J2)m7E1 zRTY7kfoG`RLw>#CeotfUO)1b2f ze*MAk)cElyFD$e8A_;GCLy*^Bt7p;HozAWqoJBbk*iqb(1@@UNbhE=L=5y!^()G2& z3(oA2U0gGKBOj!zUvT!8MlczOFlW0GL};VI*K1+&v+D&c2d%C5LQXR*?pj8ATCBAN zp*q8?IUE^o3^y?R$-@L8#SMf z?slfj<8f~>Y~gU|sj!a?H`mQ0AZ?c1`mWQI{7>nJe9J#^YQKv1{}a~hoNEOZJrQ*L{`+L81!SB=z?teEo0EKIZj z4P4v3{XLdi888D&e;PMAMlU)i#<45-Z9>iO1qjwxf_+UXJ@6vbW$@E}?L}DD^Xy@h zO7^>6g?p9YiaqZd541;hxC;Yb1~-y#FYL7bN;CF43kRw}cLPJ{J50ej|d9!EL&zsY)o)uYnn@gqHRo=c*>0Se7v8lls z-)zHOZ>XrIHlL{g_9{Y@BYf+$aPTj-M~4YKzE?Cok6zWne%gfHZ=~j+E(x# z*C(s@6wO=P0-*o*06zGN)7L>Uc^33khy2XsCFA!uGk(k;F#Z#-K=sjqoUel8kEDD& zx(&k4%R5ff6$V;NC=~`gResIW{&n0_#d5B49|`Ct4j0_?$g7|SSxX9i_^LCqxhkml zYE*UZ=Js1xcir!*bL*+(c@1Yol@KtvwZ6am?AOcBsM%OK%Ui8$b*)^V)!eEa2P-^U z_?k1b!-xHR2wbjCpJrp2)DXEPU2ZM%VN0>D-EEvsFTQ5+L*DE0sFctN0D(XU^z&;@ zUvvq~Xum^Fn?)c!_jMdOTqb?O>&`66l$kJi2LC6*YjS*6u6Awnc*XGA{WR)G%X{fz zbKb0JX2(bSnDgd(<+{yM)x0^A%z3lv^Vgl-A$zqwfaBW6voz@dhg~{Lj~;M#=jS^I zpfAQV{-8=9b`V-h?kHv~=*f)*a_K>5_L9n3Q>wEN&f#&OGZ^9RmC>(XubefbnxUMO zrbL^11mP|CL7|w_f3(5`A4e?o%cUOxC%#;I1%mLjN*5&=ZP5Vbzu_d^bf0=W^)C=o5FPoK+(Tdd7gWJPl=CLC1ZXH8GA_EBJqJ9;} z6ngQHGr?t3ixQPfCj^Dkg+tJRW>NTI$Zq8{|1cCl!>R7D^JcZn$HK`dD+q_Z9%MM? z5{Oaq7IZWnXy9AU^zl6^SSJ``-uEMGzSXimeSU%Uu1fPec#!UQBJ8TQGGQvq8OOES zX?AFFH>6;MXGJUFfw8;+&>(!(!Z-KJx19a^*)rt{$d5SdY&OVXUhhX*YkwV1i^Y+( zLtECR#8JDs82^ep(e-bGeV5|mC-k@j9ef+3AkhOE;{vRY@~{J8-jzug--ZtymV?|Q z&Rol9pceNHtwX#Rbq3af79N2KAj35r?Ln1+_Ds{}f}F-ZpFqzZLEKNd1Ou(y@dC#eo>6sO1V}Z z$68tUt~0$nuK`)M@C`W)*!J-~eG791p||QIfas zH8W5giEB+=Sj*|2_i*Bw_cCq6GYm}q0mL9P@qAWY43~J+877|j-Vt_mIAtAm=Fa51 zLZNNu1-zYoqd zil)2|UNMSpe;;Nq@cH=wiMP?{4=hXi;$TEgbOysT@$L_tosz2nwL_a`I<F@_Q-|tRkA418z?JO<$(3z$#Em|JX{90K@IA5ShG=j+NT>GJOs)J7z#mCOY zjzPGA$$776L=* zD&jnB=r1AVDq1yB@kbY3{tll^m@fG1-_7%yTo&`KBn$V8u`z6D`!a3%{F(Tzm*fm9 zH$xE}zy_-`gj*}{%O}pr);$^U$DVK?=o_OPsG2=`gQW*?D17)Ce4gGMe(^eVgR6dG zl3L4djB-}fmO6p!cz7t-xWWlFg@!*np5n(ptEJ91VxvG-PzL?_i8FKwvnUr-bG&Y| z-){hOB2K!(W^4-haRpajZ&5Jrs>FQJ7+T(}CRwhs%Wzu=pONz>Fo5v@RA#Wlvx%Y0 z53`jBnx6a%H?LnVdgvfrVy(0eN35lpIU5(?O>~P#Y^#XRR{l?0<>z}x^Xbs1*!AU8 z+%c?uzj*1MW6t|=r&QEu&V9*^z?tM2G3s_rGuDmwsFI=>I{BG1S=y!YO3ILPg!yoa zJC3EenmQkMX6GJ+OC~F|L#zYYoCptuVb)G7lhkMMowd|l`rRQ^eH?*hi(_cpac95y zFY&ECz6}8b_qyHs04(LW1|i}El$@;UVecwjQL2P;d@oYpOYuF9zq4QcYHMLk#0nFj zIVYScQIDO2F&H|&oK|X z(tV#hdoLL(KOMtC#s?2EkG)d1tsF=_%`i0}{s_YiIsq(*-YsDr2WG*F6;5YU3(!P! zy1FArrGu85)4^P1{t)Dk()`LOl`BeZ)i6{aaz@?<;BExb@bd=idA;>qXFbWGo9pr0 zp-u6HV-})+YyRWRSke(?JdyjMj}20L!MKL}}J`6{3Oh!FVM>E!2rAW#HC8Aq)lHZGC+T}{EVk0IZpWQH3Fn7B3 zO4HmAz<6SE+HSm;pz`)K{|o0e5EnoC!kHQOpTPyt{yYaJ%{qBEcs%4giuw|6=+d4X zyYaJ4S4!w?kG5aVQTdlRv%8mW`O?`0`=MLD!ols=edy7zU>lc8`@g~l=q~#5D`&b= zZb5y_tL*@a`Y$ZpN0Rry&aqaM43^%pERF+lc&SMPqj zYp_iC%h%3XmW1io!|2PeofKcR*sS7?-Z9&2HuBa0O0}QP(}UkYhSy-x_KkDUP~I}| zg!>NKP7VOi`_e^icqi^CSu(Q_E&3G-WK1KsUf4{Q2x83JJ!re^NJ3ZAl#|YwaC^7H zzz(LRCvhfc3%NQydlKHJ2qeeAl;1fXgD zT8_)KsEvxtbaAQd3yURMZ~Hg4_m81T4qe7iWnjvOTkHp@=_(&a1Z98+=A?T0?WhN8 zMmvp{$&c^Q+k_qOWt4E@#ibN+3X!5iujU3dDar@;_nC_j=#=H5yU{ncZs7swgGeH+ zW6MH74`$H0--{4q*}im;SvUhEqm3YfhK);}4tz5k*Y!;T%vG3FuvVmNVge4Gwj*F2 zGQ=vs_d6gW+61r0OG7W*dI%-}FH9Us8o|>g06hORMDkGs5^3^NQV#%2rHiMW4_SmR z5dlJ9{hhN=Q2{hvtLUTe;KXQ4g*vX!!Zb*wxYIDmlc~tWe0TtjIPL7(*G^(FQ{4^G z5Tv&H4fI5pOMpqomEPGc6XrZcCTXQ97UBkI-#w0pTmKE6yN zRW6JZCWit<({K7+9xS1tXC^Mj{m9v-$--jM;&xTp7~>Fx)#BrkQ5HSFed$Gd_j_k& zshn=a9w?S_8l97y_x-kF5Bh*Ljn3re%OJzC*(fmx`M9}&YaT%3 ze{^;&vmxTaYE8>7dop2`bIm+CRk$8|0{Qi30IzX^nLcnWmHmWMy2d=Z=_kZ4;*8r6nRwcX_X4`8C$l8;g@(;`Y#2KRLJQ2Vtan*12167*1n; z#>mg1TYkpkG3O#JxL;4k>(-y4nV3l@e#VTMa}mr4OW+&|`NjEnF1z6u=izuhB+G;C zUL@Ltm%9{JQUCqtoW9U)-JxkK_G_P9q}}Hrl%&%~=bV`tT*MYqKZAiLbColwou5}g ziiBo9?L2I`LTTuE>_2XzIp-0xA)fZ1cg|ue&H5E)DBWrPuh@?CrpJDTnbuf}`VH1n zOK8e(&QVkBbp^riCBJ2sh5fU&uBZrg8ZWJKU4b#5oevyGtt*o`yc$NC&)}(S zJ~&q16qiV%+zZZVxM-DKz!AlI_U8rpX_#U5wvOpx@vxTk1DEKY3(nFU`{ukd2s;iO z$=MO!aqo?_Jg`s`DQE3EI&%T0;Df2dMcZc_`(I_Xhy!n1T%xQ0_s=UY!c#k`N#R&M zdAU6Y}-C!4J9P13_UUNTMo zy&t~^;5XYf)xxnFCZac!=7^UXR}R4=2%EEMn8d-@xH<7JNH|C_V(LS>;%RTtxJRhc*@*Ah~cjnTZ?uGT{wV|dt1Do}xChV#av!3PUadDZO z1~|4P%c&I$iJ{QJomCQquaN!w_v=FW_p>`mcA~DqMc&6T@npSpMi+(UtxI);K*;h0 z?=4vT#zwy5QMe07Y91KOWZ-PXQ{Ba4aLnMRpv7@mz5)0hAjsG1MZnzfv%(%Qdnq zKfCqV)1Lumq8b;s&z6C7*FAw-Ik$*zt(Ldb|>6NFH)zhsCxti$=VREXh@ ziF8DW!I&0p4Uyvcc<3KD3mW#V{>a1&YKq0vctcEd+)vvL(HriJ=TRtrk3-S@UOYLY zLtE+N)x{-z7Q=%;h88vL`n8hd_rMv&YL`gpKF*5gS%K)F9R1+`B41`pQFrt1^6NMl2S9}Gh-vXfoQ9Fo zO>&P9ilys540gryAbb(Wx(x&)k7J_bBRYCIM5ICCe=tPcnXoA+B{|CNjn!?Y-uCbtpJF@`3>^C#X4=g^2S5i@jmM?Gu@2~;1WJ!E^C}NJvPhl6v*SFtWQKpInaAVms=u+8R)(A{PT1m?c^%c ziMf9V(cEy6)iw>_@>bE;N+{)pNrFsU!^Pknxfb9)yN*FRq@iQ&l+?|880GB5$Y7)} z$>GB42=Q0;&fF0p=7zr`_bQbz-l*I(h;ptF+0t?I3Q@4c{*)S7iC`-DjM_EObPFA+ zSa?yIx@iga*fk9jf^w+fTHLIjkmWRu!;3MbJh$w$*6vuEHlvz#W>y}y!JZD)VN|5( z#UY3y#n_xii*i~(Xr+8?ManbUnq~+cjl}xFxZoCDh@kUZ(-|4=%ifhRQSlzYwAN>C zIX@OfgVnsdY%|yqF;yJ1jwPA!?D{TKF1gA9vSI)*2+dP10`TS215x6d?kl1_xQfdi zEMatPLDX~l+ zUWD{Ytu9SY)+IAMxRg>=dNZ&v&icKP7RHKpI)tRZ#fm}6{^2TMiX5n@)`lx|DOMzd zM3dq$d%)8B#fh{WC9Blx=RncyVZs`=dN|Lj^oF2UknTtN7Cz*nm2o1bgZzYSZ{icL z;4d_ve`)&LR@xq!{ZO3fia>YHc+n1PM^3y*mzQ=j9W0{J@uE}m!>yrp{0`bR@e)PjBaH*0mdhTU|stqijuz zNX}?oq`hN(O-Hm`xC2n28dubl?XD}QO9>*rZ3-^Hb7?N~y7Jd+7`g#~jv@25uSKM( z{6vv1qifB!Ae#-y_;)j8G(S$fwm~iE z@g$2(8ETLRz~$Ip6Xw`a!^Iz?@%RLCx;ykwR_h5IjVC~bV$RxuZUbuo+ z+6MhNv~f`sl>&-Pp@AtP#VZ@b!Mui=8T>^Sb{_{Y{Eac&f*Brqi(1?|ixRCVW}?F# z>58hAOy-L?I+h~h=h`wB%U24E8TBTrK5M8!OiXG`?qI&qZ83#v!5JO-cQYM8R^yI$ zO{#sOIB5g%@5M}Ru)K>*lH@iiRm4Zxxa2$m?gHJN3cdgu*o4n*gRS0i6TzCNqb}F_ zIBcs&SNrKis>t-&HPoUs6KQJ%*~s}cfwJ0)f&x2lmCV~R{t{_cQ;A8fZRE%zhNs$! zlw_WgwIFuxKx7gdd^JGgaO>xG&@s>q59F_HMQ#!!kq<^~s$~k6luKoxST%&jY6xuz zBVSNMcU}2@5KY}?7oABJF>yA)ix@S(8(ldI^MVxi^MW#P4R$N+(~&fg+i*I|j}%Hu z7wseyv#7%&^hxQG&~Hf>JwiSL+hFwdq8HP#L5!tu(nU%rJM~DTsYbe#hRi9{!7bXQ zDI88LmLokZYVGD+MAXc4JW1_oghwQV+pWqOLVxi93sLl# zN2K)QMk`#GZ?yG%I*y7Jcj5~|dCYMu5(Wlx@n-bnSC2?;D_IWaB9CvRW5<*Bco#62 zqWlbzAn%%ID^s4XHnx~KTmWMnMKdyh>J(a;A<~sG4ET@&`Na&8nPc~YSA`)K1+evx zT~SByajuNH>^s_j8>XrRA~En2P7#0iHc5}B3_1_ zcq1HJkr2g407$%7r0E^wsf$Yn5G5nh7H5!2dF@45+oE%Y zRaaOCUf$&aEdpz3@j2Fx`fS2JAe9samA(LQ|BK z;u#}=dsCLkC}X%wf+_&JLqCUW>CatoqD}<^hGdgJC=!ug?Q$^jJ?CD_eK=~lYJ^i% zHWXpS2c*)-%sb~<3ny_X{(*)d)}@qXL)4l@bFxLJ(7QvSvR@@_t=DFYn|LKi?kKwJ zuZ7Z>j@URcq8SOnHpyay%{E9wnAzqUE#>wz7Ol2c1#bC%n#&!9Zwym>7|IkMpi4QTOSo%< z6>I0n%Mk2(4t3ycyy%Ex$nD~xgI*Q2am zGk5P_#a?qY9m*96QFqQ&XrFGOJwRu3MGsg;<#!S>@zLzr8K4}TQ z*`alr>a%GjiX^ED-DpobM{_qzG84TpqIq~AmBZ-$zCr5aIW$h|4l zwY6;cz}H%YT1e%d9YaJ%mbGzWAg6>?R$~D3L~fewIr2Sj9mP$tFv9~ z9?BC5rS^HOX{!ssFYk&}M5FepN@vVOb~6rup;nLsV$G(Ed;tTQbJQPlWNHyqGT%me}AVv;v2-@GTh*ZDcOnQ?Pjl+Yl;#?ze6X zP`5pJp_*?E_6EzqQZ|i4^=~aqTo%;!{!Vhs&6#5Wubo+;&9lPR-hGWby$~34^P6ob zVx%abR9UvU2h;DD`IvR8Za$pOdl7Bd^1z9~ zy~8M?NMxyUfm&QP@uzYli-gb3q*COVVKSFTxbXH|mTy-1R~XM}$0piSD$)qboM<{w zBuZwVlIi#Y@Sz(Ah<#QZM;b0nhR0+enfZaTYVccR+Ty*%j7Uyw2$;5B+kxm9KQ%oh zIdqd%w>MC!)A0d@Nh>;wFviZB&I&s_I*Trj4EnCK=)}osT~uK@n{v8}uJQJ8*tSyE zP%Q2$GVDd_UkX#|&=`RE=P_FO0yk;%aaE5IBzx#I2v zKvy78%sx$98+?#_-7uHWgwvpIA~)(HN;nfIjXa zawGf)>gofa_$wgSAT7Q`bV1%cTmz#ea}`$JNhKmH?JcYNU~Pu^D`Xw8BHTCR@Nro` z7;A}|%%7KtneoOI_Lxlr>spF2yJy9j2%6LrBG|ETTGJDg%2+ZC{ z^Ag%=YI4`wH#h>{Klc>F+7>t0$+oJB4)T!ZO>}F$Xi6z`&B%IBsqlrU)lbu}r0u1m zHz)sE3VyKc!1cZoy|0uDxmA{~;Hk5A*#Ro;g$>^q2WUbsEDyKS(q2%cK0y0>iOk$O zt6g?xWD_gK$rlH_W*{#{v*cXNXyr0pe+BO65M6XU2l>I7N)C8dBxCV9-xO^|KqCpJ zSM3MwVAa^*7a8uNb4%gqQK$a`M-P9{4ZhE;w)okEGIZ+G;EsITP$;F9iBRrIR+-59 z6UWmcnd7BV$80!09NVHtaLzSl5OlG&lwsrY`|0e#bat=JmP?%*jsR!ML?_oP2g_Du zLe{0XCyUf^JnxZGdj-x${Rc9taZaahj1B}O2KpQ*z^KOHe>|j9H(Y@=E##a#$P23H z{LI_3TvKJwg0+#L5=Y4^2i>()@uBXfJ>{Z(hoW;gRVQf;l5HxHJrC8zVsPWIJVxRE zjc6&$tfuhZ*aX>KC<%&F+(?42>A-1eZ*l#Yi`RIeOILy@k4p?jm!V-6#HU5kc#qKH zF$VjqJ6VgBY8D3&j(jwofTo#O7C`1^(?v(grCB8U;9y~UBy)sz9hGPazF7>h5=*h< zr8KmUNXd{ZGH!c>T%r&qo36Dkw#GK%9NphX+|lOktU6&#zE$^ zLpd?@tqs>MdzF)|GPiW?Lt4oiad0zdS%de1my>HsVS8-LC7Pzw%Y8)>ufxasiZN|% zFDN*TN}=a>QUi_XCt^bFvPYt5K|kmSs_DLdIF+1*%S9miPeSW_%?3n%(O-%Fck~zC z9si(R{Y4=Y=;{7Y;@QKR9?UC4EmmL_lp3%!H3Y4uoB<+Xsv^`{V7sn{x4(N)Gk#;& zsNV5}@}^R4KP(H&hkmzNaO<|b&Z9b@j88k)L)W~e2A;SzpGMJ!0b)V2ZBWI#DckDP zkXE0RJ5Y?tsm0E9wiVDu)0VE7VTq+{qSami@c?{PLQx>m)`23XCnZC~z=8`4S>Jn3 zwI*`fGNj#xv`DAAW|`AoLE0xss}EM{7b3?X=q&lubbMmS-1NQ+C7Bo6oV-|^vabN4mX_y8ef&tEL@>*Yh=a4a>V7Y9ozb;w_8!FSX zth2Xk$un4VUBW|N8(mQiIj7}l#-g(u$KY57r>HE`UK_3G%s$&;9kwc)S9Q6vD=$-) z%X|g!8OQ6Qo!}pi&=PLo&|uS?M<)hDjR+Axbcpb!?L>RbZ#2!lmb+q`%4%A{+GnC^ z*bp%$**+f*vV`dmQO2`s6mF-Yy+e5QiKb)7*N=s6zE}Hiw$L5$Yi_@dww7&%-M8u( z)%I2X=WDWDvCwenKp!n0DjvkSfA}yg+dZl0FfklHXAcY$H>a(I$sq4-(rvy_%dCUh zl3(8!O&P;Q_rA-mO8?l%AKz6zSOTnSkc^h2pLFK>u>;Jfy5XXSUWV$y-dRSb;K{ z(-IFWa}G#nMV!vxnREb%xe*8Vk(}q4TRv0eQ#lGOv4I-qCLOu|*J3=}v1w-`O_?So2>a14j^ zT&5OfI9~ujV$W3bE-;j+z1Ys~{U7&KIkA$DP|Qe?-+|GS0rVIUiB!*diBdNLX_1~H z&ngf0QI3)*nmb7> zmLXGH!jOsy)eggUzo$| zYvWL9oNpe|<{|BxR%u@#?F*#+%SuC8nl@VGIM&e0(IT^p1P!5)7_%(=Fjnqi1OTgw z?i6+)MPft}OOsvd$Y?C$xYdav2VQEHL#zQ*#Y--Q>GPPRp;Y!KUY}}S;>m*)# z;2WngZgIlKcpdAz)k;*zU1uRzWmL#rXCYUmDdeuRklT{>g=3wCTu!4wV?|c@X&^6N z-?{cZ#}k_pXz5sy0#vUaD+<$su#Y<%5&E>% zW;%_YC?@j9Z4*U7^KHn`FUZ;3=F)WEYC1nr+`w5DTqU|RXF=auW!ZI=xHakC ziOhY1C8hYweMN~lqIkJeu$Dz$W)Dz%UjUhmdNGEUrWwlt3NCyT+l`xxCZS)}Es9%BM4H}M34d8^~VKG;U^uzxyK zQ z`O0CWrAS>v7M@-z5a~6Qt<&jPCBy+#c?o5>%B(43jKfb$r-<~3QaCr+ReY5|o2FoI zhpb;s5!Z9p2~)*A7>g5AF(mWo{8Ul6#3cnR%5qu}(&i!UD%dq3 zEr`>WA*~*1;}CR#cPX6q3esY=WxgwMz{Wg))21UWtZA8V2;^0!B0CMH8#NwxSFJ*O zx+b&zSV!Kad+C{JVl>1<$8?C;+Y_nFbdfcoA(1a0q$jiN(EnM&J?*VK z>BCtflG{BwOC&F`7T#vNBko`WT#pq&|5@VT^gl``%tcrj1pR_x_O53sgcp4ld3e$1 z@BG_+%#_jz|2FYESldr`%@*Aln7y+VijK{eGr#Q|ktu@$u&G_@r8?M4ls&C!WxIp5 zK0g1Y^>WeTg)9~C`vVu{X`u$uj&rdHJw{JvXh1J9Vxo zU6OcgR<&aOypHN6smIEzcn;cY>OT+}%bpTofz{F0R$AeNWfb1QL&a2HUN%H`qu0poCY>~h@KhdK%%;(5#@y$}^ep#oLeePyg|nDU@)ch4sf zzcm%byY(AL zx%0q4_9oM$c`)3aPP^uTDp$~V^I(#jN!{j)StGwkLH1okVQ4fKLeZmSR*n_LmDu02 zTsLCHw!XPz^vw2!%FQ2w2b2QAm~tBLK)z3=ALfheFT2}}Q@hPO7Kp6iJP-$6H&eh~ ze}PDi|AHqS7THeV+#E57>B)bLE-erTq`Bl zA7;>_*TGQ6MZ2yOg%O#fV5`dp3Xm?|OQBz{6J3)0#|p3zu$HNeeJ-rMLLaPZ0~ca- z(P+j((O=IyMw=Ewo2mBi3N=VOxlj~WR z=ycKko5V!HqlYFlZWdFcWf2y?ni(QJdNZiGJ)OB(jMe|ymIf^n{W1>rQ3o=LaM=1$ z%`vw1<=UT{LE9E#<#v(d7BM)SH-}8JtT*UR<8Kk2a(J(dJCzYsf~i?~xjG;*d~}l@ zmZ*#{tPvVfk2@7_5g$ad8X$9dkXDk$T^~_TZ?_Lh3l3;s&85AIg-@^imcCjH8n}x> zZpF;IiF)2DW@WIrunK&ML9P6@0J1?@^(7e#XQYqQh9HdCtzyuaWv4RgH^P+GK2YIr zThWpq>HK@yDR(`LIcq`#d6>Qqc`pz1v>~U;O@u?PN!5DS^Eb{r;8Y&UKn;G1X5J>! zJa0&dp}siPyS@RxnRjeY$KfxW0odSZDXqUvbPeA)#tSf2*dkcj+$L&tK)3jIEPYF8 z|Lx-1h`SK(Di~fF>_>F&HY&XX%C$DAC>Z#+?+Ik0QJC6?C0Y8}` zr!s1xkAg*9c_$9&@?msn!uLgo_9=Yij8n^`00iPaRBBmy@64c|K z0uC^;`YdjW3I@mJp5l8%K#bA9h@qJQ2sEFi)0%)l9Mg2#9RN2(`pE#c7qh>mh@~*a z8**wr2!st0HUL8z_2<)dSD02OF^oL@mSWMubLLXig}T=)6(f_d0fjQ4zr<|dThqK9 z9cF48Ng;QN!sy~t8C87uqZg-h3{uf48g{2B?^$%ptPZ$zjqe!8)qE|-`lr}k22AQy zCIrUmX7MRgo?EcoJswSI2;bhF4&4da5|ovE7odltr}Qq-JxY1^LWrq_frl$YA42!t zB~p4y%{}Is$F)%J39*|wImfnfX!j@!J1kXdPvh3tgNS)#7Ri=0Z7}Zl5HTTlTCa=f z;$1kC11aY&!|B0YGyyv1Kp-to+tn z#qB6~I6kPOgs(p1?8mGIhS5jMM0y!&lQ=IqRR{$NA2>t->|isO!2`Hwt?cUNH1*!p z#CfJesk3lXE_J(G%!0pR-Q6M~q+v`szIYxkru}z|X|5zokK7#LBP^ejSe#3-KK1OP z#;_NsgV#J7sbhdN4F@FhSw^?tBW`v?(Aj&$;HV)JkgGTl6an`NFg$G9Ty&DJOefQ*=W;R4F^%e$i}d{FOdiEBP0aC3kOgj)sL{1)#nX@;8kwmz=c6;r z(ItL8*%WL}qp16!fEz+n?!zW2f>z?e^zhPs;(EMxz8{uVU1#rg?{^YF;v>PMOjJ^_ZvfnvPz_%Rr%`d+VfI!6G`)E&WX3BtXI(JqoSveN_Dyl=Z zY3F8{Ra`7sdliAN{8}Dv#~7ytS6>B_9#s1=szp)y`LE!FCvT;+D!k*_9nZF^%1Rkn z#LvwkBzXxphYff+EvynT-DMUS$^bo^ff{_Og@|=rE>F$SqFEN-ytSxG?n3?C#9lP9 zMCOspnIFDauhf(P%+}3vlN^;&J4H*COjaLvszb@h)Pl~TM46?)*!z%OaQ34fl99HFn?2_1GH8Rxw+gWd{Z4p zqyse;bv2cmSv6hrRyB9JxjxMT*sZf;8b?Ry$QFAzG>C=SqRJnTZLmdkAEe7ZNQ5Cj zNW%+*1eFhUU=Uz-n^J>VNi7&|ZmgC8+*XalkY+$|&In5YU>}XZjFT%Ur!&>CXhv31 zgH6|;`|0Ozr8SC%Ce(PgRZL%@_(;Al6DusQeb#kQQ6OMqLv1evQFKT^4B}5881fzK#hsLo=3}+YWFy z^_9XG-;9dpwi_f`S6XPrvsA&S>dZr(MgL=+K&v%+3T9c?ww0p5>c78LA1k??UssA9 zxCmzJgCe~fgVMZTwFmgkRl6KweU{be9iX;xmk{bBLfM#)~UTCa}xa+G)iCon>iu-{rr%@Iw9J7s{vU!WwD_XR=BG(I4D_K{q>K^n{_S|D|$|-IY^lE^rbd|_( zF}@=;ql6kRKuTS;N`$%I;Ss$KN$@X^rG`~-*OQ|HBSP{&Z^R|#1vCY0t?alxOMke9 zk{^Tk_>PylKZeEGPtQJv!;DUJ=rL^Cis{S8M6ZxyA0N>fW(4K@P2AgoUzzOx)3grW z*Iu6sN2Ye#FG%Zyv;mw(pZ*QX!g?R+e-~qhN@=*gu6x?YK*(BG!|y0+LV+d^mgONb z7E?|SMmqV_SbE&LO!KtQMA@zwcjTeB`*zqYdkTt7e27>QT zug0z^f)1^Qu|JDi10r#YFGa0^-XelLTSN?9w???-r$P3owzOjnw#3%=3v0x(W|3(P z-S-c~0f?Xz{}9hbJ>Cu+Cb7SiukL|BwPxq~S`p-6S&shkurrPt>ckd=v|G4V6pBlb zRw4U7y;gJ|G_pMmI8oqXIBf#SQt371l*bIxItP-pT50NG=lSC^c$7jCpT56$3*|l` z;=3$DY#~M*b~nCrmQAuL znwqxzVy${#wDQ>RhP8v|_E=nh`48W1IPi>+0Ijx=Ha(9&Jx}Q zu7mX%c84Z@m##<106X7Enz0@xUw=g{%$IpX!Dw8Lo!NSk9QBdxHcm0D?-6uxJv^m( z%grYh9P#vF{W*ENOgqrkA~;DbuzKLqH?-5y1G6Kl1~0kIu>p=SE$=K3PQbTl=ri~} zr&>hQX8piZGQV42gr^(9L0vjuyj~zjhTlDy+rb1e>kj zZv1}1`pw_=<2RyPqA__0%evQ+cM7JNL+QH>BC~Dfw=XrTE}4%V;G!(uV+p&4a-M|E zEq8@K-3IRpyDR+8t@1mA&hPdN=4*Y{bYP;Ws9yvZ)L`tv+`;Usgc$F@DCZTI@l^h~ zDPO5ZaHoKcLgY>PUmB)kPl_%s9+wKZKT}?%Gts$RTLx>yt2c@Ss@RD082S5#jHdBy zq#kSr>)SR%O%@M#*v*VX#*w95`eCE!vZM{~$*^uPO)NiEXfj>MO)jRv#M#np5jtwW zgp|pNzu7$p->Pb#g#&DzBM8C-Zlh_Y>UHfjgfLnJkC{}Ee{>mRa-Fgj^=h}Q`R$BnRaLI9P|v%mXa>q(&Ez^rY)=4VC{Mn>6UsJhmNN8 z_2LFcA|*X5-}*j_?d)iJ3Xf)RLxHw)|EAz5|JZYFLsw#v-qqit3mLzSB?_I_1M+T)vr%Yi$}H;YskR$S(6Zhm9Njx{0O zS#=6=7pU(RoXAw2qNle&;AQp5XqNyH z4~vto-YVC>+qa5|A-rNn0`pirwu)<}D#qjg6OjpYiBFGqGvk5S#e4l4|q+z~mH6O8a`|~gWg(~#yc8CzWa&{)~fL2)lHHYrm z2^G&OdUmJig>*W-6G|_9_q~9H)e*6C{4VGg?D|*jh6VTg9cjaEQ5xT)kmr-8Pt9dr z;;4?yX!qsPue(KB#{JeeK7hkmZNZtP_O5^q;ALG9gIt148@bB*Q zz&~Mh*MpAy6FMoornU6lKhXn~8fvHR%B4Yj#Go7ni(CId!ZNZWpIaS|DXU^aGu0WmL`kbInK89)Lu~-UTI}zGVej(>=l_I^Q@$YC~lv43%LAp zpJ>;N%Wa(~zCje|7dz3Q1{fE=4-=PAtVQgX!e+w3(D7utX6SErqUr|7YO%Dn0mAH8 z&6S>S0Gm16iG2G(k@wTp`$18^b)q%Va>Lqvqa@j=yL<=tHg80f1ST)3zKk<^dxw+b|R<%QD&dVZ2 z-o~*46PP*hEL!<8TAD>KzASFdcu_U6>5udAq}BAvJeu%|SWppo-(!Yg)USHK9M7N< ztcIK5pR}p?=oHh9CodT1-t$0BsI=HN)4_&QG95NX9D;98S`&dHJ3A98?^O}&`VYn` zQrobZwgj-XsC-paq$TBZ$EVk(=Br^3k_Ws|rG>=j-B{5Jic8{UO@=x(uyx=5_GB1d2K! zdL=2!^XsozO$BKUiXv&w0WnJ7m`{5TfGfIiEod)^SGu66~;mRGCMiZM9r{QM2E zJKu(wNpJ#x#+Wku3z0QdS~dCgzsq(tZ2}$o7kYLlg}(`V2OG%Yn#0^)K;7RIi*d-d z{Y}w7-bk5vcA#iL3lV>@)&V)~?pC?=GPD!{Tqa#AfSZc*!rLZw>>xh1B6K(K~z$GV?U% zF&#s(@21d!0XN{6sttOac<(ypsloU)>x0{gIA!*(S!T8Y8yAW8EQw-J&v z`QH|aE?$E;RWXD0Z;MeO-=iViIrh-)~{(&`3NTIl{Dgr=p7PXq{HxYZA}EN zJ|b?2%EqgABd8n<9TraQCX(kJ5#w8kkg&Ym4YB4L55igmp@JR}p~?NRVK{aJU!U*} z_Uh}4=+1XUM%*j-&RU&r)_0a`htjTh5cmN*tdHM;w+YLztO@{Uh~*=VudON_UD-?bHM+C}V^ zZ1>C7)q(}>eitj`5c0kU!;^hQG~qol60gs`2lI~4i|DKOa3I#5a*o0jydtKL`JXPd z_$cgbBIw9bsiSwiFEU+xfE%ejY0Y*2`&d4|96`h0$2nICylNO=(6hFIraUiV)G8Z8 zr+$TJ&f#KbDD8P)T#3}E51{;CK~p}!DOv>G{sFvESJ3(oKu+cK=?8Exj-VMI;>dP; zXL{{Jhg2{scUAF7=|)&#{z+(bCUF*QDvis?0gvf_E{Kk$%w&ib~Ui{krp#gzPo*pbnQ_Y0^Z z$S9LI!HAk~V(z?!t2n(Ik86#^^urer@gT^5DG2@F`X$!ofA^ptzQmDw84dkPT$4Pn zo9=R>5W$3EK)V zXz3RJ7pi4see}OLlZ6`kG>YgSL+|%Bwh0IQC&v6zJ{Jd zvDgNjj(y#o4~N`X!UnLV7_!>Mvt1SX+uE}=0PyhFIOD&G+I|D3g4RmE5v4hQK1;9_ zfoSywzxKAa5r;!hfx$doa}z!F4ffV=FK*cmodfIfRu`HocPc$4vK(`1&M7Ft$D*bpjMOUa zi5ie5j;-o8bB$xE4xa(y{!^ld=kujJGQcu;w3C1H2tf)^O3~vuvuOLBNKh(G&=Ljy zD`I)bMt+C&F^dj;hbe-qnNCAC!`%?4AwMmm`KQI-9oOs(`CeS>&>MQv;zk^;gN~kV zgh^XG9c)DAEOMR^4~5&^9RQm@AFV$l_Q_)ix3&>SdN!>b=LQ%5Anxz56@3cU20&ap zF17OCbPg;J&Fsz`uAH}qsqC2fVB1b(ifwOSXtY^h4?(fFDKlC^MC#-uQ zk3m0Sc|yb2|Aa}4=eD23Vjjudv%EJhpkZf0ym(*mn~0~tS>ak@4{K)LR#0sN!bd|C z#e&78h|psAz5hWs_BassrRc|j*I0XEm;2wyI16N4jOZAOlyMTU!l7S@zGOz`<5tpP zTARrIWc)1pB8u+NpE0~+Y5vb5GhEIB|8ZIL@3i`7*l2JUezCgni|WE$>v_*FBEzSk z!46tZD$SZyPu9q)V9;exCgd%!CmBQ68nU-BTl#3vVCK~0|Cz>PHxJ$GiD z!*(&pC{^sur7g%`A*a_fI6nnDvC_Sje$9^xWEw3!5AR$L9Xv0VfWZv>6-;^*J^QQJ zXW?ItNA+*$6gs!*H?c0#Z0;H-Uekp|wpSL$aXE_NMj(vM}3u zoS%_y2mgm?{di;HU^)nqbU;6#%#!~JYps|`E&tZEqWYH;Vl`$k!LUAQ^?hBd->uW- z??0A12AGD!voKjn>5n{QD%p1+Fj-Tz30wuQiPSYG*fVjSHkjOAgrKKUpV10KP9S$+(!px&vs4)$z z`RY((a_2{p$=m3MP^5xOv8?@VAJ70yH+G{5FJe$~9-QZc^V$%|?%Zy*l}cB)F>dw- z^<|UpCpQCq)w6+vV69Aci^BqJKvv)d*F&FgWAw)Usb`pxDKF7-K#_ZclwnT9U!~PP zF-NO?=5{>i;(r+}4KoV$MSbc1aHBglh8e|uZ;(8@67bg5%<01&%&6CUW5oh;yNYP&&#`R7}Qq|m9Z=Xx6?pJDa=wi4bL-J)s7{eTk>6Qp1 zJ%k$x-BPAiP+f%4&cmx2Ax|KKB7_r>Mhv+kjYP09Poy!~%Vu7I_R-qgmb2#PvX2^=9|M;e78 z$6D9YBbrO{ifxCPeyR@y-}yEYs4Y7^5J(4msJLY5=5?I$9lLq&Oa-T`@+xwze*g zZA9$f&H5?27-RI#f6Quz3+Ex*|M`xHibf_HctkyR;Su+URSC<%d5~ln=a0}Cl_M_B z$aXB-Sr%u+I2;clw4w0?JR;7=8~=a^@K}P;KV)5BdnCR|Fm4Wg)p~ty0L@J_28D$5 zvp>I>XpF_}*>Oq6sHi&z1Jiy8&;u~`Tl|>M3sW$RRY^v%V=BFxWXuZbDhsAz?sZN! z28RUq*If)HPT0E#&G?`p_G-5)%o52G&ddW^@INOXu2V73U{X) z$x%G}nNc!a9HSrQ~0b)qxxI+{Ud@EQ@i+ zxP+8N5q-;u36)3b5dJYxV?2hhS(U`(mH|>&MGtt4la^ zD{NDOGiks=pL>jga(fwQu2w=*R&UqGec<}|?Ei9U3|@xOFLVyD;y?&lRtj7mTSqd` z=esE+)9BUQ=VCzC(&wm_KHFq>d!{ilZHJQ1WglO?O%Dq!ah4orE{Q&){hu?9G(H&M zcCirUo5t|}p@9x|12D^l(~2L=UN6aXbq0Q+?Es|Gd)ndyQ(6i`OA2{N8>ekNam2@}0dJ_X0 zB3I}ER~mG4@B2Ki6NnPBvYj!}(T2WjXB0w_=4o$y?|6)&IvDBt*@0Bh0V{hv&FFx6 zon2d1UI0CDZTbnJFtweo$o7bT8 zpmW|;G$IR(6QciuEMqDL=}49lqo2QlzREH(;_e;>R711avN@{N)2MAWSYbJJ%Qn)( zUIaCU#cbFtGiIKz}_A2!)Uo@8gUYrK!Muc*|LXi6tzbI4bN6}6>OQl8N} zo=qYGR2)hf7?hqu;7Gg<(5pj|6L^C5!MKdjo zI8CClmDyNpM!a<>Wpp-t(%YUf(_Hlbli6+^s>Z^pRZ2OUO){Ba)dB-K7$E(g(d#Cc zF%zetRh?e%Y=lSuIRkyw*~sWVKVZ`-$QZ_8Tyf(*qeP+*#}UvQWUuYSIDTC7bCkG1v3=2G6b=*v}A8E0BS`Hk`S06idZ3L&1=@D$(~@R+LG68 znZBV}J0HH6(>Gm>lq_ZgYy^zMJ&A35sce~&s0ypYo?(<*Y}_C6iG={%T32igj=NyJ zzScC=r+&v_)_A%>5!*DBCUk?WvWV{PhB=io%${OLx*6Ao6gR&P><&3-9$xvbn^gL! zyYafDv*SzDV%%gna?_zwu^AT__}(5ya+l{&L_b$y>K7bYah6DJbHmCYRkqtXM{YR2 zwJIA?VkEccvJV;+CO;h)B7FxD8Bz<6gqfmV;wjF6jV+5Suub7>JF!&EDKRMI6f%QA zASZ_OG$!Y?8LnP!jH!c$I8604GiC&TE2~#|qJWY|dK$OJ?X-%(T*3@pRfv@t7764n zHF|gyb@QfN2}-KAmYT5pD}_Kh)v6(t&Xi&$y^g%SjGIGNG^eibWl-Ep6}*uG`;z=h z*?~PyBm9`&F|^VT;rnsgj<=96o6BAFLx4n{GGlm16pE{UK2>JS(qF2e=yD??eDxA` zF`NRRg8+0{IW|E3n{(b>ZgfhXV7+F$e$-b(@5v%qDs}~^;cz(^-{X|u+epXJ*NEO& z(!pGN8#iLo{n-RARfOwlCVd_o)O5C%T{qQbYEYr zWvF6PUt^@+&`5ee<9^RzIrK0VunhE6@#FQj3Su!m+Yg(w#mJT&>CzU{NBuC68!5cM zka)?@z)5p2I3=aK6u{Kk3Q}Xjlq!Ya|U4-WwT{fiC+8KXsJu!teU&-&UBM{&gd58V0Fl3LP0{#Dw&j$aB&#E9kpn zM!T{v8hgV4q*5;bO-)nGFB;2m{mOByCF%e-67u%+Z~fA)NY&=4LKrlefBLt5Ob3nF zCo*Z#a3f5IiQ_%PjhjMxj8fD7VRBYLSMuU0>Rth<^rAEe)3mF!5k6(o=GJ@C!U~{K z85p_sI9gd@>`Ze@7-11$Rb)RI0HAi}2&13luk`E)NZ5(=(FkLjH~&h7SlepUt`Ku= zlWnM3L{ml@H*{knGC_0PvmvL-R@`W@TQ*R|yUA8o-7#%e)ZBoRU)2*$E3a}<*(f6+ zxfnlxwG<)tnJdG!r;$oWVOw)NMm-0_&>f?ULD7wk9+TnsV`FT=|M4gzBa6+k7>qEh zkGB0OA4q-?JAY6NS393gAk77Kl65jaDkE(4m>vMTNl6uq(dUB3f) zuWSu5-L7LXJo`;0xtYEDnn%iReECl!BFi+xd znUT@ION*ttamF={DheMD&d-o?xZ@yNINs)TKG9dX0llnz6Ww%&x{x_s}<28~Yqr z(NmL*X;HTU7;hwO^|gk2&F?7rE47_$Y{u6^ld+OqMUG1BpRYouNNA3(qWnrDJv0Y^ zG3c-Tzs9}JT54*zR7$R8<*%$Cl$D}&|KBt7T<-1tyzl$@)5m7c%$YN1X3m^B z=RET~_c~36alU9_$VqGj{BF^cUZrK0*--+8FM^Rz5B}@!}K(+4k&(k1m?Nc z1*@^=n^=gajueeW*Z$1pLW+3AzmZ?g2HWHG*GSRD_;Ubt9tFRp7fl!i6Q&n!A0-y^ zl%L5EEdh=iEv8pbAE?)pSEvvDd$f4IdbUr|I2ttuKG%ADvjgh&KLe>o2BKg{`(}u_ z9$F0loq=V2Fp!=dD-PLPQr&UlT|6p3I1Ylen3|0j#R&f17%%Y7$RG;L#2L|t9?8TE z_Mw59qNlOpHocW8+W3Dy$dD`O&EX=F?q!Pl%{}*+gKT@O<2Df%dZaPHBN47d7dDq=3r!x}} z-9uVwrA;Q{Q4ip86UEE;8pQ7t#ZKdP9oqD~XddW!yY&2EDtlgR3S*ep?EGLor(T%y zCy8gPn|<3r<=f-y^^I{pMt@C$ihnGX1wYZieQ3qAhm!~8)N-;-JVrL^J&(X-hrAQF?FZWp$0wRnKH-H+Gh zRF$tzx2rS*DcPsOI{Y-1`c8$s;!8zS#cU)urov$TIh6*z2;mqY}?QZ-#%@B4+ z)!lgNJx!d!_klvEBjnYZUYstzwF??J1F|!txYkTWzF-2|XJdy+YCT&-wBC^hdp%?r zly^70XqeQZwq=3x9G^hlTPf|FW9>;Tn%T8wDrw$q(YQ7@iwQ|ruX)t4MYa7TjrPtK zjnLN@vqjVB^Qe9(#HpN&HOM!&IoqbeBCm#CK8`SK=hLWBmI!;s(*yUm4tVwPW78qP z5$vP{McWuR4(*s8?|eV2y{C*{U_x6gp&g&tz->t24Wn1HME$@|kd29qwp9+J9a$o} zo`(c%1I2iABBXZ>|j#3fQGw^nzfK*{$9Awf7p%s&Jp#h zd)Q|qe+^BZgHYumdVh}SslLeJr9^>qMb{^pgO_l`;=g||+;&tur%cx}%yDnu!Rg6J zYBA@(FAKdsSF{pLGB6~DKAbH=+qa(2TSxq(z5K^$`MIS~6YQN>3d1ZUK)I+3MbD(Gc5E{x{@vGH`~TTLQsGwGcd=n z`Aq0PhChNDxT-L}VoGa)}NDKlneEJs9sb;fB3*kJ$(prdft~b5E5Uy>^FqZai&f#=#p;(6d z2ul{>32-n~UyR2g(^1KqY$hcw7XKxAmV;nBQDUBdFcmEpLAAeol6Bq2Tz+q-XYUct z&BN&2V$t6C>6}~|G@_ErtPyRP6--?dph@LSWq1mCPZQO(v-$i`$-f26$ zGtySHGsfk@;lV$+{m2rrGpf;WtZgi|e=9%R`Z4OJa#PRi$Us{*g#KCrRo0z;epyU! z$<9eoh12;m3Iky3BelAYz@Cqu+#c?og1h=`d!|k5uTw~i<<(u$(U_+SkfvzN5d7V*k>Nf<%VkdZhb0E;3s8~SkAHUwqP8Hrds)$x;+X@QH6OD!k zS2*$RrK^fnc1ThxVsbqnXEB13T6ivm>8XgrOMpc?`T7a>eW%XI+=p>314F^F^fb!s z@#VNoTgRe#X(Z+6iRgxXrW)0NTgbbYak$U&I?;uE!7P|A<%!0%9vY?hkrU(_!jBq5 z)n6Aq8%~{%-{HWU6I_&GZAXY>{Hh-O`y7*B$2NiLLz2Xfqybmn^V7|YwSa$G1+CF9 zo_px|;BkyXXH)0L;YaXvof;ceye{g8@@pC`ae~KNA!WO5G;G&Muo<;V)ES#K|52r$ zxHZpcN<~|2jbSSvu@+oY)CWjo^_B5<{03Az(%Si= zrQ?aw5XlPak&iNrX>L9Oz2G-LUqtsF$aVPB6N|4%RTLDm>BM79u4oF{N`*Ri@OW*` zLX8*Ypyvg@P(rCpx81L(- z`g(*VYtWGOqQ3D-3!1hb4idsDZ>`61v6_yphvQq1Ufdv>;_!HLgBaXAGD9=yc6W20 zb=zv=EO+i5qsus7L*1G8bK(;_(Hlh>e`@FNjqp=zQ0uqgh+8kC=QcMbx!w{jP_X?i zvG`$+x0MC*G1n7q3&!#evKb!O<87gimK}D4!daO4Hgs$jRlJQ0WBjsYMv(PNywA&$ zZ`ZWS8j!0%#G|)^1+aF0$e>>eM4N!$@NO!{xoS|ecW`f}58jPNs9$}`2ySS5irNG{ z(1(&XiJ!Pl%XiU+YYRMN>rmFaxLfopt#}vASc41SEP{+r$5PA9;;QlESgNrF-ZRqC zTM&Ljx^xR%Go*iP5z(O>3Ty20!;+_9arp!FhnMjy^)b|XD-5p`dS)v;w#Kw#t7ug{ zx58K|Ed?@=PH)Ac&&`DO8Dz&h%R}Bn3~DjG{~oN3`SkO9xG{2j zJk{7EnmZ2Tpt-!exa%HKX}3?MPJ6K;4QSwAG+0Qx_Tng7_&la2(S@G`INH>1`vj|v zhpJfRg>+*tZgwoBzxIkJs!wGsTzz)CpKdalo+%bzgIeo-VtPHUiNzb*$p}HllwUWZ zHq0{)OrS&i#7i+;*AaD58&()mMQ4p06R@B6m6-8Zwmx|3)E!Ir3XS>zI%z5$`2d?P zj)v_Q5n;OFp`9TUwS;uH?ODdxIey8c{QXcyQ|aJ-sHzE6{X@vsL>l-ZuB>_*9iK=` zKU7G&K7^~gihf68Y??@&4~Xah&F}7=uhFOj*iutz$pMjO{Fq5U9uO}*=HZw}<96d_ z4o34cn26eU!@w(CxXxV+uJ9RvOPms<%B!=RO+Lc41L#-*QwW|Pr zBTRvLo2O9BVR0YqMwMX1Q)xm8F3e3We!m22v?g;Mj_V|UqEXE95^6QxY)!Eri2?Qm zn)i`t+HTM!mi4+$!+M9wX7l@RuXWaPo&t^yv1c3bY_^wHrqPv;#N)M=sbai&0Y(Dj zn%MHG^~dn`^6ALOShjxD@F*%dr z^yN_m*}j`ZVaG%hyPcAbi8?W!2LSqku8H203P(+5ZVcoZE?DlMna8l0h%+98Zb_ss zj*0cnPEJ-*i62MWNDVC8$U`ie-3b>&jfv5lpNNP~89wOPSjr&%2RcyQ+4vC{{A>#M z?{+tC3kQ4IDEj>qK^W_+pTfbNg%?0^N$SvKYIz)IHPSODL|I?g^3I@G=@V z-Zv6Xzuvw0Z3;N{^><)In<8k}3GAx~I(CZ@ z5}uhtvyO@Obo->J7P?qfdKab>p0}}QvW#kdhMnX`yFL?js=hL#rUTNLDA3J1P>VANTLzQ;G}f>;4LKtk`1gLn7c-8Io)NKlaQgEZ-23%=0Zigl znTc0GG3D<~p&p;(A^8&8@;O5B{V22)dJG17DRe z71ZQ{csc9=s4zBLYy5*?Eb{l~@Xm5pYpF(fpD%zU?n+uJOBD z=<~=94n}j?B%AFmd`u+%(u*|rq6mxjlyN=t=7Bw<#m?S;QS^oY`(J`7RnnT;U&2O* z(Kz>#Xj3b68h3-A^@3f)1X|LOOJF&dZd?)#YVZ^`j_t1okCuUD2p)`}6=mWl(3|tM z=&;8Leg${St%9JdB9m`L%)KhQ>9P*St@%`W z72%tIPp8h;M4P}x(-C-ZCGi)Hrd<C(K%+DIs zaczbD)Nosq+~)M;bVN(~cki2wV41MHt5aUT4`RyrK%^eK(64qwAL)4U4zj6gBOB{xc0p>EDSK0Up7Pp^ERs7^sGU-@}i2 z1@$oqpRi1^cgm)YzQ~u(XLi*aoA_ke)$c{$>Z%Sum=>5b#g;~$egN+?X~GX8!Pq>L zcKm>8SVcE}5ZOlIOd5VmG*J!Mb7K!Rjb6Wn>r6j$pCOI40f|067qh%*6}Lb)tvKf2 zVvXH+FpEC=5ie&fqFO&;ryZI_-F^~-I9>M>JPM?L`~=GvX_MPx6{m-8i+VK<&El2y zbCyG7Q1;Dj(d6mvxI3*3dl>6ZcZs^f!(|dSXf<3SlD1vTYM@=?<=sFBT)I+hF*3%u zo6SG?c`Uj{(31Z9O2UGG*4sg`W5?V5ncHedU+Au`&Bfp;b{{D7K>+7%iqM- zfB6n0<9`{31ARp;f7-_F?`A`IeNtw95jDIct{MNyqQCFJ3#wP#?{~bW*P_$uLT@DeSIj z(!4bL|8F*`XVbX5kkQTA)W|KS7(276{XM8U(3y4*F;}Ep@8OaQ(v$aK5+iL?iEvD5 z_UpgOt@cLrrd>whrqMyWd@eNJ<(ZSw|Cp0u^a!qtg?2;r|1>4T2sT*<5ZPkLrbx~j zvJR5(0M#1CBx7B+Ki%o-^cY4BP3bm@T*Zz20mqCqTr~Y;c)YY#i8!Z zLvpvmsV4gx_gg&kLt2HJ{~o>x*U(>N_F`-lBgPT43Z@^BpFBNQ*=$) z)i^hwhS!w&HIB~b6%2+lG@Pgl48l9rsOuUe!x(o^kn9_<8aO<})y2Dl2O^cYRELzxHL}&7-@dArmk#ghNtU{$Vk_%(prLrbSkS4iWi1c zB~o!}1lI}5?v1*UUJimsRpmw7QH*1wh;WSV;wV4*dM*axMKEGBs*sI%pL~BSA0-3q zI$PSLDys&X<%6A*LHVIz$(hOBMW}(v>k}Aomr!IlK9}a2q&kX=0F}uU7A6~+4<`H3 z?0=!z6brFro(#25Rd}km7xjQsrqh1l8**k9uQGhLr%hcMVrFLf(S1yuQ94JX-f~r; zniuEkN_ls_YU85F0Wwr9^Z@lhVBaE4_`8^zMO4`UtmVFfHsfR?2Objes;$RL;Zj0q zxQsAwVn?4KyNy(r>tJ~Jzn$cyl` z3}jPwI_4zgEe0^$`4FkMz3jHtd1lw~wnn+u0J3}QZJHH^Y>xe$-$pmJ>fz!`(*w7ufmGOK*Tr{-RI*&WE(0w_MJF zDqJ(~fL<@-s4i3+7iF_&g8o6x&$UV5;h@G7B~~HJkZ>Mi3{wv;?~o$Pd%`$mQ7t({ zgBr_5GWjD$%yv;pONidby8oG2)Q{EBjTXnK40z(=r;L}Nb;+&c6y}8Zrk~K%%;m^@ zm<*XZL9x0suMtmz*IVB5^nY`?7D^-iM^(YJ#gAMLMV83(5dRBxj^(MWph29b-l17Y zh3ikovQgSFj85gPRZhN3WkA5`4V@AT?H-FvgJ#GSAkzgIBhpTTnt{dxJ0ESMWYqD&KWbcoj-j&30xs%W{d~zytrmbdw=SZg<7Ov^U&^E86&uZM&pA=bl|=O z%uIr0cVWOr2^fsgMK=>Es!)rH*+1T&24`UT;u#ZivcZWXr6dV68_H)=PfeM%CoG1l zH5CVvRX4l`!i-*e5=D70F0_-o4>n+L&YLcBML_T_^rrk)=%wQmTxz5Bt)PKRU}m6D zhWAypfEo+bqfb#-97fr_A9Y454)oVe4yQpjpHW1$_RsMFjGNE+Fc2bXT8YTpD2v zhd@K0h+8963nieAk(|fT?ZkB6#AEwMF=4Am`4rw7r3=@N_7J}%H(fBQu}B=>3=7B%hvrgdr>g|&xJMIso)>BZ?9Zh==v zs`OMxU!c1Ms4@6dm}_TPT4$zSt;kurYr0-vh6ukbhOqtPumw~ehfGN%_Eg*)J%=J^ zj^=chP>NqR(!P zsgzWq0xXT}e2>C9LAY{`F^1bk8$x-bpR|~Y|BQ>Z@)QLMu(WXLXFgMub4mlO59otV zGD4m@qv&bHAy!{x2*>0c2+}2QLv#5hC@-Ae_A+mwvAK+9frjI2ZWN&mRb%aS9|Rn# zdU;r=Jb4I`xP3$QO4lOM&$l$I3r3c5i_4(-N*=~u`nQ*i81SR2p@eNvRzE`F@ktg` zVQr|qKe^VjCl=gez%yr+ULr;dUtoqW(EolFT7YpMx)2tI*z>pUlTRa&;btI$+(}>n z#}zAgc@y_{SwpUZk>oHrZ<&#|6kyW&wa`?43W*{f^W?` z<6B4F@!AZ)IDo!f@Xh}8+)#yZqxqMkZqc_LME?dB&nMP;6L>}vsIG2*9GUQ4-f z_V*GI`xId5etZske-idjIj*526LzZSNO;~- z+o~0`%AP$8X%Usl?|Z6J(bZlC60Ct{e!!6KSC0Hp0s2@K*A;|`4 z>+=P-(i>GgPyhx8tJv`+SJ)|m&-t%(-rWqOzk=|<)RWyWav_e~M{sCf#F{*d(+q9x@e671?o51)Qg%4vSSGb)ulEkZuh?-6_D2(jF|p6?MG_fb%SPa47&iA zE7dHQ*eUD@)Femh0x>cYZ@%#&K}bXt=RHSA_h>;~5ScL=3tE$mX==>1Hgdxw!)L@R zK}IAu;WA4uFDoFz64{_wUA4X&mP_RkXG%rWSjz8%rW=~+`UDvMLgnGqv7soEo9m90 z)AF#@0q@S1oQE*5Cc4}bT(Q{{-%4Zf!EA3u_J=**$z~rw>`_>HqnUZFg<3gB8*U1T z$^vnf$DUw+^HJT=;WjdiI`x%xsKq#0-O)~Wl!lIU-r96U?KQgEf&DvJZJ`T|Abd{q zDa>F>C+dt;B;sZ}OPaEh;~(=fD_bOR4K%q6X1cNbaoP`jv%H5Mq!HPZD!CxIk5FpV zjO%MM$OZM1{|EU_|A zf?o#v*pDLpWzC6-bY4Iy?^4-+8JAiH7G6=NvZukJZ6&HBA&4s#DLR}E?pIRSAQ;iF zfkk%8`>du}{{tZ)iB~r0(D_3Sy0(OolRC$knduyBW)}FG66G!G9HZ_A07$I1@eW<2*K3dLnwb z{sBXXlNMlVZtiCQ#?=B02+BWz}aFg-==_$nGDV#^bVsB9;(@Xz_@v=2NBkw=dd7x|*y`h{-#XtQJ*lV8F z&fmOUnHPQ&G@GMycOd;RBaPBOytShI4<@Ap@*?X`2H*{khd}(P1wxdoLTE=gEyi7~ zIUSXX0lmn_6#x&pI~KW;D*He>?{mGI)+1IW@*Zep_h_h>zjO}~Q6ToW)kE^%8iBWp zyr=+-IPz&3f<4Dira0=wLUPJaK@>3@l>9jlYY~xD87>&Gs{_)Z^V&8Kmo#f4_~G5l z8a@LJRX%|d62U@%)Zv`;KuHar#^ekLqRLcER$MfN4T0DtHfF8=|%c$C>GoJE}&W!a1;-Av;Cl;hII>KI< z42Q}`P((6xYd%T*z!JOC1Nu;J~Kn073aNb(J;|kDrkU4TF=yk>dr+G1q?&%aZ8Y4~_!G+fJ z%8?A{RgmQxz##A>$QW&Hxx1tFtZ;zI7-P*)Ljgk4!Il)U?bcB1_!9^q%@dueKqZ$ zi0A4z^QjW4aIRGx>*(za1>g|jkjPpzgemEGQ&WzB{qM=A;pv<4ram@A{CYhy_VQSVP!pzlW_GW-LD$N zCiKNNj8&FB6#c*Joe(4PUD`hxD|T};l_50?w|gtap6%8M*vl^W0DL^}@M4)M7NCwb z--^5)7PCkBYAfb=eKaIr<@wZxX(pE!aSb?E26DzO&8@M^hx}b1K*sH6e6(f@z%1B} z4x+(5r>vx5f|gCeet8dTAB9zp+~-56e4oZLBR{Y*$sc&DMalOo|swJ?G=rZLwm3+*A zo*Lt0&6k*TRAVTo>zK|fk5T0<+GhVxrMe>F_>?iQuS>z}an8fn;s<*tIFH9*)6n+` zEpw(kiAH!(Y#>!rhm`$Y$0| zy=PC5ox~jr;0eJ{VROIc8q8=PG>*K2X-9a-Ot%G8 z1yk@Tl>ne5X8W=Rm$AST|RJySh{cTzU5q zF5|P0jew1T$@1GSjv(EX!Zp8m{FRnDvgX@w0|zt)`DIEGbM1ZPiq;K2$f6&NL5Mjztes7?j-@ zj12eoV1$pL%6XWE0V6QaQ1Xru-j0lt5!5*g)`2REAb$8}jPf=%*ZKnKqd}n^D2&!! zrS%2&7>&(O`8;{;N@Vzw$-va%ST}qNODsSI27N2y#s<)b;aIS-+z)n&($<;dRj-yf z-BFOX1%z@QDn;)CtFq#9c6!eia2tpM(xMR(S^*KA}bI zRI8ddpL|i5%GjA)3KhskuNmp8>NP;Tq-shi62T-9yoezfa!|>}A}y9;^I|SUY#8U6 zd22Bi76z-aq>6?#H!p#Bvj@L<8C5RADL-HZH_=SW*p&=mHqxWe`Pw&p8qUb~0-|({ z?nikb``*+PRCGFP9RpfJn0Xs45ktyaPRNa1YuO^13eZ-e%y~=IXeUYEF1iB+>T^@pqtMg=} z>D;QT*=lfXWdewlu9S~ZZmO(qSd~hQK_PKaCui7CQY{nRMdf{ALYWu_QV z#3eP=VP-F){MB-(NZ!R|c$x*N6l*Qu+Af&GhhK$IRom?|s@;qVV|5u594~9L#TsTV z-;J5wDM!%IPr<@I3yH&e25Qu4_W+lw@}c;2_F3i?@Lu7tzbr0v-IEGmoh3)*QYNj`^QHVQAYoV4-oy6W_qd4f4&WQe}84u2W zB1Ga$@&2`#ar5Tqnj4&ZHHz1*m!0k6!RL%8DB&yl$jXU+RK7&Eq^n0|Bo8i<4s8Tx z?nc?dFyhYA{@;OuKRPGRym1qs0}<-zpEukyn^L zN0wO)6~I!d|Ra4^jW39i)80I#tdA-Ix2@6c{hvm zkIF-S=7Ap+PVuA@@|K@G{sXgOiH%wQlMgSMx4p#Z>Oo%8RS@CJzv$wi4Kkcsd@fta z&HwSGvFBGG8o|G50G-8C;YQG?Rw}Cr`MYXC5%VFQ_bmJ+K*=qYEzFGjSm=?MQFm2M zD~dQPXPSHLf!ZE8D>G={%QDfNWayI8&mnw&m*Rh?&VfXM5vc8{6007<`4rO#HM2~M z2H)biYZmW6FV`7nu%9kfevFl8fi6DurJQ9qtNB}vmdGrs_9@)XbcdIWdC>!Ki>{Zr zMUK$*MeoV*;@f4AF!PR8q<6H`^_WIHi7b-?&He$pgtr)hNR8rZS7oN%JY|(Hzb0>) z9Uro~#cUOyx-JV%n2XCaD0!4#U7!WPGYkHVE?zoCay+d-^sb6e|1KHwbm80 zUQ^LwaZ2&GKTAMpc@DT|5p7XX~T=@>B8n=;;L|z6{``fY!ejAa7BK4QS(zbz? Y+?I`v%|Fl%E?RO++Gf+R+p^C81I)}!00000 diff --git a/patch_v2/meow_route/README.md b/patch_v2/meow_route/README.md new file mode 100644 index 0000000..c635f7d --- /dev/null +++ b/patch_v2/meow_route/README.md @@ -0,0 +1,10 @@ +# meow_route(已退役,归档) + +本目录的独立 `meow_route` 服务已于 2026-08-31(agent-244)**并入 meow_audiod** +(`patch_v2/meow_audiod/meow_audiod.c` 的路由线程,见 `devdocs/plan/AUDIOD_DESIGN.md` §5)。 + +- `meow_route.c` 的轮询逻辑(读 `/sys/class/switch/headset|balance/state` → `amixer cset numid=9`, + 4.4 优先,0/5 危险勿写)原样移植进 audiod 路由线程;`meow_audio route` CLI 提供手动切换。 +- **退役原因**:路由是音频的一部分,少一个进程;audiod 在=路由在。 +- **不再入固件**:`fw_content.conf` 已移除 `meow_route` 条目;`S89meow_svcd` 预置 conf 改为 `audiod.conf`。 + 本目录仅作源码归档(保留 `meow_route.c` + `build_route.sh` + 原可执行文件,勿再使用/部署)。 diff --git a/patch_v2/meow_svcd/S89meow_svcd b/patch_v2/meow_svcd/S89meow_svcd index e194ba1..cc08504 100755 --- a/patch_v2/meow_svcd/S89meow_svcd +++ b/patch_v2/meow_svcd/S89meow_svcd @@ -110,21 +110,30 @@ EOF chmod 644 /usr/data/meow/services.d/meow_crash.conf echo -n "provisioned crash.conf " fi - if [ -f /usr/data/meow/services.d/meow_route.conf ]; then - echo -n "route.conf exists " + if [ -f /usr/data/meow/services.d/audiod.conf ]; then + echo -n "audiod.conf exists " else - cat > /usr/data/meow/services.d/meow_route.conf <<'EOF2' -exec=/usr/bin/meow_route + cat > /usr/data/meow/services.d/audiod.conf <<'EOF2' +exec=/usr/bin/meow_audiod args= enabled=1 restart=on-fail backoff_ms=2000 max_restart=5 -trigger=boot +trigger=manual cap= EOF2 - chmod 644 /usr/data/meow/services.d/meow_route.conf - echo -n "provisioned route.conf " + chmod 644 /usr/data/meow/services.d/audiod.conf + echo -n "provisioned audiod.conf " + fi + # meow_route 退役(并入 meow_audiod,AUDIOD_DESIGN.md §5):清理旧固件遗留的 + # meow_route.conf(trigger=boot 会拉起已被固件移除的 /usr/bin/meow_route → 重启循环)。 + if [ -f /usr/data/meow/services.d/meow_route.conf ]; then + if [ -x /usr/bin/meow_svcd ]; then + /usr/bin/meow_svcd stop meow_route 2>/dev/null + fi + rm -f /usr/data/meow/services.d/meow_route.conf + echo -n "removed stale meow_route.conf " fi if [ -f /usr/data/meow/services.d/meow_amsd.conf ]; then echo -n "amsd.conf exists " diff --git a/patch_v2/ncm_app/ncm b/patch_v2/ncm_app/ncm index 5267d601ee4947aabe07a9615ea460f617375e7d..3b3db7d314ccc5c7ed0ad4af7d24e6a56de6d82b 100755 GIT binary patch delta 272094 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,frkEVkEUFu@{y3Wb4~*~jNhWp4)F-Ao4SYGR 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