Skip to main content

hwscan

A Python CLI tool that detects attached hardware devices on Linux systems. It scans for connected USB devices, storage devices, and host system information, outputting results in JSON format.

Features

Supported Hardware Detection:

  • TriLightSense (FTDI devices)
  • STLINK-V3 (ST-Link debuggers with attached storage)
  • ESP32 (C5 WROOM variant)
  • Arduino Leonardo
  • JLink (Segger JLink debuggers)
  • UART to DMX converters
  • Host System Info (hostname, model name, system UUID)

Installation

Prerequisites

  • Python 3.8 or higher
  • Linux operating system (uses sysfs for device detection)

Install from PyPI

pip install lumenradio-hwscan

Install from source

git clone <repository-url>
cd lumenradio-hwscan
pip install -e ".[dev]"

Usage

Basic Usage

Run the scanner with JSON output:

hwscan

Pretty-print JSON Output

For more readable JSON formatting:

hwscan --pretty

Display Detector Errors

To see any errors encountered during hardware detection:

hwscan --errors

Combined example:

hwscan --pretty --errors

Save Results to File

Save hardware detection results to a JSON file:

hwscan --output hardware.json

Smart Merging: If the file already exists, the tool intelligently merges new detection results with existing data. This preserves any custom fields you've added (like name for device mapping) while updating detected information:

# First run - creates the file
hwscan --output hardware.json

# Later, if device configuration changes, custom fields are preserved
hwscan --output hardware.json

Example: If your hardware.json contains custom mapping data:

{
  "3C:DC:75:84:F9:7C": {
    "name": "spi-bridge-timo",
    "type": "esp32-c5-wroom",
    "tty": "/dev/ttyACM0"
  }
}

And the tty changes to /dev/ttyACM1, running hwscan --output hardware.json will update the tty while preserving the name field.

Show Version

hwscan --version

Output Format

The tool outputs a JSON object where each key is a unique hardware identifier and the value contains device information.

Example output:

{
  "trilightsense_0": {
    "vendor": "FTDI",
    "product": "TriLightSense",
    "serial": "FTDI123456",
    "port": "/dev/ttyUSB0"
  },
  "stlink_0": {
    "vendor": "STMicroelectronics",
    "product": "STLINK-V3",
    "serial": "STL12345678",
    "port": "/dev/ttyACM0"
  },
  "host_system": {
    "hostname": "workstation-01",
    "model": "Dell Inc.",
    "uuid": "550e8400-e29b-41d4-a716-446655440000"
  }
}

Use Cases

  • Hardware Inventory: Automatically detect and catalog connected devices in labs or production environments
  • CI/CD Pipelines: Verify required hardware is available before running CI tests
  • Device Management: Track connected debugging and serial devices
  • System Integration: Generate hardware resource definitions for automated test systems

Development

Run Tests

make test

Format Code

make black

Build Distribution

make build

Requirements

Runtime Dependencies:

  • requests >= 2.32
  • typer >= 0.12
  • rich >= 13.7
  • pydantic >= 2.8

Development Dependencies:

  • black >= 25.9.0
  • pytest >= 8.4.2
  • pytest-html
  • pytest-cov
  • build >= 1.2.1
  • twine >= 5.1.1

License

MIT License - See LICENSE file for details

Support

This tool is intended for internal LumenRadio use. For issues or feature requests, please contact the development team.

Release files for lumenradio-hwscan 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lumenradio-hwscan 0.5.0
File Size Uploaded
lumenradio_hwscan-0.5.0.tar.gz 22.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lumenradio-hwscan 0.5.0
File Interpreter ABI Platform
lumenradio_hwscan-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.2 kB

Release files / lumenradio_hwscan-0.5.0.tar.gz

Download URL lumenradio_hwscan-0.5.0.tar.gz
Size 22.2 kB
Tags Source
SHA-256 checksum
How to use checksums
35f8bdcae5e7464d56ad1274ec38ad1d94c2b27369a7e03382dad98b49ad123b
BLAKE2b-256 checksum
How to use checksums
8f5c34c4ac594bdaab8ddb2267950eaaf923629c64f61d7c6873c0e82ca827d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / lumenradio_hwscan-0.5.0-py3-none-any.whl

Download URL lumenradio_hwscan-0.5.0-py3-none-any.whl
Size 15.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
282098ae1b3e213b5cdb6b11b4b32cf50fae3aca28556f4b10c9ec7a3b4959f8
BLAKE2b-256 checksum
How to use checksums
8757b358386e48c424d91f32601c99946afc267cd4b3d5ee105aa68e1b3e4265
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page