From 27899c912666f8ac5c1f09aef8f78c3e3b00886e Mon Sep 17 00:00:00 2001 From: Edward Viaene Date: Tue, 3 Nov 2026 14:39:49 -0600 Subject: [PATCH] embeddedci 2.13.7 and embeddedci-mcp 2.13.8: LA up to 48 MS/s, pre-trigger embeddedci 2.13.7: Trigger(pre_samples=), LaCapture.pre_samples and LaCapture.truncated, capture_la above 12 MS/s on gateware v50. embeddedci-mcp 2.13.8 requires it, so the older-SDK fallback goes. Co-Authored-By: Claude Opus 5.5 --- packages/embeddedci-mcp/CHANGELOG.md | 5 +++++ packages/embeddedci-mcp/pyproject.toml | 4 ++-- packages/embeddedci-mcp/server.json | 4 ++-- packages/embeddedci-mcp/src/embeddedci_mcp/server.py | 10 +--------- .../embeddedci-mcp/src/embeddedci_mcp/summaries.py | 4 +--- packages/embeddedci/CHANGELOG.md | 8 ++++++++ packages/embeddedci/pyproject.toml | 2 +- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/embeddedci-mcp/CHANGELOG.md b/packages/embeddedci-mcp/CHANGELOG.md index da7bc8c..0dfe3ec 100644 --- a/packages/embeddedci-mcp/CHANGELOG.md +++ b/packages/embeddedci-mcp/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog — `embeddedci-mcp` +## 2.13.8 + +- Requires `embeddedci` 2.13.7. `capture_la` takes `trigger_pre_samples`, and its result reports + `pre_samples` and `truncated` (LA up to 48 MS/s with gateware v50). + ## 2.13.7 - Requires `embeddedci` 2.13.6, so `capture_adc` `oversample` always works. diff --git a/packages/embeddedci-mcp/pyproject.toml b/packages/embeddedci-mcp/pyproject.toml index 616c972..65d23fd 100644 --- a/packages/embeddedci-mcp/pyproject.toml +++ b/packages/embeddedci-mcp/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "embeddedci-mcp" -version = "2.13.7" +version = "2.13.8" description = "MCP server that lets AI agents drive an EmbeddedCI BenchPod hardware-in-the-loop bench" readme = "README.md" requires-python = ">=3.10" @@ -26,7 +26,7 @@ classifiers = [ dependencies = [ # cloud: the embeddedci: destination; discovery: connect("discover") over mDNS; # analysis: dominant frequency in capture summaries. - "embeddedci[cloud,discovery,analysis]>=2.13.6,<3", + "embeddedci[cloud,discovery,analysis]>=2.13.7,<3", "mcp>=1.12,<2", "anyio>=4", "pydantic>=2.7", diff --git a/packages/embeddedci-mcp/server.json b/packages/embeddedci-mcp/server.json index 6d97b85..dbc7d7d 100644 --- a/packages/embeddedci-mcp/server.json +++ b/packages/embeddedci-mcp/server.json @@ -3,7 +3,7 @@ "name": "io.github.embeddedci-com/embeddedci-mcp", "title": "EmbeddedCI BenchPod", "description": "Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic.", - "version": "2.13.7", + "version": "2.13.8", "websiteUrl": "https://www.embeddedci.com/docs/benchpod-mcp", "repository": { "url": "https://github.com/embeddedci-com/embeddedci-python", @@ -15,7 +15,7 @@ "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "embeddedci-mcp", - "version": "2.13.7", + "version": "2.13.8", "runtimeHint": "uvx", "transport": { "type": "stdio" diff --git a/packages/embeddedci-mcp/src/embeddedci_mcp/server.py b/packages/embeddedci-mcp/src/embeddedci_mcp/server.py index 9bd8e88..dd0827b 100644 --- a/packages/embeddedci-mcp/src/embeddedci_mcp/server.py +++ b/packages/embeddedci-mcp/src/embeddedci_mcp/server.py @@ -288,15 +288,7 @@ def _channel(pod: Any, value: Any, key: str) -> int: def _trigger(la: Any, edge: str, pre_samples: int = 0) -> Optional[Trigger]: """A :class:`Trigger` for the capture tools (the SDK resolves wiring names).""" - if la is None: - return None - if not pre_samples: # an SDK older than pre_samples takes the two arguments - return Trigger(la, edge) # type: ignore[arg-type] - try: - return Trigger(la, edge, pre_samples) # type: ignore[arg-type,call-arg] - except TypeError: - raise ValueError("trigger_pre_samples needs embeddedci with Trigger(pre_samples=...); " - "upgrade the embeddedci package") from None + return None if la is None else Trigger(la, edge, pre_samples) # type: ignore[arg-type] # -- connection --------------------------------------------------------------------- diff --git a/packages/embeddedci-mcp/src/embeddedci_mcp/summaries.py b/packages/embeddedci-mcp/src/embeddedci_mcp/summaries.py index 5f812ab..6fee9fb 100644 --- a/packages/embeddedci-mcp/src/embeddedci_mcp/summaries.py +++ b/packages/embeddedci-mcp/src/embeddedci_mcp/summaries.py @@ -98,9 +98,7 @@ def la_summary(la: LaCapture) -> m.LaCaptureResult: )) return m.LaCaptureResult(samples=len(la), sample_rate_hz=rate, duration=la.duration, channels=channels, trigger=trigger_text(la.trigger), - # getattr: an SDK older than these fields (the MCP's minimum pin) - pre_samples=getattr(la, "pre_samples", 0), - truncated=getattr(la, "truncated", "") or None) + pre_samples=la.pre_samples, truncated=la.truncated or None) # -- wiring, pins and power ------------------------------------------------------------ diff --git a/packages/embeddedci/CHANGELOG.md b/packages/embeddedci/CHANGELOG.md index d1c4038..f225856 100644 --- a/packages/embeddedci/CHANGELOG.md +++ b/packages/embeddedci/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog — `embeddedci` +## 2.13.7 + +- `capture_la` goes up to 48 MS/s with gateware v50 (firmware 3.9.6+): above 12 MS/s the pod records + only the changes and replies in the usual form, so the call is unchanged. +- `Trigger(la, edge, pre_samples=N)`: `capture_la` also returns up to N samples from before the + trigger (gateware v50+); `LaCapture.pre_samples` says how many it holds. +- `LaCapture.truncated`: `"busy"` or `"memory"` when a capture above 12 MS/s stopped early. + ## 2.13.6 - `BenchPod.capture_adc(..., oversample=True)` converts at 400 kS/s and averages down to the requested diff --git a/packages/embeddedci/pyproject.toml b/packages/embeddedci/pyproject.toml index 66b3bb9..66d9d1f 100644 --- a/packages/embeddedci/pyproject.toml +++ b/packages/embeddedci/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "embeddedci" -version = "2.13.6" +version = "2.13.7" description = "BenchPod SDK and pytest plugin for EmbeddedCI hardware-in-the-loop testing" readme = "README.md" requires-python = ">=3.10"