Metadata-Version: 2.4
Name: wavex
Version: 1.3.2
Summary: WaveX Data Acquisition SDK
Author: Cometa srl
Project-URL: Homepage, https://www.cometasystems.com
Project-URL: Documentation, https://www.cometasystems.com
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: numpy>=1.23

 # WaveX Python SDK

Python bindings for the WaveX acquisition system. The SDK provides access to EMG, IMU, insole, analog, and device state data through a callback-based API with NumPy array support.

## Installation

```bash
pip install wavex
```

## Quick Start

```python
import time
import numpy
import matplotlib.pyplot as plt
import wavex

from wavex import *

buffer = []

def on_data(args):
    sample = args.EmgSamples[0, :].copy()
    buffer.append(sample)

daq = wavex.DaqSystem()

cfg = CaptureConfiguration()
cfg.set_emg_acq_x(enums.EmgAcqXType.Emg_2kHz)
cfg.set_emg_imu_acq_x(
    enums.EmgImuAcqXType.Emg_2kHz_RawAccGyroData_200Hz
)

daq.OnDataAvailable(on_data)
daq.ConfigureCapture(cfg)

daq.StartCapturing(0)
time.sleep(5)
daq.StopCapturing()

signal = numpy.concatenate(buffer)

plt.plot(signal)
plt.show()
```

## Main Components

### WaveX / DaqSystem

The main interface used to communicate with the acquisition hardware.

```python
daq = wavex.DaqSystem()

daq.ConfigureSensor(sensor_cfg, 0)
daq.ConfigureCapture(capture_cfg)

daq.StartCapturing()
daq.StopCapturing()
```

### CaptureConfiguration

Defines which data streams are enabled and their sampling rates.
(p for WavePlus receivers, x for WaveX receivers)
```python
cfg = CaptureConfiguration()

cfg.set_emg_acq_x(...)
cfg.set_imu_acq_p(...)
cfg.set_emg_imu_acq_x(...)

cfg.enable_insole(...)
cfg.enable_analog_channel(...)
```

### SensorConfiguration

Configures sensor type, operating mode, and IMU full-scale ranges.

```python
sensor_cfg = SensorConfiguration()

sensor_cfg.set_sensor_config(
    enums.SensorModel.Mini_EmgImu,
    enums.SensorMode.EMG_SENSOR,
    enums.AccelerometerFullScale.g_16,
    enums.GyroscopeFullScale.dps_2000,
)
```

## Receiving Data

Data is delivered through a callback registered with `OnDataAvailable`.

```python
def on_data(args):
    print(args.ScanNumber)
    print(args.EmgSamples.shape)

daq.OnDataAvailable(on_data)
```

The callback receives a `DataAvailableEvent` object containing NumPy arrays for all enabled channels.

Common fields include:

| Field | Description |
|---------|-------------|
| `EmgSamples` | EMG samples |
| `AccelerometerSamples` | Accelerometer data |
| `GyroscopeSamples` | Gyroscope data |
| `MagnetometerSamples` | Magnetometer data |
| `ImuSamples` | Fused IMU data |
| `AnalogSamples` | Analog input channels |
| `InsoleSamples` | Insole pressure data |
| `ScanNumber` | Number of samples in the current callback |

## Loading Existing Configurations

Configurations exported from the EMGandMotionTools software can be loaded directly.

```python
daq.LoadConfiguration("WaveXConfig.cfg")
```


## Notes

- Data arrays are provided as NumPy arrays.
- Copy data inside callbacks if it must be stored after the callback returns.
- Call `ConfigureSensor()` and `ConfigureCapture()` to configure before starting acquisition.
- Sampling rates and available channels depend on the selected acquisition mode and connected hardware.
- It's possible to change the data available period in StartCapturing.
