silabs-pycommander-cli 1.0.0__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ from .commander import Commander
15
+ from .adapter import Adapter
16
+ from .target import Target
17
+ from .aemstream import AemStream
18
+
19
+ from pycommander_core.commander_base import CommanderResult
20
+ from pycommander_core._version import __version__
21
+
22
+ __all__ = [
23
+ "Commander",
24
+ "Adapter",
25
+ "Target",
26
+ "AemStream",
27
+ "CommanderResult",
28
+ "__version__",
29
+ ]
@@ -0,0 +1,18 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ # Entry point for `pycommander` command and `python3 -m pycommander`
15
+ from .cli import main
16
+
17
+ if __name__ == "__main__":
18
+ raise SystemExit(main())
@@ -0,0 +1,5 @@
1
+ # Local Development
2
+
3
+ If you are working on a local build of the pycommander packages, run the `scripts/download_commander_archives.py` script to download the relevant Commander executables for your platform and place the CLI version in this directory.
4
+
5
+ Do not extract the downloaded archive; the Commander executable will be automatically extracted from this directory when needed.
@@ -0,0 +1,12 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
@@ -0,0 +1,65 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ from pycommander_core.adapter_base import AdapterBase
15
+ from pycommander_core.target import Target
16
+
17
+ from .commander import Commander
18
+
19
+ class Adapter(AdapterBase):
20
+ def __init__(self,
21
+ serial_number: str | None = None,
22
+ ip_address: str | None = None,
23
+ serial_port: str | None = None,
24
+ target_device: str | None = None,
25
+ debug_speed: int | None = None,
26
+ debug_tif: str | None = None,
27
+ debug_irpre: int | None = None,
28
+ debug_drpre: int | None = None,
29
+ commander: Commander | None = None):
30
+ """Initialize the Adapter class. Either serial_number, ip_address, or serial_port must be provided.
31
+
32
+ The convenience methods on this class are only available on Silicon Labs adapters,
33
+ and are not available when using a generic J-Link adapter.
34
+
35
+ Args:
36
+ serial_number (str): The serial number of the adapter.
37
+ ip_address (str): The IP address of the adapter.
38
+ serial_port (str): The serial port/device file of the adapter.
39
+ target_device (str): The target device of the adapter. Required.
40
+ debug_speed (int): The debug speed of the adapter. Optional.
41
+ debug_tif (str): The debug TIF of the adapter. Optional.
42
+ debug_irpre (int): The debug IRPRE of the adapter. Optional.
43
+ debug_drpre (int): The debug DRPRE of the adapter. Optional.
44
+ """
45
+
46
+ if commander is None:
47
+ if not (serial_number or ip_address or serial_port):
48
+ raise ValueError("Either serial_number, ip_address, or serial_port must be provided")
49
+
50
+ commander = Commander(
51
+ serial_number=serial_number,
52
+ ip_address=ip_address,
53
+ serial_port=serial_port,
54
+ debug_speed=debug_speed,
55
+ debug_tif=debug_tif,
56
+ debug_irpre=debug_irpre,
57
+ debug_drpre=debug_drpre,
58
+ )
59
+
60
+ if target_device:
61
+ target = Target(part_number=target_device, commander=commander)
62
+ else:
63
+ target = None
64
+
65
+ super().__init__(commander=commander, target=target)
@@ -0,0 +1,61 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ from pycommander_core.aemstream_base import AemStreamBase
15
+
16
+ from pycommander_cli.commander import Commander
17
+
18
+ class AemStream(AemStreamBase):
19
+ """
20
+ High-level interface for continuous AEM data captures.
21
+ This class can be used in a context manager to simplify the handling
22
+ of opening and closing the AemStream. This class can only be used with
23
+ Silicon Labs adapters.
24
+
25
+ Args:
26
+ serial_number: Serial number of the adapter
27
+ ip_address: IP address of the adapter
28
+ datarate_hz: Output data rate in Hz.
29
+ duration_s: Capture duration in seconds.
30
+ triggerabove_ma: Trigger above this current in mA.
31
+ triggerbelow_ma: Trigger below this current in mA.
32
+ triggertimeout_s: Trigger timeout in seconds.
33
+ pretrigger_ms: Pre-trigger capture duration in milliseconds.
34
+ calibrate: Whether to run calibration before capturing data. Defaults to False.
35
+
36
+ Examples:
37
+ with AemStream(serial_number="123456789", datarate_hz=100, duration_s=10) as stream:
38
+ for measurement in stream:
39
+ print(measurement)
40
+ """
41
+ def __init__(self,
42
+ serial_number: str | None = None,
43
+ ip_address: str | None = None,
44
+ datarate_hz: int | None = None,
45
+ duration_s: float | None = None,
46
+ triggerabove_ma: float | None = None,
47
+ triggerbelow_ma: float | None = None,
48
+ triggertimeout_s: float | None = None,
49
+ pretrigger_ms: int | None = None,
50
+ calibrate: bool = False):
51
+
52
+ commander = Commander(serial_number=serial_number, ip_address=ip_address)
53
+
54
+ super().__init__(commander=commander,
55
+ datarate_hz=datarate_hz,
56
+ duration_s=duration_s,
57
+ triggerabove_ma=triggerabove_ma,
58
+ triggerbelow_ma=triggerbelow_ma,
59
+ triggertimeout_s=triggertimeout_s,
60
+ pretrigger_ms=pretrigger_ms,
61
+ calibrate=calibrate)
pycommander_cli/cli.py ADDED
@@ -0,0 +1,25 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ import sys
15
+
16
+ from pycommander_core.cli import PyCommanderCLI
17
+
18
+ def main() -> int:
19
+ cli = PyCommanderCLI(cli=True)
20
+ args = sys.argv[1:] # Skip the script name
21
+ return cli.run(*args)
22
+
23
+
24
+ if __name__ == "__main__":
25
+ raise SystemExit(main())
@@ -0,0 +1,41 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ from pathlib import Path
15
+
16
+ from pycommander_core.commander_base import CommanderBase
17
+
18
+ class Commander(CommanderBase):
19
+ def __init__(self,
20
+ serial_number: str | None = None,
21
+ ip_address: str | None = None,
22
+ serial_port: str | None = None,
23
+ target_device: str | None = None,
24
+ debug_speed: int | None = None,
25
+ debug_tif: str | None = None,
26
+ debug_irpre: int | None = None,
27
+ debug_drpre: int | None = None,
28
+ log_file_path: Path | None = None,
29
+ executable_path: Path | None = None):
30
+
31
+ super().__init__(serial_number=serial_number,
32
+ ip_address=ip_address,
33
+ serial_port=serial_port,
34
+ target_device=target_device,
35
+ debug_speed=debug_speed,
36
+ debug_tif=debug_tif,
37
+ debug_irpre=debug_irpre,
38
+ debug_drpre=debug_drpre,
39
+ log_file_path=log_file_path,
40
+ executable_path=executable_path,
41
+ cli=True)
@@ -0,0 +1,14 @@
1
+ """
2
+ License
3
+ Copyright 2026 Silicon Laboratories Inc. www.silabs.com
4
+ *******************************************************************************
5
+ The licensor of this software is Silicon Laboratories Inc. Your use of this
6
+ software is governed by the terms of Silicon Labs Master Software License
7
+ Agreement (MSLA) available at
8
+ www.silabs.com/about-us/legal/master-software-license-agreement. This
9
+ software is distributed to you in Source Code format and is governed by the
10
+ sections of the MSLA applicable to Source Code.
11
+ *******************************************************************************
12
+ """
13
+
14
+ from pycommander_core.target import Target
@@ -0,0 +1,267 @@
1
+ Metadata-Version: 2.4
2
+ Name: silabs-pycommander-cli
3
+ Version: 1.0.0
4
+ Summary: Python library for Silicon Labs Simplicity Commander (CLI version)
5
+ Project-URL: Homepage, https://github.com/SiliconLabsSoftware/pycommander
6
+ Author: Silicon Labs
7
+ License-Expression: LicenseRef-MSLA
8
+ License-File: LICENSE.md
9
+ Requires-Python: >=3.10
10
+ Requires-Dist: silabs-pycommander-core==1.0.0
11
+ Description-Content-Type: text/markdown
12
+
13
+ # Silicon Labs PyCommander (CLI version)
14
+
15
+ ## Introduction
16
+
17
+ This Python package wraps Simplicity Commander functionality and exposes a native Python API for interacting with Commander in your scripts.
18
+
19
+ ## Requirements
20
+
21
+ This package requires Python 3.10 or newer. Required PyPI packages are:
22
+
23
+ - platformdirs
24
+ - pyyaml
25
+
26
+ Additionally, Simplicity Commander requires the SEGGER J-Link drivers to be installed on your system.
27
+
28
+ Note that this package only contains the CLI version of Simplicity Commander. The GUI version is available in the `silabs-pycommander-gui` package.
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ pip install silabs-pycommander-cli
34
+ ```
35
+
36
+ ## Usage
37
+
38
+ More details about Simplicity Commander and its Command Line Interface can be found in the [official documentation for Simplicity Commander](https://docs.silabs.com/simplicity-commander/latest/simplicity-commander-start/). The documentation is also helpful when using the Python API, as the command names and available options are the same.
39
+
40
+ ### Command Line Interface
41
+
42
+ From the command line, `pycommander-cli` is a razor-thin wrapper around the Simplicity Commander CLI; it behaves exactly like the Simplicity Commander CLI, except for the case when the options `-v` or `--version` are passed as arguments, in which case the version of the `pycommander-cli` package is printed in addition to the normal version information from the Simplicity Commander CLI.
43
+
44
+ ```bash
45
+ pycommander-cli --help
46
+ pycommander-cli --version
47
+ pycommander-cli <command> [options]
48
+ pycommander-cli <command> <subcommand> [options]
49
+ ```
50
+
51
+ ### Python API
52
+
53
+ At the lowest level, the `Commander` class provides all the CLI commands as methods to the class. These methods return a dictionary containing the command output, similarly to what the Simplicity Commander CLI does when the `--json` flag is used.
54
+
55
+ ```python
56
+ from pycommander_cli import Commander
57
+
58
+ # Instantiate the Commander class with a serial number
59
+ commander = Commander(serial_number="44055955")
60
+
61
+ # Perform the 'commander device info' command
62
+ print(commander.device.info(target_device="EFR32MG24"))
63
+
64
+ # Perform the 'commander util appinfo' command
65
+ print(commander.util.appinfo(filename="firmware.hex"))
66
+
67
+ # Perform the 'commander flash' command
68
+ print(commander.flash.flash(filenames=["firmware.hex"], address=0x08000000))
69
+ ```
70
+
71
+ The `Commander` class also exposes a few standalone helpers; for example, `getVersion()` returns the embedded Simplicity Commander, J-Link, EMDLL and other component versions as a `CommanderVersionInfo` object:
72
+
73
+ ```python
74
+ from pycommander_cli import Commander
75
+
76
+ commander = Commander()
77
+
78
+ # Get the version of the embedded Simplicity Commander, J-Link, EMDLL and other components
79
+ print(commander.getVersion())
80
+ ```
81
+
82
+ `listAvailableAdapters()` is a helper method that can be used to (unintrusively) scan for available adapters. This method returns a list of `BasicAdapterInfo` objects, each carrying `jlink_serial_number`, `ip_address` and `nickname` (any of which may be `None`):
83
+
84
+ ```python
85
+ from pycommander_cli import Commander
86
+
87
+ commander = Commander()
88
+
89
+ # List USB adapters
90
+ adapters = commander.listAvailableAdapters(list_usb_adapters=True)
91
+ for adapter in adapters:
92
+ print(adapter.jlink_serial_number, adapter.nickname)
93
+
94
+ # List network adapters
95
+ adapters = commander.listAvailableAdapters(list_network_adapters=True)
96
+ for adapter in adapters:
97
+ print(adapter.ip_address, adapter.nickname)
98
+ ```
99
+
100
+ Please note that not all commands are available to the `Commander` class. These are typically commands that are intended for interative CLI sessions, and include command suites like `vcom`, `vuart`, `rtt` and `swo`. Moreover, some commands in the `Commander` class have stricter requirements for the arguments than their CLI counterparts, for the same reasons as mentioned above. For example, the `aem dump` command requires the `outfile` and `duration` arguments to be provided. For a more flexible approach to streaming AEM data, please see the `AemStream` class below.
101
+
102
+ For ad-hoc invocations of commands that are not exposed by the typed API, you can fall back to `Commander.runCommand(...)`, which forwards arguments directly to the underlying Simplicity Commander CLI:
103
+
104
+ ```python
105
+ # Run a raw Commander CLI command and capture its output
106
+ result = commander.runCommand("rtt", "--help", json_formatted_output=False)
107
+ print(result.output)
108
+ ```
109
+
110
+ #### The `Adapter` and `Target` classes
111
+
112
+ pycommander-cli exposes several convenience methods for common tasks, split across two classes. These methods return different data types depending on the command. The types are available in the `pycommander_core.types` module.
113
+
114
+ The `Adapter` class handles tasks related to the adapter itself. These methods are only available on Silicon Labs adapters, and are not functional when using a generic J-Link adapter:
115
+
116
+ - Reading adapter and kit information
117
+ - Upgrading the adapter's firmware
118
+ - Resetting the adapter
119
+ - Configuring the target device's supply voltage
120
+ - Setting the adapter's VCOM configuration
121
+ - Analyzing the target device's energy usage
122
+ - +++
123
+
124
+ The `Target` class handles tasks related to the target device (a Silicon Labs MCU), and works with any supported debug adapter:
125
+
126
+ - Locking/unlocking the device for debug access
127
+ - Setting the CTUNE value
128
+ - Flashing firmware to the device
129
+ - Erasing the device's flash
130
+ - Configuring code regions (Series 3 only)
131
+ - +++
132
+
133
+ When instantiating the `Adapter` class, a `Commander` class instance is created and made available as an attribute of the `Adapter` class. If a `target_device` is provided to the `Adapter` class, a `Target` class instance is created and made available as an attribute of the `Adapter` class as well.
134
+
135
+ An `Adapter` class instance (with a potential `Target` class instance) should be used to represent a connection to a single Silicon Labs adapter (with an attached target device). Multiple `Adapter` class instances can be used to represent multiple adapters (with or without their respective target devices):
136
+
137
+ ```python
138
+ from pycommander_cli import Adapter
139
+
140
+ serial_numbers = ["44055955", "44055956", "44055957"]
141
+ adapters = [Adapter(serial_number=sn, target_device="EFR32MG24") for sn in serial_numbers]
142
+ for adapter in adapters:
143
+ print(adapter.info())
144
+ ```
145
+
146
+ A typical session against a single adapter may look like this:
147
+
148
+ ```python
149
+ from pycommander_cli import Adapter
150
+ from pycommander_core.types import AdapterInfo, AdapterVoltageInfo, VcomHandshake, CtuneValue
151
+
152
+ # Instantiate the Adapter class with a serial number and target device
153
+ adapter = Adapter(serial_number="44055955", target_device="EFR32MG24")
154
+
155
+ # Ensure we're running the latest firmware on the adapter
156
+ adapter.upgradeFirmware()
157
+
158
+ # Get the adapter information
159
+ adapter_info: AdapterInfo = adapter.info()
160
+
161
+ # Get the voltage information
162
+ voltage_info: AdapterVoltageInfo | None = adapter.getVoltage()
163
+
164
+ # Set the VCOM configuration of the adapter
165
+ adapter.setVcomConfig(115200, VcomHandshake.RTSCTS, True)
166
+
167
+ # Get the CTUNE value of the target device
168
+ ctune_value: CtuneValue = adapter.target.getCTUNE()
169
+
170
+ # Set the CTUNE value of the target device
171
+ adapter.target.setCTUNE(ctune_value.board)
172
+ ```
173
+
174
+ A common high-level task is flashing application firmware to the target device. `Target.flashApplication()` accepts one or more files (`.hex`, `.s37`, `.bin`, `.gbl` or `.rps`) and handles the underlying flash, verify and reset steps:
175
+
176
+ ```python
177
+ from pathlib import Path
178
+ from pycommander_cli import Adapter
179
+
180
+ adapter = Adapter(serial_number="44055955", target_device="EFR32MG24")
181
+
182
+ success: bool = adapter.target.flashApplication(filenames=[Path("firmware.hex")])
183
+ ```
184
+
185
+ #### The `AemStream` class
186
+
187
+ The `AemStream` class provides a pythonic way of streaming AEM measurements from a Silicon Labs adapter. The measurements are returned as `AemMeasurement` objects, which contain the timestamp, current, voltage, and the calculated power. An `AemStream` object is suitable for streaming AEM measurements from a Silicon Labs adapter, and there is no limitation to the duration of the streaming. The stream may be stopped at any time.
188
+
189
+ Like the underlying Simplicity Commander CLI, the `AemStream` class supports a variety of options for configuring the AEM data capture process, like setting up simple triggers to start the data capture process and specifying the data output rate.
190
+
191
+ ##### Context Manager Syntax
192
+
193
+ When using the context manager syntax, the `AemStream` object is opened automatically when the context manager is entered, and a connection to the adapter is established. The connection is cleanly closed when the context manager is exited.
194
+
195
+ ```python
196
+ from pycommander_cli import AemStream
197
+ from pycommander_core.types import AemMeasurement
198
+
199
+ # Instantiate a 10 second AEM stream with a data output rate of 100 Hz
200
+ with AemStream(serial_number="44055955", datarate_hz=100, duration_s=10) as aem_stream:
201
+ for measurement in aem_stream:
202
+ print(measurement)
203
+ ```
204
+
205
+ ##### Manual Syntax
206
+
207
+ The `AemStream` class can also be instantiated without using the context manager syntax. In this case, the `open()` method must be called to open the connection to the adapter and start the data capture process, and the `close()` method must be called to gracefully stop the data capture process and close the connection.
208
+
209
+ ```python
210
+ from pycommander_cli import AemStream
211
+ from pycommander_core.types import AemMeasurement
212
+
213
+ # Instantiate the AemStream class with a serial number and a set data rate
214
+ aem_stream : AemStream = AemStream(serial_number="44055955", datarate_hz=100)
215
+
216
+ # Open the AEM stream
217
+ aem_stream.open()
218
+
219
+
220
+ some_condition : bool = False
221
+ # Read the AEM measurements
222
+ for measurement in aem_stream:
223
+ # Do something
224
+ # ...
225
+
226
+ if some_condition:
227
+ break
228
+
229
+ # Close the AEM stream
230
+ aem_stream.close()
231
+ ```
232
+
233
+ #### Error handling
234
+
235
+ Failed Commander invocations raise typed exceptions, so your automation scripts can react to them in a structured way. Three exception classes are exposed from `pycommander_core.errors`:
236
+
237
+ - `PyCommanderInputError` — Commander rejected the arguments (return code -1 / 255).
238
+ - `PyCommanderRuntimeError` — Commander failed at runtime, e.g. the adapter could not be reached or the operation timed out (return code -2 / 254).
239
+ - `PyCommanderError` — base class for any other non-zero return code, and parent of the two above.
240
+
241
+ ```python
242
+ from pathlib import Path
243
+ from pycommander_cli import Adapter
244
+ from pycommander_core.errors import PyCommanderError, PyCommanderRuntimeError
245
+
246
+ adapter = Adapter(serial_number="44055955", target_device="EFR32MG24")
247
+
248
+ try:
249
+ adapter.target.flashApplication(filenames=[Path("firmware.hex")])
250
+ except PyCommanderRuntimeError as e:
251
+ print(f"Commander failed at runtime: {e}")
252
+ except PyCommanderError as e:
253
+ print(f"Other Commander error: {e}")
254
+ ```
255
+
256
+ #### Logging
257
+
258
+ All Commander invocations can be logged to a file by passing the `log_file_path` argument to the `Commander` constructor. Each invocation is recorded with a timestamp, which is handy when diagnosing issues in long-running automations or production-test rigs.
259
+
260
+ ```python
261
+ from pathlib import Path
262
+ from pycommander_cli import Adapter, Commander
263
+
264
+ # Build a Commander with logging enabled, then attach it to an Adapter
265
+ commander = Commander(serial_number="44055955", log_file_path=Path("pycommander.log"))
266
+ adapter = Adapter(commander=commander, target_device="EFR32MG24")
267
+ ```
@@ -0,0 +1,15 @@
1
+ pycommander_cli/__init__.py,sha256=B90XS3jyBCV66WQ_HTK5g_AKW1W_yrkNjdGPvMT22gg,977
2
+ pycommander_cli/__main__.py,sha256=gFZy40pgofsCWow4ZosWqz604lv3_r-_RKmoYFlY_oY,773
3
+ pycommander_cli/adapter.py,sha256=FQW7_QRDPdAS67WQ6RGW9HvKI2rxYvBQhK7DgDBj87o,2762
4
+ pycommander_cli/aemstream.py,sha256=UG-IIt_BWRcYfu7Yrc8dfpdTwi5j0ix36XtgsvIG6gs,2631
5
+ pycommander_cli/cli.py,sha256=4j47NXaKUamHe0WKXcT4H1H8of5C9JRVa1n-3mUZzmo,871
6
+ pycommander_cli/commander.py,sha256=ypJ_ZEm7caqwy5eXNRvvlrd9kdwWOmDLNn9YMiaNqj0,1813
7
+ pycommander_cli/target.py,sha256=DsbpFvpecGsZMMOIp1pZ6yaOeEjk7-QEspii9grQFTk,664
8
+ pycommander_cli/_archive/Commander-cli_win32_x64_1v24p3b1989.zip,sha256=wDGl8q_nO9xKE3QEUlXC7l_ZSxx6-2co9hfV6nnIwAk,22521766
9
+ pycommander_cli/_archive/README.md,sha256=5J6gu1vh9gCdKPaNhb3FbGKLeqL-vQpg9hEqXFFEPtA,387
10
+ pycommander_cli/_archive/__init__.py,sha256=TSX1EbHwkv1mqJ6e7Ydisf42JxUxfE5ndf0QPysgKCA,618
11
+ silabs_pycommander_cli-1.0.0.dist-info/METADATA,sha256=zPglaGqP5KKRQ3oNX94Yx-a_IQqPdOfES-PwCRvpp5o,11679
12
+ silabs_pycommander_cli-1.0.0.dist-info/WHEEL,sha256=uRY8Y8b0jIsgox8TvbI2NzR6A6HgEPOoY9Q5yFXfv18,95
13
+ silabs_pycommander_cli-1.0.0.dist-info/entry_points.txt,sha256=eM701h44YckaAR6UcllcXa-lPfATV0dDlLAONGQia44,61
14
+ silabs_pycommander_cli-1.0.0.dist-info/licenses/LICENSE.md,sha256=vJYbYTyTIBbmTzK2-DjPFgYaDM9ZvsSaN7QtKPBJxqM,575
15
+ silabs_pycommander_cli-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pycommander-cli = pycommander_cli.cli:main
@@ -0,0 +1,8 @@
1
+ **Copyright 2026 Silicon Laboratories Inc. [https://www.silabs.com](https://www.silabs.com/)**
2
+
3
+ SPDX-License-Identifier: LicenseRef-MSLA
4
+
5
+ The licensor of this software is Silicon Laboratories Inc.
6
+ Your use of this software is governed by the terms of the Silicon Labs Master Software License Agreement (MSLA) available at
7
+ [https://www.silabs.com/about-us/legal/master-software-license-agreement](https://www.silabs.com/about-us/legal/master-software-license-agreement).
8
+ By installing, copying or otherwise using this software, you agree to the terms of the MSLA.