appname               = miniups
version               = 1.0.36
display_name          = ThinUPS
desc                  = ThinUPS USB UPS 监控：App 模式读本机 NUT 显示(不直接 USB、与 NUT 共存)，电池电压/电流/功率实时显示，输出 TDM 时分复用显示 12V/5V 双路 + 输入电流/功率，Boot 模式可固件升级。
source                = thirdparty
platform              = all
maintainer            = ThinUPS
maintainer_url        = 
os_min_version        = 0.8.20
desktop_uidir         = ui
desktop_applaunchname = miniups.main
service_port          = 8787
checkport             = true
ctl_stop              = true
changelog             = 1.0.36: 参考 macOS 原生版重设计导航与监控界面，适配手机并支持系统深浅色\n1.0.35: 改用应用中心原位升级接口，修复 CLI 未实际升级及后台轮询锁冲突\n1.0.34: 应用整包在线升级验证版本\n1.0.33: 新增签名整包应用更新、Update 提示和管理员一键升级\n1.0.31: 接入 fnOS 统一网关，适配手机 App 页面入口；网关管理操作校验管理员权限\n1.0.30: 电池电压/电流/功率改由固件 TDM 电池相直接解码（配合 APP 固件 TDM 扩为 4 相：output.voltage 携带 电池电压+30V 标记、current 携带电池电流），替换 1.0.29 的功率平衡推算——固件直接实测、可靠无近似（电流正=充电/负=放电）\n1.0.29: 电池电流/功率改为按功率平衡推算（输入功率−输出功率，÷电池电压；正=充电/负=放电，与固件 bat_power 同法）——NUT 不映射固件 Report 4 的 battery_current（描述符集合非标准），此前电流/功率一直显示 --\n1.0.28: 电池卡片电压/电流/功率一行并排显示（V·A·W，与输出同款），新增电池功率（=V×I，正=充电/负=放电，与固件 bat_power 约定一致）\n1.0.27: App 模式升级模块提示改为「长按 ThinUPS 按键约 10 秒进入 Bootloader」（配合 APP 固件 SW 1.0.17：新增按键长按 10s 进 Boot + LCD 显示 BOOT 状态）\n1.0.26: 固件升级界面模块整体改为仅 Boot 模式显示（App 模式隐藏并提示，需复位设备进入 Bootloader）；取消「进入 Boot」按钮与软件进 Boot（/api/mode 拒绝 target=boot），Boot 模式保留「进入 App」返回\n1.0.25: 固件升级改为仅 Boot 模式可用：App 模式「开始升级」禁用、后端拒绝 /api/fwupdate（需先点「进入 Boot」进 Bootloader 再升级）；去掉输入卡片频率显示\n1.0.24: 输出 TDM 时分复用显示 12V/5V 双路 + 输入电流/功率：固件把 NUT 的 output.voltage/current 两字段按 3 相轮换（12V轨 / 5V轨 / 输入，输入相位用负电流标记、电池时靠电压≈0 识别），App 侧去交织成双路输出与输入电流/功率(输入功率=输入电压×电流)；配合 APP 固件 SW 1.0.10。NUT 不新增字段、仍独占接口 0，与 NUT 共存\n1.0.23: Bootloader 改用独立 PID(0x0003，与 APP 0x0002 分开)：NUT 不再匹配 Bootloader，升级时若检测到新款 Bootloader 则「不暂停 NUT」；主机改按 VID 0x051D + 双 PID 找设备(向后兼容)；配合固件 CH32F103_IAP(需要 SWD 重刷)\n1.0.22: 修复升级后 NUT 未恢复：烧写时仅停 NUT 驱动(usbhid-ups,保持 upsd 运行)，烧完用 list-units --all 逐个 start 驱动实例(systemctl start 'nut-driver@*' 对 inactive 实例无效)；升级后 NUT 自动重新驱动回 App 的 UPS\n1.0.21: 修复 Boot 模式 IAP 固件升级确定性失败(NUT 干扰)：Bootloader 仍为 051d:0002，本机 NUT(usbhid-ups) 会周期探测/claim 该设备、EP0 控制传输干扰 IAP 烧写；升级期间暂停 NUT(烧写后恢复)；脱离 NUT 的 Windows monitor 升级成功\n1.0.20: 修复 Boot 模式 IAP 固件升级偶发校验失败(相邻几块烧错、失败地址每次不同)：升级期间暂停监督线程的 USB 探测/读取以免与烧写争抢 EP0；逐 PROM 命令加节流延迟；整体重擦重烧最多 5 次\n1.0.19: 修复 Boot 模式 IAP 固件升级偶发校验失败(单字节写错)：烧写失败时整体重擦重烧(最多3次)，并对擦除后加短暂等待；可用于单接口固件升级\n1.0.18: 改用「App 模式读本机 NUT、不直接 USB」：与 NUT(usbhid-ups) 完全共存、无需停用 NUT；仅 Boot 模式直连 USB 做固件升级；移除 Report 7 电池参数下发\n1.0.17: 单接口固件下与本机 NUT(usbhid-ups) 共存：App 模式只读监控与参数下发(Report 7)均改走 EP0 控制传输、不 claim 接口 0、无需停用 NUT；仅固件升级(IAP)在 Boot 模式才占接口 0\n1.0.16: 改用 pyusb(libusb/usbfs 控制传输)直读，兼容单接口固件(Reports 1-8 全在接口 0)；固件升级(IAP)亦改为 pyusb 中断传输；接口 0 被 NUT(usbhid-ups)占用时需停用 NUT 以释放；配合单接口 APP 固件\n1.0.15: 输出区分 5V(USB-OUT)/12V(DC-OUT) 两路并去掉输出频率：Report 8 重排上报两路输出电压/电流(0.01V/0.01A，各6字段，仍24字节)，功率由电压×电流计算；配套 APP 固件 SW 1.0.8\n1.0.14: 输入卡片改为显示输入电流/功率，去掉频率与配置电压：Report 8 复用保留字段上报输入电流(0.01A，INA3221 DC-IN)，功率由电压×电流计算；配套 APP 固件 SW 1.0.7\n1.0.13: Boot 模式显示为已连接并读取 Boot 版本号(Report 6)：Bootloader 设备连上即显示「已连接」+ 名称/HW/BL 版本，仪表盘提示无实时数据\n1.0.12: 支持 Boot/App 模式切换按钮与 Boot 模式直接升级：进入 App 复用 Report 5，进入 Boot 走 IAP RUN_APP(0x85)；设备已在 Boot 时跳过 Report 5 直接烧写\n1.0.11: 识别 Boot/App 模式：无接口 1 时按 product 串检测 IAP Bootloader，页面顶部显示「Bootloader 模式」并提示升级/重启\n1.0.9: 修复总线复位：hidapi 返回 hidraw 路径(如 1-2:1.1)，需从 sysfs 解析 usbfs 节点再发 USBDEVFS_RESET；复位后等设备重枚举再重连\n1.0.8: 掉线自动恢复：设备在位但读取连续失败时自动发起 USB 总线复位（等同自动拔插），无需手动重启设备\n1.0.7: 电池参数新增标称电压枚举(3.6/3.65/3.7V)，SOC 曲线与续航估算随之调整\n1.0.6: 固件升级完成后等待 UPS 重连，更新「已重新连接」提示
checksum              = 52d52696aa6c5e8e45b643bb77a051d6
