Refresh puter UI, power telemetry and demand-aware monitoring
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Power reporting
|
||||
|
||||
Battery telemetry now uses IORegistryEntryCreateCFProperties on AppleSmartBattery,
|
||||
not regular expressions over human-readable `ioreg` output. On this macOS build,
|
||||
the tree-prefix indentation caused the old reader to miss BatteryInstalled and
|
||||
every top-level battery/adapter field.
|
||||
|
||||
Readings have separate meanings:
|
||||
|
||||
- System load: PowerTelemetryData.SystemLoad in milliwatts, converted to watts.
|
||||
- Charger → Mac: SystemPowerIn, only while ExternalConnected. This includes
|
||||
charging; it is not wall-socket consumption or the charger's rated maximum.
|
||||
- Battery: voltage × signed current. Positive current charges, negative current
|
||||
discharges. Two's-complement unsigned current is decoded as signed Int64.
|
||||
- Reported capability: AdapterDetails.Watts. The charger's model name may say
|
||||
140 W while the current connection reports only 94 W available.
|
||||
- Negotiated ceiling: AdapterVoltage × Current, not measured current draw.
|
||||
|
||||
Unknown readings are not rendered as zero. Zero battery current remains a valid
|
||||
idle reading. Disconnected adapters are dropped even if stale registry details
|
||||
remain. Capacity falls back to nested BatteryData on newer registry layouts.
|
||||
Missing capacity/temperature no longer implies a dead battery or 0 °C.
|
||||
Available SMC power readings remain a fallback; fresh registry data takes priority.
|
||||
|
||||
Registry keys are hardware/OS-dependent and are not a universal power-meter API.
|
||||
Values are point-in-time samples; their sum may differ because of sampling times,
|
||||
conversion losses and sensor coverage. No wall-power or cable e-marker claims.
|
||||
|
||||
The dropdown is a native NSPopover anchored to an NSStatusItem. Left-click toggles
|
||||
the panel, right-click presents native metric/update-speed submenus. Command-Shift-M
|
||||
opens the same panel from the Options menu. Power rows have contextual copy actions
|
||||
and explanatory help. The native popover owns its outer material and rounding;
|
||||
actions use Liquid Glass on macOS 26+. Reduce Transparency uses an opaque content
|
||||
background. There is no second glass rectangle with competing corner radii.
|
||||
|
||||
Popover show/close events join the existing demand scheduler. Opening it requests
|
||||
power/system samples at five-second cadence, without full process inventory,
|
||||
port enumeration, fan scanning or slow hardware diagnostics. Closing it drops
|
||||
that demand. Menu-bar readings remain observed even with the main window closed.
|
||||
|
||||
Tests cover charging, discharging, two's-complement current, zero vs unknown,
|
||||
invalid values, nested capacities and dropdown-only sampling demand.
|
||||
|
||||
Validation on 22 September 2026: 38 tests passed and Release built successfully.
|
||||
Computer use verified the panel's live battery/charger values, removed duplicate
|
||||
corner arcs, and opened the native reading submenu with Battery power and Charger
|
||||
input choices. The submenu originally dismissed its parent; native menu-tracking
|
||||
notifications now suspend transient popover dismissal while menus are active.
|
||||
Actual right-click status-button behavior and all appearance/accessibility modes
|
||||
still need broader manual coverage; automated tests do not establish those.
|
||||
|
||||
Native API reference:
|
||||
https://developer.apple.com/documentation/iokit/1514310-ioregistryentrycreatecfpropertie
|
||||
Reference in New Issue
Block a user