pykitinfo 1.4.1.26
A provider of information about connected Microchip development kits
License: MIT
Requires Python: >=3.8
Keywords: Microchip, Xplained Pro, EDBG, nEDBG, Curiosity Nano, PKOB nano, debugger, MCP2221A, PkOB4, PICkit4, PICkit5, Snap, PICkit Basic, Curiosity Ultra, Curiosity Pro

# pykitinfo
pykitinfo provides information about connected Microchip development kits and tools

## Overview
pykitinfo will scan the USB subsystem for connected Microchip development kits, and provide information such as kit name, mounted device, serial port identifier, and extension information.

pykitinfo is available:

* install using pip from pypi: https://pypi.org/project/pykitinfo
* browse source code on github: https://github.com/microchip-pic-avr-tools/pykitinfo
* read API documentation on github: https://microchip-pic-avr-tools.github.io/pykitinfo

pykitinfo currently supports:
* all PKOB nano (nEDBG), mEDBG and EDBG kits
* Atmel-ICE, Power Debugger, JTAGICE3
* PICkit3, PKOB
* PICkit4, Snap, PKOB4, PICkit5
* MCP2221A

## Usage
pykitinfo can be used as a library or as a CLI

## Example - simple list of connected kits
```bash
pykitinfo
```
Displays a simple list of kits in the form:
Kit SERIAL-NUMBER: 'KIT-NAME' (DEVICE-NAME) on SERIAL-PORT

For example:
```bash
pykitinfo
Looking for Microchip kits...
Compatible kits detected: 8
Kit MCHP3349011800000000: 'AVR-IoT WA' (ATmega4808) on COM21
Kit MCHP3280021800000000: 'AVR128DA48 Curiosity Nano' (AVR128DA48) on COM17
Kit ATML2241020200000000: 'SAM L21 Xplained Pro' (ATSAML21J18A) on COM34
Kit J41800000000: 'Atmel-ICE CMSIS-DAP' () on N/A
Kit J50200000000: 'Power Debugger CMSIS-DAP' () on N/A
Kit ATML2323040200000000: 'mEDBG' (ATmega328P) on COM26
Kit BUR180115004: 'Explorer 16/32 PICkit on Board' () on N/A
Kit 020063002RYN000091: 'Curiosity Nano Explorer' (N/A) on COM74
```

## Example - simple list of connected kits with specific serial number
```bash
pykitinfo -s <serialnumber ending>
```
Displays a simple list of kits in the form:
Kit SERIAL-NUMBER: 'KIT-NAME' (DEVICE-NAME) on SERIAL-PORT

For example:
```bash
pykitinfo -s 29
Looking for Microchip kits...
Compatible kits detected: 1
Kit MCHP3352011800000029: 'PIC-IoT WA' (PIC24FJ128GA705) on COM22
```

## Example - brief lookup of serial port of connected kit
```bash
pykitinfo -b
```
Displays ONLY the serial port name of a connected kit.  This can be useful for command chaining.

For example:
```bash
pykitinfo -b -s 123456
COM12
```

## Example - long form list of kits
```bash
pykitinfo -l
```

Displays a JSON formatted list of dictionaries.

For example:
```bash
pykitinfo -l
Looking for Microchip kits...
Compatible kits detected: 2
[
  {
    "debugger": {
      "device": "ATmega4808",
      "kitname": "AVR-IoT WA",
      "product": "nEDBG CMSIS-DAP",
      "protocol": "edbg",
      "serial_number": "MCHP3349011800000000",
      "serial_port": "COM21"
    },
    "usb": {
      "interface": "hid",
      "packet_size": 64,
      "product_id": 8565,
      "product_string": "nEDBG CMSIS-DAP",
      "serial_number": "MCHP3349011800000000",
      "vendor_id": 1003
    }
  },
  {
    "debugger": {
      "device": "AVR128DA48",
      "kitname": "AVR128DA48 Curiosity Nano",
      "product": "nEDBG CMSIS-DAP",
      "protocol": "edbg",
      "serial_number": "MCHP3280021800000000",
      "serial_port": "COM17"
    },
    "usb": {
      "interface": "hid",
      "packet_size": 64,
      "product_id": 8565,
      "product_string": "nEDBG CMSIS-DAP",
      "serial_number": "MCHP3280021800000000",
      "vendor_id": 1003
    }
  }
]
```

## Example - library usage
```python
# Example: using pykitinfo as a library
import logging
logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.ERROR)
from pykitinfo import pykitinfo
kits = pykitinfo.detect_all_kits()
for kit in kits:
    print("Found kit: '{}'".format(kit['debugger']['kitname']))
```

## Notes for Linux® systems
This package uses pyedbglib and other libraries for USB transport and some udev rules are required. For details see the pyedbglib package: https://pypi.org/project/pyedbglib
# Changelog

## [1.4.1] - July 2025

### Fixed
- DSG-7940 fixed filtering of MCP2221A kits
- DSG-7941 fixed releasing of USB devices after use
- DSG-7933 improved CLI documentation

## [1.3.0] - July 2025

### Added
- DSG-7903 added readout of kit info from PKoB4

### Fixed
- DSG-7553 fixed a crash due to missing udev rules on Linux
- DSG-7323 fixed package to exclude build folder

## [1.1.2] - April 2024

### Added
- DSG-7105 added support for Explorer 16/32 kit
- DSG-7181 added support for MCP2221A kits

## [1.0.3] - January 2024

### Added
- DSG-5792 added brief mode for reporting serial port only
- DSG-6091 added support for reading out nEDBG extension information
- DSG-6444 added support for PICkit 5

### Fixed
- DSG-5767 fixed unicode output in long mode
- DSG-6310 added fault tolerance for non-numeric interface numbers
- DSG-7084 fixed crash on Mac when virtual serial port is missing serial number
- DSG-7087 added fault tolerance for USB devices missing serial number

## [0.4.0] - November 2022

### Changed
- DSG-5562 added catch-all exception handling in CLI; added return code
- DSG-5624 improved port detection using updated pyedbglib (requirement)
- DSG-5551 removed metadata tag for Python 3.6
- DSG-5450 added metadata tag for Python 3.10

## [0.3.1] - December 2021

### Added
- DSG-3826 PICkit3 support
- DSG-3903 WinUSB tools support
- DSG-4140 Help updates
- DSG-4195 Documentation output

### Fixed
- DSG-3407 Serial port detection on Xplained Pro
- DSG-3409 CLI argument -R
- DSG-3410 Xplained Pro kit name reporting

## [0.1.2] - May 2021
- First public release to PyPi