<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://photonicat.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=C2h2</id>
	<title>Photonicat Wiki - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://photonicat.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=C2h2"/>
	<link rel="alternate" type="text/html" href="https://photonicat.com/wiki/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/C2h2"/>
	<updated>2026-11-10T16:27:59Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1113</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1113"/>
		<updated>2026-11-10T08:24:28Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​/* MCU Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Settings survive an upgrade&#039;&#039;&#039; — power mode, menus, fan, SMS, call history, traffic stats, power schedules, car mode, the charge limit and the APN are now in keep.d, so sysupgrade no longer wipes them. Login sessions and the map caches are still cleared.&lt;br /&gt;
* &#039;&#039;&#039;Power schedules run on local time&#039;&#039;&#039; — pcat-manager treated local time as UTC, so CST was 8 hours late and events at 00:00–07:59 fell on the wrong day. It now reads /etc/TZ and shifts the weekday with the clock. The saved schedule is readable from the MCU right after boot.&lt;br /&gt;
* &#039;&#039;&#039;Plug in a cable and the port works immediately&#039;&#039;&#039; — eth-powersave now uses the RTL8211F&#039;s own ALDPS, instead of switching the port off and probing it on a timer. An idle PHY sleeps on its own and wakes as soon as a cable is inserted, including after a cold boot. The default is on; a per-port choice you made is left alone.&lt;br /&gt;
* &#039;&#039;&#039;LAN clients get a public IPv6 address on cellular&#039;&#039;&#039; — the cellular interfaces set extendprefix (RFC 7278) and hand the bearer&#039;s /64 to the LAN. The firewall still rejects inbound connections. Wired WAN is unchanged. An upgrade that keeps a network or firewall config you edited will not switch to this on its own.&lt;br /&gt;
* &#039;&#039;&#039;FM350 5G SA connects and stays up&#039;&#039;&#039; — data is dialled on cid 5 with the real APN, instead of sitting on LTE and redialling on a timer. A drop in weak signal reconnects immediately, and the network mode and bands from the web UI are written and applied.&lt;br /&gt;
* &#039;&#039;&#039;Wi-Fi&#039;&#039;&#039; — boot no longer deletes the upstream STA as a duplicate USB radio, and a changed SSID and password are no longer wiped. The WCN7850 firmware is no longer stripped at install, so the PCIe card is detected and recovers in about 20 seconds after a brief dropout. Upstream Wi-Fi accepts a chosen MAC. The Device Control switches take effect, and WPA3-SAE is offered where the radio supports it. Idle shutdown does not start counting down when the client count cannot be read.&lt;br /&gt;
* &#039;&#039;&#039;A hotel portal can be signed in&#039;&#039;&#039; — when another uplink is already online, tap &amp;quot;login required&amp;quot; in the priority table and that cable becomes the egress for 15 minutes, so its login page can open.&lt;br /&gt;
* &#039;&#039;&#039;The statistics page is rebuilt&#039;&#039;&#039; — a throughput chart of the last 5 minutes, wired and cellular side by side, per-core CPU, memory, eMMC / SD / NVMe / USB, and every DHCP client.&lt;br /&gt;
* &#039;&#039;&#039;The LED and beeper follow the hours you set&#039;&#039;&#039; — the MCU clock is set every hour, and the schedule is checked every 10 minutes and pushed again if it does not match. Each of the two checks on the small screen can be ICMP, TCP, HTTP or HTTPS.&lt;br /&gt;
* &#039;&#039;&#039;dnsmasq is updated to 2.93&#039;&#039;&#039;, including the DNSSEC KeyTrap fix. Wired or Wi-Fi has to stay up or down for about 9 seconds before cellular is stopped or brought back.&lt;br /&gt;
&lt;br /&gt;
== 2026-11-03 MCU update==&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1261103004&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fix failed to update MCU by OTA in some situations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== APK version ==&lt;br /&gt;
* Under testing, releasing soon.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1112</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1112"/>
		<updated>2026-11-10T08:23:54Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-17 r7908 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;升级后保留设置&#039;&#039;&#039; —— 电源模式、菜单、风扇、短信、通话记录、流量统计、定时开关机、车载模式、充电上限和 APN 现在列入 keep.d，sysupgrade 不再清掉。登录会话和地图缓存仍会清空。&lt;br /&gt;
* &#039;&#039;&#039;定时开关机按本地时间执行&#039;&#039;&#039; —— pcat-manager 以前把本地时间当成 UTC，东八区晚 8 小时，00:00–07:59 的计划还会错一天。现在读取 /etc/TZ 并换算星期。开机后马上能读到 MCU 上的计划。&lt;br /&gt;
* &#039;&#039;&#039;插上网线，网口马上可用&#039;&#039;&#039; —— eth-powersave 改为使用 RTL8211F 自带的 ALDPS，不再自己关断网口再定时探测。空闲 PHY 自己休眠，插线后马上唤醒，冷启动也不再像网口坏了。默认改为启用；单独设置过的网口保持原样。&lt;br /&gt;
* &#039;&#039;&#039;蜂窝下局域网拿到公网 IPv6&#039;&#039;&#039; —— 蜂窝接口启用 extendprefix（RFC 7278），把承载的 /64 分给 LAN。防火墙默认仍拒绝入站。有线 WAN 不变。改过网络或防火墙的升级不会自动套用。&lt;br /&gt;
* &#039;&#039;&#039;FM350 的 5G SA 会拨上并保持&#039;&#039;&#039; —— 数据改在带正确 APN 的 cid 5 上建立，不再停在 LTE 再周期性拆掉重拨。信号边缘掉线后马上重连，网页里的网络模式和频段会写入并生效。&lt;br /&gt;
* &#039;&#039;&#039;WiFi&#039;&#039;&#039; —— 开机不再把上级 STA 当成多余的 USB 网卡删掉，改过的 SSID 和密码也不会被清掉。WCN7850 固件不再在安装时被 strip，PCIe 卡能识别，短暂掉线后约 20 秒恢复。上级 WiFi 可指定 MAC。设备控制里的开关会生效，支持的射频可选 WPA3-SAE。读不到在线客户端时，空闲关机不再倒计时。&lt;br /&gt;
* &#039;&#039;&#039;酒店门户可以登录&#039;&#039;&#039; —— 另一条上行已经在线时，点优先级表的“需要登录”，这条网线会临时成为出口 15 分钟，登录页才能打开。&lt;br /&gt;
* &#039;&#039;&#039;流量页重做&#039;&#039;&#039; —— 最近 5 分钟的吞吐曲线，有线与蜂窝并排，每核 CPU、内存、eMMC / SD / NVMe / USB，以及全部 DHCP 客户端。&lt;br /&gt;
* &#039;&#039;&#039;LED 和蜂鸣器按设定时间开关&#039;&#039;&#039; —— 每小时对一次 MCU 时钟，每 10 分钟核对定时并在不一致时重下发。小屏幕两行检测可选 ICMP、TCP、HTTP 或 HTTPS。&lt;br /&gt;
* &#039;&#039;&#039;dnsmasq 升级到 2.93&#039;&#039;&#039;，含 DNSSEC KeyTrap 修复。有线或 WiFi 要连续在线或断开约 9 秒，才会停下或重新拉起蜂窝。&lt;br /&gt;
&lt;br /&gt;
== 2026-11-03 MCU update==&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1261103004&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;修复一部分MCU更新失败的问题&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== APK 版本 ==&lt;br /&gt;
* 正在测试，即将发布。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1098</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1098"/>
		<updated>2026-10-02T14:38:53Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7924: note RTL8211F ALDPS, slightly more detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Settings survive an upgrade&#039;&#039;&#039; — power mode, menus, fan, SMS, call history, traffic stats, power schedules, car mode, the charge limit and the APN are now in keep.d, so sysupgrade no longer wipes them. Login sessions and the map caches are still cleared.&lt;br /&gt;
* &#039;&#039;&#039;Power schedules run on local time&#039;&#039;&#039; — pcat-manager treated local time as UTC, so CST was 8 hours late and events at 00:00–07:59 fell on the wrong day. It now reads /etc/TZ and shifts the weekday with the clock. The saved schedule is readable from the MCU right after boot.&lt;br /&gt;
* &#039;&#039;&#039;Plug in a cable and the port works immediately&#039;&#039;&#039; — eth-powersave now uses the RTL8211F&#039;s own ALDPS, instead of switching the port off and probing it on a timer. An idle PHY sleeps on its own and wakes as soon as a cable is inserted, including after a cold boot. The default is on; a per-port choice you made is left alone.&lt;br /&gt;
* &#039;&#039;&#039;LAN clients get a public IPv6 address on cellular&#039;&#039;&#039; — the cellular interfaces set extendprefix (RFC 7278) and hand the bearer&#039;s /64 to the LAN. The firewall still rejects inbound connections. Wired WAN is unchanged. An upgrade that keeps a network or firewall config you edited will not switch to this on its own.&lt;br /&gt;
* &#039;&#039;&#039;FM350 5G SA connects and stays up&#039;&#039;&#039; — data is dialled on cid 5 with the real APN, instead of sitting on LTE and redialling on a timer. A drop in weak signal reconnects immediately, and the network mode and bands from the web UI are written and applied.&lt;br /&gt;
* &#039;&#039;&#039;Wi-Fi&#039;&#039;&#039; — boot no longer deletes the upstream STA as a duplicate USB radio, and a changed SSID and password are no longer wiped. The WCN7850 firmware is no longer stripped at install, so the PCIe card is detected and recovers in about 20 seconds after a brief dropout. Upstream Wi-Fi accepts a chosen MAC. The Device Control switches take effect, and WPA3-SAE is offered where the radio supports it. Idle shutdown does not start counting down when the client count cannot be read.&lt;br /&gt;
* &#039;&#039;&#039;A hotel portal can be signed in&#039;&#039;&#039; — when another uplink is already online, tap &amp;quot;login required&amp;quot; in the priority table and that cable becomes the egress for 15 minutes, so its login page can open.&lt;br /&gt;
* &#039;&#039;&#039;The statistics page is rebuilt&#039;&#039;&#039; — a throughput chart of the last 5 minutes, wired and cellular side by side, per-core CPU, memory, eMMC / SD / NVMe / USB, and every DHCP client.&lt;br /&gt;
* &#039;&#039;&#039;The LED and beeper follow the hours you set&#039;&#039;&#039; — the MCU clock is set every hour, and the schedule is checked every 10 minutes and pushed again if it does not match. Each of the two checks on the small screen can be ICMP, TCP, HTTP or HTTPS.&lt;br /&gt;
* &#039;&#039;&#039;dnsmasq is updated to 2.93&#039;&#039;&#039;, including the DNSSEC KeyTrap fix. Wired or Wi-Fi has to stay up or down for about 9 seconds before cellular is stopped or brought back.&lt;br /&gt;
&lt;br /&gt;
== APK version ==&lt;br /&gt;
* Under testing, releasing soon.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1097</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1097"/>
		<updated>2026-10-02T14:38:50Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7924: note RTL8211F ALDPS, slightly more detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-17 r7908 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;升级后保留设置&#039;&#039;&#039; —— 电源模式、菜单、风扇、短信、通话记录、流量统计、定时开关机、车载模式、充电上限和 APN 现在列入 keep.d，sysupgrade 不再清掉。登录会话和地图缓存仍会清空。&lt;br /&gt;
* &#039;&#039;&#039;定时开关机按本地时间执行&#039;&#039;&#039; —— pcat-manager 以前把本地时间当成 UTC，东八区晚 8 小时，00:00–07:59 的计划还会错一天。现在读取 /etc/TZ 并换算星期。开机后马上能读到 MCU 上的计划。&lt;br /&gt;
* &#039;&#039;&#039;插上网线，网口马上可用&#039;&#039;&#039; —— eth-powersave 改为使用 RTL8211F 自带的 ALDPS，不再自己关断网口再定时探测。空闲 PHY 自己休眠，插线后马上唤醒，冷启动也不再像网口坏了。默认改为启用；单独设置过的网口保持原样。&lt;br /&gt;
* &#039;&#039;&#039;蜂窝下局域网拿到公网 IPv6&#039;&#039;&#039; —— 蜂窝接口启用 extendprefix（RFC 7278），把承载的 /64 分给 LAN。防火墙默认仍拒绝入站。有线 WAN 不变。改过网络或防火墙的升级不会自动套用。&lt;br /&gt;
* &#039;&#039;&#039;FM350 的 5G SA 会拨上并保持&#039;&#039;&#039; —— 数据改在带正确 APN 的 cid 5 上建立，不再停在 LTE 再周期性拆掉重拨。信号边缘掉线后马上重连，网页里的网络模式和频段会写入并生效。&lt;br /&gt;
* &#039;&#039;&#039;WiFi&#039;&#039;&#039; —— 开机不再把上级 STA 当成多余的 USB 网卡删掉，改过的 SSID 和密码也不会被清掉。WCN7850 固件不再在安装时被 strip，PCIe 卡能识别，短暂掉线后约 20 秒恢复。上级 WiFi 可指定 MAC。设备控制里的开关会生效，支持的射频可选 WPA3-SAE。读不到在线客户端时，空闲关机不再倒计时。&lt;br /&gt;
* &#039;&#039;&#039;酒店门户可以登录&#039;&#039;&#039; —— 另一条上行已经在线时，点优先级表的“需要登录”，这条网线会临时成为出口 15 分钟，登录页才能打开。&lt;br /&gt;
* &#039;&#039;&#039;流量页重做&#039;&#039;&#039; —— 最近 5 分钟的吞吐曲线，有线与蜂窝并排，每核 CPU、内存、eMMC / SD / NVMe / USB，以及全部 DHCP 客户端。&lt;br /&gt;
* &#039;&#039;&#039;LED 和蜂鸣器按设定时间开关&#039;&#039;&#039; —— 每小时对一次 MCU 时钟，每 10 分钟核对定时并在不一致时重下发。小屏幕两行检测可选 ICMP、TCP、HTTP 或 HTTPS。&lt;br /&gt;
* &#039;&#039;&#039;dnsmasq 升级到 2.93&#039;&#039;&#039;，含 DNSSEC KeyTrap 修复。有线或 WiFi 要连续在线或断开约 9 秒，才会停下或重新拉起蜂窝。&lt;br /&gt;
&lt;br /&gt;
== APK 版本 ==&lt;br /&gt;
* 正在测试，即将发布。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1096</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1096"/>
		<updated>2026-10-02T14:30:44Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7924 date 2026-10-01; APK build still in testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Your settings survive an upgrade&#039;&#039;&#039; — power mode, menus, fan, SMS, call history, traffic stats, power schedules, car mode, the charge limit and the modem&#039;s access settings are kept. You are still logged out, and the large map caches are still cleared.&lt;br /&gt;
* &#039;&#039;&#039;Power schedules run at the time you set&#039;&#039;&#039; — no longer 8 hours late in CST, early-morning events fall on the right day, and the list shows up right after boot.&lt;br /&gt;
* &#039;&#039;&#039;Plug in a cable and the port works immediately&#039;&#039;&#039; — a cold boot no longer looks like a dead port. The default is now always on; a per-port choice you made is left alone.&lt;br /&gt;
* &#039;&#039;&#039;On mobile data, devices behind the router get a public IPv6 address.&#039;&#039;&#039; Incoming connections stay blocked until you allow them. An upgrade that keeps a network config you edited will not switch to this on its own.&lt;br /&gt;
* &#039;&#039;&#039;FM350 5G connects and stays up&#039;&#039;&#039; — a drop in weak signal reconnects immediately, and the network mode and bands you pick in the web UI take effect.&lt;br /&gt;
* &#039;&#039;&#039;Wi-Fi&#039;&#039;&#039; — upstream Wi-Fi, and a hotspot name and password you changed, are still there after a reboot. The PCIe card is detected again and recovers in about 20 seconds after a brief dropout. Upstream Wi-Fi accepts a MAC address you choose. The switches on Device Control work, and WPA3 is offered when the card supports it. Idle shutdown no longer powers off while devices are connected.&lt;br /&gt;
* &#039;&#039;&#039;A hotel cable can be signed in&#039;&#039;&#039; — when another connection already has internet, tap &amp;quot;login required&amp;quot; in the priority table to give that cable 15 minutes to open its login page.&lt;br /&gt;
* &#039;&#039;&#039;The statistics page is rebuilt&#039;&#039;&#039; — live speed, wired and mobile side by side, CPU, memory, disks, and every device online.&lt;br /&gt;
* &#039;&#039;&#039;The light and beeper follow the hours you set.&#039;&#039;&#039; Each of the two checks on the small screen can be a connection test or a web test, not only ping.&lt;br /&gt;
* &#039;&#039;&#039;The DNS program is updated to 2.93&#039;&#039;&#039;, including security fixes. Wired or Wi-Fi has to stay up or down for about 9 seconds before mobile data is stopped or started.&lt;br /&gt;
&lt;br /&gt;
== APK version ==&lt;br /&gt;
* Under testing, releasing soon.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1095</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1095"/>
		<updated>2026-10-02T14:30:42Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7924 date 2026-10-01; APK build still in testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-17 r7908 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;br /&gt;
&lt;br /&gt;
== 2026-10-01 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;升级后保留设置&#039;&#039;&#039; —— 电源模式、菜单、风扇、短信、通话记录、流量统计、定时开关机、车载模式、充电上限和模块上网参数都会留下来。登录状态和大体积的地图缓存仍会清空。&lt;br /&gt;
* &#039;&#039;&#039;定时开关机按您设定的时间执行&#039;&#039;&#039; —— 东八区不再晚 8 小时，凌晨的计划落在正确的那一天，开机后马上能在页面上看到。&lt;br /&gt;
* &#039;&#039;&#039;插上网线，网口马上可用&#039;&#039;&#039; —— 冷启动不再像网口坏了。默认改为一直启用；您单独设置过的网口保持原样。&lt;br /&gt;
* &#039;&#039;&#039;只用蜂窝时，下面的设备能拿到公网 IPv6 地址。&#039;&#039;&#039; 防火墙默认仍挡住外面连进来。升级若保留了您改过的网络配置，则不会自动换成这套设置。&lt;br /&gt;
* &#039;&#039;&#039;FM350 的 5G 会连上并保持&#039;&#039;&#039; —— 信号不好掉线后马上重连，网页里选的网络模式和频段会生效。&lt;br /&gt;
* &#039;&#039;&#039;WiFi&#039;&#039;&#039; —— 上级 WiFi，以及您改过的热点名称和密码，重启后还在。PCIe 无线卡能正常识别，短暂掉线后大约 20 秒恢复。上级 WiFi 可以填写指定的 MAC。设备控制里的开关会生效，支持 WPA3 的网卡可以选用。还有设备连着时，空闲关机不会把机器关掉。&lt;br /&gt;
* &#039;&#039;&#039;酒店网线可以登录了&#039;&#039;&#039; —— 另一条网络已经能上网时，在优先级表点“需要登录”，会给这条网线 15 分钟去打开登录页。&lt;br /&gt;
* &#039;&#039;&#039;流量统计页重做&#039;&#039;&#039; —— 实时速度、有线与蜂窝、CPU、内存、磁盘，以及所有在线设备。&lt;br /&gt;
* &#039;&#039;&#039;指示灯和蜂鸣器按您设定的时间开关。&#039;&#039;&#039; 小屏幕上的两行检测可以改成连接测试或网页测试，不再只能 ping。&lt;br /&gt;
* &#039;&#039;&#039;DNS 程序升级到 2.93&#039;&#039;&#039;，包含安全修复。有线或 WiFi 要稳定大约 9 秒，才会停下或重新打开蜂窝。&lt;br /&gt;
&lt;br /&gt;
== APK 版本 ==&lt;br /&gt;
* 正在测试，即将发布。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1094</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1094"/>
		<updated>2026-10-02T14:28:22Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Changelog: Photonicat 2 r7924&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;br /&gt;
&lt;br /&gt;
== 2026-10-02 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Your settings survive an upgrade&#039;&#039;&#039; — power mode, menus, fan, SMS, call history, traffic stats, power schedules, car mode, the charge limit and the modem&#039;s access settings are kept. You are still logged out, and the large map caches are still cleared.&lt;br /&gt;
* &#039;&#039;&#039;Power schedules run at the time you set&#039;&#039;&#039; — no longer 8 hours late in CST, early-morning events fall on the right day, and the list shows up right after boot.&lt;br /&gt;
* &#039;&#039;&#039;Plug in a cable and the port works immediately&#039;&#039;&#039; — a cold boot no longer looks like a dead port. The default is now always on; a per-port choice you made is left alone.&lt;br /&gt;
* &#039;&#039;&#039;On mobile data, devices behind the router get a public IPv6 address.&#039;&#039;&#039; Incoming connections stay blocked until you allow them. An upgrade that keeps a network config you edited will not switch to this on its own.&lt;br /&gt;
* &#039;&#039;&#039;FM350 5G connects and stays up&#039;&#039;&#039; — a drop in weak signal reconnects immediately, and the network mode and bands you pick in the web UI take effect.&lt;br /&gt;
* &#039;&#039;&#039;Wi-Fi&#039;&#039;&#039; — upstream Wi-Fi, and a hotspot name and password you changed, are still there after a reboot. The PCIe card is detected again and recovers in about 20 seconds after a brief dropout. Upstream Wi-Fi accepts a MAC address you choose. The switches on Device Control work, and WPA3 is offered when the card supports it. Idle shutdown no longer powers off while devices are connected.&lt;br /&gt;
* &#039;&#039;&#039;A hotel cable can be signed in&#039;&#039;&#039; — when another connection already has internet, tap &amp;quot;login required&amp;quot; in the priority table to give that cable 15 minutes to open its login page.&lt;br /&gt;
* &#039;&#039;&#039;The statistics page is rebuilt&#039;&#039;&#039; — live speed, wired and mobile side by side, CPU, memory, disks, and every device online.&lt;br /&gt;
* &#039;&#039;&#039;The light and beeper follow the hours you set.&#039;&#039;&#039; Each of the two checks on the small screen can be a connection test or a web test, not only ping.&lt;br /&gt;
* &#039;&#039;&#039;The DNS program is updated to 2.93&#039;&#039;&#039;, including security fixes. Wired or Wi-Fi has to stay up or down for about 9 seconds before mobile data is stopped or started.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7902 (26.10.0) ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Update to 26.10.0，completely migrate to OpenWRT 25.12 as base system. Install fw4 as default firewall. Package management system now switches to APK (IPK packages are not supported since this release).&lt;br /&gt;
* &#039;&#039;&#039;Backport photonicat (v1) support&#039;&#039;&#039; - Now all photonicat products use the same source tree.&lt;br /&gt;
* &#039;&#039;&#039;Kernel&#039;&#039;&#039; - Update to 6.12.103. Update ath12k firmware, AIC8800 driver. Backport mainline DFI (RK3576) and SGMII (RK3568) driver.&lt;br /&gt;
* &#039;&#039;&#039;pcat-manager&#039;&#039;&#039; - Fix incorrect timezone calculation in schedule tasks.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1093</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1093"/>
		<updated>2026-10-02T14:28:19Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Changelog: Photonicat 2 r7924&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-17 r7908 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;br /&gt;
&lt;br /&gt;
== 2026-10-02 r7924 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;升级后保留设置&#039;&#039;&#039; —— 电源模式、菜单、风扇、短信、通话记录、流量统计、定时开关机、车载模式、充电上限和模块上网参数都会留下来。登录状态和大体积的地图缓存仍会清空。&lt;br /&gt;
* &#039;&#039;&#039;定时开关机按您设定的时间执行&#039;&#039;&#039; —— 东八区不再晚 8 小时，凌晨的计划落在正确的那一天，开机后马上能在页面上看到。&lt;br /&gt;
* &#039;&#039;&#039;插上网线，网口马上可用&#039;&#039;&#039; —— 冷启动不再像网口坏了。默认改为一直启用；您单独设置过的网口保持原样。&lt;br /&gt;
* &#039;&#039;&#039;只用蜂窝时，下面的设备能拿到公网 IPv6 地址。&#039;&#039;&#039; 防火墙默认仍挡住外面连进来。升级若保留了您改过的网络配置，则不会自动换成这套设置。&lt;br /&gt;
* &#039;&#039;&#039;FM350 的 5G 会连上并保持&#039;&#039;&#039; —— 信号不好掉线后马上重连，网页里选的网络模式和频段会生效。&lt;br /&gt;
* &#039;&#039;&#039;WiFi&#039;&#039;&#039; —— 上级 WiFi，以及您改过的热点名称和密码，重启后还在。PCIe 无线卡能正常识别，短暂掉线后大约 20 秒恢复。上级 WiFi 可以填写指定的 MAC。设备控制里的开关会生效，支持 WPA3 的网卡可以选用。还有设备连着时，空闲关机不会把机器关掉。&lt;br /&gt;
* &#039;&#039;&#039;酒店网线可以登录了&#039;&#039;&#039; —— 另一条网络已经能上网时，在优先级表点“需要登录”，会给这条网线 15 分钟去打开登录页。&lt;br /&gt;
* &#039;&#039;&#039;流量统计页重做&#039;&#039;&#039; —— 实时速度、有线与蜂窝、CPU、内存、磁盘，以及所有在线设备。&lt;br /&gt;
* &#039;&#039;&#039;指示灯和蜂鸣器按您设定的时间开关。&#039;&#039;&#039; 小屏幕上的两行检测可以改成连接测试或网页测试，不再只能 ping。&lt;br /&gt;
* &#039;&#039;&#039;DNS 程序升级到 2.93&#039;&#039;&#039;，包含安全修复。有线或 WiFi 要稳定大约 9 秒，才会停下或重新打开蜂窝。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7902 (26.10.0) [测试beta] ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 更新到26.10.0，全面切换至 OpenWRT 25.12 分支为基础。默认防火墙切换为 fw4。包管理切换为APK (同时失去对IPK包的支持)。&lt;br /&gt;
* &#039;&#039;&#039;移植 photonicat (v1)&#039;&#039;&#039; —— 至此本系列产品使用相同的代码树进行构建。&lt;br /&gt;
* &#039;&#039;&#039;内核&#039;&#039;&#039; —— 更新到6.12.103，更新ath12k固件，更新AIC8800驱动，移植内核上游DFI (RK3576)及SGMII (RK3568)相关驱动。&lt;br /&gt;
* &#039;&#039;&#039;pcat-manager&#039;&#039;&#039; —— 修复定时任务时区计算错误问题。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1092</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1092"/>
		<updated>2026-10-01T12:19:26Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​/* 2026-08-14 r7902 (26.10.0) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-17 r7908 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7902 (26.10.0) [测试beta] ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 更新到26.10.0，全面切换至 OpenWRT 25.12 分支为基础。默认防火墙切换为 fw4。包管理切换为APK (同时失去对IPK包的支持)。&lt;br /&gt;
* &#039;&#039;&#039;移植 photonicat (v1)&#039;&#039;&#039; —— 至此本系列产品使用相同的代码树进行构建。&lt;br /&gt;
* &#039;&#039;&#039;内核&#039;&#039;&#039; —— 更新到6.12.103，更新ath12k固件，更新AIC8800驱动，移植内核上游DFI (RK3576)及SGMII (RK3568)相关驱动。&lt;br /&gt;
* &#039;&#039;&#039;pcat-manager&#039;&#039;&#039; —— 修复定时任务时区计算错误问题。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1087</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1087"/>
		<updated>2026-08-14T11:13:14Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​新增 2026-08-14 r7907 更新说明（含 MCU 更新与最新 MCU 固件版本）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC 容器&#039;&#039;&#039; —— 容器现在可以在固件升级后保留；新增容器备份/恢复，下载镜像时可从不稳定的 CDN 自动恢复，容器启动时自动修复网络桥接，并提供 Proxmox 风格、可调整大小的控制台弹窗；修复 CPU/内存占用条一直显示为空的问题。&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; —— 网页 GPS 页面与迷你显示屏新增行程里程表；主地图瓦片服务器被屏蔽时自动切换到镜像服务器。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— /terminal 改为基于 granian ASGI 的真正 WebSocket 控制台，不再使用轮询，控制台弹窗界面也更简洁。&lt;br /&gt;
* &#039;&#039;&#039;更安全的固件更新&#039;&#039;&#039; —— 网页界面不会再在刷写过程中重启设备；更新页面给出更真实的 3–5 分钟预估并显示重启中遮罩；用户菜单中新增关机选项。&lt;br /&gt;
* &#039;&#039;&#039;网络修复&#039;&#039;&#039; —— 上级 WiFi 增加开机宽限期，开机后第一次探测失败不再导致出口切换；连通性探测在透明代理（如 OpenClash）环境下也能正常工作；不再干预用户通过 netifd 手动拨号的蜂窝接口；热点设置在固件重新生成配置后依然保留。&lt;br /&gt;
* &#039;&#039;&#039;更小的根文件系统&#039;&#039;&#039; —— 多媒体应用、Realtek 无线驱动等不常用软件包改为可选模块，不再预装；提供更多可安装的内核模块；默认启用 BPF 流量调度器（&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;）。&lt;br /&gt;
* &#039;&#039;&#039;RK3576 平台修复&#039;&#039;&#039; —— 合入上游针对 Photonicat 2 的设备树修复，并补上缺失的 CPU 缓存层级描述。&lt;br /&gt;
* &#039;&#039;&#039;LED/蜂鸣器定时计划&#039;&#039;&#039; —— 定时计划下发到 MCU 现在有端到端校验，失败时逐级降级而不是静默失败。&lt;br /&gt;
* &#039;&#039;&#039;迷你显示屏与屏幕设置&#039;&#039;&#039; —— 代理的 fake-IP DNS 应答不再导致 LCD 两行 ping 同时失败；自动熄屏延时可按秒、分钟或小时设置；屏幕实时预览以 1 Hz 刷新且不再卡死；车载模式显示实际配置的超时时间，而不是虚构的 10 分钟。&lt;br /&gt;
* &#039;&#039;&#039;蓝牙&#039;&#039;&#039; —— AIC8800 的蓝牙现在以 BlueZ 模式构建，系统中会出现标准 HCI 适配器；/dev 页面新增蓝牙面板，可诊断适配器并扫描附近设备。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
最新 MCU 固件版本：&amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒响应缩短到 1–2 秒&#039;&#039;&#039; —— 确认逻辑改用漏积分器，手部抖动不再重置检测流程；敲桌子也不会再被误判为拿起。&lt;br /&gt;
* &#039;&#039;&#039;车载模式&#039;&#039;&#039; —— DC 电源仍插着时手动关机，设备不会再自动重新开机。&lt;br /&gt;
* &#039;&#039;&#039;电池基础工作&#039;&#039;&#039; —— 新增库仑计测试工具与基于机器学习的磷酸铁锂（LFP）电量估算研究，为进一步提升电量百分比精度打基础。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1086</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1086"/>
		<updated>2026-08-14T11:12:38Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7907 MCU Changes: state latest MCU firmware version RA2E1260813002&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
Latest MCU firmware version: &amp;lt;code&amp;gt;RA2E1260813002&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1085</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1085"/>
		<updated>2026-08-14T11:05:08Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​r7907: add MCU Changes subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake now responds in 1–2 seconds&#039;&#039;&#039; — confirmation uses a leaky integrator, so hand tremor no longer restarts the detection pipeline; a knock on the desk no longer fakes a pick-up.&lt;br /&gt;
* &#039;&#039;&#039;Car mode&#039;&#039;&#039; — a manual shutdown with DC power still plugged in no longer bounces straight back on.&lt;br /&gt;
* &#039;&#039;&#039;Battery groundwork&#039;&#039;&#039; — added a coulomb-meter test harness and machine-learned LFP state-of-charge work, groundwork for further battery-percentage accuracy improvements.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1084</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1084"/>
		<updated>2026-08-14T11:02:46Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​/* 2026-08-14 r7907 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1083</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1083"/>
		<updated>2026-08-14T11:00:29Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Add 2026-08-14 r7907 release notes (r7897 → r7907)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-14 r7907 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bluetooth (early support)&#039;&#039;&#039; — the AIC8800&#039;s Bluetooth is now built in BlueZ mode so a standard HCI adapter appears, and a new Bluetooth panel on the /dev page can diagnose the adapter and scan for nearby devices.&lt;br /&gt;
* &#039;&#039;&#039;LXC containers&#039;&#039;&#039; — containers now survive a firmware upgrade; added container backup/restore, image downloads that recover from a flaky CDN, self-healing of the network bridge on start, and a Proxmox-style resizable console popup; fixed CPU/memory bars showing empty.&lt;br /&gt;
* &#039;&#039;&#039;GPS&#039;&#039;&#039; — trip odometer on the web GPS page and the mini display, and map tiles fall back to mirror servers when the main tile server is blocked.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — /terminal is now a real WebSocket console (via granian ASGI) instead of polling, with a cleaner full-screen console popup.&lt;br /&gt;
* &#039;&#039;&#039;Safer firmware updates&#039;&#039;&#039; — the web UI can no longer reboot the device mid-flash, the update screen shows a realistic 3–5 minute estimate with a restarting overlay, and power-off is available from the user menu.&lt;br /&gt;
* &#039;&#039;&#039;Networking fixes&#039;&#039;&#039; — upstream WiFi gets a boot grace period so one failed probe right after boot no longer bounces the egress; the connectivity probe now works behind transparent proxies (e.g. OpenClash); cellular interfaces dialled manually through netifd are left alone; hotspot settings survive the firmware regenerating the config.&lt;br /&gt;
* &#039;&#039;&#039;Smaller root filesystem&#039;&#039;&#039; — multimedia applications, Realtek wireless drivers and other rarely-used packages are now optional modules instead of preinstalled, more kernel modules are available to install, and the BPF traffic scheduler (&amp;lt;code&amp;gt;kmod-sched-bpf&amp;lt;/code&amp;gt;) is enabled.&lt;br /&gt;
* &#039;&#039;&#039;RK3576 platform fixes&#039;&#039;&#039; — backported upstream device-tree fixes for Photonicat 2 and added the missing CPU cache-hierarchy description.&lt;br /&gt;
* &#039;&#039;&#039;LED/beeper schedules&#039;&#039;&#039; — schedule delivery to the MCU is now verified end-to-end, degrading gracefully instead of failing silently.&lt;br /&gt;
* &#039;&#039;&#039;Mini display and screen&#039;&#039;&#039; — a proxy&#039;s fake-IP DNS answers no longer fail both LCD ping rows; auto-dim delays can be edited in seconds, minutes or hours; the live screen preview refreshes at 1 Hz and can no longer freeze; car mode shows the configured timeout instead of a made-up 10 minutes.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1082</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1082"/>
		<updated>2026-08-11T11:42:15Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​说明上游 WiFi 功能改进&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;上游 WiFi 功能改进,更加稳定&#039;&#039;&#039; —— 重启后仍保留您自己的网络名称和密码,关闭中继后也会自动恢复。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1081</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1081"/>
		<updated>2026-08-11T11:42:08Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Note improved upstream Wi-Fi stability&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Improved upstream Wi-Fi — more stable&#039;&#039;&#039; — your own network name and password are kept across a reboot and restored when you turn the relay off.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1080</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1080"/>
		<updated>2026-08-11T11:39:31Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​网页界面：说明 werkzeug 迁移到 granian&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;您的网络名称和密码不再丢失&#039;&#039;&#039; —— 使用上游 WiFi 中继后不再丢失,关闭后也会恢复原有名称。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;网页服务器由 werkzeug 开发服务器改为 granian&#039;&#039;&#039;,其 HTTP 解析由 Rust 实现 —— 页面和文件加载速度提升数倍,静态文件无需进入 Python 即可直接返回。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1079</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1079"/>
		<updated>2026-08-11T11:39:18Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Web interface: note werkzeug to granian migration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Switched from the werkzeug development server to granian&#039;&#039;&#039;, which parses HTTP in Rust — pages and files load several times faster, and static files are served without entering Python at all.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1078</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1078"/>
		<updated>2026-08-11T11:38:12Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​精简电池与 MCU 部分&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;您的网络名称和密码不再丢失&#039;&#039;&#039; —— 使用上游 WiFi 中继后不再丢失,关闭后也会恢复原有名称。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;电量百分比与健康度估算改进&#039;&#039;&#039; —— 读数稳定后才显示,不再在插电后或首次放电后跳变。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数&#039;&#039;&#039; —— 电池内阻、MCU 运行时长和主板版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;速度大幅提升&#039;&#039;&#039;,不再每约 25 秒卡顿 18–24 秒。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1077</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1077"/>
		<updated>2026-08-11T11:38:03Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Condense Battery and MCU section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved battery percentage and health estimates&#039;&#039;&#039; — both now settle before they are shown, instead of jumping after you plug in or after a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings&#039;&#039;&#039; — internal resistance, MCU uptime and board revision.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Much faster, and no longer freezes&#039;&#039;&#039; for 18–24 seconds every 25 seconds.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1076</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1076"/>
		<updated>2026-08-11T11:35:44Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​更新 r7897 说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭,可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包,可下载区域地图,并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;您的网络名称和密码不再丢失&#039;&#039;&#039; —— 使用上游 WiFi 中继后不再丢失,关闭后也会恢复原有名称。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。仅支持 RM500U 和 RM500Q,EM05 待支持。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;剩余时间与健康度仅在读数可靠后显示&#039;&#039;&#039;,不再在插拔电源后或首次放电后显示异常数值。&lt;br /&gt;
* &#039;&#039;&#039;可查看本次放电已使用电池运行的时长&#039;&#039;&#039;,中途重启也不会丢失。&lt;br /&gt;
* &#039;&#039;&#039;电池历史记录不再无限增长&#039;&#039;&#039; —— 30 天清理机制此前从未真正删除过数据。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数与命令&#039;&#039;&#039; —— 电池内阻、MCU 运行时长、主板版本、电量计诊断和 MCU 恢复出厂设置。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;速度大幅提升&#039;&#039;&#039;,不再每约 25 秒卡顿 18–24 秒。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== NAS 与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1075</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1075"/>
		<updated>2026-08-11T11:35:28Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Update r7897 release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Time-remaining and health readings are now shown only once trustworthy&#039;&#039;&#039;, instead of false numbers after plugging in or a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;See how long you have been running on battery&#039;&#039;&#039;, surviving a reboot mid-discharge.&lt;br /&gt;
* &#039;&#039;&#039;Battery history no longer grows without limit&#039;&#039;&#039; — the 30-day cleanup had never deleted anything.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings and commands&#039;&#039;&#039; — internal resistance, MCU uptime, board revision, gauge diagnostics and MCU factory reset.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Much faster, and no longer freezes&#039;&#039;&#039; for 18–24 seconds every 25 seconds.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1074</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1074"/>
		<updated>2026-08-11T11:34:19Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​/* Storage and sharing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Time-remaining and health readings are now shown only once trustworthy&#039;&#039;&#039;, instead of false numbers after plugging in or a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;See how long you have been running on battery&#039;&#039;&#039;, surviving a reboot mid-discharge.&lt;br /&gt;
* &#039;&#039;&#039;Battery history no longer grows without limit&#039;&#039;&#039; — the 30-day cleanup had never deleted anything.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings and commands&#039;&#039;&#039; — internal resistance, MCU uptime, board revision, gauge diagnostics and MCU factory reset.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Much faster, and no longer freezes&#039;&#039;&#039; for 18–24 seconds every 25 seconds.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== NAS and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1073</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1073"/>
		<updated>2026-08-11T11:33:08Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​/* Phone (in development) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default. ONLY support RM500U and RM500Q. EM05 pending&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Time-remaining and health readings are now shown only once trustworthy&#039;&#039;&#039;, instead of false numbers after plugging in or a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;See how long you have been running on battery&#039;&#039;&#039;, surviving a reboot mid-discharge.&lt;br /&gt;
* &#039;&#039;&#039;Battery history no longer grows without limit&#039;&#039;&#039; — the 30-day cleanup had never deleted anything.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings and commands&#039;&#039;&#039; — internal resistance, MCU uptime, board revision, gauge diagnostics and MCU factory reset.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Much faster, and no longer freezes&#039;&#039;&#039; for 18–24 seconds every 25 seconds.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== Storage and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
* &#039;&#039;&#039;A failed checksum now stops a firmware flash.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1072</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1072"/>
		<updated>2026-08-11T11:32:16Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​精简 r7897 更新说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 地图定位、精度、速度、航向和各卫星信号。默认关闭，可在&amp;quot;通用设置&amp;quot;中开启。&lt;br /&gt;
* &#039;&#039;&#039;离线地图与轨迹记录&#039;&#039;&#039; —— 内置世界地图包，可下载区域地图，并可记录和回放行驶轨迹。&lt;br /&gt;
* &#039;&#039;&#039;可在 GPS 之外启用 GLONASS、北斗和伽利略。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039;,不再出现显示已连接、实际不通、必须重启的情况。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039;,且不再覆盖您的路由优先级。&lt;br /&gt;
* &#039;&#039;&#039;未安装模块的设备不再显示&amp;quot;无服务&amp;quot;。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 网络与 WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前大部分设备从未迁移到当前的路由机制。&lt;br /&gt;
* &#039;&#039;&#039;您的网络名称和密码不再丢失&#039;&#039;&#039; —— 使用上游 WiFi 中继后不再丢失,关闭后也会恢复原有名称。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 PCIe WiFi 网卡即可使用&#039;&#039;&#039;,无需额外重启或手动开启。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;,包含通话音频、拨号盘、联系人和语音信箱。默认关闭。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;剩余时间与健康度仅在读数可靠后显示&#039;&#039;&#039;,不再在插拔电源后或首次放电后显示异常数值。&lt;br /&gt;
* &#039;&#039;&#039;可查看本次放电已使用电池运行的时长&#039;&#039;&#039;,中途重启也不会丢失。&lt;br /&gt;
* &#039;&#039;&#039;电池历史记录不再无限增长&#039;&#039;&#039; —— 30 天清理机制此前从未真正删除过数据。&lt;br /&gt;
* &#039;&#039;&#039;充电上限在 MCU 重启后保留&#039;&#039;&#039;,休眠期间 LED 与蜂鸣器定时计划继续运行。&lt;br /&gt;
* &#039;&#039;&#039;新增读数与命令&#039;&#039;&#039; —— 电池内阻、MCU 运行时长、主板版本、电量计诊断和 MCU 恢复出厂设置。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;速度大幅提升&#039;&#039;&#039;,不再每约 25 秒卡顿 18–24 秒。&lt;br /&gt;
* &#039;&#039;&#039;语言与浅色/深色改为设备级设置&#039;&#039;&#039;,不再随浏览器变化,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039;,重启页面在设备恢复后自动刷新。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039;,仅在支持 GPS 的模块上显示。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条,布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新更智能,新增配色主题与公网 IP 实时跟踪&#039;&#039;&#039;,唤醒后时钟和电量不再是旧值。&lt;br /&gt;
&lt;br /&gt;
=== 存储与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039;,NFS 服务器也能真正导出共享。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败问题&#039;&#039;&#039;,NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039;,并可在网页界面查看。&lt;br /&gt;
* &#039;&#039;&#039;校验和失败时会中止固件刷写。&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1071</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1071"/>
		<updated>2026-08-11T11:32:08Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Condense r7897 release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — position on a map, accuracy, speed, heading and per-satellite signal. Off by default; enable in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Offline maps and track logging&#039;&#039;&#039; — a world map pack ships built in, regions can be downloaded, and routes can be recorded and replayed.&lt;br /&gt;
* &#039;&#039;&#039;GLONASS, BeiDou and Galileo&#039;&#039;&#039; can now be added to GPS.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops passing traffic now recovers on its own&#039;&#039;&#039;, instead of looking connected until you reboot.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039;, and cellular no longer overrides your routing priority.&lt;br /&gt;
* &#039;&#039;&#039;Devices with no modem fitted no longer show &amp;quot;No Service&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network and Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now works on the default setting&#039;&#039;&#039; — most devices had never migrated to the current routing system.&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; after using the upstream Wi-Fi relay, and turning it off restores your own name.&lt;br /&gt;
* &#039;&#039;&#039;Add-on PCIe Wi-Fi cards work straight after a flash&#039;&#039;&#039;, with no extra reboots or manual enabling.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for calls from the web interface&#039;&#039;&#039;, with audio, dialer, contacts and voicemail. Off by default.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Time-remaining and health readings are now shown only once trustworthy&#039;&#039;&#039;, instead of false numbers after plugging in or a single discharge.&lt;br /&gt;
* &#039;&#039;&#039;See how long you have been running on battery&#039;&#039;&#039;, surviving a reboot mid-discharge.&lt;br /&gt;
* &#039;&#039;&#039;Battery history no longer grows without limit&#039;&#039;&#039; — the 30-day cleanup had never deleted anything.&lt;br /&gt;
* &#039;&#039;&#039;The charge limit survives an MCU restart&#039;&#039;&#039;, and LED and beeper schedules keep running while the device sleeps.&lt;br /&gt;
* &#039;&#039;&#039;New readings and commands&#039;&#039;&#039; — internal resistance, MCU uptime, board revision, gauge diagnostics and MCU factory reset.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Much faster, and no longer freezes&#039;&#039;&#039; for 18–24 seconds every 25 seconds.&lt;br /&gt;
* &#039;&#039;&#039;Language and light/dark are now device-wide&#039;&#039;&#039;, not per browser, with a reset button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039;, and the reboot screen now reloads itself when the device is back.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039;, shown only on GPS-capable modems.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate eMMC, NVMe and SD bars and a clearer layout.&lt;br /&gt;
* &#039;&#039;&#039;Smarter refresh, colour themes and live public IP&#039;&#039;&#039; — the clock and battery are no longer stale on wake.&lt;br /&gt;
&lt;br /&gt;
=== Storage and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039;, and the NFS server can actually export one.&lt;br /&gt;
* &#039;&#039;&#039;Fixed eMMC partitioning failures&#039;&#039;&#039;, and NTFS drives now mount correctly.&lt;br /&gt;
* &#039;&#039;&#039;Fixed per-client traffic statistics on AIC8800 Wi-Fi&#039;&#039;&#039;, now also visible in the web UI.&lt;br /&gt;
* &#039;&#039;&#039;A failed checksum now stops a firmware flash.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1070</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1070"/>
		<updated>2026-08-11T11:29:32Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​添加 2026-08-11 r7897 更新说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7854 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 完整的 GNSS 接收机页面 &amp;lt;code&amp;gt;/gps&amp;lt;/code&amp;gt;：地图实时定位、定位质量与精度、速度与航向，以及各卫星系统的信号强度图。默认隐藏，可在&amp;quot;通用设置&amp;quot;中开启；该选项仅在支持 GNSS 的模块（EM05、RM500Q、EM520）上显示。&lt;br /&gt;
* &#039;&#039;&#039;无需联网即可使用地图&#039;&#039;&#039; —— 固件内置世界地图包，可下载更高精度的区域地图供离线使用；仍然缺失的瓦片会通过路由器获取并保存，下次直接使用。&lt;br /&gt;
* &#039;&#039;&#039;可选择使用哪些卫星系统&#039;&#039;&#039; —— GPS 始终跟踪，可另外启用 GLONASS、北斗和伽利略。此前模块虽然跟踪这些系统，却从不上报，导致页面上的星空比实际更空。&lt;br /&gt;
* &#039;&#039;&#039;轨迹记录，支持查看与回放&#039;&#039;&#039; —— 可按固定间隔记录，也可使用智能模式（移动和转向时记录）；轨迹保存在内部存储或 SD/NVMe 卡上并可设置容量上限，旧文件自动轮转与压缩。&lt;br /&gt;
&lt;br /&gt;
=== 蜂窝网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;5G 连接中断后可自行恢复&#039;&#039;&#039; —— 此前信号显示正常、状态显示已连接，实际却没有任何数据通过，且必须重启设备或手动复位模块才能恢复。现在设备会自行发现并重新连接，待网络恢复后自动回到 5G。&lt;br /&gt;
* &#039;&#039;&#039;始终无法传输数据的连接会被迅速断开&#039;&#039;&#039;，而不再被无限期信任，因此恢复更快，并少一次电源循环。&lt;br /&gt;
* &#039;&#039;&#039;蜂窝网络不再覆盖您的路由优先级&#039;&#039;&#039; —— 此前模块在每次连接时强制写入固定的路由优先级，可能在您不知情的情况下让蜂窝网络排在有线 WAN 之前或之后。现在会遵循您的设置。&lt;br /&gt;
* &#039;&#039;&#039;修复可能导致蜂窝网络完全不通的启动时序问题&#039;&#039;&#039; —— 拨号程序可能先于负责配置它的管理程序启动。现在管理程序优先启动；连接失败时会明确报错并干净地重启，而不是留下一条表面正常、实际已失效的链路。&lt;br /&gt;
* &#039;&#039;&#039;没有模块的设备不再显示存在模块&#039;&#039;&#039; —— 未安装模块的设备此前在顶栏显示&amp;quot;无服务&amp;quot;，模块页面则一直停留在检测状态。已存储的短信在任何情况下仍可查看。&lt;br /&gt;
&lt;br /&gt;
=== 网络 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;默认设置下故障切换现在真正生效&#039;&#039;&#039; —— 此前的迁移仅对使用过已废弃的 Smart WAN 模式的设备生效，因此大部分处于默认设置的设备从未迁移到当前的路由机制：没有故障切换、没有健康检查，路由优先级也是陈旧的。现在所有设备都会完成迁移，且迁移过程中不会改变任何流量的路径。&lt;br /&gt;
* &#039;&#039;&#039;仪表板可区分本机热点与所连接的上游热点&#039;&#039;&#039; —— 此前两行 WiFi 使用相同图标，现在上游连接有独立的标识和图标。&lt;br /&gt;
&lt;br /&gt;
=== WiFi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;您的网络名称和密码不再丢失&#039;&#039;&#039; —— 使用上游 WiFi 中继后重启，可能导致板载无线电在所有界面中消失，并以出厂的&amp;quot;OpenWrt&amp;quot;名称、无密码的状态恢复。&lt;br /&gt;
* &#039;&#039;&#039;关闭上游 WiFi 后会恢复您自己的网络名称&#039;&#039;&#039;，而不再让热点继续广播出厂默认名称。&lt;br /&gt;
* &#039;&#039;&#039;刷机后外接 WiFi 网卡即可使用&#039;&#039;&#039; —— 此前 PCIe 网卡处于关闭状态，需要重启两次并手动点击才能开始工作。&lt;br /&gt;
* &#039;&#039;&#039;修复部分设备上接入点名称重复出现 &amp;quot;-5g&amp;quot; 的问题&#039;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
=== 电话功能（开发中） ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;初步支持在网页界面拨打和接听电话&#039;&#039;&#039;，包含通话音频、拨号盘、联系人和语音信箱。默认关闭，可在设置中开启。该功能仍在积极开发中。&lt;br /&gt;
&lt;br /&gt;
=== 电池与 MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;插拔电源后剩余时间估算不再显示异常数值&#039;&#039;&#039; —— 现在会先等读数稳定，其间显示&amp;quot;-&amp;quot;，而不会在电量接近充满时显示&amp;quot;剩余 10 分钟&amp;quot;之类的结果。&lt;br /&gt;
* &#039;&#039;&#039;电池健康度在读数可靠之前不再显示&#039;&#039;&#039; —— 此前经过一次放电即显示，而此时数值波动很大，跳变时看起来像电量计故障。&lt;br /&gt;
* &#039;&#039;&#039;可查看本次放电已使用电池运行的时长&#039;&#039;&#039;,中途重启也不会丢失。&lt;br /&gt;
* &#039;&#039;&#039;电池历史记录不再无限增长&#039;&#039;&#039; —— 30 天清理机制此前从未真正删除过任何数据，导致数据库在设备存储上持续增大。&lt;br /&gt;
* &#039;&#039;&#039;电池充电上限会被记住&#039;&#039;&#039; —— MCU 重启后依然保留，并在每次读取时重新确认，因此显示值始终与实际生效值一致。&lt;br /&gt;
* &#039;&#039;&#039;设备休眠期间 LED 与蜂鸣器定时计划继续运行&#039;&#039;&#039;（需较新的 MCU 固件，由 MCU 自行维护每日定时）。&lt;br /&gt;
* &#039;&#039;&#039;新增电池内阻显示&#039;&#039;&#039;,区分总内阻与电芯内阻。&lt;br /&gt;
* &#039;&#039;&#039;新增 MCU 运行时长与距上次休眠时间。&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;可从 MCU 导出电量计诊断日志&#039;&#039;&#039;用于排查问题，命令为 &amp;lt;code&amp;gt;soc-log-get&amp;lt;/code&amp;gt;。&lt;br /&gt;
* &#039;&#039;&#039;新增 MCU 恢复出厂设置命令&#039;&#039;&#039;：&amp;lt;code&amp;gt;pcat-pmu-updater --wipe-nvs&amp;lt;/code&amp;gt;。&lt;br /&gt;
* &#039;&#039;&#039;可读取 MCU 主板版本&#039;&#039;&#039;（&amp;lt;code&amp;gt;pmu-hw-version-get&amp;lt;/code&amp;gt;），技术支持无需拆机即可识别硬件版本。&lt;br /&gt;
&lt;br /&gt;
=== 网页界面 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;管理界面速度大幅提升&#039;&#039;&#039; —— 高并发下页面和文件的响应速度提升数倍，静态文件的最长等待时间从数秒降至百分之几秒。&lt;br /&gt;
* &#039;&#039;&#039;修复界面每约 25 秒卡顿 18–24 秒的问题&#039;&#039;&#039; —— 每个打开的浏览器标签页都会长期占用设备四个请求处理槽位中的一个。&lt;br /&gt;
* &#039;&#039;&#039;语言现在是设备属性，而非浏览器属性&#039;&#039;&#039; —— 此前两个浏览器可能显示两种语言，在一台设备上选择的语言对其他人无效。&lt;br /&gt;
* &#039;&#039;&#039;浅色/深色外观同样为设备级设置&#039;&#039;&#039;,并新增恢复默认按钮。&lt;br /&gt;
* &#039;&#039;&#039;显示屏主题新增取色器&#039;&#039;&#039; —— 可为各元素选择精确颜色并实时预览，也可随机生成配色后手动微调。&lt;br /&gt;
* &#039;&#039;&#039;重启页面提供真实的时间估算并自动刷新&#039;&#039;&#039;,设备恢复后自动重新载入，不再只有一个需要自己盯着并手动刷新的计时器。&lt;br /&gt;
* &#039;&#039;&#039;刚刷机的设备即可直接使用容器功能&#039;&#039;&#039;,无需进入设置页或重启。&lt;br /&gt;
* &#039;&#039;&#039;各页面拥有独立的浏览器标签标题&#039;&#039;&#039;,网站图标跟随显示屏主题配色。&lt;br /&gt;
&lt;br /&gt;
=== 迷你显示屏 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;新增 GPS 页面&#039;&#039;&#039; —— 显示速度、航向、海拔、精度、定位类型和卫星数量。仅在安装支持 GPS 的模块时出现，其他设备不会看到空白页面。&lt;br /&gt;
* &#039;&#039;&#039;存储页面重新设计&#039;&#039;&#039; —— eMMC、NVMe 和 SD 各自独立的进度条，以 CPU 芯片图标取代竖排文字，内存占用直接标注在进度条内，图表布局更清晰。&lt;br /&gt;
* &#039;&#039;&#039;刷新频率按需分配&#039;&#039;&#039; —— 第一页和时钟每秒刷新两次，正在查看时 ping 每秒刷新一次，其余页面保持低频。数据在后台保持更新，因此屏幕唤醒后时钟和电量不再是旧值。&lt;br /&gt;
* &#039;&#039;&#039;新的唤醒动画&#039;&#039;&#039; —— 小猫融入第一页，取代原有的启动进度条；启动较慢时同样会播放。&lt;br /&gt;
* &#039;&#039;&#039;配色主题&#039;&#039;&#039; —— 背景、图标着色和进度条颜色从主题文件读取，无需重新编译固件即可更换配色。&lt;br /&gt;
* &#039;&#039;&#039;实时跟踪公网 IP&#039;&#039;&#039;,链路恢复后快速重新探测，WAN 变更后不再显示旧地址。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 按每个无线电显示一行 SSID&#039;&#039;&#039;,上游未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;文字更清晰平滑&#039;&#039;&#039; —— 抗锯齿渲染、滚动更流畅；时区未确定前时钟显示 &amp;lt;code&amp;gt;--:--&amp;lt;/code&amp;gt; 而不是先猜一个。&lt;br /&gt;
* &#039;&#039;&#039;启动更快，画面更流畅&#039;&#039;&#039; —— 面板点亮前各项数据采集已全部启动，ping 或测速较慢时不再拖慢刷新，画面未变化的部分不再重绘。&lt;br /&gt;
* &#039;&#039;&#039;RM500Q 模块现在会显示蜂窝信号图标&#039;&#039;&#039;,此前该图标为空白。&lt;br /&gt;
&lt;br /&gt;
=== 存储与共享 ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;修复 AIC8800 WiFi 的单客户端流量统计&#039;&#039;&#039; —— 已连接设备的字节数和数据包计数此前读数错误或为零，导致单设备流量数据不可信。&lt;br /&gt;
* &#039;&#039;&#039;现在可以挂载 SMB 共享&#039;&#039;&#039; —— 来自 Windows 电脑或 NAS。此前设备可以通过 SMB 共享自己的文件，却无法连接他人的共享。&lt;br /&gt;
* &#039;&#039;&#039;NFS 服务器现在可以真正导出共享&#039;&#039;&#039; —— 此前该功能虽已编译进系统，但缺少导出所需的工具，因此始终无法使用。Linux 和 macOS 客户端现在有了比 SMB 更快的选择。&lt;br /&gt;
* &#039;&#039;&#039;修复 eMMC 分区失败的问题&#039;&#039;&#039; —— 此前因缺少必要工具，创建分区可能中途失败。重复使用的分区不再残留旧的文件系统签名。NTFS 磁盘现在也能正常挂载。&lt;br /&gt;
* &#039;&#039;&#039;流量统计可在网页界面查看&#039;&#039;&#039; —— 数据此前已在采集，但只能通过命令行查看。&lt;br /&gt;
* &#039;&#039;&#039;校验和失败时会中止固件刷写&#039;&#039;&#039;,而不再继续执行。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1069</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1069"/>
		<updated>2026-08-11T11:29:25Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Add 2026-08-11 r7897 release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;br /&gt;
&lt;br /&gt;
== 2026-08-11 r7897 ==&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — a full GNSS receiver page at &amp;lt;code&amp;gt;/gps&amp;lt;/code&amp;gt;: live position on a map, fix quality and accuracy, speed and heading, and a per-satellite signal chart across constellations. Hidden by default; turn it on in General Settings, where the option appears only on GNSS-capable modems (EM05, RM500Q, EM520).&lt;br /&gt;
* &#039;&#039;&#039;Maps work without an internet connection&#039;&#039;&#039; — a world map pack ships with the firmware, you can download higher-detail regions for offline use, and anything still missing is fetched through the router and kept for next time.&lt;br /&gt;
* &#039;&#039;&#039;Choose which satellite systems to use&#039;&#039;&#039; — GPS is always tracked; GLONASS, BeiDou and Galileo can be added. Previously the module tracked those systems but never reported them, so the sky looked emptier than it was.&lt;br /&gt;
* &#039;&#039;&#039;Position logger with track viewer and replay&#039;&#039;&#039; — records your track at fixed intervals or smart profiles that log on movement and turns, stores it on internal storage or an SD/NVMe card with a size cap, and rotates and compresses old files automatically.&lt;br /&gt;
&lt;br /&gt;
=== Cellular ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;A 5G connection that stops working now fixes itself&#039;&#039;&#039; — the signal could look fine and show as connected while nothing actually got through, and it stayed that way until you rebooted or reset the modem by hand. The box now notices, reconnects on its own, and returns to 5G once service is back.&lt;br /&gt;
* &#039;&#039;&#039;A connection that never carries traffic is dropped quickly&#039;&#039;&#039; instead of being trusted indefinitely, so recovery starts sooner and takes one less power cycle.&lt;br /&gt;
* &#039;&#039;&#039;Cellular no longer overrides your routing priority&#039;&#039;&#039; — the modem forced a fixed route priority on every connection, which could quietly put cellular ahead of or behind WAN regardless of how you had configured it. It now respects your setting.&lt;br /&gt;
* &#039;&#039;&#039;Fixed a startup race that could leave cellular dead&#039;&#039;&#039; — the dialer could start before the manager that configures it was ready. The manager now starts first, and a failed connection attempt now reports the failure and restarts cleanly instead of silently sitting there as a dead link.&lt;br /&gt;
* &#039;&#039;&#039;Devices without a modem no longer pretend to have one&#039;&#039;&#039; — the header showed &amp;quot;No Service&amp;quot; and the modem page waited forever on units with no module fitted. Stored SMS messages remain readable either way.&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Failover now actually works on the default setting&#039;&#039;&#039; — a migration only ever ran on boxes that had used the retired Smart WAN mode, so most devices, sitting on the default, never moved onto the current routing system at all: no failover, no health checking, and stale route priorities. Every device now migrates, and no traffic changes path in the process.&lt;br /&gt;
* &#039;&#039;&#039;The dashboard tells your own hotspot apart from the one you connect to&#039;&#039;&#039; — both Wi-Fi rows carried the same icon; the upstream connection now has its own badge and icon.&lt;br /&gt;
&lt;br /&gt;
=== Wi-Fi ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Your network name and password no longer disappear&#039;&#039;&#039; — using the upstream Wi-Fi relay and rebooting could make the onboard radio vanish from every screen and come back as a factory &amp;quot;OpenWrt&amp;quot; network with no password.&lt;br /&gt;
* &#039;&#039;&#039;Turning off upstream Wi-Fi restores your own network name&#039;&#039;&#039; instead of leaving the hotspot advertising the factory default.&lt;br /&gt;
* &#039;&#039;&#039;Add-on Wi-Fi cards work straight after a flash&#039;&#039;&#039; — a PCIe card was left switched off, needing two reboots and a manual click before it would go on air.&lt;br /&gt;
* &#039;&#039;&#039;Fixed access point names gaining a second &amp;quot;-5g&amp;quot;&#039;&#039;&#039; on some units.&lt;br /&gt;
&lt;br /&gt;
=== Phone (in development) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Early support for making and taking calls from the web interface&#039;&#039;&#039;, with in-call audio, a dialer, contacts and voicemail. Off by default — turn it on in Settings. Still in active development.&lt;br /&gt;
&lt;br /&gt;
=== Battery and MCU ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Battery time-remaining estimates no longer show nonsense&#039;&#039;&#039; right after you plug or unplug power — the reading now settles first, showing &amp;quot;-&amp;quot; for a few seconds instead of &amp;quot;10 minutes left&amp;quot; on a nearly full battery.&lt;br /&gt;
* &#039;&#039;&#039;Battery health is hidden until the reading is trustworthy&#039;&#039;&#039; — it appeared after a single discharge, when the figure still swings widely, and looked like a broken gauge when it jumped.&lt;br /&gt;
* &#039;&#039;&#039;See how long you have been running on battery&#039;&#039;&#039; for the current discharge, surviving a reboot mid-run.&lt;br /&gt;
* &#039;&#039;&#039;Battery history no longer grows without limit&#039;&#039;&#039; — the 30-day cleanup had never actually deleted anything, so the database grew forever on device storage.&lt;br /&gt;
* &#039;&#039;&#039;Your battery charge limit is remembered&#039;&#039;&#039; — it survives an MCU restart, and is re-checked whenever it is read, so the value shown always matches the one in effect.&lt;br /&gt;
* &#039;&#039;&#039;LED and beeper schedules keep running while the device sleeps&#039;&#039;&#039; on newer MCU firmware, which now owns the daily timer itself.&lt;br /&gt;
* &#039;&#039;&#039;Battery internal resistance is now reported&#039;&#039;&#039;, split into total and cell-only.&lt;br /&gt;
* &#039;&#039;&#039;MCU uptime and time-since-last-sleep are now available.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Battery gauge diagnostics can be pulled off the MCU&#039;&#039;&#039; for troubleshooting, via &amp;lt;code&amp;gt;soc-log-get&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;New factory-reset command&#039;&#039;&#039; for the MCU: &amp;lt;code&amp;gt;pcat-pmu-updater --wipe-nvs&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;MCU board revision is now readable&#039;&#039;&#039; via &amp;lt;code&amp;gt;pmu-hw-version-get&amp;lt;/code&amp;gt;, so support can identify hardware variants without opening the case.&lt;br /&gt;
&lt;br /&gt;
=== Web interface ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;The management interface is much faster&#039;&#039;&#039; — pages and files now serve several times quicker under load, and the worst-case wait on a static file dropped from seconds to hundredths of a second.&lt;br /&gt;
* &#039;&#039;&#039;Fixed the interface freezing for 18-24 seconds about every 25 seconds&#039;&#039;&#039; — each open browser tab permanently occupied one of the device&#039;s four request slots.&lt;br /&gt;
* &#039;&#039;&#039;Language is now a property of the device, not the browser&#039;&#039;&#039; — two browsers showed two different languages, and a choice made on one machine reverted for everyone else.&lt;br /&gt;
* &#039;&#039;&#039;Light/dark appearance is device-wide too&#039;&#039;&#039;, with a reset-to-default button.&lt;br /&gt;
* &#039;&#039;&#039;Colour picker for display themes&#039;&#039;&#039; — choose exact colours per element with a live preview, or roll a random palette and fine-tune it by hand.&lt;br /&gt;
* &#039;&#039;&#039;The reboot screen gives a real time estimate and reloads itself&#039;&#039;&#039; when the device is back, instead of a bare counter you had to watch and refresh manually.&lt;br /&gt;
* &#039;&#039;&#039;Containers work on a freshly flashed device&#039;&#039;&#039; without visiting a setup tab or rebooting.&lt;br /&gt;
* &#039;&#039;&#039;Browser tab titles per page&#039;&#039;&#039;, and the site icon follows your display theme.&lt;br /&gt;
&lt;br /&gt;
=== Mini display ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New GPS page&#039;&#039;&#039; — speed, heading, altitude, accuracy, fix type and satellite count. It only appears when a GPS-capable modem is fitted, so other units do not get an empty screen.&lt;br /&gt;
* &#039;&#039;&#039;Storage page rebuilt&#039;&#039;&#039; — separate bars for eMMC, NVMe and SD, a CPU chip icon in place of the vertical CPU text, memory labelled inside its bar, and a clearer chart layout.&lt;br /&gt;
* &#039;&#039;&#039;The display refreshes where it matters&#039;&#039;&#039; — the first page and the clock update twice a second, ping once a second while you are watching it, and slower pages stay slow. Data is kept warm in the background, so the clock and battery are no longer stale when the screen wakes.&lt;br /&gt;
* &#039;&#039;&#039;New wake-up animation&#039;&#039;&#039; — the cat dissolves into the first page, replacing the old boot bar. It plays on slow boots too.&lt;br /&gt;
* &#039;&#039;&#039;Colour themes&#039;&#039;&#039; — background, icon tinting and bar colours are read from a theme file, so the panel can be recoloured without rebuilding firmware.&lt;br /&gt;
* &#039;&#039;&#039;Public IP is tracked live&#039;&#039;&#039;, with a fast re-probe when the link comes back, so it no longer shows a stale address after a WAN change.&lt;br /&gt;
* &#039;&#039;&#039;Wi-Fi shows one SSID row per radio&#039;&#039;&#039;, and goes to standby when the upstream is not associated.&lt;br /&gt;
* &#039;&#039;&#039;Sharper, smoother text&#039;&#039;&#039; — antialiased rendering, smoother scrolling, and the clock shows &amp;lt;code&amp;gt;--:--&amp;lt;/code&amp;gt; until the timezone is actually known rather than guessing.&lt;br /&gt;
* &#039;&#039;&#039;Faster startup and smoother updates&#039;&#039;&#039; — every collector starts before the panel comes up, a slow ping or speed test no longer stalls the refresh, and unchanged parts of the screen are not redrawn.&lt;br /&gt;
* &#039;&#039;&#039;Cellular signal icon now shows on RM500Q modems&#039;&#039;&#039;, where it had been blank.&lt;br /&gt;
&lt;br /&gt;
=== Storage and sharing ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Per-client traffic statistics fixed on AIC8800 Wi-Fi&#039;&#039;&#039; — connected-device byte and packet counters read wrong or zero, so per-device traffic was not trustworthy.&lt;br /&gt;
* &#039;&#039;&#039;You can now mount an SMB share&#039;&#039;&#039; from a Windows PC or a NAS. The box could already share its own files over SMB but could not connect to someone else&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;The NFS server can actually export a share now&#039;&#039;&#039; — it was built into the system but the tools needed to export anything were missing, so it could never be used. Linux and macOS clients now have a faster alternative to SMB.&lt;br /&gt;
* &#039;&#039;&#039;Fixed partitioning failures on eMMC&#039;&#039;&#039; — creating a partition could fail partway through because a required tool was missing. Reused partitions no longer carry a leftover filesystem signature. NTFS drives also mount correctly now.&lt;br /&gt;
* &#039;&#039;&#039;Traffic statistics are visible in the web UI&#039;&#039;&#039; — the data was already being collected but could only be seen from a shell.&lt;br /&gt;
* &#039;&#039;&#039;A failed checksum now stops a firmware flash&#039;&#039;&#039; instead of letting it proceed.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1068</id>
		<title>Photonicat 2 LED 指示灯</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1068"/>
		<updated>2026-08-08T12:44:13Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: 低电红色告警不受关灯设置影响（系统级告警）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 只有一颗双色指示灯（红 + 绿）。黄色（橙色）由红绿同时点亮合成，没有蓝色。&lt;br /&gt;
&lt;br /&gt;
指示灯采用 MacBook 式的表示方式：&lt;br /&gt;
* &#039;&#039;&#039;颜色表示充电状态&#039;&#039;&#039; —— 🟠 黄色 = 正在充电，🟢 绿色 = 已充满。&lt;br /&gt;
* &#039;&#039;&#039;呼吸与否表示主机状态&#039;&#039;&#039; —— 呼吸 = 系统运行中，常亮 = 系统已关机。&lt;br /&gt;
&lt;br /&gt;
适用于固件 &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; 及之后版本。较早的固件在充电和充满时不区分开关机状态。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; 起：充电橙色更暖（红 60 % / 绿 24 %，原为 55 %/35 %）；呼吸只降到约峰值 1/12 的暗橙再进入谷底熄灭——旧固件呼吸首尾极暗处会显得像纯红——谷底熄灭保持由 0.24 s 加长到 0.5 s（周期约 6.1 s）。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039; 起：电池耗尽或电压过低时尝试开机，会立刻红灯&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;（更早的固件此时什么都不显示，空电设备看起来像变砖）；关机状态下短按遇到低电同样闪 3 次。持续红闪仅在系统运行中使用。长按开关机时长改为 1.5 秒。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 修复：RA2E1260802000–RA2E1260802001 存在缺陷——设备关机待机时短按电源键，&#039;&#039;&#039;即使电池满电&#039;&#039;&#039;也可能红灯闪 3 次。原因是待机唤醒瞬间电压传感器短暂读到 0 mV，被误判为低电量。现在只有真实的低电压读数才会触发红灯。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起：关机状态下电池低于最低开机电压（6600 mV）时，&#039;&#039;&#039;任何&#039;&#039;&#039;按键都会在按下约 0.1 秒时立即红灯闪 3 次——判定发生在给主机供电之前，主机电源轨完全不动——闪完后设备回到深度睡眠，把最后的电量留给内置时钟走时。RA2E1260802000–RA2E1260808000 上，开机被拒的红闪要按满 1.5 秒长按并松手后才出现，短按在松手前没有任何提示。本版本同时修复：若系统关机（包括 6300 mV 自动关机）时持续低电红闪正在进行，旧固件不会将其停掉——系统已关机红灯却一直闪个不停，还挡住控制器进入休眠，白白耗尽剩余电量。现在关机即停。&lt;br /&gt;
&lt;br /&gt;
英文版见 [[Photonicat 2 LED Indicator]]。提示音说明见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
以下动画为示意，节奏与实际固件一致（呼吸周期约 6.1 秒、心跳周期 2 秒）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 动画 !! 指示灯 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 黄色呼吸 || 正在充电，系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 黄色常亮 || 正在充电，系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 绿色呼吸 || 已充满（或已达充电上限），系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 绿色常亮 || 已充满（或已达充电上限），系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 绿色心跳脉冲 || 电池供电运行中，电量正常&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 红色持续闪烁 || 电量低（低于 6500 mV，详见下方[[#低电量红灯|低电量红灯]]）&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ 熄灭 || 电池供电待机，系统已关机&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整状态表==&lt;br /&gt;
&lt;br /&gt;
电压门限为固件默认值，可由上位机覆盖。以下为 2S 电池组数值：满电 8280 mV、低电告警 6500 mV、最低开机 6600 mV、强制关机 6300 mV。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 电量 !! 充电器 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 黄色 || 呼吸（开机） || 渐亮 2.8 s / 渐暗 2.8 s / 熄灭 0.5 s，周期约 6.1 s；谷底降到约峰值 1/12 的暗橙，不会出现纯红&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮（关机） || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 绿色 || 呼吸（开机） || 同为约 6.1 s 周期，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮（关机） || 持续，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，DC ≥ 8 V 且无充电电流 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 绿色 || 心跳脉冲 || 周期 2 s&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，正在开机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6600 mV，关机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 持续闪烁 || 亮 1 s / 灭 1 s，60 s 后开始，持续到电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV（有效读数），关机短按一次 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || 亮 1 s / 灭 1 s，&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，首次立即亮（约 0.5 s 防抖）&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，关机时按下任意按键 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || &#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，按下约 0.1 s 即开始（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起；旧固件要按满 1.5 s 长按并松手才闪）。主机电源轨不会上电，闪完后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 拔出充电器且关机 || 未插入 || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ 熄灭&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==服务与过渡状态==&lt;br /&gt;
&lt;br /&gt;
以下状态优先级高于上表。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 状态 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 正在关机 || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 绿色 || 闪烁 || 约亮 0.5 s / 灭 1.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 固件烧录模式 || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 黄色 || 快闪 || 周期约 0.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 复位 / 恢复出厂模式 || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 黄色 || 慢闪 || 周期约 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==低电量红灯==&lt;br /&gt;
&lt;br /&gt;
电量过低时指示灯会变为 🔴 &#039;&#039;&#039;红色闪烁&#039;&#039;&#039;，这是唯一使用红色的场合。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项目 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 触发条件 || 电池电压低于 &#039;&#039;&#039;6500 mV&#039;&#039;&#039;（2S 电池组，约 3.25 V/节），且&#039;&#039;&#039;未插充电器&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁节奏 || 亮 1 秒 / 灭 1 秒&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁次数 || &#039;&#039;&#039;开机状态：&#039;&#039;&#039;持续闪烁，直到电压回升或插上充电器。&#039;&#039;&#039;关机状态&#039;&#039;&#039;（按下任意按键）：只&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，随后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 开机状态下 || 电压持续低于门限 &#039;&#039;&#039;60 秒&#039;&#039;&#039;后才开始闪&lt;br /&gt;
|-&lt;br /&gt;
| 关机时按任意键 || 电池低于开机门限时，任何按键都会在按下约 0.1 秒时红灯闪 3 次（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起），闪完后设备回到深度睡眠。待机唤醒瞬间传感器的 0 mV 预热读数不会触发——固件会先补采一次真实电压再判定（&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 起）&lt;br /&gt;
|-&lt;br /&gt;
| 绿灯会怎样 || 红灯期间绿色心跳会停止，两者不会同时亮&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ 重要提醒&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 系统运行中，红灯会&#039;&#039;&#039;一直闪到电压回升或接入充电器&#039;&#039;&#039;，不会自行停止。（RA2E1260726003 之前的固件只闪 3 次就不再提示。）系统关机时，短按或开机被拒只闪 3 次，随后 MCU 回到待机。&lt;br /&gt;
* 红灯触发点（6500 mV）与&#039;&#039;&#039;强制关机点（6300 mV）只差 200 mV&#039;&#039;&#039;，在 2S 锂电的放电末端属于很陡的一段，看到红灯应尽快接入充电器。&lt;br /&gt;
* 判据是&#039;&#039;&#039;电压不是百分比&#039;&#039;&#039;：大负载下电压会被拉低，可能在剩余电量还不算太少时就提前告警；负载减轻后电压回升，告警也会随之消失。&lt;br /&gt;
&lt;br /&gt;
==充电上限==&lt;br /&gt;
&lt;br /&gt;
若设置了充电上限（例如 80 %），电量达到上限后会断开充电，充电电流归零，设备据此按“已充满”处理并显示 🟢 &#039;&#039;&#039;绿色&#039;&#039;&#039;。此后由电池给负载供电并缓慢放电，低于恢复门限后重新开始充电，指示灯回到 🟠 黄色。每次切换约有 10 秒延迟。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 绿色呼吸峰值 25 % 占空、绿色常亮 50 %，所以绿色呼吸比常亮更暗；橙色呼吸峰值与橙色常亮相同（红 60 % / 绿 24 %）。&lt;br /&gt;
* 🔴 红色仅用于低电量提示：系统运行中持续闪烁直到电压回升或接入充电器；系统关机时只闪 3 次。&lt;br /&gt;
* 指示灯可通过上位机协议关闭，关闭后绿色/黄色各状态均不亮灯。🔴 低电红色告警自 &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起例外：它属于系统级告警，即使指示灯已关闭也照样闪红，保证亏电拒开机的设备不会看起来像坏了。（此前版本关灯连红色告警一起关掉。）&lt;br /&gt;
* 指示灯依据的电量是怎么算出来的，见 [[Photonicat 2 SOC 计算]]。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1067</id>
		<title>Photonicat 2 LED Indicator</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1067"/>
		<updated>2026-08-08T12:44:12Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: low-battery red warning exempt from LED-disable (system-level alert)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; has a single two-colour indicator LED (red + green). Yellow/orange is produced by lighting both colours together; there is no blue.&lt;br /&gt;
&lt;br /&gt;
The indicator follows a MacBook-style scheme:&lt;br /&gt;
* &#039;&#039;&#039;Colour tells you the charge state&#039;&#039;&#039; — 🟠 yellow = charging, 🟢 green = charged.&lt;br /&gt;
* &#039;&#039;&#039;Motion tells you the machine state&#039;&#039;&#039; — breathing = system running, steady = system off.&lt;br /&gt;
&lt;br /&gt;
Applies to firmware &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; and later. Earlier firmware did not distinguish system on/off while charging or charged.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; the charging orange is warmer (R60 %/G24 % instead of R55 %/G35 %), the breath fades only to a dim-orange floor (≈1/12 of peak) before the valley off — on earlier firmware the dim ends of each breath cycle could look pure red — and the valley off hold is 0.5 s instead of 0.24 s (cycle ≈6.1 s).&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039;: trying to power on with a flat or too-low pack flashes red &#039;&#039;&#039;three times&#039;&#039;&#039; immediately (earlier firmware showed nothing, so a flat device looked bricked), and a short press while off with a low pack shows the same three flashes. Continuous red flashing is only used while the system is running. The power-button long press is now 1.5 s.&lt;br /&gt;
&lt;br /&gt;
Fixed in &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;: on RA2E1260802000–RA2E1260802001 a short press while the device was off in standby could flash red three times &#039;&#039;&#039;even with a full battery&#039;&#039;&#039; — the voltage sensor briefly reads 0 mV while waking from standby and this was miscounted as low battery. Red now requires a genuine low-voltage reading.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;: with the system off and the battery below the minimum boot voltage (6600 mV), &#039;&#039;&#039;any&#039;&#039;&#039; press of the power button answers with the three red flashes right away — about 0.1 s into the press, before the system power rail is touched — and the device then drops back into deep sleep to preserve the last battery reserve for the built-in clock. On RA2E1260802000–RA2E1260808000 the refused-boot flashes only appeared after holding the full 1.5 s long press and releasing; a shorter press showed nothing until release. Also fixed in this version: if the continuous low-battery warning was flashing when the system shut down (including the automatic 6300 mV shutdown), earlier firmware never cancelled it — the red kept flashing indefinitely after the system was off and prevented the controller from sleeping, draining the remaining battery. It now stops at shutdown.&lt;br /&gt;
&lt;br /&gt;
中文版见 [[Photonicat 2 LED 指示灯]]. For buzzer tones see [[Photonicat 2 Sound Guide]].&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
The animations below are illustrative; their timing matches the firmware (≈6.1 s breathing cycle, 2 s heartbeat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Animation !! Indicator !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 Yellow, breathing || Charging, system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 Yellow, steady || Charging, system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 Green, breathing || Fully charged (or at charge limit), system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 Green, steady || Fully charged (or at charge limit), system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 Green, heartbeat pulse || Running on battery, charge level normal&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 Red, flashing || Low battery (below 6500 mV — see [[#Low battery red light|Low battery red light]])&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ Off || Idle on battery, system off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full state table==&lt;br /&gt;
&lt;br /&gt;
Battery thresholds are firmware defaults and can be overridden by the host. Values are for the 2S pack: full 8280 mV, low warning 6500 mV, minimum boot 6600 mV, hard shutdown 6300 mV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Power level !! Charger !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 Yellow || Breathing (system on) || 2.8 s up / 2.8 s down / 0.5 s off, ≈6.1 s cycle; fades to a dim-orange floor (≈peak/12), never pure red&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady (system off) || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 Green || Breathing (system on) || Same ≈6.1 s cycle, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady (system off) || Constant, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, DC ≥ 8 V, no charge current || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system on || None || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 Green || Heartbeat pulse || 2 s period&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system starting || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6600 mV, system off || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, system on || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Continuous flashing || 1 s on / 1 s off, begins after 60 s, until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV (valid reading), short press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || 1 s on / 1 s off, &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash immediate (0.5 s debounce)&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, any power-button press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash ≈0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;; earlier firmware flashed only after releasing a full 1.5 s long press). The system power rail is never touched; the device returns to deep sleep afterwards&lt;br /&gt;
|-&lt;br /&gt;
| Charger removed, system off || None || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Service and transitional states==&lt;br /&gt;
&lt;br /&gt;
These override the states above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Shutting down || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 Green || Blink || ≈0.5 s on / 1.5 s off&lt;br /&gt;
|-&lt;br /&gt;
| Firmware download mode || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 Yellow || Fast blink || ≈0.5 s period&lt;br /&gt;
|-&lt;br /&gt;
| Reset / factory restore mode || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 Yellow || Slow blink || ≈1 s period&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Low battery red light==&lt;br /&gt;
&lt;br /&gt;
When the battery runs low the indicator turns 🔴 &#039;&#039;&#039;flashing red&#039;&#039;&#039;. This is the only situation in which red is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Battery below &#039;&#039;&#039;6500 mV&#039;&#039;&#039; (2S pack, about 3.25 V per cell) with &#039;&#039;&#039;no charger connected&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm || 1 second on / 1 second off&lt;br /&gt;
|-&lt;br /&gt;
| Repeats || &#039;&#039;&#039;System running:&#039;&#039;&#039; flashes continuously until the voltage recovers or a charger is connected. &#039;&#039;&#039;System off&#039;&#039;&#039; (any power-button press): exactly &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, then the device goes back to deep sleep&lt;br /&gt;
|-&lt;br /&gt;
| While running || Starts only after the voltage has stayed below the threshold for &#039;&#039;&#039;60 seconds&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Any press while off || With the battery below the boot threshold, any press of the power button flashes red three times, starting about 0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;); the device then returns to deep sleep. A 0 mV sensor warm-up reading right after standby wake does not count — the firmware takes a fresh voltage sample before deciding (since &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Effect on green || The green heartbeat stops while red is active; the two never show together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ Important&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* While the system is running, the red warning &#039;&#039;&#039;keeps flashing until the voltage recovers or a charger is connected&#039;&#039;&#039;; it does not stop on its own. (Firmware before RA2E1260726003 flashed only 3 times and then went quiet.) While the system is off, short press and refused power-up flash exactly 3 times so the MCU can return to standby.&lt;br /&gt;
* The red threshold (6500 mV) is only &#039;&#039;&#039;200 mV above the hard shutdown point (6300 mV)&#039;&#039;&#039;. That is a very steep part of the 2S li-ion discharge curve, so connect a charger promptly once you see red.&lt;br /&gt;
* The trigger is &#039;&#039;&#039;voltage, not a percentage&#039;&#039;&#039;. Under heavy load the voltage sags and the warning can appear while a useful charge remains; when the load drops the voltage recovers and the warning stops.&lt;br /&gt;
&lt;br /&gt;
==Charge limit==&lt;br /&gt;
&lt;br /&gt;
If a charge limit is configured (for example 80 %), the charger is switched off once the pack reaches it. Charge current drops to zero, so the device treats this as fully charged and shows 🟢 &#039;&#039;&#039;green&#039;&#039;&#039;. The pack then powers the load and slowly discharges until it falls below the resume threshold, at which point charging restarts and the indicator returns to 🟠 yellow. Each transition is delayed by about 10 seconds.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Green breathing peaks at 25 % duty while steady green is 50 %, so breathing green looks dimmer than steady green. Orange breathing peaks at the same R60 %/G24 % mix as steady orange.&lt;br /&gt;
* 🔴 Red is only ever used for low battery. While the system is running it keeps flashing until the voltage recovers or a charger is connected; while off it flashes exactly three times.&lt;br /&gt;
* The indicator can be disabled through the host protocol, in which case all green/yellow states stay off. The 🔴 low-battery red warning is exempt since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;: it is a system-level alert and flashes even with the indicator disabled, so a flat pack refusing to boot never looks dead. (Before that version, disabling the indicator silenced red too.)&lt;br /&gt;
* For how the charge level behind these indications is computed, see [[Photonicat 2 SOC Calculation]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1066</id>
		<title>Photonicat 2 LED 指示灯</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1066"/>
		<updated>2026-08-08T12:39:55Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: 持续低电红闪关机即停（原来关机后一直闪且挡住休眠）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 只有一颗双色指示灯（红 + 绿）。黄色（橙色）由红绿同时点亮合成，没有蓝色。&lt;br /&gt;
&lt;br /&gt;
指示灯采用 MacBook 式的表示方式：&lt;br /&gt;
* &#039;&#039;&#039;颜色表示充电状态&#039;&#039;&#039; —— 🟠 黄色 = 正在充电，🟢 绿色 = 已充满。&lt;br /&gt;
* &#039;&#039;&#039;呼吸与否表示主机状态&#039;&#039;&#039; —— 呼吸 = 系统运行中，常亮 = 系统已关机。&lt;br /&gt;
&lt;br /&gt;
适用于固件 &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; 及之后版本。较早的固件在充电和充满时不区分开关机状态。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; 起：充电橙色更暖（红 60 % / 绿 24 %，原为 55 %/35 %）；呼吸只降到约峰值 1/12 的暗橙再进入谷底熄灭——旧固件呼吸首尾极暗处会显得像纯红——谷底熄灭保持由 0.24 s 加长到 0.5 s（周期约 6.1 s）。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039; 起：电池耗尽或电压过低时尝试开机，会立刻红灯&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;（更早的固件此时什么都不显示，空电设备看起来像变砖）；关机状态下短按遇到低电同样闪 3 次。持续红闪仅在系统运行中使用。长按开关机时长改为 1.5 秒。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 修复：RA2E1260802000–RA2E1260802001 存在缺陷——设备关机待机时短按电源键，&#039;&#039;&#039;即使电池满电&#039;&#039;&#039;也可能红灯闪 3 次。原因是待机唤醒瞬间电压传感器短暂读到 0 mV，被误判为低电量。现在只有真实的低电压读数才会触发红灯。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起：关机状态下电池低于最低开机电压（6600 mV）时，&#039;&#039;&#039;任何&#039;&#039;&#039;按键都会在按下约 0.1 秒时立即红灯闪 3 次——判定发生在给主机供电之前，主机电源轨完全不动——闪完后设备回到深度睡眠，把最后的电量留给内置时钟走时。RA2E1260802000–RA2E1260808000 上，开机被拒的红闪要按满 1.5 秒长按并松手后才出现，短按在松手前没有任何提示。本版本同时修复：若系统关机（包括 6300 mV 自动关机）时持续低电红闪正在进行，旧固件不会将其停掉——系统已关机红灯却一直闪个不停，还挡住控制器进入休眠，白白耗尽剩余电量。现在关机即停。&lt;br /&gt;
&lt;br /&gt;
英文版见 [[Photonicat 2 LED Indicator]]。提示音说明见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
以下动画为示意，节奏与实际固件一致（呼吸周期约 6.1 秒、心跳周期 2 秒）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 动画 !! 指示灯 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 黄色呼吸 || 正在充电，系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 黄色常亮 || 正在充电，系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 绿色呼吸 || 已充满（或已达充电上限），系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 绿色常亮 || 已充满（或已达充电上限），系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 绿色心跳脉冲 || 电池供电运行中，电量正常&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 红色持续闪烁 || 电量低（低于 6500 mV，详见下方[[#低电量红灯|低电量红灯]]）&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ 熄灭 || 电池供电待机，系统已关机&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整状态表==&lt;br /&gt;
&lt;br /&gt;
电压门限为固件默认值，可由上位机覆盖。以下为 2S 电池组数值：满电 8280 mV、低电告警 6500 mV、最低开机 6600 mV、强制关机 6300 mV。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 电量 !! 充电器 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 黄色 || 呼吸（开机） || 渐亮 2.8 s / 渐暗 2.8 s / 熄灭 0.5 s，周期约 6.1 s；谷底降到约峰值 1/12 的暗橙，不会出现纯红&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮（关机） || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 绿色 || 呼吸（开机） || 同为约 6.1 s 周期，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮（关机） || 持续，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，DC ≥ 8 V 且无充电电流 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 绿色 || 心跳脉冲 || 周期 2 s&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，正在开机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6600 mV，关机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 持续闪烁 || 亮 1 s / 灭 1 s，60 s 后开始，持续到电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV（有效读数），关机短按一次 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || 亮 1 s / 灭 1 s，&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，首次立即亮（约 0.5 s 防抖）&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，关机时按下任意按键 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || &#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，按下约 0.1 s 即开始（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起；旧固件要按满 1.5 s 长按并松手才闪）。主机电源轨不会上电，闪完后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 拔出充电器且关机 || 未插入 || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ 熄灭&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==服务与过渡状态==&lt;br /&gt;
&lt;br /&gt;
以下状态优先级高于上表。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 状态 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 正在关机 || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 绿色 || 闪烁 || 约亮 0.5 s / 灭 1.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 固件烧录模式 || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 黄色 || 快闪 || 周期约 0.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 复位 / 恢复出厂模式 || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 黄色 || 慢闪 || 周期约 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==低电量红灯==&lt;br /&gt;
&lt;br /&gt;
电量过低时指示灯会变为 🔴 &#039;&#039;&#039;红色闪烁&#039;&#039;&#039;，这是唯一使用红色的场合。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项目 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 触发条件 || 电池电压低于 &#039;&#039;&#039;6500 mV&#039;&#039;&#039;（2S 电池组，约 3.25 V/节），且&#039;&#039;&#039;未插充电器&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁节奏 || 亮 1 秒 / 灭 1 秒&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁次数 || &#039;&#039;&#039;开机状态：&#039;&#039;&#039;持续闪烁，直到电压回升或插上充电器。&#039;&#039;&#039;关机状态&#039;&#039;&#039;（按下任意按键）：只&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，随后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 开机状态下 || 电压持续低于门限 &#039;&#039;&#039;60 秒&#039;&#039;&#039;后才开始闪&lt;br /&gt;
|-&lt;br /&gt;
| 关机时按任意键 || 电池低于开机门限时，任何按键都会在按下约 0.1 秒时红灯闪 3 次（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起），闪完后设备回到深度睡眠。待机唤醒瞬间传感器的 0 mV 预热读数不会触发——固件会先补采一次真实电压再判定（&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 起）&lt;br /&gt;
|-&lt;br /&gt;
| 绿灯会怎样 || 红灯期间绿色心跳会停止，两者不会同时亮&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ 重要提醒&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 系统运行中，红灯会&#039;&#039;&#039;一直闪到电压回升或接入充电器&#039;&#039;&#039;，不会自行停止。（RA2E1260726003 之前的固件只闪 3 次就不再提示。）系统关机时，短按或开机被拒只闪 3 次，随后 MCU 回到待机。&lt;br /&gt;
* 红灯触发点（6500 mV）与&#039;&#039;&#039;强制关机点（6300 mV）只差 200 mV&#039;&#039;&#039;，在 2S 锂电的放电末端属于很陡的一段，看到红灯应尽快接入充电器。&lt;br /&gt;
* 判据是&#039;&#039;&#039;电压不是百分比&#039;&#039;&#039;：大负载下电压会被拉低，可能在剩余电量还不算太少时就提前告警；负载减轻后电压回升，告警也会随之消失。&lt;br /&gt;
&lt;br /&gt;
==充电上限==&lt;br /&gt;
&lt;br /&gt;
若设置了充电上限（例如 80 %），电量达到上限后会断开充电，充电电流归零，设备据此按“已充满”处理并显示 🟢 &#039;&#039;&#039;绿色&#039;&#039;&#039;。此后由电池给负载供电并缓慢放电，低于恢复门限后重新开始充电，指示灯回到 🟠 黄色。每次切换约有 10 秒延迟。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 绿色呼吸峰值 25 % 占空、绿色常亮 50 %，所以绿色呼吸比常亮更暗；橙色呼吸峰值与橙色常亮相同（红 60 % / 绿 24 %）。&lt;br /&gt;
* 🔴 红色仅用于低电量提示：系统运行中持续闪烁直到电压回升或接入充电器；系统关机时只闪 3 次。&lt;br /&gt;
* 指示灯可通过上位机协议整体关闭，关闭后所有状态均不亮灯。&lt;br /&gt;
* 指示灯依据的电量是怎么算出来的，见 [[Photonicat 2 SOC 计算]]。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1065</id>
		<title>Photonicat 2 LED Indicator</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1065"/>
		<updated>2026-08-08T12:39:54Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: continuous low-batt red now stops at shutdown (was flashing forever, blocked standby)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; has a single two-colour indicator LED (red + green). Yellow/orange is produced by lighting both colours together; there is no blue.&lt;br /&gt;
&lt;br /&gt;
The indicator follows a MacBook-style scheme:&lt;br /&gt;
* &#039;&#039;&#039;Colour tells you the charge state&#039;&#039;&#039; — 🟠 yellow = charging, 🟢 green = charged.&lt;br /&gt;
* &#039;&#039;&#039;Motion tells you the machine state&#039;&#039;&#039; — breathing = system running, steady = system off.&lt;br /&gt;
&lt;br /&gt;
Applies to firmware &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; and later. Earlier firmware did not distinguish system on/off while charging or charged.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; the charging orange is warmer (R60 %/G24 % instead of R55 %/G35 %), the breath fades only to a dim-orange floor (≈1/12 of peak) before the valley off — on earlier firmware the dim ends of each breath cycle could look pure red — and the valley off hold is 0.5 s instead of 0.24 s (cycle ≈6.1 s).&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039;: trying to power on with a flat or too-low pack flashes red &#039;&#039;&#039;three times&#039;&#039;&#039; immediately (earlier firmware showed nothing, so a flat device looked bricked), and a short press while off with a low pack shows the same three flashes. Continuous red flashing is only used while the system is running. The power-button long press is now 1.5 s.&lt;br /&gt;
&lt;br /&gt;
Fixed in &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;: on RA2E1260802000–RA2E1260802001 a short press while the device was off in standby could flash red three times &#039;&#039;&#039;even with a full battery&#039;&#039;&#039; — the voltage sensor briefly reads 0 mV while waking from standby and this was miscounted as low battery. Red now requires a genuine low-voltage reading.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;: with the system off and the battery below the minimum boot voltage (6600 mV), &#039;&#039;&#039;any&#039;&#039;&#039; press of the power button answers with the three red flashes right away — about 0.1 s into the press, before the system power rail is touched — and the device then drops back into deep sleep to preserve the last battery reserve for the built-in clock. On RA2E1260802000–RA2E1260808000 the refused-boot flashes only appeared after holding the full 1.5 s long press and releasing; a shorter press showed nothing until release. Also fixed in this version: if the continuous low-battery warning was flashing when the system shut down (including the automatic 6300 mV shutdown), earlier firmware never cancelled it — the red kept flashing indefinitely after the system was off and prevented the controller from sleeping, draining the remaining battery. It now stops at shutdown.&lt;br /&gt;
&lt;br /&gt;
中文版见 [[Photonicat 2 LED 指示灯]]. For buzzer tones see [[Photonicat 2 Sound Guide]].&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
The animations below are illustrative; their timing matches the firmware (≈6.1 s breathing cycle, 2 s heartbeat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Animation !! Indicator !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 Yellow, breathing || Charging, system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 Yellow, steady || Charging, system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 Green, breathing || Fully charged (or at charge limit), system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 Green, steady || Fully charged (or at charge limit), system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 Green, heartbeat pulse || Running on battery, charge level normal&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 Red, flashing || Low battery (below 6500 mV — see [[#Low battery red light|Low battery red light]])&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ Off || Idle on battery, system off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full state table==&lt;br /&gt;
&lt;br /&gt;
Battery thresholds are firmware defaults and can be overridden by the host. Values are for the 2S pack: full 8280 mV, low warning 6500 mV, minimum boot 6600 mV, hard shutdown 6300 mV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Power level !! Charger !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 Yellow || Breathing (system on) || 2.8 s up / 2.8 s down / 0.5 s off, ≈6.1 s cycle; fades to a dim-orange floor (≈peak/12), never pure red&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady (system off) || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 Green || Breathing (system on) || Same ≈6.1 s cycle, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady (system off) || Constant, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, DC ≥ 8 V, no charge current || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system on || None || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 Green || Heartbeat pulse || 2 s period&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system starting || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6600 mV, system off || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, system on || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Continuous flashing || 1 s on / 1 s off, begins after 60 s, until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV (valid reading), short press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || 1 s on / 1 s off, &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash immediate (0.5 s debounce)&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, any power-button press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash ≈0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;; earlier firmware flashed only after releasing a full 1.5 s long press). The system power rail is never touched; the device returns to deep sleep afterwards&lt;br /&gt;
|-&lt;br /&gt;
| Charger removed, system off || None || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Service and transitional states==&lt;br /&gt;
&lt;br /&gt;
These override the states above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Shutting down || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 Green || Blink || ≈0.5 s on / 1.5 s off&lt;br /&gt;
|-&lt;br /&gt;
| Firmware download mode || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 Yellow || Fast blink || ≈0.5 s period&lt;br /&gt;
|-&lt;br /&gt;
| Reset / factory restore mode || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 Yellow || Slow blink || ≈1 s period&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Low battery red light==&lt;br /&gt;
&lt;br /&gt;
When the battery runs low the indicator turns 🔴 &#039;&#039;&#039;flashing red&#039;&#039;&#039;. This is the only situation in which red is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Battery below &#039;&#039;&#039;6500 mV&#039;&#039;&#039; (2S pack, about 3.25 V per cell) with &#039;&#039;&#039;no charger connected&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm || 1 second on / 1 second off&lt;br /&gt;
|-&lt;br /&gt;
| Repeats || &#039;&#039;&#039;System running:&#039;&#039;&#039; flashes continuously until the voltage recovers or a charger is connected. &#039;&#039;&#039;System off&#039;&#039;&#039; (any power-button press): exactly &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, then the device goes back to deep sleep&lt;br /&gt;
|-&lt;br /&gt;
| While running || Starts only after the voltage has stayed below the threshold for &#039;&#039;&#039;60 seconds&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Any press while off || With the battery below the boot threshold, any press of the power button flashes red three times, starting about 0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;); the device then returns to deep sleep. A 0 mV sensor warm-up reading right after standby wake does not count — the firmware takes a fresh voltage sample before deciding (since &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Effect on green || The green heartbeat stops while red is active; the two never show together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ Important&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* While the system is running, the red warning &#039;&#039;&#039;keeps flashing until the voltage recovers or a charger is connected&#039;&#039;&#039;; it does not stop on its own. (Firmware before RA2E1260726003 flashed only 3 times and then went quiet.) While the system is off, short press and refused power-up flash exactly 3 times so the MCU can return to standby.&lt;br /&gt;
* The red threshold (6500 mV) is only &#039;&#039;&#039;200 mV above the hard shutdown point (6300 mV)&#039;&#039;&#039;. That is a very steep part of the 2S li-ion discharge curve, so connect a charger promptly once you see red.&lt;br /&gt;
* The trigger is &#039;&#039;&#039;voltage, not a percentage&#039;&#039;&#039;. Under heavy load the voltage sags and the warning can appear while a useful charge remains; when the load drops the voltage recovers and the warning stops.&lt;br /&gt;
&lt;br /&gt;
==Charge limit==&lt;br /&gt;
&lt;br /&gt;
If a charge limit is configured (for example 80 %), the charger is switched off once the pack reaches it. Charge current drops to zero, so the device treats this as fully charged and shows 🟢 &#039;&#039;&#039;green&#039;&#039;&#039;. The pack then powers the load and slowly discharges until it falls below the resume threshold, at which point charging restarts and the indicator returns to 🟠 yellow. Each transition is delayed by about 10 seconds.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Green breathing peaks at 25 % duty while steady green is 50 %, so breathing green looks dimmer than steady green. Orange breathing peaks at the same R60 %/G24 % mix as steady orange.&lt;br /&gt;
* 🔴 Red is only ever used for low battery. While the system is running it keeps flashing until the voltage recovers or a charger is connected; while off it flashes exactly three times.&lt;br /&gt;
* The indicator can be disabled entirely through the host protocol, in which case it stays off in all states.&lt;br /&gt;
* For how the charge level behind these indications is computed, see [[Photonicat 2 SOC Calculation]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1064</id>
		<title>Photonicat 2 LED 指示灯</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1064"/>
		<updated>2026-08-08T12:34:56Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: 低电拒绝开机红闪3次提前到按下~0.1s，不上电源轨，闪完回深睡&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 只有一颗双色指示灯（红 + 绿）。黄色（橙色）由红绿同时点亮合成，没有蓝色。&lt;br /&gt;
&lt;br /&gt;
指示灯采用 MacBook 式的表示方式：&lt;br /&gt;
* &#039;&#039;&#039;颜色表示充电状态&#039;&#039;&#039; —— 🟠 黄色 = 正在充电，🟢 绿色 = 已充满。&lt;br /&gt;
* &#039;&#039;&#039;呼吸与否表示主机状态&#039;&#039;&#039; —— 呼吸 = 系统运行中，常亮 = 系统已关机。&lt;br /&gt;
&lt;br /&gt;
适用于固件 &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; 及之后版本。较早的固件在充电和充满时不区分开关机状态。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; 起：充电橙色更暖（红 60 % / 绿 24 %，原为 55 %/35 %）；呼吸只降到约峰值 1/12 的暗橙再进入谷底熄灭——旧固件呼吸首尾极暗处会显得像纯红——谷底熄灭保持由 0.24 s 加长到 0.5 s（周期约 6.1 s）。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039; 起：电池耗尽或电压过低时尝试开机，会立刻红灯&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;（更早的固件此时什么都不显示，空电设备看起来像变砖）；关机状态下短按遇到低电同样闪 3 次。持续红闪仅在系统运行中使用。长按开关机时长改为 1.5 秒。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 修复：RA2E1260802000–RA2E1260802001 存在缺陷——设备关机待机时短按电源键，&#039;&#039;&#039;即使电池满电&#039;&#039;&#039;也可能红灯闪 3 次。原因是待机唤醒瞬间电压传感器短暂读到 0 mV，被误判为低电量。现在只有真实的低电压读数才会触发红灯。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起：关机状态下电池低于最低开机电压（6600 mV）时，&#039;&#039;&#039;任何&#039;&#039;&#039;按键都会在按下约 0.1 秒时立即红灯闪 3 次——判定发生在给主机供电之前，主机电源轨完全不动——闪完后设备回到深度睡眠，把最后的电量留给内置时钟走时。RA2E1260802000–RA2E1260808000 上，开机被拒的红闪要按满 1.5 秒长按并松手后才出现，短按在松手前没有任何提示。&lt;br /&gt;
&lt;br /&gt;
英文版见 [[Photonicat 2 LED Indicator]]。提示音说明见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
以下动画为示意，节奏与实际固件一致（呼吸周期约 6.1 秒、心跳周期 2 秒）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 动画 !! 指示灯 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 黄色呼吸 || 正在充电，系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 黄色常亮 || 正在充电，系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 绿色呼吸 || 已充满（或已达充电上限），系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 绿色常亮 || 已充满（或已达充电上限），系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 绿色心跳脉冲 || 电池供电运行中，电量正常&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 红色持续闪烁 || 电量低（低于 6500 mV，详见下方[[#低电量红灯|低电量红灯]]）&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ 熄灭 || 电池供电待机，系统已关机&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整状态表==&lt;br /&gt;
&lt;br /&gt;
电压门限为固件默认值，可由上位机覆盖。以下为 2S 电池组数值：满电 8280 mV、低电告警 6500 mV、最低开机 6600 mV、强制关机 6300 mV。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 电量 !! 充电器 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 黄色 || 呼吸（开机） || 渐亮 2.8 s / 渐暗 2.8 s / 熄灭 0.5 s，周期约 6.1 s；谷底降到约峰值 1/12 的暗橙，不会出现纯红&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮（关机） || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 绿色 || 呼吸（开机） || 同为约 6.1 s 周期，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮（关机） || 持续，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，DC ≥ 8 V 且无充电电流 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 绿色 || 心跳脉冲 || 周期 2 s&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，正在开机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6600 mV，关机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 持续闪烁 || 亮 1 s / 灭 1 s，60 s 后开始，持续到电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV（有效读数），关机短按一次 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || 亮 1 s / 灭 1 s，&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，首次立即亮（约 0.5 s 防抖）&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，关机时按下任意按键 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || &#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，按下约 0.1 s 即开始（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起；旧固件要按满 1.5 s 长按并松手才闪）。主机电源轨不会上电，闪完后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 拔出充电器且关机 || 未插入 || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ 熄灭&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==服务与过渡状态==&lt;br /&gt;
&lt;br /&gt;
以下状态优先级高于上表。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 状态 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 正在关机 || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 绿色 || 闪烁 || 约亮 0.5 s / 灭 1.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 固件烧录模式 || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 黄色 || 快闪 || 周期约 0.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 复位 / 恢复出厂模式 || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 黄色 || 慢闪 || 周期约 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==低电量红灯==&lt;br /&gt;
&lt;br /&gt;
电量过低时指示灯会变为 🔴 &#039;&#039;&#039;红色闪烁&#039;&#039;&#039;，这是唯一使用红色的场合。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项目 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 触发条件 || 电池电压低于 &#039;&#039;&#039;6500 mV&#039;&#039;&#039;（2S 电池组，约 3.25 V/节），且&#039;&#039;&#039;未插充电器&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁节奏 || 亮 1 秒 / 灭 1 秒&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁次数 || &#039;&#039;&#039;开机状态：&#039;&#039;&#039;持续闪烁，直到电压回升或插上充电器。&#039;&#039;&#039;关机状态&#039;&#039;&#039;（按下任意按键）：只&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，随后设备回到深度睡眠&lt;br /&gt;
|-&lt;br /&gt;
| 开机状态下 || 电压持续低于门限 &#039;&#039;&#039;60 秒&#039;&#039;&#039;后才开始闪&lt;br /&gt;
|-&lt;br /&gt;
| 关机时按任意键 || 电池低于开机门限时，任何按键都会在按下约 0.1 秒时红灯闪 3 次（&#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039; 起），闪完后设备回到深度睡眠。待机唤醒瞬间传感器的 0 mV 预热读数不会触发——固件会先补采一次真实电压再判定（&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 起）&lt;br /&gt;
|-&lt;br /&gt;
| 绿灯会怎样 || 红灯期间绿色心跳会停止，两者不会同时亮&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ 重要提醒&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 系统运行中，红灯会&#039;&#039;&#039;一直闪到电压回升或接入充电器&#039;&#039;&#039;，不会自行停止。（RA2E1260726003 之前的固件只闪 3 次就不再提示。）系统关机时，短按或开机被拒只闪 3 次，随后 MCU 回到待机。&lt;br /&gt;
* 红灯触发点（6500 mV）与&#039;&#039;&#039;强制关机点（6300 mV）只差 200 mV&#039;&#039;&#039;，在 2S 锂电的放电末端属于很陡的一段，看到红灯应尽快接入充电器。&lt;br /&gt;
* 判据是&#039;&#039;&#039;电压不是百分比&#039;&#039;&#039;：大负载下电压会被拉低，可能在剩余电量还不算太少时就提前告警；负载减轻后电压回升，告警也会随之消失。&lt;br /&gt;
&lt;br /&gt;
==充电上限==&lt;br /&gt;
&lt;br /&gt;
若设置了充电上限（例如 80 %），电量达到上限后会断开充电，充电电流归零，设备据此按“已充满”处理并显示 🟢 &#039;&#039;&#039;绿色&#039;&#039;&#039;。此后由电池给负载供电并缓慢放电，低于恢复门限后重新开始充电，指示灯回到 🟠 黄色。每次切换约有 10 秒延迟。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 绿色呼吸峰值 25 % 占空、绿色常亮 50 %，所以绿色呼吸比常亮更暗；橙色呼吸峰值与橙色常亮相同（红 60 % / 绿 24 %）。&lt;br /&gt;
* 🔴 红色仅用于低电量提示：系统运行中持续闪烁直到电压回升或接入充电器；系统关机时只闪 3 次。&lt;br /&gt;
* 指示灯可通过上位机协议整体关闭，关闭后所有状态均不亮灯。&lt;br /&gt;
* 指示灯依据的电量是怎么算出来的，见 [[Photonicat 2 SOC 计算]]。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1063</id>
		<title>Photonicat 2 LED Indicator</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1063"/>
		<updated>2026-08-08T12:34:55Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260808001: flat-pack refusal red x3 now at press time (~0.1s), before RK rail; deep sleep after&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; has a single two-colour indicator LED (red + green). Yellow/orange is produced by lighting both colours together; there is no blue.&lt;br /&gt;
&lt;br /&gt;
The indicator follows a MacBook-style scheme:&lt;br /&gt;
* &#039;&#039;&#039;Colour tells you the charge state&#039;&#039;&#039; — 🟠 yellow = charging, 🟢 green = charged.&lt;br /&gt;
* &#039;&#039;&#039;Motion tells you the machine state&#039;&#039;&#039; — breathing = system running, steady = system off.&lt;br /&gt;
&lt;br /&gt;
Applies to firmware &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; and later. Earlier firmware did not distinguish system on/off while charging or charged.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; the charging orange is warmer (R60 %/G24 % instead of R55 %/G35 %), the breath fades only to a dim-orange floor (≈1/12 of peak) before the valley off — on earlier firmware the dim ends of each breath cycle could look pure red — and the valley off hold is 0.5 s instead of 0.24 s (cycle ≈6.1 s).&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039;: trying to power on with a flat or too-low pack flashes red &#039;&#039;&#039;three times&#039;&#039;&#039; immediately (earlier firmware showed nothing, so a flat device looked bricked), and a short press while off with a low pack shows the same three flashes. Continuous red flashing is only used while the system is running. The power-button long press is now 1.5 s.&lt;br /&gt;
&lt;br /&gt;
Fixed in &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;: on RA2E1260802000–RA2E1260802001 a short press while the device was off in standby could flash red three times &#039;&#039;&#039;even with a full battery&#039;&#039;&#039; — the voltage sensor briefly reads 0 mV while waking from standby and this was miscounted as low battery. Red now requires a genuine low-voltage reading.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;: with the system off and the battery below the minimum boot voltage (6600 mV), &#039;&#039;&#039;any&#039;&#039;&#039; press of the power button answers with the three red flashes right away — about 0.1 s into the press, before the system power rail is touched — and the device then drops back into deep sleep to preserve the last battery reserve for the built-in clock. On RA2E1260802000–RA2E1260808000 the refused-boot flashes only appeared after holding the full 1.5 s long press and releasing; a shorter press showed nothing until release.&lt;br /&gt;
&lt;br /&gt;
中文版见 [[Photonicat 2 LED 指示灯]]. For buzzer tones see [[Photonicat 2 Sound Guide]].&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
The animations below are illustrative; their timing matches the firmware (≈6.1 s breathing cycle, 2 s heartbeat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Animation !! Indicator !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 Yellow, breathing || Charging, system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 Yellow, steady || Charging, system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 Green, breathing || Fully charged (or at charge limit), system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 Green, steady || Fully charged (or at charge limit), system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 Green, heartbeat pulse || Running on battery, charge level normal&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 Red, flashing || Low battery (below 6500 mV — see [[#Low battery red light|Low battery red light]])&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ Off || Idle on battery, system off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full state table==&lt;br /&gt;
&lt;br /&gt;
Battery thresholds are firmware defaults and can be overridden by the host. Values are for the 2S pack: full 8280 mV, low warning 6500 mV, minimum boot 6600 mV, hard shutdown 6300 mV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Power level !! Charger !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 Yellow || Breathing (system on) || 2.8 s up / 2.8 s down / 0.5 s off, ≈6.1 s cycle; fades to a dim-orange floor (≈peak/12), never pure red&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady (system off) || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 Green || Breathing (system on) || Same ≈6.1 s cycle, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady (system off) || Constant, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, DC ≥ 8 V, no charge current || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system on || None || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 Green || Heartbeat pulse || 2 s period&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system starting || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6600 mV, system off || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, system on || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Continuous flashing || 1 s on / 1 s off, begins after 60 s, until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV (valid reading), short press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || 1 s on / 1 s off, &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash immediate (0.5 s debounce)&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, any power-button press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash ≈0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;; earlier firmware flashed only after releasing a full 1.5 s long press). The system power rail is never touched; the device returns to deep sleep afterwards&lt;br /&gt;
|-&lt;br /&gt;
| Charger removed, system off || None || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Service and transitional states==&lt;br /&gt;
&lt;br /&gt;
These override the states above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Shutting down || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 Green || Blink || ≈0.5 s on / 1.5 s off&lt;br /&gt;
|-&lt;br /&gt;
| Firmware download mode || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 Yellow || Fast blink || ≈0.5 s period&lt;br /&gt;
|-&lt;br /&gt;
| Reset / factory restore mode || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 Yellow || Slow blink || ≈1 s period&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Low battery red light==&lt;br /&gt;
&lt;br /&gt;
When the battery runs low the indicator turns 🔴 &#039;&#039;&#039;flashing red&#039;&#039;&#039;. This is the only situation in which red is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Battery below &#039;&#039;&#039;6500 mV&#039;&#039;&#039; (2S pack, about 3.25 V per cell) with &#039;&#039;&#039;no charger connected&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm || 1 second on / 1 second off&lt;br /&gt;
|-&lt;br /&gt;
| Repeats || &#039;&#039;&#039;System running:&#039;&#039;&#039; flashes continuously until the voltage recovers or a charger is connected. &#039;&#039;&#039;System off&#039;&#039;&#039; (any power-button press): exactly &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, then the device goes back to deep sleep&lt;br /&gt;
|-&lt;br /&gt;
| While running || Starts only after the voltage has stayed below the threshold for &#039;&#039;&#039;60 seconds&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Any press while off || With the battery below the boot threshold, any press of the power button flashes red three times, starting about 0.1 s into the press (since &#039;&#039;&#039;RA2E1260808001&#039;&#039;&#039;); the device then returns to deep sleep. A 0 mV sensor warm-up reading right after standby wake does not count — the firmware takes a fresh voltage sample before deciding (since &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Effect on green || The green heartbeat stops while red is active; the two never show together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ Important&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* While the system is running, the red warning &#039;&#039;&#039;keeps flashing until the voltage recovers or a charger is connected&#039;&#039;&#039;; it does not stop on its own. (Firmware before RA2E1260726003 flashed only 3 times and then went quiet.) While the system is off, short press and refused power-up flash exactly 3 times so the MCU can return to standby.&lt;br /&gt;
* The red threshold (6500 mV) is only &#039;&#039;&#039;200 mV above the hard shutdown point (6300 mV)&#039;&#039;&#039;. That is a very steep part of the 2S li-ion discharge curve, so connect a charger promptly once you see red.&lt;br /&gt;
* The trigger is &#039;&#039;&#039;voltage, not a percentage&#039;&#039;&#039;. Under heavy load the voltage sags and the warning can appear while a useful charge remains; when the load drops the voltage recovers and the warning stops.&lt;br /&gt;
&lt;br /&gt;
==Charge limit==&lt;br /&gt;
&lt;br /&gt;
If a charge limit is configured (for example 80 %), the charger is switched off once the pack reaches it. Charge current drops to zero, so the device treats this as fully charged and shows 🟢 &#039;&#039;&#039;green&#039;&#039;&#039;. The pack then powers the load and slowly discharges until it falls below the resume threshold, at which point charging restarts and the indicator returns to 🟠 yellow. Each transition is delayed by about 10 seconds.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Green breathing peaks at 25 % duty while steady green is 50 %, so breathing green looks dimmer than steady green. Orange breathing peaks at the same R60 %/G24 % mix as steady orange.&lt;br /&gt;
* 🔴 Red is only ever used for low battery. While the system is running it keeps flashing until the voltage recovers or a charger is connected; while off it flashes exactly three times.&lt;br /&gt;
* The indicator can be disabled entirely through the host protocol, in which case it stays off in all states.&lt;br /&gt;
* For how the charge level behind these indications is computed, see [[Photonicat 2 SOC Calculation]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E6%8F%90%E7%A4%BA%E9%9F%B3%E8%AF%B4%E6%98%8E&amp;diff=1062</id>
		<title>Photonicat 2 提示音说明</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E6%8F%90%E7%A4%BA%E9%9F%B3%E8%AF%B4%E6%98%8E&amp;diff=1062"/>
		<updated>2026-08-05T12:36:57Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260805003: 充电电流提示音每次插入只响一声 (issue #8)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 用一颗蜂鸣器提示工作状态。本页列出全部提示音的音高、时长与触发条件，并可直接在线试听。&lt;br /&gt;
&lt;br /&gt;
指示灯说明见 [[Photonicat 2 LED 指示灯]]。English: [[Photonicat 2 Sound Guide]]。&lt;br /&gt;
&lt;br /&gt;
蜂鸣器可通过上位机协议关闭（与指示灯共用一个开关设置，可分别控制声音与灯光）。关闭后所有提示音均不发声。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 提示音 !! 听感 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| 🔔 两声短促上行 || 嘀-嘀 || 开机&lt;br /&gt;
|-&lt;br /&gt;
| 🔕 三声下行 || 嘀-嘟-哆 || 关机&lt;br /&gt;
|-&lt;br /&gt;
| 🔌 两声上行 || 嘀-嘀（低起） || 插入充电器&lt;br /&gt;
|-&lt;br /&gt;
| ⚡ 明亮三连音 || 嘀-嘀-嘀（上行） || 正在给外接设备供电&lt;br /&gt;
|-&lt;br /&gt;
| 🔊 单声短促 || 嘀 || 充电电流达到标准&lt;br /&gt;
|-&lt;br /&gt;
| 🚨 四组高低交替 || 嘀-嘟 ×4 || 温度过高，已关闭主机&lt;br /&gt;
|-&lt;br /&gt;
| 🛠 高低交替两轮 || 嘟-嘀 ×2 || 进入固件烧录模式&lt;br /&gt;
|-&lt;br /&gt;
| ♻ 八声高低交替 || 长串高低音 || 进入恢复出厂设置模式&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 上行琶音 3 秒 || 由低到高一串 || 数据擦除成功，即将重启&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 下行低音 2 秒 || 由高到低，低沉 || 数据擦除失败，即将重启&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 明亮上行 2 秒 || 短促上行动机 || 固件升级成功，即将重启&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整提示音表==&lt;br /&gt;
&lt;br /&gt;
频率单位 Hz，时长单位 ms。“静音”表示该步不发声只等待。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 提示音 !! 试听 !! 序列（频率 Hz / 时长 ms） !! 总时长 !! 触发条件&lt;br /&gt;
|-&lt;br /&gt;
| 开机 || [[File:Pcat2-boot.mp3|noicon]] || 1300/75 → 1500/75 || 0.15 s || 长按电源键开机&lt;br /&gt;
|-&lt;br /&gt;
| 关机 || [[File:Pcat2-shutdown.mp3|noicon]] || 2000/150 → 1500/150 → 1000/150 || 0.45 s || 长按电源键关机，或低电量自动关机&lt;br /&gt;
|-&lt;br /&gt;
| 插入充电器 || [[File:Pcat2-charger-in.mp3|noicon]] || 432/150 → 528/75 || 0.23 s || 检测到充电器接入&lt;br /&gt;
|-&lt;br /&gt;
| 对外供电 || [[File:Pcat2-powering-device.mp3|noicon]] || 523/55 → 659/55 → 784/80 || 0.19 s || DC 在位且电池在放电，即正在给外接设备供电（需持续 4 秒才提示）&lt;br /&gt;
|-&lt;br /&gt;
| 充电电流达标 || [[File:Pcat2-charge-current-ok.mp3|noicon]] || 2500/100 || 0.10 s || 充电电流达到设定标准。&#039;&#039;&#039;每次插入充电器只响一声&#039;&#039;&#039;（拔掉后重新武装）；&#039;&#039;&#039;RA2E1260805003&#039;&#039;&#039; 之前的固件在每个充电开始沿都响，弱充电器电流在门限附近徘徊时会反复响&lt;br /&gt;
|-&lt;br /&gt;
| 温度过高 || [[File:Pcat2-over-temperature.mp3|noicon]] || (2500/100 → 500/100) ×4 || 0.80 s || 温度超过门限，已关闭主机&lt;br /&gt;
|-&lt;br /&gt;
| 烧录模式 || [[File:Pcat2-download-mode.mp3|noicon]] || (3000/300 → 2000/300) ×2 || 1.20 s || 关机状态下短按 3 下再长按 10 秒以上&lt;br /&gt;
|-&lt;br /&gt;
| 恢复出厂 || [[File:Pcat2-factory-reset.mp3|noicon]] || 4000/300 → 1000/300 → 2000/300 → 3000/300 → 2000/300 → 4000/300 → 3000/300 → 1000/300 || 2.40 s || 关机状态下短按 1 下再长按 17 秒以上&lt;br /&gt;
|-&lt;br /&gt;
| MCU 上电（新 bootloader） || [[File:Pcat2-mcu-boot-new.mp3|noicon]] || 4000/30 → 静音 1000 → 4000/200 || 1.23 s || MCU 上电自检&lt;br /&gt;
|-&lt;br /&gt;
| MCU 上电（旧 bootloader） || [[File:Pcat2-mcu-boot-old.mp3|noicon]] || 4000/200 || 0.20 s || MCU 上电自检&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==重启前提示音==&lt;br /&gt;
&lt;br /&gt;
以下三段为&#039;&#039;&#039;阻塞播放&#039;&#039;&#039;：播完整段才会执行复位，因此时长即为复位前的等待时间。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 提示音 !! 试听 !! 序列（频率 Hz / 时长 ms） !! 总时长 !! 触发条件&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 擦除成功 || [[File:Pcat2-wipe-ok.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-wipe-ok.mid|MIDI]] || 523/160 → 659/160 → 784/160 → 1047/160 → 1319/160 → 1568/160 → 2093/258 → 静音 74 → 1568/135 → 2093/135 → 2637/429 → 静音 92 → 2093/184 → 2637/184 → 3136/552 || 3.00 s || 出厂数据擦除成功，随即重启&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 擦除失败 || [[File:Pcat2-wipe-fail.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-wipe-fail.mid|MIDI]] || 440/357 → 静音 51 → 415/357 → 静音 51 → 392/357 → 静音 51 → 330/765 || 1.99 s || 出厂数据擦除失败，随即重启&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 升级成功 || [[File:Pcat2-update-ok.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-update-ok.mid|MIDI]] || 784/170 → 1047/170 → 1319/170 → 1568/382 → 静音 102 → 1319/170 → 1568/170 → 2093/638 || 1.97 s || MCU 固件升级成功，随即重启&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注：&#039;&#039;&#039;自固件 RA2E1260726002 起，这三段整体加快（擦除成功由 4.89 s 压到 3.00 s，另两段各加快约 15 %），音型不变，只是节奏更紧凑，重启等待更短。&lt;br /&gt;
&lt;br /&gt;
==关于试听文件==&lt;br /&gt;
&lt;br /&gt;
试听用的 mp3 由固件里的实际音符表（频率+时长）直接合成，采用方波，与蜂鸣器的听感一致；实际设备上的音色会因蜂鸣器与腔体而略有差别。三段重启前旋律另附 MIDI 文件，方便二次编辑。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 提示音与指示灯可分别开关：声音关闭后指示灯仍正常工作，反之亦然。&lt;br /&gt;
* “对外供电”提示需放电条件连续保持 4 秒才触发，避免插拔充电器的瞬态误报。&lt;br /&gt;
* 重启前的三段提示音播放期间会正常喂看门狗，不会因为播放时间长而触发意外复位。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_Sound_Guide&amp;diff=1061</id>
		<title>Photonicat 2 Sound Guide</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_Sound_Guide&amp;diff=1061"/>
		<updated>2026-08-05T12:36:56Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260805003: charge-current beep once per charger insertion (issue #8)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; uses a single buzzer to signal system events. This page lists every tone, its pitch and duration, and what triggers it, and you can play each one here.&lt;br /&gt;
&lt;br /&gt;
For the indicator LED see [[Photonicat 2 LED Indicator]]. 中文版见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
The buzzer can be disabled through the host protocol. Sound and the indicator LED are controlled separately, so either can be silenced without affecting the other.&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sound !! What you hear !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 🔔 Two short rising beeps || beep-beep || Power on&lt;br /&gt;
|-&lt;br /&gt;
| 🔕 Three falling beeps || beep-boop-bop || Power off&lt;br /&gt;
|-&lt;br /&gt;
| 🔌 Two rising beeps, low start || beep-beep || Charger connected&lt;br /&gt;
|-&lt;br /&gt;
| ⚡ Bright three-note run || beep-beep-beep rising || Powering an external device&lt;br /&gt;
|-&lt;br /&gt;
| 🔊 Single short beep || beep || Charge current reached target&lt;br /&gt;
|-&lt;br /&gt;
| 🚨 Four high/low pairs || beep-boop ×4 || Over temperature, system shut down&lt;br /&gt;
|-&lt;br /&gt;
| 🛠 Two high/low rounds || boop-beep ×2 || Entering firmware download mode&lt;br /&gt;
|-&lt;br /&gt;
| ♻ Eight alternating tones || long high/low run || Entering factory reset mode&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Rising arpeggio, 3 s || low to high run || Data wipe succeeded, restarting&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Falling low tones, 2 s || high to low, sombre || Data wipe failed, restarting&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Bright rising motif, 2 s || short rising figure || Firmware update succeeded, restarting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full tone table==&lt;br /&gt;
&lt;br /&gt;
Frequencies in Hz, durations in ms. &amp;quot;silent&amp;quot; means the step waits without sounding.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sound !! Listen !! Sequence (Hz / ms) !! Total !! Trigger&lt;br /&gt;
|-&lt;br /&gt;
| Power on || [[File:Pcat2-boot.mp3|noicon]] || 1300/75 → 1500/75 || 0.15 s || Long press power button to start&lt;br /&gt;
|-&lt;br /&gt;
| Power off || [[File:Pcat2-shutdown.mp3|noicon]] || 2000/150 → 1500/150 → 1000/150 || 0.45 s || Long press to shut down, or automatic low-battery shutdown&lt;br /&gt;
|-&lt;br /&gt;
| Charger connected || [[File:Pcat2-charger-in.mp3|noicon]] || 432/150 → 528/75 || 0.23 s || Charger detected&lt;br /&gt;
|-&lt;br /&gt;
| Powering a device || [[File:Pcat2-powering-device.mp3|noicon]] || 523/55 → 659/55 → 784/80 || 0.19 s || DC present and battery discharging, i.e. supplying an external device (must persist 4 s before it sounds)&lt;br /&gt;
|-&lt;br /&gt;
| Charge current reached || [[File:Pcat2-charge-current-ok.mp3|noicon]] || 2500/100 || 0.10 s || Charge current met the configured threshold. Sounds &#039;&#039;&#039;once per charger insertion&#039;&#039;&#039; (re-armed by unplugging); before &#039;&#039;&#039;RA2E1260805003&#039;&#039;&#039; it fired on every charge-start edge, so a weak charger hovering around the threshold beeped repeatedly&lt;br /&gt;
|-&lt;br /&gt;
| Over temperature || [[File:Pcat2-over-temperature.mp3|noicon]] || (2500/100 → 500/100) ×4 || 0.80 s || Temperature above limit, system powered down&lt;br /&gt;
|-&lt;br /&gt;
| Download mode || [[File:Pcat2-download-mode.mp3|noicon]] || (3000/300 → 2000/300) ×2 || 1.20 s || From off: 3 short presses, then hold 10 s or more&lt;br /&gt;
|-&lt;br /&gt;
| Factory reset || [[File:Pcat2-factory-reset.mp3|noicon]] || 4000/300 → 1000/300 → 2000/300 → 3000/300 → 2000/300 → 4000/300 → 3000/300 → 1000/300 || 2.40 s || From off: 1 short press, then hold 17 s or more&lt;br /&gt;
|-&lt;br /&gt;
| MCU power-up (new bootloader) || [[File:Pcat2-mcu-boot-new.mp3|noicon]] || 4000/30 → silent 1000 → 4000/200 || 1.23 s || MCU power-on self test&lt;br /&gt;
|-&lt;br /&gt;
| MCU power-up (old bootloader) || [[File:Pcat2-mcu-boot-old.mp3|noicon]] || 4000/200 || 0.20 s || MCU power-on self test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-restart tones==&lt;br /&gt;
&lt;br /&gt;
These three play &#039;&#039;&#039;synchronously&#039;&#039;&#039;: the device only resets once the tone has finished, so the duration is exactly how long you wait before the restart.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sound !! Listen !! Sequence (Hz / ms) !! Total !! Trigger&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Wipe succeeded || [[File:Pcat2-wipe-ok.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-wipe-ok.mid|MIDI]] || 523/160 → 659/160 → 784/160 → 1047/160 → 1319/160 → 1568/160 → 2093/258 → silent 74 → 1568/135 → 2093/135 → 2637/429 → silent 92 → 2093/184 → 2637/184 → 3136/552 || 3.00 s || Factory data wipe succeeded, restarting&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Wipe failed || [[File:Pcat2-wipe-fail.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-wipe-fail.mid|MIDI]] || 440/357 → silent 51 → 415/357 → silent 51 → 392/357 → silent 51 → 330/765 || 1.99 s || Factory data wipe failed, restarting&lt;br /&gt;
|-&lt;br /&gt;
| 🎵 Update succeeded || [[File:Pcat2-update-ok.mp3|noicon]]&amp;lt;br/&amp;gt;[[:File:Pcat2-update-ok.mid|MIDI]] || 784/170 → 1047/170 → 1319/170 → 1568/382 → silent 102 → 1319/170 → 1568/170 → 2093/638 || 1.97 s || MCU firmware update succeeded, restarting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; from firmware RA2E1260726002 these three play faster (wipe-succeeded cut from 4.89 s to 3.00 s, the other two by about 15 %). The note sequences are unchanged — only the tempo — so the wait before restart is shorter.&lt;br /&gt;
&lt;br /&gt;
==About the samples==&lt;br /&gt;
&lt;br /&gt;
The mp3 samples are synthesised directly from the note tables in the firmware (frequency + duration) using square waves, which matches how the piezo buzzer sounds. The timbre on a real device will differ slightly depending on the buzzer and enclosure. The three pre-restart melodies also have MIDI files attached for easier re-editing.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Sound and the indicator LED have independent enable settings; silencing one leaves the other working.&lt;br /&gt;
* The &amp;quot;powering a device&amp;quot; tone requires the discharge condition to hold for 4 continuous seconds, so plugging and unplugging a charger will not trigger it spuriously.&lt;br /&gt;
* The watchdog is serviced normally while the pre-restart tones play, so a longer tone cannot cause an unexpected reset.&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1060</id>
		<title>Photonicat 2 LED 指示灯</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1060"/>
		<updated>2026-08-05T09:40:55Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260805000: 修复待机唤醒后满电短按误闪红灯x3 (issue #53)；补充 RA2E1260802000 红灯闪3次说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 只有一颗双色指示灯（红 + 绿）。黄色（橙色）由红绿同时点亮合成，没有蓝色。&lt;br /&gt;
&lt;br /&gt;
指示灯采用 MacBook 式的表示方式：&lt;br /&gt;
* &#039;&#039;&#039;颜色表示充电状态&#039;&#039;&#039; —— 🟠 黄色 = 正在充电，🟢 绿色 = 已充满。&lt;br /&gt;
* &#039;&#039;&#039;呼吸与否表示主机状态&#039;&#039;&#039; —— 呼吸 = 系统运行中，常亮 = 系统已关机。&lt;br /&gt;
&lt;br /&gt;
适用于固件 &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; 及之后版本。较早的固件在充电和充满时不区分开关机状态。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; 起：充电橙色更暖（红 60 % / 绿 24 %，原为 55 %/35 %）；呼吸只降到约峰值 1/12 的暗橙再进入谷底熄灭——旧固件呼吸首尾极暗处会显得像纯红——谷底熄灭保持由 0.24 s 加长到 0.5 s（周期约 6.1 s）。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039; 起：电池耗尽或电压过低时尝试开机，会立刻红灯&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;（更早的固件此时什么都不显示，空电设备看起来像变砖）；关机状态下短按遇到低电同样闪 3 次。持续红闪仅在系统运行中使用。长按开关机时长改为 1.5 秒。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 修复：RA2E1260802000–RA2E1260802001 存在缺陷——设备关机待机时短按电源键，&#039;&#039;&#039;即使电池满电&#039;&#039;&#039;也可能红灯闪 3 次。原因是待机唤醒瞬间电压传感器短暂读到 0 mV，被误判为低电量。现在只有真实的低电压读数才会触发红灯。&lt;br /&gt;
&lt;br /&gt;
英文版见 [[Photonicat 2 LED Indicator]]。提示音说明见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
以下动画为示意，节奏与实际固件一致（呼吸周期约 6.1 秒、心跳周期 2 秒）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 动画 !! 指示灯 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 黄色呼吸 || 正在充电，系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 黄色常亮 || 正在充电，系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 绿色呼吸 || 已充满（或已达充电上限），系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 绿色常亮 || 已充满（或已达充电上限），系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 绿色心跳脉冲 || 电池供电运行中，电量正常&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 红色持续闪烁 || 电量低（低于 6500 mV，详见下方[[#低电量红灯|低电量红灯]]）&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ 熄灭 || 电池供电待机，系统已关机&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整状态表==&lt;br /&gt;
&lt;br /&gt;
电压门限为固件默认值，可由上位机覆盖。以下为 2S 电池组数值：满电 8280 mV、低电告警 6500 mV、最低开机 6600 mV、强制关机 6300 mV。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 电量 !! 充电器 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 黄色 || 呼吸（开机） || 渐亮 2.8 s / 渐暗 2.8 s / 熄灭 0.5 s，周期约 6.1 s；谷底降到约峰值 1/12 的暗橙，不会出现纯红&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮（关机） || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 绿色 || 呼吸（开机） || 同为约 6.1 s 周期，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮（关机） || 持续，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，DC ≥ 8 V 且无充电电流 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 绿色 || 心跳脉冲 || 周期 2 s&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，正在开机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6600 mV，关机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 持续闪烁 || 亮 1 s / 灭 1 s，60 s 后开始，持续到电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV（有效读数），关机短按一次 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || 亮 1 s / 灭 1 s，&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，首次立即亮（约 0.5 s 防抖）&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，长按开机被拒 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || &#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，首次立即亮&lt;br /&gt;
|-&lt;br /&gt;
| 拔出充电器且关机 || 未插入 || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ 熄灭&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==服务与过渡状态==&lt;br /&gt;
&lt;br /&gt;
以下状态优先级高于上表。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 状态 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 正在关机 || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 绿色 || 闪烁 || 约亮 0.5 s / 灭 1.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 固件烧录模式 || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 黄色 || 快闪 || 周期约 0.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 复位 / 恢复出厂模式 || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 黄色 || 慢闪 || 周期约 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==低电量红灯==&lt;br /&gt;
&lt;br /&gt;
电量过低时指示灯会变为 🔴 &#039;&#039;&#039;红色闪烁&#039;&#039;&#039;，这是唯一使用红色的场合。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项目 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 触发条件 || 电池电压低于 &#039;&#039;&#039;6500 mV&#039;&#039;&#039;（2S 电池组，约 3.25 V/节），且&#039;&#039;&#039;未插充电器&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁节奏 || 亮 1 秒 / 灭 1 秒&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁次数 || &#039;&#039;&#039;开机状态：&#039;&#039;&#039;持续闪烁，直到电压回升或插上充电器。&#039;&#039;&#039;关机状态&#039;&#039;&#039;（短按或开机被拒）：只&#039;&#039;&#039;闪 3 次&#039;&#039;&#039;，随后设备回到待机&lt;br /&gt;
|-&lt;br /&gt;
| 开机状态下 || 电压持续低于门限 &#039;&#039;&#039;60 秒&#039;&#039;&#039;后才开始闪&lt;br /&gt;
|-&lt;br /&gt;
| 短按电源键 || 电压低时短按一下立即红灯闪 3 次（约 0.5 秒防抖）。待机唤醒瞬间传感器的 0 mV 预热读数不会触发（&#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039; 起）&lt;br /&gt;
|-&lt;br /&gt;
| 绿灯会怎样 || 红灯期间绿色心跳会停止，两者不会同时亮&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ 重要提醒&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 系统运行中，红灯会&#039;&#039;&#039;一直闪到电压回升或接入充电器&#039;&#039;&#039;，不会自行停止。（RA2E1260726003 之前的固件只闪 3 次就不再提示。）系统关机时，短按或开机被拒只闪 3 次，随后 MCU 回到待机。&lt;br /&gt;
* 红灯触发点（6500 mV）与&#039;&#039;&#039;强制关机点（6300 mV）只差 200 mV&#039;&#039;&#039;，在 2S 锂电的放电末端属于很陡的一段，看到红灯应尽快接入充电器。&lt;br /&gt;
* 判据是&#039;&#039;&#039;电压不是百分比&#039;&#039;&#039;：大负载下电压会被拉低，可能在剩余电量还不算太少时就提前告警；负载减轻后电压回升，告警也会随之消失。&lt;br /&gt;
&lt;br /&gt;
==充电上限==&lt;br /&gt;
&lt;br /&gt;
若设置了充电上限（例如 80 %），电量达到上限后会断开充电，充电电流归零，设备据此按“已充满”处理并显示 🟢 &#039;&#039;&#039;绿色&#039;&#039;&#039;。此后由电池给负载供电并缓慢放电，低于恢复门限后重新开始充电，指示灯回到 🟠 黄色。每次切换约有 10 秒延迟。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 绿色呼吸峰值 25 % 占空、绿色常亮 50 %，所以绿色呼吸比常亮更暗；橙色呼吸峰值与橙色常亮相同（红 60 % / 绿 24 %）。&lt;br /&gt;
* 🔴 红色仅用于低电量提示：系统运行中持续闪烁直到电压回升或接入充电器；系统关机时只闪 3 次。&lt;br /&gt;
* 指示灯可通过上位机协议整体关闭，关闭后所有状态均不亮灯。&lt;br /&gt;
* 指示灯依据的电量是怎么算出来的，见 [[Photonicat 2 SOC 计算]]。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1059</id>
		<title>Photonicat 2 LED Indicator</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1059"/>
		<updated>2026-08-05T09:40:54Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260805000: fix false red x3 on short press at full battery after standby wake (issue #53); document RA2E1260802000 red x3 behaviour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; has a single two-colour indicator LED (red + green). Yellow/orange is produced by lighting both colours together; there is no blue.&lt;br /&gt;
&lt;br /&gt;
The indicator follows a MacBook-style scheme:&lt;br /&gt;
* &#039;&#039;&#039;Colour tells you the charge state&#039;&#039;&#039; — 🟠 yellow = charging, 🟢 green = charged.&lt;br /&gt;
* &#039;&#039;&#039;Motion tells you the machine state&#039;&#039;&#039; — breathing = system running, steady = system off.&lt;br /&gt;
&lt;br /&gt;
Applies to firmware &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; and later. Earlier firmware did not distinguish system on/off while charging or charged.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; the charging orange is warmer (R60 %/G24 % instead of R55 %/G35 %), the breath fades only to a dim-orange floor (≈1/12 of peak) before the valley off — on earlier firmware the dim ends of each breath cycle could look pure red — and the valley off hold is 0.5 s instead of 0.24 s (cycle ≈6.1 s).&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260802000&#039;&#039;&#039;: trying to power on with a flat or too-low pack flashes red &#039;&#039;&#039;three times&#039;&#039;&#039; immediately (earlier firmware showed nothing, so a flat device looked bricked), and a short press while off with a low pack shows the same three flashes. Continuous red flashing is only used while the system is running. The power-button long press is now 1.5 s.&lt;br /&gt;
&lt;br /&gt;
Fixed in &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;: on RA2E1260802000–RA2E1260802001 a short press while the device was off in standby could flash red three times &#039;&#039;&#039;even with a full battery&#039;&#039;&#039; — the voltage sensor briefly reads 0 mV while waking from standby and this was miscounted as low battery. Red now requires a genuine low-voltage reading.&lt;br /&gt;
&lt;br /&gt;
中文版见 [[Photonicat 2 LED 指示灯]]. For buzzer tones see [[Photonicat 2 Sound Guide]].&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
The animations below are illustrative; their timing matches the firmware (≈6.1 s breathing cycle, 2 s heartbeat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Animation !! Indicator !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 Yellow, breathing || Charging, system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 Yellow, steady || Charging, system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 Green, breathing || Fully charged (or at charge limit), system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 Green, steady || Fully charged (or at charge limit), system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 Green, heartbeat pulse || Running on battery, charge level normal&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 Red, flashing || Low battery (below 6500 mV — see [[#Low battery red light|Low battery red light]])&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ Off || Idle on battery, system off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full state table==&lt;br /&gt;
&lt;br /&gt;
Battery thresholds are firmware defaults and can be overridden by the host. Values are for the 2S pack: full 8280 mV, low warning 6500 mV, minimum boot 6600 mV, hard shutdown 6300 mV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Power level !! Charger !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 Yellow || Breathing (system on) || 2.8 s up / 2.8 s down / 0.5 s off, ≈6.1 s cycle; fades to a dim-orange floor (≈peak/12), never pure red&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady (system off) || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 Green || Breathing (system on) || Same ≈6.1 s cycle, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady (system off) || Constant, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, DC ≥ 8 V, no charge current || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system on || None || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 Green || Heartbeat pulse || 2 s period&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system starting || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6600 mV, system off || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, system on || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Continuous flashing || 1 s on / 1 s off, begins after 60 s, until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV (valid reading), short press, system off || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || 1 s on / 1 s off, &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash immediate (0.5 s debounce)&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, long-press power-up refused || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, first flash immediate&lt;br /&gt;
|-&lt;br /&gt;
| Charger removed, system off || None || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Service and transitional states==&lt;br /&gt;
&lt;br /&gt;
These override the states above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Shutting down || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 Green || Blink || ≈0.5 s on / 1.5 s off&lt;br /&gt;
|-&lt;br /&gt;
| Firmware download mode || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 Yellow || Fast blink || ≈0.5 s period&lt;br /&gt;
|-&lt;br /&gt;
| Reset / factory restore mode || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 Yellow || Slow blink || ≈1 s period&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Low battery red light==&lt;br /&gt;
&lt;br /&gt;
When the battery runs low the indicator turns 🔴 &#039;&#039;&#039;flashing red&#039;&#039;&#039;. This is the only situation in which red is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Battery below &#039;&#039;&#039;6500 mV&#039;&#039;&#039; (2S pack, about 3.25 V per cell) with &#039;&#039;&#039;no charger connected&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm || 1 second on / 1 second off&lt;br /&gt;
|-&lt;br /&gt;
| Repeats || &#039;&#039;&#039;System running:&#039;&#039;&#039; flashes continuously until the voltage recovers or a charger is connected. &#039;&#039;&#039;System off&#039;&#039;&#039; (short press or refused power-up): exactly &#039;&#039;&#039;3 flashes&#039;&#039;&#039;, then the device goes back to standby&lt;br /&gt;
|-&lt;br /&gt;
| While running || Starts only after the voltage has stayed below the threshold for &#039;&#039;&#039;60 seconds&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Short press || With a low battery, a short press of the power button flashes red three times immediately (after a 0.5 s debounce). A 0 mV sensor warm-up reading right after standby wake does not count (since &#039;&#039;&#039;RA2E1260805000&#039;&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Effect on green || The green heartbeat stops while red is active; the two never show together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ Important&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* While the system is running, the red warning &#039;&#039;&#039;keeps flashing until the voltage recovers or a charger is connected&#039;&#039;&#039;; it does not stop on its own. (Firmware before RA2E1260726003 flashed only 3 times and then went quiet.) While the system is off, short press and refused power-up flash exactly 3 times so the MCU can return to standby.&lt;br /&gt;
* The red threshold (6500 mV) is only &#039;&#039;&#039;200 mV above the hard shutdown point (6300 mV)&#039;&#039;&#039;. That is a very steep part of the 2S li-ion discharge curve, so connect a charger promptly once you see red.&lt;br /&gt;
* The trigger is &#039;&#039;&#039;voltage, not a percentage&#039;&#039;&#039;. Under heavy load the voltage sags and the warning can appear while a useful charge remains; when the load drops the voltage recovers and the warning stops.&lt;br /&gt;
&lt;br /&gt;
==Charge limit==&lt;br /&gt;
&lt;br /&gt;
If a charge limit is configured (for example 80 %), the charger is switched off once the pack reaches it. Charge current drops to zero, so the device treats this as fully charged and shows 🟢 &#039;&#039;&#039;green&#039;&#039;&#039;. The pack then powers the load and slowly discharges until it falls below the resume threshold, at which point charging restarts and the indicator returns to 🟠 yellow. Each transition is delayed by about 10 seconds.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Green breathing peaks at 25 % duty while steady green is 50 %, so breathing green looks dimmer than steady green. Orange breathing peaks at the same R60 %/G24 % mix as steady orange.&lt;br /&gt;
* 🔴 Red is only ever used for low battery. While the system is running it keeps flashing until the voltage recovers or a charger is connected; while off it flashes exactly three times.&lt;br /&gt;
* The indicator can be disabled entirely through the host protocol, in which case it stays off in all states.&lt;br /&gt;
* For how the charge level behind these indications is computed, see [[Photonicat 2 SOC Calculation]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_Wifi/WWAN/NVME_M2_%E5%85%BC%E5%AE%B9%E6%A8%A1%E5%9D%97&amp;diff=1058</id>
		<title>Photonicat 2 Wifi/WWAN/NVME M2 兼容模块</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_Wifi/WWAN/NVME_M2_%E5%85%BC%E5%AE%B9%E6%A8%A1%E5%9D%97&amp;diff=1058"/>
		<updated>2026-08-04T07:15:30Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​增加电话语音支持列（RM500U/RM500U-CNV/RM500Q 支持，其余不支持）；补充 RM500U-CNV 行&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photonicat 2 的 M.2 插槽使用 &#039;&#039;&#039;USB 3.0&#039;&#039;&#039; 接口，模块以 USB 设备方式工作。&lt;br /&gt;
&lt;br /&gt;
==WWAN 蜂窝模块 (4G/5G)==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 模块 !! 制式 !! 方案 !! GPS/GNSS !! 电话语音 !! 备注&lt;br /&gt;
|-&lt;br /&gt;
| RM500U-CN-AB || 5G || 紫光展锐 Unisoc || ❌ 不支持 || ✅ 支持 || 实测固件无任何 GNSS AT 指令&lt;br /&gt;
|-&lt;br /&gt;
| RM500U-CNV || 5G || 紫光展锐 Unisoc || ❌ 不支持 || ✅ 支持（已实测） || 实测固件无任何 GNSS AT 指令&lt;br /&gt;
|-&lt;br /&gt;
| RM520N-GL-AA || 5G || 高通 Qualcomm || ✅ 支持 || ❌ 不支持 || 与 RM500Q 相同的 AT+QGPS 指令集（GPS 未单独实测）&lt;br /&gt;
|-&lt;br /&gt;
| RM500Q-GL-AB || 5G || 高通 Qualcomm || ✅ 支持（已实测） || ✅ 支持（USB 声卡方式，已实测） || 测试可用，功能可能不全；标准 AT+QGPS 指令集，NMEA 输出&lt;br /&gt;
|-&lt;br /&gt;
| FM350-GL || 5G || 联发科 MediaTek || ❌ 不支持 || ❌ 不支持 || USB 版固件不提供 GNSS 接口（已实测）&lt;br /&gt;
|-&lt;br /&gt;
| EM05-CN-FD || 4G || 高通 Qualcomm || ✅ 支持（已实测） || ❌ 不支持 || 标准 AT+QGPS 指令集，NMEA 输出&lt;br /&gt;
|-&lt;br /&gt;
| EM05-CE-FC || 4G || 高通 Qualcomm || ✅ 支持 || ❌ 不支持 || EM05 系列同指令集（GPS 未单独实测）&lt;br /&gt;
|}&lt;br /&gt;
GPS 定位需外接 GNSS 天线。&lt;br /&gt;
&lt;br /&gt;
==Wifi 模块==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 型号 !! 类别 !! 备注&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7921 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7921K || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7922 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Qualcomm NFA765 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| MediaTek MT7925B || Wifi 7 || 需 &#039;&#039;&#039;2026-06&#039;&#039;&#039; 或更新版本固件&lt;br /&gt;
|-&lt;br /&gt;
| Qualcomm WCN7851 || Wifi 7 || 需 &#039;&#039;&#039;2026-06&#039;&#039;&#039; 或更新版本固件&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==NVME SSD==&lt;br /&gt;
2230基本全系支持。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其他可能支持，或不支持，符合标准接口协议的模块。⚠️注意插拔插需要断开USB-PD供电，以及电池供电。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_Wifi/WWAN/NVME_M2_%E5%85%BC%E5%AE%B9%E6%A8%A1%E5%9D%97&amp;diff=1057</id>
		<title>Photonicat 2 Wifi/WWAN/NVME M2 兼容模块</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_Wifi/WWAN/NVME_M2_%E5%85%BC%E5%AE%B9%E6%A8%A1%E5%9D%97&amp;diff=1057"/>
		<updated>2026-08-04T07:14:38Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​表格化模块列表；标注各模块 GPS/GNSS 支持情况（EM05/RM500Q 实测）；注明 M.2 为 USB 3.0 接口&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photonicat 2 的 M.2 插槽使用 &#039;&#039;&#039;USB 3.0&#039;&#039;&#039; 接口，模块以 USB 设备方式工作。&lt;br /&gt;
&lt;br /&gt;
==WWAN 蜂窝模块 (4G/5G)==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 模块 !! 制式 !! 方案 !! GPS/GNSS !! 备注&lt;br /&gt;
|-&lt;br /&gt;
| RM500U-CN-AB || 5G || 紫光展锐 Unisoc || ❌ 不支持 || 实测固件无任何 GNSS AT 指令；支持语音通话&lt;br /&gt;
|-&lt;br /&gt;
| RM520N-GL-AA || 5G || 高通 Qualcomm || ✅ 支持 || 与 RM500Q 相同的 AT+QGPS 指令集（GPS 未单独实测）&lt;br /&gt;
|-&lt;br /&gt;
| RM500Q-GL-AB || 5G || 高通 Qualcomm || ✅ 支持（已实测） || 测试可用，功能可能不全；标准 AT+QGPS 指令集，NMEA 输出&lt;br /&gt;
|-&lt;br /&gt;
| FM350-GL || 5G || 联发科 MediaTek || ❌ 不支持 || USB 版固件不提供 GNSS 接口（已实测）&lt;br /&gt;
|-&lt;br /&gt;
| EM05-CN-FD || 4G || 高通 Qualcomm || ✅ 支持（已实测） || 标准 AT+QGPS 指令集，NMEA 输出&lt;br /&gt;
|-&lt;br /&gt;
| EM05-CE-FC || 4G || 高通 Qualcomm || ✅ 支持 || EM05 系列同指令集（GPS 未单独实测）&lt;br /&gt;
|}&lt;br /&gt;
GPS 定位需外接 GNSS 天线。&lt;br /&gt;
&lt;br /&gt;
==Wifi 模块==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 型号 !! 类别 !! 备注&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7921 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7921K || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Mediatek MT7922 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| Qualcomm NFA765 || Wifi 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| MediaTek MT7925B || Wifi 7 || 需 &#039;&#039;&#039;2026-06&#039;&#039;&#039; 或更新版本固件&lt;br /&gt;
|-&lt;br /&gt;
| Qualcomm WCN7851 || Wifi 7 || 需 &#039;&#039;&#039;2026-06&#039;&#039;&#039; 或更新版本固件&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==NVME SSD==&lt;br /&gt;
2230基本全系支持。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其他可能支持，或不支持，符合标准接口协议的模块。⚠️注意插拔插需要断开USB-PD供电，以及电池供电。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1051</id>
		<title>Photonicat 2 LED 指示灯</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_%E6%8C%87%E7%A4%BA%E7%81%AF&amp;diff=1051"/>
		<updated>2026-07-31T11:27:40Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260731011: 橙色更暖 R60/G24、呼吸谷底暗橙地板(不再出现纯红)、熄灭保持0.5s/周期6.1s；v3 动图&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;光影猫2&#039;&#039;&#039; 只有一颗双色指示灯（红 + 绿）。黄色（橙色）由红绿同时点亮合成，没有蓝色。&lt;br /&gt;
&lt;br /&gt;
指示灯采用 MacBook 式的表示方式：&lt;br /&gt;
* &#039;&#039;&#039;颜色表示充电状态&#039;&#039;&#039; —— 🟠 黄色 = 正在充电，🟢 绿色 = 已充满。&lt;br /&gt;
* &#039;&#039;&#039;呼吸与否表示主机状态&#039;&#039;&#039; —— 呼吸 = 系统运行中，常亮 = 系统已关机。&lt;br /&gt;
&lt;br /&gt;
适用于固件 &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; 及之后版本。较早的固件在充电和充满时不区分开关机状态。&lt;br /&gt;
&lt;br /&gt;
自 &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; 起：充电橙色更暖（红 60 % / 绿 24 %，原为 55 %/35 %）；呼吸只降到约峰值 1/12 的暗橙再进入谷底熄灭——旧固件呼吸首尾极暗处会显得像纯红——谷底熄灭保持由 0.24 s 加长到 0.5 s（周期约 6.1 s）。&lt;br /&gt;
&lt;br /&gt;
英文版见 [[Photonicat 2 LED Indicator]]。提示音说明见 [[Photonicat 2 提示音说明]]。&lt;br /&gt;
&lt;br /&gt;
==速查==&lt;br /&gt;
&lt;br /&gt;
以下动画为示意，节奏与实际固件一致（呼吸周期约 6.1 秒、心跳周期 2 秒）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 动画 !! 指示灯 !! 含义&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 黄色呼吸 || 正在充电，系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 黄色常亮 || 正在充电，系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 绿色呼吸 || 已充满（或已达充电上限），系统运行中&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 绿色常亮 || 已充满（或已达充电上限），系统已关机&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 绿色心跳脉冲 || 电池供电运行中，电量正常&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 红色持续闪烁 || 电量低（低于 6500 mV，详见下方[[#低电量红灯|低电量红灯]]）&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ 熄灭 || 电池供电待机，系统已关机&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==完整状态表==&lt;br /&gt;
&lt;br /&gt;
电压门限为固件默认值，可由上位机覆盖。以下为 2S 电池组数值：满电 8280 mV、低电告警 6500 mV、最低开机 6600 mV、强制关机 6300 mV。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 电量 !! 充电器 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 黄色 || 呼吸（开机） || 渐亮 2.8 s / 渐暗 2.8 s / 熄灭 0.5 s，周期约 6.1 s；谷底降到约峰值 1/12 的暗橙，不会出现纯红&lt;br /&gt;
|-&lt;br /&gt;
| 充电中，任意电量 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮（关机） || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 绿色 || 呼吸（开机） || 同为约 6.1 s 周期，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 已充满或达充电上限 || 已插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮（关机） || 持续，延迟 10 s 后生效&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6600 mV，DC ≥ 8 V 且无充电电流 || 已插入 || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 黄色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 绿色 || 心跳脉冲 || 周期 2 s&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6500 mV，正在开机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 高于 6600 mV，关机 || 未插入 || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 绿色 || 常亮 || 持续&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，开机 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 持续闪烁 || 亮 1 s / 灭 1 s，60 s 后开始，持续到电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 低于 6500 mV，短按一次 || 未插入 || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 红色 || 闪烁 || 亮 1 s / 灭 1 s，持续到松开或电压回升&lt;br /&gt;
|-&lt;br /&gt;
| 拔出充电器且关机 || 未插入 || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ 熄灭&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==服务与过渡状态==&lt;br /&gt;
&lt;br /&gt;
以下状态优先级高于上表。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 状态 !! 动画 !! 颜色 !! 形态 !! 节奏&lt;br /&gt;
|-&lt;br /&gt;
| 正在关机 || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 绿色 || 闪烁 || 约亮 0.5 s / 灭 1.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 固件烧录模式 || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 黄色 || 快闪 || 周期约 0.5 s&lt;br /&gt;
|-&lt;br /&gt;
| 复位 / 恢复出厂模式 || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 黄色 || 慢闪 || 周期约 1 s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==低电量红灯==&lt;br /&gt;
&lt;br /&gt;
电量过低时指示灯会变为 🔴 &#039;&#039;&#039;红色闪烁&#039;&#039;&#039;，这是唯一使用红色的场合。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项目 !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 触发条件 || 电池电压低于 &#039;&#039;&#039;6500 mV&#039;&#039;&#039;（2S 电池组，约 3.25 V/节），且&#039;&#039;&#039;未插充电器&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁节奏 || 亮 1 秒 / 灭 1 秒&lt;br /&gt;
|-&lt;br /&gt;
| 闪烁次数 || &#039;&#039;&#039;持续闪烁&#039;&#039;&#039;，直到电压回升或插上充电器&lt;br /&gt;
|-&lt;br /&gt;
| 开机状态下 || 电压持续低于门限 &#039;&#039;&#039;60 秒&#039;&#039;&#039;后才开始闪&lt;br /&gt;
|-&lt;br /&gt;
| 短按电源键 || 电压低时短按一下可立即触发红闪（约 0.5 秒防抖）&lt;br /&gt;
|-&lt;br /&gt;
| 绿灯会怎样 || 红灯期间绿色心跳会停止，两者不会同时亮&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ 重要提醒&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 红灯会&#039;&#039;&#039;一直闪到电压回升或接入充电器&#039;&#039;&#039;，不会自行停止。（RA2E1260726003 之前的固件只闪 3 次就不再提示。）&lt;br /&gt;
* 红灯触发点（6500 mV）与&#039;&#039;&#039;强制关机点（6300 mV）只差 200 mV&#039;&#039;&#039;，在 2S 锂电的放电末端属于很陡的一段，看到红灯应尽快接入充电器。&lt;br /&gt;
* 判据是&#039;&#039;&#039;电压不是百分比&#039;&#039;&#039;：大负载下电压会被拉低，可能在剩余电量还不算太少时就提前告警；负载减轻后电压回升，告警也会随之消失。&lt;br /&gt;
&lt;br /&gt;
==充电上限==&lt;br /&gt;
&lt;br /&gt;
若设置了充电上限（例如 80 %），电量达到上限后会断开充电，充电电流归零，设备据此按“已充满”处理并显示 🟢 &#039;&#039;&#039;绿色&#039;&#039;&#039;。此后由电池给负载供电并缓慢放电，低于恢复门限后重新开始充电，指示灯回到 🟠 黄色。每次切换约有 10 秒延迟。&lt;br /&gt;
&lt;br /&gt;
==说明==&lt;br /&gt;
&lt;br /&gt;
* 绿色呼吸峰值 25 % 占空、绿色常亮 50 %，所以绿色呼吸比常亮更暗；橙色呼吸峰值与橙色常亮相同（红 60 % / 绿 24 %）。&lt;br /&gt;
* 🔴 红色仅用于低电量提示，会持续闪烁直到电压回升或接入充电器。&lt;br /&gt;
* 指示灯可通过上位机协议整体关闭，关闭后所有状态均不亮灯。&lt;br /&gt;
* 指示灯依据的电量是怎么算出来的，见 [[Photonicat 2 SOC 计算]]。&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1050</id>
		<title>Photonicat 2 LED Indicator</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_LED_Indicator&amp;diff=1050"/>
		<updated>2026-07-31T11:26:36Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​RA2E1260731011: warmer orange R60/G24, breath valley floor (no pure-red tails), 0.5s off hold / 6.1s cycle; v3 GIFs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Photonicat 2&#039;&#039;&#039; has a single two-colour indicator LED (red + green). Yellow/orange is produced by lighting both colours together; there is no blue.&lt;br /&gt;
&lt;br /&gt;
The indicator follows a MacBook-style scheme:&lt;br /&gt;
* &#039;&#039;&#039;Colour tells you the charge state&#039;&#039;&#039; — 🟠 yellow = charging, 🟢 green = charged.&lt;br /&gt;
* &#039;&#039;&#039;Motion tells you the machine state&#039;&#039;&#039; — breathing = system running, steady = system off.&lt;br /&gt;
&lt;br /&gt;
Applies to firmware &#039;&#039;&#039;RA2E1260726001&#039;&#039;&#039; and later. Earlier firmware did not distinguish system on/off while charging or charged.&lt;br /&gt;
&lt;br /&gt;
Since &#039;&#039;&#039;RA2E1260731011&#039;&#039;&#039; the charging orange is warmer (R60 %/G24 % instead of R55 %/G35 %), the breath fades only to a dim-orange floor (≈1/12 of peak) before the valley off — on earlier firmware the dim ends of each breath cycle could look pure red — and the valley off hold is 0.5 s instead of 0.24 s (cycle ≈6.1 s).&lt;br /&gt;
&lt;br /&gt;
中文版见 [[Photonicat 2 LED 指示灯]]. For buzzer tones see [[Photonicat 2 Sound Guide]].&lt;br /&gt;
&lt;br /&gt;
==Quick reference==&lt;br /&gt;
&lt;br /&gt;
The animations below are illustrative; their timing matches the firmware (≈6.1 s breathing cycle, 2 s heartbeat).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Animation !! Indicator !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-breathing-v3.gif|52px|link=]] || 🟠 Yellow, breathing || Charging, system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-orange-solid-v3.gif|52px|link=]] || 🟠 Yellow, steady || Charging, system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-breathing-v3.gif|52px|link=]] || 🟢 Green, breathing || Fully charged (or at charge limit), system running&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-solid-v2.gif|52px|link=]] || 🟢 Green, steady || Fully charged (or at charge limit), system off&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-green-heartbeat-v2.gif|52px|link=]] || 🟢 Green, heartbeat pulse || Running on battery, charge level normal&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-red-lowbatt-v2.gif|52px|link=]] || 🔴 Red, flashing || Low battery (below 6500 mV — see [[#Low battery red light|Low battery red light]])&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Pcat2-led-off-v2.gif|52px|link=]] || ⚫ Off || Idle on battery, system off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Full state table==&lt;br /&gt;
&lt;br /&gt;
Battery thresholds are firmware defaults and can be overridden by the host. Values are for the 2S pack: full 8280 mV, low warning 6500 mV, minimum boot 6600 mV, hard shutdown 6300 mV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Power level !! Charger !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-breathing-v3.gif|44px|link=]] || 🟠 Yellow || Breathing (system on) || 2.8 s up / 2.8 s down / 0.5 s off, ≈6.1 s cycle; fades to a dim-orange floor (≈peak/12), never pure red&lt;br /&gt;
|-&lt;br /&gt;
| Charging, any level || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady (system off) || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-breathing-v3.gif|44px|link=]] || 🟢 Green || Breathing (system on) || Same ≈6.1 s cycle, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Full, or at charge limit || Connected || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady (system off) || Constant, after 10 s delay&lt;br /&gt;
|-&lt;br /&gt;
| Below 6600 mV, DC ≥ 8 V, no charge current || Connected || [[File:Pcat2-led-orange-solid-v3.gif|44px|link=]] || 🟠 Yellow || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system on || None || [[File:Pcat2-led-green-heartbeat-v2.gif|44px|link=]] || 🟢 Green || Heartbeat pulse || 2 s period&lt;br /&gt;
|-&lt;br /&gt;
| Above 6500 mV, system starting || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Above 6600 mV, system off || None || [[File:Pcat2-led-green-solid-v2.gif|44px|link=]] || 🟢 Green || Steady || Constant&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, system on || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Continuous flashing || 1 s on / 1 s off, begins after 60 s, until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Below 6500 mV, short press || None || [[File:Pcat2-led-red-lowbatt-v2.gif|44px|link=]] || 🔴 Red || Flicker || 1 s on / 1 s off, while held or until the voltage recovers&lt;br /&gt;
|-&lt;br /&gt;
| Charger removed, system off || None || [[File:Pcat2-led-off-v2.gif|44px|link=]] || colspan=&amp;quot;2&amp;quot; | ⚫ Off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Service and transitional states==&lt;br /&gt;
&lt;br /&gt;
These override the states above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! Animation !! Colour !! Pattern !! Timing&lt;br /&gt;
|-&lt;br /&gt;
| Shutting down || [[File:Pcat2-led-green-blink-shutdown-v2.gif|44px|link=]] || 🟢 Green || Blink || ≈0.5 s on / 1.5 s off&lt;br /&gt;
|-&lt;br /&gt;
| Firmware download mode || [[File:Pcat2-led-orange-blink-fast-v3.gif|44px|link=]] || 🟠 Yellow || Fast blink || ≈0.5 s period&lt;br /&gt;
|-&lt;br /&gt;
| Reset / factory restore mode || [[File:Pcat2-led-orange-blink-slow-v3.gif|44px|link=]] || 🟠 Yellow || Slow blink || ≈1 s period&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Low battery red light==&lt;br /&gt;
&lt;br /&gt;
When the battery runs low the indicator turns 🔴 &#039;&#039;&#039;flashing red&#039;&#039;&#039;. This is the only situation in which red is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Item !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Trigger || Battery below &#039;&#039;&#039;6500 mV&#039;&#039;&#039; (2S pack, about 3.25 V per cell) with &#039;&#039;&#039;no charger connected&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Rhythm || 1 second on / 1 second off&lt;br /&gt;
|-&lt;br /&gt;
| Repeats || &#039;&#039;&#039;Flashes continuously&#039;&#039;&#039; until the voltage recovers or a charger is connected&lt;br /&gt;
|-&lt;br /&gt;
| While running || Starts only after the voltage has stayed below the threshold for &#039;&#039;&#039;60 seconds&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Short press || With a low battery, a short press of the power button triggers the red flashing immediately (after a 0.5 s debounce)&lt;br /&gt;
|-&lt;br /&gt;
| Effect on green || The green heartbeat stops while red is active; the two never show together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;⚠️ Important&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The red warning &#039;&#039;&#039;keeps flashing until the voltage recovers or a charger is connected&#039;&#039;&#039;; it does not stop on its own. (Firmware before RA2E1260726003 flashed only 3 times and then went quiet.)&lt;br /&gt;
* The red threshold (6500 mV) is only &#039;&#039;&#039;200 mV above the hard shutdown point (6300 mV)&#039;&#039;&#039;. That is a very steep part of the 2S li-ion discharge curve, so connect a charger promptly once you see red.&lt;br /&gt;
* The trigger is &#039;&#039;&#039;voltage, not a percentage&#039;&#039;&#039;. Under heavy load the voltage sags and the warning can appear while a useful charge remains; when the load drops the voltage recovers and the warning stops.&lt;br /&gt;
&lt;br /&gt;
==Charge limit==&lt;br /&gt;
&lt;br /&gt;
If a charge limit is configured (for example 80 %), the charger is switched off once the pack reaches it. Charge current drops to zero, so the device treats this as fully charged and shows 🟢 &#039;&#039;&#039;green&#039;&#039;&#039;. The pack then powers the load and slowly discharges until it falls below the resume threshold, at which point charging restarts and the indicator returns to 🟠 yellow. Each transition is delayed by about 10 seconds.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
* Green breathing peaks at 25 % duty while steady green is 50 %, so breathing green looks dimmer than steady green. Orange breathing peaks at the same R60 %/G24 % mix as steady orange.&lt;br /&gt;
* 🔴 Red is only ever used for low battery, and keeps flashing until the voltage recovers or a charger is connected.&lt;br /&gt;
* The indicator can be disabled entirely through the host protocol, in which case it stays off in all states.&lt;br /&gt;
* For how the charge level behind these indications is computed, see [[Photonicat 2 SOC Calculation]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Photonicat 2]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-blink-slow-v3.gif&amp;diff=1049</id>
		<title>文件:Pcat2-led-orange-blink-slow-v3.gif</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-blink-slow-v3.gif&amp;diff=1049"/>
		<updated>2026-07-31T11:26:23Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​== 摘要 ==
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.
&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-green-breathing-v3.gif&amp;diff=1048</id>
		<title>文件:Pcat2-led-green-breathing-v3.gif</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-green-breathing-v3.gif&amp;diff=1048"/>
		<updated>2026-07-31T11:26:23Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​== 摘要 ==
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.
&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-blink-fast-v3.gif&amp;diff=1047</id>
		<title>文件:Pcat2-led-orange-blink-fast-v3.gif</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-blink-fast-v3.gif&amp;diff=1047"/>
		<updated>2026-07-31T11:26:23Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​== 摘要 ==
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.
&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-solid-v3.gif&amp;diff=1046</id>
		<title>文件:Pcat2-led-orange-solid-v3.gif</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-solid-v3.gif&amp;diff=1046"/>
		<updated>2026-07-31T11:26:23Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​== 摘要 ==
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.
&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-breathing-v3.gif&amp;diff=1045</id>
		<title>文件:Pcat2-led-orange-breathing-v3.gif</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=%E6%96%87%E4%BB%B6:Pcat2-led-orange-breathing-v3.gif&amp;diff=1045"/>
		<updated>2026-07-31T11:26:22Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​== 摘要 ==
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.
&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 摘要 ==&lt;br /&gt;
LED v3: 0.5s off hold (6.1s cycle), warmer orange R60/G24, breath valley floor (no pure-red tails). Firmware RA2E1260731011.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Main_Page&amp;diff=1044</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Main_Page&amp;diff=1044"/>
		<updated>2026-07-31T10:59:45Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​固件更新日志改指中文版，英文版以 EN 链接并列&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[image:Pcat2-wiki.webp||thumb|Photonicat 光影猫 2]]&lt;br /&gt;
[[image:4pcat.jpg||thumb|Photonicat 光影猫 1]]&lt;br /&gt;
&#039;&#039;&#039;Photonicat - 光影猫&#039;&#039;&#039; 系列是一个提供电池的便携型路由器。光的速度，猫的灵活，装在一个数据包里。他既是波也是粒子，他是光影猫。&lt;br /&gt;
&lt;br /&gt;
Please use the &#039;&#039;&#039;&amp;quot;翻译&amp;quot;&#039;&#039;&#039; button, to translate to your language&lt;br /&gt;
&lt;br /&gt;
== 产品特性 ==&lt;br /&gt;
* 板载 WiFi AC/AX 模块，内置天线，并支持通过 PCI-E 扩展 4G/5G、WiFi 6 等通信能力。  &lt;br /&gt;
* 丰富的扩展接口，可接入 GPS 及其他无线系统。  &lt;br /&gt;
* 出厂预装 eMMC/SD OpenWRT 固件，支持快速安装和扩展插件。  &lt;br /&gt;
* 支持多系统固件，可刷入 Debian、Ubuntu 或 Android。  &lt;br /&gt;
* 高性能 CPU，支持千兆 NAT 满速转发，长期稳定运行。  &lt;br /&gt;
* CNC 6 系列铝合金与高分子材料机身，坚固轻巧。  &lt;br /&gt;
* eMMC 与 SD 双启动方案，提升系统稳定性与抗震性能。  &lt;br /&gt;
* 内置可充电锂电池，支持 UPS 模式、车载供电及延时关机。  &lt;br /&gt;
* 完全开源，基于 OpenWRT 平台，支持丰富的开源插件与二次开发。  [[Photonicat 1 Specs]]&lt;br /&gt;
&lt;br /&gt;
== Photonicat 2 ==&lt;br /&gt;
2025 年 8 月，我们正式发布了 &#039;&#039;&#039;Photonicat 2&#039;&#039;&#039;，在原有基础上进行了多方面的增强与升级：&lt;br /&gt;
&lt;br /&gt;
* 🖥️ &#039;&#039;&#039;CPU 升级&#039;&#039;&#039;：由原来的 4 核升级为 8 核，采用先进的 &#039;&#039;&#039;8nm RK3576 SoC&#039;&#039;&#039;，计算性能和能效全面提升。  &lt;br /&gt;
* 🧠 &#039;&#039;&#039;内存升级&#039;&#039;&#039;：由 DDR4 升级为 &#039;&#039;&#039;LPDDR5 内存&#039;&#039;&#039;，支持 On-Die ECC，自修复能力更强，数据稳定性更高。  &lt;br /&gt;
* 📡 &#039;&#039;&#039;天线增强&#039;&#039;&#039;：内置7根增强型天线，支持4根可扩展外置天线，信号更强。  &lt;br /&gt;
* 🔋 &#039;&#039;&#039;电池升级&#039;&#039;&#039;：内置 4 × 18650 大容量电池，续航能力显著提升。  &lt;br /&gt;
* 🔌 &#039;&#039;&#039;电源系统升级&#039;&#039;&#039;：支持 &#039;&#039;&#039;无电池运行&#039;&#039;&#039;（直流供电模式），并新增 &#039;&#039;&#039;双向快充 30W&#039;&#039;&#039; 功能，既可快速自充，也可作为移动电源反向输出。  &lt;br /&gt;
* 💾 &#039;&#039;&#039;存储扩展&#039;&#039;&#039;：除 eMMC/SD 外，新增对 NVMe 固态硬盘的支持，提供高速存储能力。  &lt;br /&gt;
* 📺 &#039;&#039;&#039;新增交互&#039;&#039;&#039;：内置屏幕，可实时显示设备状态和网络信息。  &lt;br /&gt;
* 📊 &#039;&#039;&#039;传感器扩展&#039;&#039;&#039;：集成库仑计（Columb Meter），支持精确电流/电量测量；G-sensor 提供移动检测与姿态感应。  &lt;br /&gt;
* 🛠️ &#039;&#039;&#039;软件兼容&#039;&#039;&#039;：保持 OpenWRT 开源支持，灵活安装丰富插件，同时可刷入 Debian、Ubuntu、Android 固件&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Photonicat2光影猫 配置表&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; width=&amp;quot;150px&amp;quot; | 规格 || align=&amp;quot;center&amp;quot; width=&amp;quot;200px&amp;quot; | 不安装电池 || align=&amp;quot;center&amp;quot;  width=&amp;quot;200px&amp;quot;| 移动版 Cell|| align=&amp;quot;center&amp;quot;  width=&amp;quot;200px&amp;quot;| 4G版 || align=&amp;quot;center&amp;quot;  width=&amp;quot;200px&amp;quot;| 5G版&lt;br /&gt;
|-&lt;br /&gt;
| CPU || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|瑞芯微 Rockchip RK3576（8核 Cortex®-A72 + A53 @ 2.2GHz), ARM Mali G52 MC3, NPU 6Tops&lt;br /&gt;
|-&lt;br /&gt;
| 内存 || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|标配：4GB LPDDR5, 高配：16GB LPDDR5&lt;br /&gt;
|-&lt;br /&gt;
| eMMC || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|标配：8GB eMMC, 高配：128GB eMMC&lt;br /&gt;
|-&lt;br /&gt;
| 网络 || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;| 原生 PHY 1000Mbps x 2&lt;br /&gt;
|-&lt;br /&gt;
| 顶部I/O ||align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|USB 3.0, HDMI 4K, 1Gbps RJ45 x 2&lt;br /&gt;
|-&lt;br /&gt;
| 侧面I/O || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|NanoSIM（家庭版无） 全系标配 MicroSD&lt;br /&gt;
|-&lt;br /&gt;
| 内置WIFI || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;| 全系标配 USB WiFi B/G/N/AC (2.4G/5G)&lt;br /&gt;
|-&lt;br /&gt;
| 内置WiFi天线 || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;| 标配： 4/5G x 4，WiFi天线 x3&lt;br /&gt;
|-&lt;br /&gt;
| 内置M.2 B-key || align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; | M.2 B-Key（用于扩展其他 WWAN 设备）&lt;br /&gt;
|-&lt;br /&gt;
| 内置M.2 E-key || align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; | M.2 E-Key（用于扩展其他 WiFi 模块等设备）&lt;br /&gt;
|-&lt;br /&gt;
| 内置M.2 M-key || align=&amp;quot;center&amp;quot; colspan=&amp;quot;5&amp;quot; | M.2 M-Key（用于扩展其他 NVMe 设备）&lt;br /&gt;
|-&lt;br /&gt;
| 供电/工作功耗  || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|PD 20V @ 2.5A(Max) 双向 30W 电池充放电。&lt;br /&gt;
|-&lt;br /&gt;
| 电池 ||align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;| 6800mAh @ 7.4v, 标记49Wh (18650 * 4) &lt;br /&gt;
|-&lt;br /&gt;
| 4G 模块 ||align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; | 全网通|| align=&amp;quot;center&amp;quot; | 无&lt;br /&gt;
|-&lt;br /&gt;
| 5G 模块 || align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; | 无 || align=&amp;quot;center&amp;quot; | 全网通/全球通&lt;br /&gt;
|-&lt;br /&gt;
| 最佳电池续航时间 || align=&amp;quot;center&amp;quot; | N/A  || align=&amp;quot;center&amp;quot; | 24小时 || align=&amp;quot;center&amp;quot; | 18小时 || align=&amp;quot;center&amp;quot; | 12小时，RM520N-GL 15小时&lt;br /&gt;
|-&lt;br /&gt;
| 开机充满电时间 || align=&amp;quot;center&amp;quot; | N/A || align=&amp;quot;center&amp;quot; | 2.0小时 || align=&amp;quot;center&amp;quot; | 2.5小时 || align=&amp;quot;center&amp;quot; | 2.5小时&lt;br /&gt;
|-&lt;br /&gt;
| 重量 || align=&amp;quot;center&amp;quot; | 260克（无电池）|| align=&amp;quot;center&amp;quot; |470克|| align=&amp;quot;center&amp;quot; |480克 || align=&amp;quot;center&amp;quot; |485克&lt;br /&gt;
|-&lt;br /&gt;
| 尺寸 || align=&amp;quot;center&amp;quot; colspan=&amp;quot;4&amp;quot;|154mm x 78mm x 32mm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Photonicat 2代 用户手册 User Manual==&lt;br /&gt;
&lt;br /&gt;
===入门 Getting Started===&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 新手入门指南]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 LED 指示灯]]（[[Photonicat 2 LED Indicator|EN]]）&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 提示音说明]]（[[Photonicat 2 Sound Guide|EN]]）&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 小屏幕自定义]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===固件更新 Firmware Update===&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 固件在线升级更新]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 OTA更新]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 固件USB线刷更新教程]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 MCU 手动更新]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photoincat 2 第三方固件更新]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 固件更新日志]]（[[Photonicat 2 固件 Changelog|EN]]）&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===网络功能 Networking===&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 Smart WAN 智能上网]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 多出口与故障切换]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 访客门户 Captive Portal]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photoincat 2 IPv6 PPPoE]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat2 无线桥接]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 管理界面新功能 (2026)]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===硬件扩展 Hardware===&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 Wifi/WWAN/NVME M2 兼容模块]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 spec|Photonicat 2 规格]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===开发者 Developers===&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 开发者 API]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 sysfs]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 Docker 使用指南]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Build system image for photonicat2]]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 MCU 通讯协议]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|[[Photonicat 2 SOC 计算]]（[[Photonicat 2 SOC Calculation|EN]]）&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;25%&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Photonicat 1代 用户手册 User Manual==&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|[[Photonicat 快速上手]] || [[Photonicat WEB 管理页面操作手册]] || [[Photonicat 刷机操作手册]] || [[Photonicat SD启动、更新]] || [[Photonicat 6.1.8内核版本回退4.19版本说明]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Photonicat 安装openWRT插件]] || [[Photonicat OTA更新]] || [[Photonicat FAQs 常见问题]] || [[Photonicat OpenWRT挂载新分区]] || [[Photonicat 板载WIFI 5G频段信道支持列表]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Photonicat OpenWrt固件更新指南]] || [[Photonicat 使用注意事项]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Photonicat 1/2代 场景教程 Usage Scenarios==&lt;br /&gt;
连接模式：&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
| [[Photonicat 主路由]]|| [[Photonicat 旁路由]] || [[Photonicat 4G/5G 家庭网络备份]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Photonicat 作为AP]] || [[Photonicat 无线桥接]] || [[Photonicat wifi网卡WAN/LAN同时使用]] || [[Photonicat2 无线桥接]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Photonicat 网络加速 Turbo ACC]] || [[Photonicat 端口转发]] || [[IPv6 术语表 Glossary|IPv6 术语表 IPv6 Glossary]]&lt;br /&gt;
|}&lt;br /&gt;
开关机功能：&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
| [[Photonicat 车载/UPS开关机功能]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
其他用途：&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
| [[Photonicat 音乐盒模式]] || [[Photonicat Android]] || [[Photonicat Debain/Ubuntu]] || [[Photonicat Openwrt Docker/istore]] || [[Photonicat 网络共享/samba4]] || [[Photonicat(4G版本)开启GPS功能]] &lt;br /&gt;
|-&lt;br /&gt;
| [[Photonicat WAN口设置成LAN]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Photonicat 1 进级内容 Advanced Topics==&lt;br /&gt;
{|width=&amp;quot;90%&amp;quot;&lt;br /&gt;
|[[Photonicat 编译 OpenWRT, Debian]] || [[Photonicat 编译 Android]] || [[Photonicat Wifi/WWAN M2 兼容模块]] || [[Photonicat TTL，Watchdog，Recovery说明]] || [[Photonicat 下调CPU频率]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[Photonicat GPIO扩展说明]] || [[Photonicat Tesla Wifi 推荐设置]] || [[Photonicat Google TV连接]] || [[Photonicat Debian + Virtual Machine]]&lt;br /&gt;
|-&lt;br /&gt;
||[[Photonicat DIY 注意事项]] || [[Photonicat IPv6 Native, NAT6模式]]||[[Photonicat Tips 使用技巧]] || [[Photonicat Modem 配置USB3.0]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Photonicat 刷Modem模块固件]] || [[Photonicat 自动关机电压修改]] ||[[Photonicat 功耗测试记录]] || [[Photonicat 改无电池]] || [[Photonicat MCU 通讯协议]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==固件/Images 相关==&lt;br /&gt;
&lt;br /&gt;
===Photonicat 2 ===&lt;br /&gt;
* Photonicat 2 OpenWRT 正式版固件 : https://dl.photonicat.com/images/photonicat2/openwrt/ &lt;br /&gt;
* Photonicat 2 Debian：https://dl.photonicat.com/images/photonicat2/debian-mainline/&lt;br /&gt;
* Photonicat 2 Ubuntu：https://dl.photonicat.com/images/photonicat2/ubuntu-mainline/&lt;br /&gt;
* Photonicat 2 Android：https://dl.photonicat.com/images/photonicat2/android/&lt;br /&gt;
[[Photonicat 2 固件更新日志]]（[[Photonicat 2 固件 Changelog|EN]]）&lt;br /&gt;
&lt;br /&gt;
===Photonicat 1 ===&lt;br /&gt;
* Photonicat 1 正式版固件 : https://dl.photonicat.com/images/&lt;br /&gt;
* Photonicat 1 beta固件 6.x内核 : https://dl.photonicat.com/images/beta/&lt;br /&gt;
* [[Photonicat 1 固件 Changelog]]&lt;br /&gt;
&lt;br /&gt;
===三方固件===&lt;br /&gt;
* QWRT by lean：https://github.com/coolsnowwolf/lede/releases/tag/20251001&lt;br /&gt;
* immortalwrt：尽请期待&lt;br /&gt;
* ZagLu编译immortalwrt：https://pcat.qsim.top/zagwrt/immortalwrt/releases/24.10.2/targets/rockchip/armv8/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;使用第三方的固件或插件，我们不对版权问题或软件兼容承担任何责任，不同固件可能之间更新需要用USB线进行烧录&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==其他链接==&lt;br /&gt;
* Photonicat Github: https://github.com/photonicat&lt;br /&gt;
* Photonicat Downloads: https://dl.photonicat.com (含所有binary images和自动升级的4G/5G电源管理Web IPKs）&lt;br /&gt;
Debian/Ubuntu 默认用户名：photonicat 默认密码：photonicat&lt;br /&gt;
&lt;br /&gt;
[[Photo Gallery 图集]] ｜ [[Photonicat 硬件配置表]]&lt;br /&gt;
&lt;br /&gt;
==购买链接==&lt;br /&gt;
*[https://item.taobao.com/item.htm?ft=t&amp;amp;id=688518819522 官方淘宝店铺]&lt;br /&gt;
&lt;br /&gt;
==社区、爱好者、帮助等==&lt;br /&gt;
如果有什么特殊需求可以通过：&lt;br /&gt;
*WeChat ID：Photonicat&lt;br /&gt;
*taobao客服：[https://item.taobao.com/item.htm?ft=t&amp;amp;id=688518819522 点击进入]&lt;br /&gt;
*email: info@photonicat.com&lt;br /&gt;
*下载服务器：https://dl.photonicat.com&lt;br /&gt;
*[https://github.com/photonicat github issue] &lt;br /&gt;
*Telegram 技术讨论： https://t.me/+IATZElRYPydkM2Rl&lt;br /&gt;
*光影猫第三方论坛(非官方)地址：https://club.photonicat.cn/&lt;br /&gt;
*光影猫第三方服务器(非官方)地址: https://pcat.qsim.top/&lt;br /&gt;
*感谢Lean大神为我们提供支持：https://github.com/coolsnowwolf/lede&lt;br /&gt;
*开源硬件：https://github.com/photonicat/photonicat-hardware&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1043</id>
		<title>Photonicat 2 固件更新日志</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97&amp;diff=1043"/>
		<updated>2026-07-31T10:59:29Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​新建：Photonicat 2 固件更新日志（中文版），含 A3 版本 PCB 才支持充电限制的说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;English version: [[Photonicat 2 固件 Changelog]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* 首个正式版本。&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* 简化多 WAN 路由，停用 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 默认内置 Docker 相关软件包。&lt;br /&gt;
* 内核升级至 6.12.45。&lt;br /&gt;
* 合入上游 PCIe 补丁。&lt;br /&gt;
* 增加 USB Hub 复位时序与看门狗。&lt;br /&gt;
* 状态指示灯与蜂鸣器可由用户关闭。&lt;br /&gt;
* 提升小屏幕显示性能。&lt;br /&gt;
* 增加 LED、蜂鸣器与风扇控制，并加入过温保护算法。&lt;br /&gt;
* 简化网络 WAN 接口选择：&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 新增 /update 管理界面。&lt;br /&gt;
* MCU：优化库仑计算法。&lt;br /&gt;
* MCU：修复充电指示灯偶尔不亮的问题。&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* 去掉不必要的网络复位，加快开机速度。&lt;br /&gt;
* 更新 OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt;，改善 NFA765 无线模块兼容性。&lt;br /&gt;
* 改进风扇控制策略与整体散热表现。&lt;br /&gt;
* 优化智能调速逻辑：&amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;。&lt;br /&gt;
* 修复网络模式设为 &#039;&#039;&#039;仅蜂窝网络&#039;&#039;&#039; 时界面崩溃的问题。&lt;br /&gt;
* 修复界面不显示 4G/5G 频段信息的问题。&lt;br /&gt;
* 修复部分 5G 模块信息页面内容缺失的问题。&lt;br /&gt;
* 修复 5G 信号不显示的问题。&lt;br /&gt;
* 修复重启后 &#039;&#039;&#039;记住我&#039;&#039;&#039; 登录选项失效的问题。&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.74，mac80211 升级至 6.12.61，python3 升级至 3.13.9 并同步更新相关软件包（改用基于 PAM 的认证，替代已废弃的 &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;），系统版本升级至 26.04，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;支持广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 完整支持信号强度、温度监控、IMEI、运营商显示、服务小区信息、漫游偏好、4G/5G 网络模式与频段选择、通过 rfkill 关闭 WWAN 供电、流量统计，以及十六进制编码运营商名称的解码。&lt;br /&gt;
* &#039;&#039;&#039;短信可靠性&#039;&#039;&#039; —— 所有模块统一改用 PDU 模式，修复 FM350-GL 的串口处理、提示符检测与响应超时问题。&lt;br /&gt;
* &#039;&#039;&#039;网页终端&#039;&#039;&#039; —— 新增网页终端（&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;），支持持久 PTY 会话、全屏切换、断开/重连、JetBrains Mono 字体与移动端视口优化。&lt;br /&gt;
* &#039;&#039;&#039;直流供电模式与 TCP BBR v3&#039;&#039;&#039; —— 新增开机模式选项，适用于无电池及需要快速响应的场景（接入适配器即自动开机，无需电池）。新增 TCP BBR v3 支持，可在常规设置中配置拥塞控制算法。&lt;br /&gt;
* &#039;&#039;&#039;电池历史与电源事件记录&#039;&#039;&#039; —— 新增基于 SQLite 存储的电池历史曲线，固定电压刻度、区域填充、功率显示，以及开关机事件时间轴。持久记录电源事件，包含电压、电流、电量数据与 DC 插拔跟踪。&lt;br /&gt;
* &#039;&#039;&#039;空闲与低电量关机&#039;&#039;&#039; —— 空闲关机倒计时实时显示、低电量自动关机、WiFi 客户端空闲监测（OR 模式）、仅电池供电时自动关机选项，以及电量估算跳变 2% 的容差处理。&lt;br /&gt;
* &#039;&#039;&#039;常规设置与定时页面重做&#039;&#039;&#039; —— 新增常规设置页面，可设置语言、时区、主机名并与 LuCI 同步。定时页面改为现代化的左右分栏布局，面板更紧凑并占满宽度，车载/UPS 模式说明更清晰。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 优先显示当前活动 WAN、公网 IPv6 检测、模块温度显示、网络图标行中的 5G/4G 标识、按状态渲染、网关下划线，以及移动端顶栏布局优化。&lt;br /&gt;
* &#039;&#039;&#039;性能与界面细节打磨&#039;&#039;&#039; —— 原生 Python ubus/uci 封装、非阻塞 IO 缓存、CPU 省电模式下关闭大核（A72）、静态资源缓存 3 个月、温度与功率曲线图、刷新后保留标签页状态、通知只用单一语言、图标改进、页脚新增 Wiki 与社区按钮、智能手机号格式化，以及更详细的固件升级进度显示。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;内核与系统更新&#039;&#039;&#039; —— 内核升级至 6.12.91，修复近期若干严重安全问题。mac80211 升级至 6.18.26，修复多个 CVE。&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 基础系统与 LuCI 升级至 25.12。新增 IEEE 802.11be 支持（可在 QCNCM865 与 MT7925 上启用 6GHz 信道）。&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN（WiFi 当作 WAN）&#039;&#039;&#039; —— 新增 Smart WAN 模式，把板载无线变成上级 WiFi 客户端，并在以太网 → WiFi → 蜂窝之间自动故障切换。像手机一样自动重连已知的上级 WiFi，扫描设备解析更稳健，切换前会有确认对话框。被停用的 STA 射频现在会正确显示为独立的 &amp;quot;WAN (WiFi)&amp;quot; 状态。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7（802.11be）与 WPA3&#039;&#039;&#039; —— PCIe 网卡新增 WiFi 7（BE）与 WPA3-SAE 支持，正确处理 5GHz BE 与 6GHz BE 的 htmode/信道，支持 PCIe 卡型号识别，并统一了界面中的加密方式取值。&lt;br /&gt;
* &#039;&#039;&#039;仪表盘与顶栏改进&#039;&#039;&#039; —— 当前出口实时高亮（只有正在使用的 WAN 行会亮起）；显示 WiFi 信号、当前出口与网络模式；网络图标随状态变化，带网关下划线、准确的 WAN 下划线、被禁用链路的红叉与提示文字。新增公网 IPv6 / 公网 IP 别名。&lt;br /&gt;
* &#039;&#039;&#039;电池与充电控制&#039;&#039;&#039; —— 在设备控制页面新增电池充电限制滑块（80–100%），以充电限制作为唯一数据源，修正电池图标显示真实电量百分比，并在从未设置过时稳妥地默认为 100%。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕可视化编辑器&#039;&#039;&#039; —— 新增 Figma 风格的屏幕布局可视化编辑器，与 JSON 视图合并为同一个&amp;quot;编辑器&amp;quot;标签页。支持增删页面、单个元素位置重置、居中与吸附工具、恢复默认布局、JSON 实时差异对比、标签/数据键画布切换，并修正了编辑器坐标到设备显示区域的映射。修复设备端 graph 元素类型的渲染问题。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕自定义数据源&#039;&#039;&#039; —— 编辑器中新增自定义指标（command / uci / env / json_file / HTTPS），附带设备端示例、一键保存并重启、刷新时实时预览取值、重复键名警告、更清晰的 data_key 说明、通过官方 Photonicat 行情 API 提供的黄金/AAPL 示例，以及无闪烁的实时预览。&lt;br /&gt;
* &#039;&#039;&#039;设备控制与网络模式&#039;&#039;&#039; —— 重新排列网络模式并使用组合式 WAN 图标；把充电限制设置统一收纳到设备控制页面。&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL 漫游&#039;&#039;&#039; —— 通过 &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; 启用自动漫游，并隐藏了实际无法生效的&amp;quot;禁止漫游&amp;quot;选项；修复轮询刷新会覆盖频段选择的问题；移除会导致 LAN/WAN 失效的 USB 3.12 10Gbps 选项。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 为 WebSocket 端点增加 &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; 装饰器，为 &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; 与低电量关机相关路由增加鉴权，并移除未使用或权限过高的 API 端点。&lt;br /&gt;
* &#039;&#039;&#039;性能&#039;&#039;&#039; —— 降低空闲 CPU 占用（默认只写文件日志、减少 select 唤醒与 uci 进程调用），缓存 &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; 并让仪表盘缓存与屏幕轮询对齐，去掉一个空转的屏幕线程，改为直接从 sysfs 读取 WWAN rfkill 状态。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕性能&#039;&#039;&#039; —— 显示循环 CPU 占用大幅下降（静态页面约 3.2% → 约 1.4%，降低约 55%）：通过数据版本门控跳过画面无变化时的重绘与 SPI 传输，传输前先做字节比较，并把各类轮询频率减半。字体（包括约 37MB 的中日韩字体集）改为只解析一次并缓存预加载，网络信息查询（无线 SSID、iwinfo 客户端枚举、公网 IP）也做了缓存，进程调用从约 3.8 次/秒降到约 1.7 次/秒。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;小屏幕 SPI 时钟可靠性&#039;&#039;&#039; —— 将屏幕 SPI 时钟从 120 MHz 降到 50 MHz，消除高频率下的画面异常或显示问题；保守的时序只带来可忽略的刷新延迟，换来稳定无杂点的画面。&lt;br /&gt;
* &#039;&#039;&#039;序列号校验修复&#039;&#039;&#039; —— 有效的设备序列号在设备上被错误显示为 &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt;，原因是签名校验依赖 &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; 模块，而目标 OpenWrt 固件中并未安装该模块。&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT 基础系统&#039;&#039;&#039; —— 路由与电话相关软件包更新至 OpenWRT 25.12 分支。默认防火墙切换为 fw4。&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;开机时间缩短 59% —— 17.4 秒 → 7.2 秒&#039;&#039;&#039; —— 完整重启一次现在只需 16.6 秒，之前是 28.0 秒。最大的单一原因是一条多余的 &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; 条目，导致每次开机所有服务都要等待一块根本没有装的硬盘。此外：根文件系统压缩从 &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; 改为 &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;，squashfs 重新调整为 256 KiB 块并启用直接读取，U-Boot 不再扫描 USB 与网络寻找启动介质，开机 Logo 改为一次 SPI 传输完成（此前是 110,080 次单字节传输），failsafe 等待窗口从 1 秒缩短到 300 毫秒。&lt;br /&gt;
* &#039;&#039;&#039;可选服务出厂不再自启&#039;&#039;&#039; —— Docker、Samba、collectd、aria2、nlbwmon、watchcat、frp、filebrowser、rclone、adbyby、OpenAppFilter、Tailscale 与 ZeroTier 仍然预装，但不再开机自启（运行中的服务从 73 个降到 59 个）；需要时在 &#039;&#039;&#039;系统 → 启动项&#039;&#039;&#039; 中一键启用即可。&amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; 与网页终端有意保持运行。&lt;br /&gt;
* &#039;&#039;&#039;WAN 优先级表取代 Smart WAN 模式&#039;&#039;&#039; —— r7714 的 &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; 开关改为基于路由 metric 的&#039;&#039;&#039;优先级表&#039;&#039;&#039;，按固定槽位顺序列出所有已启用的上行链路 —— 以太网、上级 WiFi、PPPoE 与蜂窝 —— 并逐级向下切换。它完全取代了 &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;。有线 WAN 现在在链路断开时立即切换，而不用等探测超时；PPPoE 也能被正确识别为当前出口。&lt;br /&gt;
* &#039;&#039;&#039;上级 WiFi（WiFi 当作 WAN）&#039;&#039;&#039; —— 同一 SSID 同时广播 2.4G 与 5G 时自动接入信号更强的频段；已连接状态下也会漫游到重新进入范围的已保存网络；漫游离开后能更快重新接入已知网络；实时显示关联与待机状态并带有各射频的图标；附近没有已保存网络时降低扫描频率。&lt;br /&gt;
* &#039;&#039;&#039;全新 /dev 诊断页面&#039;&#039;&#039; —— 由内置 G-sensor 驱动的实时 3D 设备模型，并提供引导式姿态校准；显示各段电压的 2S2P 18650 电池组示意图；MCU 电量计日志；以及模块拨号日志查看器。还有内置蜂鸣器的音调测试与 MIDI 播放。&lt;br /&gt;
* &#039;&#039;&#039;广和通 FM350-GL 5G 模块&#039;&#039;&#039; —— 拨号程序由 Python 重写为原生 C 实现，可靠性更高。现在会遵循网页界面中设置的网络模式偏好，需要时锁定 4G 并在 5G 可用时自动回到 5G，5G 拨号失败会回退到 LTE，并监控数据面以发现&amp;quot;连接已建立但不通流量&amp;quot;的情况。修复了仅支持 4G 的 SIM 卡导致模块无限重启上电的问题，以及自动模式被误报为 5G 的问题。现在会显示模块固件版本，并提供固件更新对话框。&lt;br /&gt;
* &#039;&#039;&#039;模块拨号日志&#039;&#039;&#039; —— 最近 16 MB 的拨号活动会保存在内存中并可在网页界面查看，便于事后排查间歇性的连接问题。&lt;br /&gt;
* &#039;&#039;&#039;电池充电限制&#039;&#039;&#039; —— 1% 精度的滑块，带防抖保存并同步给 MCU，同时实时回读，界面始终反映硬件实际执行的限制值。该限制现在在 MCU 重启后依然保留。&lt;br /&gt;
** &#039;&#039;&#039;硬件要求：&#039;&#039;&#039;充电限制功能仅 &#039;&#039;&#039;A3 版本 PCB&#039;&#039;&#039; 的机器支持，更早的 PCB 版本不支持该功能。&lt;br /&gt;
* &#039;&#039;&#039;固件与 MCU 更新流程&#039;&#039;&#039; —— 版本下拉框中可查看各版本更新说明并支持降级；MCU 与固件更新不能再同时进行；当已安装的 MCU 版本比服务器上的更新时不再提示更新；OTA 默认使用 &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;，各个参数以勾选框形式开放。&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; —— 全新的高性能 DNS 转发器，使用 Rust 编写：分片 LRU 缓存、过期仍可用（serve-stale）、预取、缓存持久化，支持 UDP/TCP/DoT/DoH 上游与并发竞速故障切换，并对每个上游做健康跟踪，另附国内域名列表与广告列表辅助功能。自带 LuCI 页面，但&#039;&#039;&#039;默认关闭&#039;&#039;&#039;。&lt;br /&gt;
* &#039;&#039;&#039;安全加固&#039;&#039;&#039; —— 强制启用 CSRF 校验，LuCI 密码不再泄露到页面中，所有 API 路由都需要鉴权，状态变更只允许 POST，开发者端点受到限制，修复了一处开放重定向，&#039;&#039;&#039;记住我&#039;&#039;&#039; 改用基于 SQLite 的正规令牌实现。&lt;br /&gt;
* &#039;&#039;&#039;访客门户（Captive Portal）&#039;&#039;&#039; —— 一键接受、无需 DNS 也能打开的门户地址、带品牌样式的错误页、启用/停用操作串行化（快速反复切换不会留下半配置状态），失败会明确提示而不是静默忽略。&lt;br /&gt;
* &#039;&#039;&#039;更低空闲 CPU 与更少闪存写入&#039;&#039;&#039; —— 只有打开模块页面时才执行较重的 AT 查询，使用统计批量写入闪存并带保留期与索引，PMU 设置改为每 60 秒轮询一次而非持续轮询，公网 IP 探测采用退避策略，浏览器标签页隐藏时完全停止轮询。&lt;br /&gt;
* &#039;&#039;&#039;小屏幕&#039;&#039;&#039; —— 全新的猫咪苏醒开机动画。改为按页面设置刷新率（时钟与 CPU 页面 2 Hz，ping 时 1 Hz），不再是统一固定刷新率。新增每核心 CPU 条、数值内嵌的内存条、各磁盘占用条与滚动的 SSID 跑马灯。iStat 风格的进度条采用超采样抗锯齿，文字更柔和。新增电池剩余时间栏位、WAN 模式行、可配置的公网 IP 查询、亮度为 0 时真正的物理全黑背光，以及上级链路未关联时进入待机。&lt;br /&gt;
* &#039;&#039;&#039;WiFi 修复&#039;&#039;&#039; —— 修复开机后 AP 已启动却不广播 SSID 的间歇性问题，以及新版 OpenWrt 下的 WLAN 启用状态判断（射频需要接口与设备同时启用才会工作）。新增 &#039;&#039;&#039;恢复 WiFi 默认设置&#039;&#039;&#039; 按钮，便于从错误配置中恢复。&lt;br /&gt;
* &#039;&#039;&#039;eMMC 兼容性&#039;&#039;&#039; —— 内部存储在 bootloader 与内核中都固定为 HS200 @ 52 MHz，消除了一类间歇性存储错误。&lt;br /&gt;
* &#039;&#039;&#039;其他修复&#039;&#039;&#039; —— CPU 省电设置重启后保持生效；手动风扇转速在页面刷新后保留；通过 USB Type-C 为外部设备供电时电池能正确显示为放电状态；PPPoE keepalive 放宽为 &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt;，避免误断线；移除 &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt;，改为静态绑定以太网中断（此前发现它会把两个网口中断都放到同一个核心上）；补齐缺失的英文字符串；Alpine.js 升级至 3.15.12。&lt;br /&gt;
&lt;br /&gt;
=== MCU 更新 ===&lt;br /&gt;
* &#039;&#039;&#039;待机功耗更低&#039;&#039;&#039; —— 待机电流从约 2.6 mA 降到 1.1 mA，关机状态下充满电的电池组可以保持数周而不是几天。电流监测芯片、加速度计与闪存现在会正确断电，主板关闭时风扇也会真正停转。&lt;br /&gt;
* &#039;&#039;&#039;更准确的电量百分比&#039;&#039;&#039; —— 电量计从头到尾重做，加入温度补偿、内阻自学习与周期性重新锚定。读数不再跳变（例如固件更新后从 40% 跳到 80%），能在重启与固件更新后保持，并可上报学习到的真实容量与循环次数。整体表现已经非常接近手机。&lt;br /&gt;
* &#039;&#039;&#039;全新指示灯行为&#039;&#039;&#039; —— MacBook 式指示灯：颜色表示充电状态，动态表示设备状态，充电时为平滑的伽马校正呼吸效果，低电量时持续红色闪烁。修复了开机时以及电池充满时出现的多次误报纯红闪烁。&lt;br /&gt;
* &#039;&#039;&#039;抬起唤醒改进&#039;&#039;&#039; —— 重写为真正的手势识别，和手机一样。设备竖立静置时不会再自行唤醒，而真正拿起时响应更快。&lt;br /&gt;
* &#039;&#039;&#039;稳定性与开机速度&#039;&#039;&#039; —— 修复长时间运行后的随机死机，以及较少见的、只能通过取出电池才能恢复的永久性死锁。开机更快：按键按住 200 毫秒后主板即上电，与长按判定窗口重叠进行。修正蜂鸣器时序，包括插入充电器后可能延迟 40–50 秒才响的提示音；复位与更新操作现在会播放一小段确认旋律。&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1042</id>
		<title>Photonicat 2 固件 Changelog</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_%E5%9B%BA%E4%BB%B6_Changelog&amp;diff=1042"/>
		<updated>2026-07-31T10:59:28Z</updated>

		<summary type="html">&lt;p&gt;C2h2：​Note that the battery charge limit requires PCB revision A3; link to Chinese version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;中文版见 [[Photonicat 2 固件更新日志]].&lt;br /&gt;
&lt;br /&gt;
==2025-08-22==&lt;br /&gt;
* initial release&lt;br /&gt;
&lt;br /&gt;
==2025-09-19 r7612==&lt;br /&gt;
* Simplified multi-WAN routing, disabled &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Built-in Docker packages by default.  &lt;br /&gt;
* Bumped kernel version to 6.12.45.  &lt;br /&gt;
* Applied PCIe patches from upstream.  &lt;br /&gt;
* Added USB hub reset timing and watchdog.  &lt;br /&gt;
* Status LED and beeper can be disabled by the user.  &lt;br /&gt;
* Improved mini display performance.  &lt;br /&gt;
* Added LED, beeper, and fan control with over-temperature protection algorithm.  &lt;br /&gt;
* Simplified network WAN interface selection: &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eth_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cell_only&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;all_off&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* Added /update management interface.&lt;br /&gt;
* MCU: Optimized coulomb counting algorithm.  &lt;br /&gt;
* MCU: Fixed occasional issue where charging indicator light did not display.&lt;br /&gt;
&lt;br /&gt;
== 2025-12-12 r7618 ==&lt;br /&gt;
* Improved bootup speed by removing unnecessary network resets.&lt;br /&gt;
* Updated OpenWrt &amp;lt;code&amp;gt;netifd&amp;lt;/code&amp;gt; to improve NFA765 wifi module compatibility.&lt;br /&gt;
* Improved fan control strategy and overall thermal behavior.&lt;br /&gt;
* Improved intelligent fan speed adjustment logic. &amp;lt;code&amp;gt;smart_quiet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;smart_cool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fixed UI crash when network mode was set to &#039;&#039;&#039;Cellular Only&#039;&#039;&#039;.&lt;br /&gt;
* Fixed an issue where 4G/5G band information was not displayed in the UI.&lt;br /&gt;
* Fixed missing information in the with some 5G module information page. &lt;br /&gt;
* Fixed 5G Signal not displaying error.&lt;br /&gt;
* Fixed the &#039;&#039;&#039;Remember Me&#039;&#039;&#039; login option not working after a system restart.&lt;br /&gt;
&lt;br /&gt;
== 2026-03-06 r7660 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.74, mac80211 to 6.12.61, python3 to 3.13.9 with related packages (PAM-based auth replacing deprecated &amp;lt;code&amp;gt;spwd&amp;lt;/code&amp;gt;), and system version to 26.04, fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem support&#039;&#039;&#039; — Full support including signal strength, temperature monitoring, IMEI, carrier/operator display, serving cell info, roaming preference, 4G/5G network mode and band selection, WWAN power off toggle via rfkill, network stats tracking, and hex-encoded operator name decoding.&lt;br /&gt;
* &#039;&#039;&#039;SMS reliability&#039;&#039;&#039; — Switched to PDU mode for all modems, fixed FM350-GL serial port handling, prompt detection, and response timeouts.&lt;br /&gt;
* &#039;&#039;&#039;Web terminal&#039;&#039;&#039; — Added web-based terminal (&amp;lt;code&amp;gt;/terminal&amp;lt;/code&amp;gt;) with persistent PTY sessions, fullscreen toggle, disconnect/reconnect, JetBrains Mono font, and mobile viewport optimization.&lt;br /&gt;
* &#039;&#039;&#039;Direct Power Mode &amp;amp; TCP BBR v3&#039;&#039;&#039; — Added power-on mode options for battery-free and quick-response applications (auto power-on when adapter connected, no battery required). Added TCP BBR v3 support with congestion control configuration in General Settings.&lt;br /&gt;
* &#039;&#039;&#039;Battery history &amp;amp; power event logging&#039;&#039;&#039; — Battery history chart with SQLite storage, fixed voltage scale, area fill, watt display, and power on/off event timeline. Persistent power event logging with voltage, current, SOC data, and DC plug/unplug tracking.&lt;br /&gt;
* &#039;&#039;&#039;Idle &amp;amp; low battery shutdown&#039;&#039;&#039; — Live idle shutdown countdown timer, low battery shutdown support, WiFi client idle monitoring (OR mode), battery-only auto-shutdown option, and 2% SOC tolerance for SOC estimation jumps.&lt;br /&gt;
* &#039;&#039;&#039;General Settings &amp;amp; timer page redesign&#039;&#039;&#039; — New General Settings page with language, timezone, hostname, and LuCI sync. Redesigned timer page with modern split-panel layout, compact full-width panes, and clarified Car/UPS mode descriptions.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active WAN shown first, public IPv6 detection, modem temperature display, 5G/4G indicator in network icon row, status-aware rendering, gateway underline, and optimized mobile header layout.&lt;br /&gt;
* &#039;&#039;&#039;Performance &amp;amp; UI/UX polish&#039;&#039;&#039; — Native Python ubus/uci wrappers, non-blocking IO caching, CPU powersave disabling big cores (A72), 3-month static asset caching, temperature and wattage charts, tab state preserved across refresh, single-language notifications, improved icons, Wiki and Community footer buttons, smart phone formatting, and verbose firmware upgrade progress.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-15 r7714 ==&lt;br /&gt;
* &#039;&#039;&#039;Kernel &amp;amp; system updates&#039;&#039;&#039; — Updated kernel to 6.12.91, fixed some recent critical security problems. Updated mac80211 to 6.18.26. fixed several CVEs.&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; - Updated base system and LuCI to 25.12. Added IEEE80211.BE support (Allow to enable 6GHz channels on QCNCM865 and MT7925).&lt;br /&gt;
* &#039;&#039;&#039;Smart WAN (WiFi-as-WAN)&#039;&#039;&#039; — New Smart WAN mode turns the onboard radio into an upstream WiFi client with automatic Ethernet → WiFi → Cellular failover. Phone-like auto-reconnect to known upstream WiFi, robust scan-device resolution, and a confirmation dialog before switching. The disabled STA radio is shown correctly with a dedicated &amp;quot;WAN (WiFi)&amp;quot; status.&lt;br /&gt;
* &#039;&#039;&#039;WiFi 7 (802.11be) &amp;amp; WPA3&#039;&#039;&#039; — Added WiFi 7 (BE) and WPA3-SAE support for PCIe cards, with correct htmode/channel handling for 5GHz BE and 6GHz BE, PCIe card-name detection, and normalized encryption values in the UI.&lt;br /&gt;
* &#039;&#039;&#039;Dashboard &amp;amp; header improvements&#039;&#039;&#039; — Active egress is now highlighted live (only the active WAN row lights up); exposes WiFisignal, active egress, and network mode; status-aware network icons with gateway underline, accurate WAN underline, red-cross for disabled links, and tooltips. Added public IPv6 / public-IP aliases.&lt;br /&gt;
* &#039;&#039;&#039;Battery &amp;amp; charge control&#039;&#039;&#039; — Added a battery charge-limit slider (80–100%) on the Device Control page, made charge-limit the single source of truth, fixed the battery icon to show the true charge percentage, and robustly default to 100% when never set.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Screen visual editor&#039;&#039;&#039; — New Figma-style visual layout editor for the device display, merged with the JSON view into a single Editor tab. Add/remove pages, per-element position reset, center &amp;amp; snap tools, reset-layout, live JSON diff, label/data-key canvas toggle, and a coordinate fix mapping editor coords to the device content region. Fixed the graph element type rendering on device.&lt;br /&gt;
* &#039;&#039;&#039;Screen custom data sources&#039;&#039;&#039; — Added custom metrics (command / uci / env / json_file / HTTPS) in the editor with on-device examples, one-click Save &amp;amp; Restart, live value preview on Refresh, duplicate-key warnings, clearer data_key guidance, Gold/AAPL examples via the official Photonicat market API, and flicker-free live preview.&lt;br /&gt;
* &#039;&#039;&#039;Device Control &amp;amp; network modes&#039;&#039;&#039; — Reordered network modes with composite WAN icons; consolidated the charge-limit setting onto the Device Control page.&lt;br /&gt;
* &#039;&#039;&#039;FM350-GL roaming&#039;&#039;&#039; — Enabled automatic roaming via &amp;lt;code&amp;gt;AT+COPS=0&amp;lt;/code&amp;gt; and hid the unenforceable &amp;quot;no roaming&amp;quot; option; fixed band selection being overwritten by polling refresh; removed the USB 3.12 10Gbps option that caused LAN/WAN failures.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — Added a &amp;lt;code&amp;gt;socketio_auth_required&amp;lt;/code&amp;gt; decorator for WebSocket endpoints, added auth to &amp;lt;code&amp;gt;/switch_locale&amp;lt;/code&amp;gt; and low-battery-shutdown routes, and removed unused/over-permissioned API endpoints.&lt;br /&gt;
* &#039;&#039;&#039;Performance&#039;&#039;&#039; — Reduced idle CPU usage (file-only logging by default, fewer select wakeups and uci forks), cached &amp;lt;code&amp;gt;data_stats.json&amp;lt;/code&amp;gt; and aligned dashboard caching to the display poll, dropped a no-op screen thread, and read WWAN rfkill state directly from sysfs.&lt;br /&gt;
* &#039;&#039;&#039;Mini-display performance&#039;&#039;&#039; — Major CPU reduction on the display loop (static-page CPU ~3.2% → ~1.4%, roughly 55% less): skip re-render/SPI blit on unchanged frames via a data-epoch gate, byte-compare before transferring pixels, and halve polling cadences. Fonts (incl. the ~37MB CJK collection) are now parsed once and cached/preloaded, and network lookups (wireless SSID, iwinfo client enumeration, public IP) are cached to cut process forks (~3.8/s → ~1.7/s).&lt;br /&gt;
&lt;br /&gt;
== 2026-06-16 r7715 ==&lt;br /&gt;
* &#039;&#039;&#039;Mini-display SPI clock reliability&#039;&#039;&#039; — Lowered the display SPI clock from 120 MHz to 50 MHz to eliminate visual glitches or display problems at the higher rate; the conservative timing trades a negligible refresh-latency increase for a stable, artifact-free image.&lt;br /&gt;
* &#039;&#039;&#039;Serial-number validation fix&#039;&#039;&#039; — Valid device serials were incorrectly shown as &amp;lt;code&amp;gt;(invalid)&amp;lt;/code&amp;gt; on-device because the signature check depended on the &amp;lt;code&amp;gt;cryptography&amp;lt;/code&amp;gt; module, which is not installed on the target OpenWrt image.&lt;br /&gt;
&lt;br /&gt;
== 2026-06-23 r7720 ==&lt;br /&gt;
* &#039;&#039;&#039;OpenWRT base system&#039;&#039;&#039; — Updated routing and telephony packages to OpenWRT 25.12 branch. Switch default firewall to fw4.&lt;br /&gt;
&lt;br /&gt;
== 2026-07-31 r7853 ==&lt;br /&gt;
* &#039;&#039;&#039;Boot time cut by 59% — 17.4 s → 7.2 s&#039;&#039;&#039; — A full reboot cycle is now 16.6 s instead of 28.0 s. The biggest single cause was a phantom &amp;lt;code&amp;gt;fstab&amp;lt;/code&amp;gt; entry that made every unit wait each boot for a disk that was never fitted. Also: root filesystem recompressed from &amp;lt;code&amp;gt;xz&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;zstd&amp;lt;/code&amp;gt;, squashfs re-tuned to 256 KiB blocks with direct reads, U-Boot no longer scans USB and the network for boot media, the boot logo is painted in one SPI transfer instead of 110,080 one-byte ones, and the failsafe window is 300 ms instead of 1 s.&lt;br /&gt;
* &#039;&#039;&#039;Optional services now ship idle&#039;&#039;&#039; — Docker, Samba, collectd, aria2, nlbwmon, watchcat, frp, filebrowser, rclone, adbyby, OpenAppFilter, Tailscale and ZeroTier are still installed but no longer autostart (73 → 59 running services); enable any of them with one click in &#039;&#039;&#039;System → Startup&#039;&#039;&#039;. &amp;lt;code&amp;gt;vnstat&amp;lt;/code&amp;gt; and the web terminal are deliberately left running.&lt;br /&gt;
* &#039;&#039;&#039;WAN priority table replaces Smart WAN mode&#039;&#039;&#039; — The &#039;&#039;&#039;Smart WAN&#039;&#039;&#039; switch from r7714 is now a single metric-based &#039;&#039;&#039;priority table&#039;&#039;&#039; listing every enabled uplink — Ethernet, upstream WiFi, PPPoE and Cellular — in a fixed slot order, falling back down the list. It replaces &amp;lt;code&amp;gt;mwan3&amp;lt;/code&amp;gt; entirely. Wired WAN now fails over immediately on carrier loss instead of waiting for a probe to time out, and PPPoE is correctly reported as the active egress.&lt;br /&gt;
* &#039;&#039;&#039;Upstream WiFi (WiFi-as-WAN)&#039;&#039;&#039; — Joins the stronger band automatically when one SSID is broadcast on both 2.4 and 5 GHz; roams to a saved network that comes back into range while still associated; rejoins known networks faster after roaming away; reports live association and standby state with per-radio icons; and scans less aggressively when no saved network is nearby.&lt;br /&gt;
* &#039;&#039;&#039;New /dev diagnostics page&#039;&#039;&#039; — A live 3D model of the device driven by the built-in G-sensor, with guided orientation calibration; a 2S2P 18650 pack diagram showing per-stage voltages; the MCU fuel-gauge log; and a modem dial log viewer. Tone tests and MIDI playback for the internal beeper.&lt;br /&gt;
* &#039;&#039;&#039;Fibocom FM350-GL 5G modem&#039;&#039;&#039; — The dialer is rewritten from Python to native C for reliability. It now honours the network-mode preference set in the web UI, locks to 4G when asked and climbs back to 5G when available, falls back to LTE if a 5G dial fails, and watches the data plane to catch a connection that is up but not passing traffic. Fixed a 4G-only SIM causing an endless modem power-cycle, and automatic mode being reported as 5G when it was not. Modem firmware version is now shown, with a firmware-update dialog.&lt;br /&gt;
* &#039;&#039;&#039;Modem dial log&#039;&#039;&#039; — The last 16 MB of dialling activity is kept in memory and viewable from the web UI, so an intermittent connection problem can be diagnosed after the fact.&lt;br /&gt;
* &#039;&#039;&#039;Battery charge limit&#039;&#039;&#039; — 1% resolution slider, synchronised to the MCU with debounced saves and re-read live so the UI always reflects what the hardware is enforcing. The limit now survives an MCU restart.&lt;br /&gt;
** &#039;&#039;&#039;Hardware requirement:&#039;&#039;&#039; the battery charge limit is only supported on &#039;&#039;&#039;PCB revision A3&#039;&#039;&#039; boards. Earlier board revisions do not support it.&lt;br /&gt;
* &#039;&#039;&#039;Firmware and MCU update flow&#039;&#039;&#039; — Version dropdowns with per-version changelogs and downgrade support; MCU and firmware updates can no longer run at the same time; no update is offered when the installed MCU is newer than the server&#039;s; and OTA now defaults to &amp;lt;code&amp;gt;sysupgrade -c -p&amp;lt;/code&amp;gt;, with the individual flags exposed as tick boxes.&lt;br /&gt;
* &#039;&#039;&#039;PhotonDNS&#039;&#039;&#039; — A new high-performance DNS forwarder written in Rust: sharded LRU cache, serve-stale, prefetching, cache persistence, UDP/TCP/DoT/DoH upstreams and hedged-racing failover with per-upstream health tracking, plus China-list and ad-list helpers. Ships with its own LuCI page but &#039;&#039;&#039;disabled by default&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Security hardening&#039;&#039;&#039; — CSRF is now enforced, the LuCI password is no longer leaked to the page, all API routes require authentication, state changes are POST-only, developer endpoints are gated, an open-redirect was closed, and &#039;&#039;&#039;Remember Me&#039;&#039;&#039; now uses proper SQLite-backed tokens.&lt;br /&gt;
* &#039;&#039;&#039;Captive portal&#039;&#039;&#039; — One-tap accept, portal URLs that work without DNS, branded error pages, serialised enable/disable so rapid toggling cannot leave it half-configured, and failures are surfaced instead of silently ignored.&lt;br /&gt;
* &#039;&#039;&#039;Lower idle CPU and less flash wear&#039;&#039;&#039; — Heavy modem AT queries only run when the modem page is open, usage statistics are batched to flash with retention and indexing, PMU settings poll every 60 s instead of continuously, public-IP probes back off, and hidden browser tabs stop polling altogether.&lt;br /&gt;
* &#039;&#039;&#039;Mini display&#039;&#039;&#039; — New cat wake-up boot animation. Per-page refresh rates (2 Hz on the clock and CPU pages, 1 Hz while pinging) instead of one fixed rate. Per-core CPU bars, a memory bar with the value inside, per-disk usage bars and a scrolling SSID ticker. iStat-style bars with supersampled anti-aliasing and softer text. Battery remaining-time slot, WAN mode line, configurable public-IP lookup, true physical-zero backlight at brightness 0, and standby when the upstream link is not associated.&lt;br /&gt;
* &#039;&#039;&#039;WiFi fixes&#039;&#039;&#039; — Fixed the intermittent failure where the access point came up but did not broadcast its SSID after boot, and WLAN-enabled detection under the new OpenWrt, where a radio only works if both the interface and the device are enabled. Added a &#039;&#039;&#039;reset WiFi to defaults&#039;&#039;&#039; button to recover from a bad configuration.&lt;br /&gt;
* &#039;&#039;&#039;eMMC compatibility&#039;&#039;&#039; — Internal storage is now pinned to HS200 at 52 MHz in both the bootloader and the kernel, eliminating a class of intermittent storage errors.&lt;br /&gt;
* &#039;&#039;&#039;Assorted fixes&#039;&#039;&#039; — CPU powersave setting now persists across reboot; manual fan speed survives a page refresh; the battery correctly shows as discharging while powering an external device over USB Type-C; PPPoE keepalive relaxed to &amp;lt;code&amp;gt;5 5&amp;lt;/code&amp;gt; to stop spurious drops; &amp;lt;code&amp;gt;irqbalance&amp;lt;/code&amp;gt; removed in favour of static Ethernet IRQ pinning after it was found parking both NIC interrupts on one core; missing English strings added; Alpine.js updated to 3.15.12.&lt;br /&gt;
&lt;br /&gt;
=== MCU Changes ===&lt;br /&gt;
* &#039;&#039;&#039;Less standby power&#039;&#039;&#039; — Standby current drops from about 2.6 mA to 1.1 mA, so a charged pack holds its charge for weeks rather than days when the device is off. The current monitor, accelerometer and flash now power down properly, and the fan actually stops when the main board is off.&lt;br /&gt;
* &#039;&#039;&#039;A more accurate battery percentage&#039;&#039;&#039; — The fuel gauge has been reworked end to end with temperature compensation, self-learned internal resistance and periodic re-anchoring. The reading no longer jumps (for example 40% to 80% after a firmware update), survives reboots and firmware updates, and reports true learned capacity and cycle count. Behaviour is now much closer to a phone&#039;s.&lt;br /&gt;
* &#039;&#039;&#039;New LED behaviour&#039;&#039;&#039; — MacBook-style indicator: the colour tells you the charge state and the motion tells you what the device is doing, with smooth gamma-corrected breathing while charging and a continuous red flash when the battery is low. Several false pure-red flashes at power-on and when the pack was full have been fixed.&lt;br /&gt;
* &#039;&#039;&#039;Raise-to-wake improved&#039;&#039;&#039; — Rebuilt as proper gesture detection, like a phone&#039;s. It no longer wakes by itself when the device is stood upright and left alone, and responds faster when you do pick it up.&lt;br /&gt;
* &#039;&#039;&#039;Stability and power-on speed&#039;&#039;&#039; — Fixed the random freeze after extended running and the rarer permanent lockup that could only be cleared by removing the battery. Power-on is quicker: the main board powers as soon as the button has been held 200 ms, overlapping the long-press window. Beeper timing is corrected, including the charger-plugged beep that could arrive 40–50 s late, and reset and update operations now play a short confirmation melody.&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
</feed>