# AACommPy

Python wrapper for the **Agito AAComm** .NET communication library. Provides full access to AAComm's motion controller API with IDE IntelliSense support.

## Requirements

- Python >= 3.10
- Windows (Linux support planned)
- .NET Framework 4.8 and/or .NET 6.0/8.0 runtime

## Installation

```bash
pip install aacommpy
```

The AAComm NuGet package is downloaded automatically on first import.

To install a specific AAComm version manually:

```bash
aacommpy install --version 11.1.0
```

## Quick Start

```python
from aacommpy import CommAPI, Services, Shared, AACOMM_SERVER_EXE_PATH

# Start server
CommAPI.StartAACommServer(AACOMM_SERVER_EXE_PATH)

# Configure connection
api = CommAPI()
cData = Services.ConnectionData()
cData.ControllerType = Shared.ProductTypes.AGM800_ID
cData.CommChannelType = Shared.ChannelType.Ethernet
cData.ET_IP_1 = 172
cData.ET_IP_2 = 1
cData.ET_IP_3 = 1
cData.ET_IP_4 = 101
cData.ET_Port = 50000

# Connect
result = api.Connect(cData)
print(f"Connected: {api.IsConnected}")

# Communicate
msg = Services.AACommMessage()
msg.MessageStr = "ASpeed"
reply = api.SendReceive(msg)
print(f"Speed: {reply.ReplyStr}")

# Disconnect
api.Disconnect()
api.CloseAACommServer(False)
```

## .NET Framework Selection

AAComm supports multiple .NET targets. Switch with:

```bash
aacommpy dotnetfw --netfw net48    # .NET Framework 4.8 (default)
aacommpy dotnetfw --netfw net6.0   # .NET 6.0
aacommpy dotnetfw --netfw net8.0   # .NET 8.0
```

The runtime (netfx or coreclr) is configured automatically based on your selection.

Check installed .NET versions:

```bash
aacommpy dotnetfw --check
```

## CLI Commands

| Command | Description |
|---------|-------------|
| `aacommpy install [--version X.Y.Z]` | Download and install AAComm NuGet package |
| `aacommpy version` | Show installed AAComm version |
| `aacommpy update` | Update to latest AAComm version |
| `aacommpy dotnetfw --netfw {net48,net6.0,net8.0}` | Switch .NET target framework |
| `aacommpy dotnetfw --check` | List installed .NET runtimes |

## IntelliSense

AACommPy ships with type stubs (`.pyi`) for full IDE autocomplete and type checking. Supported in VS Code (Pylance), Visual Studio, and PyCharm.

To regenerate stubs after updating AAComm:

```bash
python generate_stubs.py
```

## API Reference

The package exposes these AAComm namespaces:

| Import | Contents |
|--------|----------|
| `CommAPI` | Main communication API (connect, send, receive, disconnect) |
| `CommAPIWrapper` | Singleton wrapper for single-client usage |
| `Services` | `ConnectionData`, `AACommMessage`, `AllStatInterpreter`, `ControllerMessagesContainer`, ... |
| `Shared` | `ChannelType`, `ProductTypes`, `ConnectResult`, `MessageType`, ... |
| `Extensions` | `AACommDownloadFW`, `AACommDownloadUP`, `AACommDownloadFPGA`, data recording, ... |

All types are .NET objects accessed via [pythonnet](https://github.com/pythonnet/pythonnet). See the AAComm documentation for full API details.
