Releases: TekuSP/framework-dotnet
Release list
v0.9.302 Update framework ffi and extend functionality
Sync framework-system-ffi-extensions v0.6.2.93 -> v0.6.3.102 (nested
framework-system v0.6.4-3 -> v0.6.5-19) and wrap all 46 newly exported
functions. The FFI grew from 44 to 90 entry points across two tranches:
PD controller/charger/retimer info, GPIO, thermal thresholds and sensor
names, Smart Battery, EC diagnostics (hello, sysinfo, protocol info,
panic data, port 80 history, switches, AP throttle, ADC), hibernate
delay, standalone mode, GPU serial, input controls, and nine handle-free
HID/USB peripheral calls.
Group the new EC surface into facets on IFrameworkEcConnection rather
than flattening ~65 members onto one interface: Diagnostics, Gpio,
Thermal, Battery, PowerDelivery, Input and PowerManagement. Each facet
borrows the connection's handle through an accessor, so every call runs
the same ObjectDisposedException check as the existing members. The nine
handle-free calls go on a new IFrameworkPeripherals/FrameworkPeripherals
pair, mirroring IFrameworkSystem/FrameworkSystem so they stay mockable.
Handle FrameworkStatusCode.NotSupported (-9), added by this FFI release.
It previously fell through to the default arm of the status mapping and
surfaced as ArgumentOutOfRangeException; NVMe version readback on
non-Linux hosts returns it, so it now maps to a dedicated
FrameworkNotSupportedStatusException. Unlike DataUnavailable, it means
the capability is not compiled in for the platform and is permanent.
Notable correctness details, verified against upstream framework_lib:
- Port 80 history:
writesis the next write slot, so the newest
entry is at (writes - 1) % history_size. The native ABI comment states
writes % history_size, which names the oldest entry once the ring has
wrapped. Partially filled rings expose only the slots actually written. - Retimer version is four raw I2C register bytes, not text. It is exposed
as bytes plus a hex-quad VersionString matching upstream's rendering,
and gated to Framework 16, whose expansion-bay command backs it. - Smart Battery capacities switch to 10 mWh units when BatteryMode bit 15
is set, so they are surfaced as parallel ElectricCharge?/Energy? sets
selected by IsCapacityReportedInEnergyUnits rather than as a single
mistyped quantity. - Per-key RGB is gated to Framework Desktop, which is what upstream
documents; the Framework 16 keyboard is not EC-controlled. - RemapCapsLockToControl hardcodes the Framework 12 matrix position, so
it is documented as model-specific rather than universal.
Interface change: IFrameworkEcConnection gains seven facet properties.
Existing members are untouched, so callers are unaffected, but external
implementers of the interface must add them.
Also update the CLI demo with read-only panels for every new facet,
keeping Smart Battery and the audio card version out of the refresh loop
because both are too expensive to poll, and add 21 hardware tests
covering the new surface plus a hardware-free Port 80 ordering
regression test. 41/41 pass on Framework hardware.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
To commit it as-is (this stages everything, including the submodule pointer bump to 40f98e0):
git add -A && git commit -F - <<'EOF'
feat: expose the full v0.6.3.98 FFI surface
Sync framework-system-ffi-extensions v0.6.2.93 -> v0.6.3.98 (nested
framework-system v0.6.4-3 -> v0.6.5-19) and wrap all 46 newly exported
functions. The FFI grew from 44 to 90 entry points across two tranches:
PD controller/charger/retimer info, GPIO, thermal thresholds and sensor
names, Smart Battery, EC diagnostics (hello, sysinfo, protocol info,
panic data, port 80 history, switches, AP throttle, ADC), hibernate
delay, standalone mode, GPU serial, input controls, and nine handle-free
HID/USB peripheral calls.
Group the new EC surface into facets on IFrameworkEcConnection rather
than flattening ~65 members onto one interface: Diagnostics, Gpio,
Thermal, Battery, PowerDelivery, Input and PowerManagement. Each facet
borrows the connection's handle through an accessor, so every call runs
the same ObjectDisposedException check as the existing members. The nine
handle-free calls go on a new IFrameworkPeripherals/FrameworkPeripherals
pair, mirroring IFrameworkSystem/FrameworkSystem so they stay mockable.
Handle FrameworkStatusCode.NotSupported (-9), added by this FFI release.
It previously fell through to the default arm of the status mapping and
surfaced as ArgumentOutOfRangeException; NVMe version readback on
non-Linux hosts returns it, so it now maps to a dedicated
FrameworkNotSupportedStatusException. Unlike DataUnavailable, it means
the capability is not compiled in for the platform and is permanent.
Notable correctness details, verified against upstream framework_lib:
- Port 80 history:
writesis the next write slot, so the newest
entry is at (writes - 1) % history_size. The native ABI comment states
writes % history_size, which names the oldest entry once the ring has
wrapped. Partially filled rings expose only the slots actually written. - Retimer version is four raw I2C register bytes, not text. It is exposed
as bytes plus a hex-quad VersionString matching upstream's rendering,
and gated to Framework 16, whose expansion-bay command backs it. - Smart Battery capacities switch to 10 mWh units when BatteryMode bit 15
is set, so they are surfaced as parallel ElectricCharge?/Energy? sets
selected by IsCapacityReportedInEnergyUnits rather than as a single
mistyped quantity. - Per-key RGB is gated to Framework Desktop, which is what upstream
documents; the Framework 16 keyboard is not EC-controlled. - RemapCapsLockToControl hardcodes the Framework 12 matrix position, so
it is documented as model-specific rather than universal.
Interface change: IFrameworkEcConnection gains seven facet properties.
Existing members are untouched, so callers are unaffected, but external
implementers of the interface must add them.
Also update the CLI demo with read-only panels for every new facet,
keeping Smart Battery and the audio card version out of the refresh loop
because both are too expensive to poll, and add 21 hardware tests
covering the new surface plus a hardware-free Port 80 ordering
regression test. 41/41 pass on Framework hardware.
v0.8.213 - Fix USB C PD count in FW 16
What's Changed
Full Changelog: v0.8.208...v0.8.213
v0.8.208 - Solves USB PD Detection + Shows port capabilities
What's Changed
Full Changelog: v0.7.203...v0.8.208
Introduces static, platform-specific capability tables for USB-C expansion
slots and expansion bay ports. The EC does not report these details, so
this provides documented information on data lanes, DisplayPort versions,
and maximum charging wattages.
This also correctly determines the number of USB-C slots for each platform
(e.g., Framework 16 has 6, Framework Desktop has 2, others 4) and clears
live PD state for slots that do not support Power Delivery.
v0.7.203 - Expose Framework Laptop 16 input module physical position
Introduce FrameworkInputModulePosition enum to describe the physical
slot of input-deck modules on the Framework Laptop 16. This position
information is now included in FrameworkModuleDescriptorSnapshot,
providing more granular context for module identification and placement.
What's Changed
Full Changelog: v04.0.195...v0.7.203
v04.0.195 - Add sensor name to temperature snapshots Expose the platform-specific role name of temperature sensors in FrameworkTemperatureSnapshot. This provides more granular context for temperature readings, indicating the source such as CPU, Battery, or GPU VRAM.
What's Changed
- Bump version to 0.5.0 by @TekuSP in #26
- Bump actions/cache from 5 to 6 by @dependabot[bot] in #27
- Bump Spectre.Console from 0.57.0 to 0.57.1 by @dependabot[bot] in #29
- Bump Microsoft.NET.Test.Sdk from 18.6.0 to 18.7.0 by @dependabot[bot] in #28
Full Changelog: v0.3.177...v04.0.195
v0.3.177
What's Changed
- Bump version to 0.4.0 by @TekuSP in #17
- Bump csbindgen from 1.9.7 to 1.9.8 by @dependabot[bot] in #18
- Bump Microsoft.NET.Test.Sdk from 18.5.1 to 18.6.0 by @dependabot[bot] in #19
- Bump Spectre.Console from 0.55.2 to 0.56.0 by @dependabot[bot] in #20
- Bump System.IO.Hashing from 10.0.8 to 10.0.9 by @dependabot[bot] in #22
- Bump Microsoft.Extensions.DependencyInjection from 10.0.8 to 10.0.9 by @dependabot[bot] in #21
- Bump Spectre.Console from 0.56.0 to 0.57.0 by @dependabot[bot] in #23
- Bump actions/checkout from 6 to 7 by @dependabot[bot] in #24
- Update to framework-ffi 0.3.1 by @TekuSP in #25
- Reading chassis intrusion status, including current state and history.
- Setting a charge current limit for the battery, optionally conditional on SoC.
- Retrieving EC uptime and S0ix counter information.
- Resetting the S0ix counter.
- Overriding tablet mode detection on compatible platforms (Framework 12/13).
- Setting the input deck mode specifically for Framework 16.
- Setting keyboard backlight brightness.
- Controlling fingerprint LED levels, with validation against unsupported Unknown and Custom states.
- Reading the current state of privacy switches (microphone and camera enabled status).
- Reading and setting battery charge limits, facilitating features like battery health mode.
- Add acceleration and motion sensors, Active Charge Port, and Board Info
Full Changelog: v0.3.147...v0.3.177
v0.3.147 - Added new Framework System, added support for module detection
What's Changed
- Bump Microsoft.NET.Test.Sdk from 18.4.0 to 18.5.1 by @dependabot[bot] in #7
- Publish sample app bundles as release assets by @Copilot in #8
- Align release bump workflow with minor-version rollover and workflow version prefixes by @Copilot in #9
- Bump version to 0.3.0 by @github-actions[bot] in #10
- Bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #11
- Bump NUnit from 4.5.1 to 4.6.0 by @dependabot[bot] in #12
- Bump Microsoft.Extensions.DependencyInjection from 10.0.7 to 10.0.8 by @dependabot[bot] in #13
- Bump Microsoft.SourceLink.GitHub from 10.0.203 to 10.0.300 by @dependabot[bot] in #14
- Add modules support by @TekuSP in #15
- Bump NUnit from 4.6.0 to 4.6.1 by @dependabot[bot] in #16
New Contributors
- @dependabot[bot] made their first contribution in #7
- @Copilot made their first contribution in #8
- @github-actions[bot] made their first contribution in #10
Full Changelog: v0.2.1.82...v0.3.147
v0.2.1 - Updated release from new FFI repo
What's Changed
- Add GitHub Actions for sample app publish by @TekuSP in #4
- Better caches in actions by @TekuSP in #6
New Contributors
Full Changelog: v0.2.0.34...v0.2.1.82
This release is now based on pure framework-system, with own FFI library above it, with this library above it.
See: https://github.com/TekuSP/framework-system-ffi-extensions
We now upload sample app for testing how library works too!
v0.2.0.34 - First confident release of framework-dotnet
FrameworkDotnet - .NET Port of Framework System - https://github.com/FrameworkComputer/framework-system
Full Changelog: https://github.com/TekuSP/framework-dotnet/commits/v0.2.0.34
This is first release, I hope I did everything right.
This release only contains following:
- Battery and Power Management
- Fan control and status
- Temperature status and values
- Basic commands to query EC
- Basic commands to control fans
More to be added in the future!