Metadata-Version: 2.4
Name: smpclient
Version: 7.0.0
Summary: Simple Management Protocol (SMP) Client for remotely managing MCU firmware
Project-URL: Homepage, https://www.intercreate.io
Project-URL: Documentation, https://intercreate.github.io/smpclient
Project-URL: Repository, https://github.com/intercreate/smpclient.git
Project-URL: Issues, https://github.com/intercreate/smpclient/issues
Author-email: JP Hutchins <jphutchins@gmail.com>, JP Hutchins <jp@intercreate.io>
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries
Requires-Python: <4,>=3.10
Requires-Dist: async-timeout>=4.0.3; python_version < '3.11'
Requires-Dist: intelhex>=2.3.0
Requires-Dist: smp>=4.0.2
Provides-Extra: all
Requires-Dist: bleak>=2.0.0; extra == 'all'
Requires-Dist: pyserial>=3.5; extra == 'all'
Provides-Extra: ble
Requires-Dist: bleak>=2.0.0; extra == 'ble'
Provides-Extra: serial
Requires-Dist: pyserial>=3.5; extra == 'serial'
Provides-Extra: udp
Description-Content-Type: text/markdown

# Simple Management Protocol (SMP) Client

`smpclient` implements the transport layer of the Simple Management Protocol.  This library can be
used as a dependency in applications that use SMP over **serial (UART or USB)**, **Bluetooth (BLE)**,
or **UDP** connections.  Some abstractions are provided for common routines like upgrading device
firmware.

If you don't need a library with the transport layer implemented, then you might prefer to use
[smp](https://github.com/JPHutchins/smp) instead.  The SMP specification can be found
[here](https://docs.zephyrproject.org/latest/services/device_mgmt/smp_protocol.html).

If you'd like an SMP CLI application instead of a library, then you should try
[smpmgr](https://github.com/intercreate/smpmgr).

## Install

`smpclient` is [distributed by PyPI](https://pypi.org/project/smpclient/) and can be installed with `uv`, `pip`, and other dependency managers.

Build with all transports:

```
smpclient[all]
```

Or none (UDP transport only):

```
smpclient
```

Or build with only the transports you need:

```
smpclient[serial] # Serial (UART, USB, CAN)
smpclient[ble] # Bluetooth Low Energy
smpclient[serial,ble] # Serial + BLE
```

The UDP transport has no additional dependencies and is always available.

## User Documentation

Documentation is in the source code so that it is available to your editor.
An online version is generated and available [here](https://intercreate.github.io/smpclient/).

## Development Quickstart

> Assumes that you've already [setup your development environment](#development-environment-setup).

1. run `uv sync` when pulling in new changes
2. run `uv run task fix` after making changes (fast)
3. run `uv run task all` after making changes (thorough)
4. add library dependencies with `uv`:
   ```
   uv add <my_new_dependency>
   ```
5. add test or other development dependencies:
   ```
   uv add --group dev <my_dev_dependency>
   ```
6. run tests for all supported python versions:
   ```
   uv run task matrix
   ```

## Development Environment Setup

### Install Dependencies

- uv: https://docs.astral.sh/uv/getting-started/installation/

### Create the venv

```
uv sync
```

### Verify Your Setup

```
uv run task all
```

### Enable the githooks

```
git config core.hooksPath .githooks
```
