Skip to main content

Hardware detector CLI for USB serial/debug devices (TriLightSense, STLINK-V3, ESP32, host info).

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lumenradio_hwscan-0.5.0.tar.gz (22.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lumenradio_hwscan-0.5.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file lumenradio_hwscan-0.5.0.tar.gz.

File metadata

  • Download URL: lumenradio_hwscan-0.5.0.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for lumenradio_hwscan-0.5.0.tar.gz
Algorithm Hash digest
SHA256 35f8bdcae5e7464d56ad1274ec38ad1d94c2b27369a7e03382dad98b49ad123b
MD5 a833a7e11ec37fef4ef7b7d6c6dd8a34
BLAKE2b-256 8f5c34c4ac594bdaab8ddb2267950eaaf923629c64f61d7c6873c0e82ca827d7

See more details on using hashes here.

File details

Details for the file lumenradio_hwscan-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for lumenradio_hwscan-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 282098ae1b3e213b5cdb6b11b4b32cf50fae3aca28556f4b10c9ec7a3b4959f8
MD5 14ab95176932a4aeec046029488077b3
BLAKE2b-256 8757b358386e48c424d91f32601c99946afc267cd4b3d5ee105aa68e1b3e4265

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page