# QSJNIC MCU SystemService

车载 Android 系统与底座 MCU 之间的串口通信中间件。

本仓库构建以下内容：

- `com.qsjnic.mcu.service` — Android Automotive SystemService，负责与 MCU 通过 `/dev/ttyS7` 串口通信
- `qsmw-sdk.aar` / `qsmw-contract.aar` — 供第三方应用集成的 SDK 与 AIDL 契约
- `qsmw-ota-demo.apk` / `qsmw-radio-demo.apk` / `qsmw-vehicle-demo.apk` — 功能演示应用

## 关键部署规则

**Service APK 必须 PUSH 到 `/system/priv-app/`，禁止使用 `adb install`。**

`adb install` 会把 debug 包（`com.qsjnic.mcu.service.dev`）装到 `/data/app/`，导致同时存在两个 Service 进程、串口冲突和多用户问题。

正确流程：

```bash
./gradlew :service:assembleRelease
adb root && adb remount
adb push service/build/outputs/apk/release/service-release.apk /system/priv-app/QsmwService/QsmwService.apk
adb shell chmod 644 /system/priv-app/QsmwService/QsmwService.apk
adb reboot
```

全部系统相关 APK 使用同一系统签名：`docs/keystore/sim.jks`。

更多细节见 [`AGENTS.md`](./AGENTS.md)。

## 目录结构

```text
├── service/              # SystemService APK 源码
├── sdk/                  # SDK AAR 源码
├── contract/             # AIDL 契约 AAR 源码
├── demos/                # 演示应用
│   ├── display-demo/
│   ├── nfc-demo/
│   ├── ota-demo/
│   ├── radio-demo/
│   └── vehicle-demo/
├── test_Serial/          # 独立 C 语言 MCU-ARM 串口测试程序（推荐）
├── test_Update/          # OTA 历史参考（保留 mcu_structured_test.c 和固件）
├── release/              # 历史发布包
├── release-template/     # 发布文档模板
├── docs/                 # 设计文档、协议参考、发布记录
├── scripts/              # 部署与验收脚本
├── mcu/                  # （已清理）
├── mcu_full_test/        # （已清理）
├── mcu_test_toolkit/     # （已清理）
└── files/                # 接口文档
```

## 常用构建命令

```bash
# Service release（用于 push 到 /system/priv-app/）
./gradlew :service:assembleRelease

# SDK / Contract AAR
./gradlew :sdk:assembleRelease
./gradlew :contract:assembleRelease

# Demos
./gradlew :demos:ota-demo:app:assembleDebug
./gradlew :demos:radio-demo:app:assembleDebug
./gradlew :demos:vehicle-demo:app:assembleDebug
```

## MCU-ARM 串口协议测试

当前推荐的独立 C 测试程序是 `test_Serial/qsjnic_test`，其协议栈直接来自 beta12 Service 的 native 实现。

```bash
cd test_Serial
export NDK=~/Library/Android/sdk/ndk/30.0.14904198
$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android34-clang \
    -Wall -Wextra -std=c11 -D_POSIX_C_SOURCE=200809L -pthread \
    -o qsjnic_test \
    main_test.c mcu_protocol.c mcu_transport.c mcu_upgrade.c

adb push qsjnic_test /data/local/tmp/
adb shell chmod +x /data/local/tmp/qsjnic_test

# 测试前建议停止 Service 以避免串口抢占
adb shell su 0 pm disable com.qsjnic.mcu.service

adb shell su 0 /data/local/tmp/qsjnic_test /dev/ttyS7 --all

# 恢复 Service
adb shell su 0 pm enable com.qsjnic.mcu.service
```

详见 [`test_Serial/README.md`](./test_Serial/README.md)。

## 车机环境

- Android 14 (API Level 34)
- aarch64 (arm64-v8a)
- 内核：Linux 5.15.192
- 默认测试 IP：`192.168.0.102:5555`
- MCU 串口：`/dev/ttyS7 @ 460800 8N1`

## 重要文档

| 文档 | 说明 |
|------|------|
| [`AGENTS.md`](./AGENTS.md) | 部署、签名、多用户、构建等关键规则 |
| [`release-template/API_REFERENCE.md`](./release-template/API_REFERENCE.md) | SDK API 参考 |
| [`release-template/INTEGRATION_GUIDE.md`](./release-template/INTEGRATION_GUIDE.md) | 集成指南 |
| [`test_Serial/README.md`](./test_Serial/README.md) | 串口协议测试程序说明 |
| [`test_Update/README.md`](./test_Update/README.md) | OTA 历史参考说明 |

## 发布

发布包组织与构建流程见 [`release-template/README.md`](./release-template/README.md) 及 `scripts/` 中的发布脚本。
