Metadata-Version: 2.4
Name: bc_edu_sdk
Version: 0.6.0
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
License-File: LICENSE
Requires-Python: >=3.8
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM

# BC Edu SDK

Python bindings for BrainCo educational armbands and gloves.

## Installation

```bash
python -m pip install bc-edu-sdk
```

Python 3.8 or later is required.

## Data Subscription

Use callbacks for continuous data and `SensorProfile` to select streams and sample rates:

```python
import asyncio

from bc_edu_sdk import main_mod as libedu


def on_flex_data(data) -> None:
    if data:
        print(data[-1])


async def main() -> None:
    device = libedu.EduDevice("/dev/tty.usbserial-0001", 115200)
    parser = libedu.MessageParser("glove", libedu.MsgType.Edu)
    profile = libedu.SensorProfile(
        flex_rate=libedu.SamplingRate.SAMPLING_RATE_50,
    )

    libedu.set_flex_data_callback(on_flex_data)
    try:
        await device.start_stream_with_profile(parser, profile)
        await asyncio.Event().wait()
    finally:
        await device.stop_stream()
        libedu.set_flex_data_callback(None)


asyncio.run(main())
```

Use the callback that matches the configured data type:

| Stream | Callback |
| --- | --- |
| Flex | `set_flex_data_callback` |
| EMG | `set_emg_data_callback` |
| Raw IMU | `set_imu_data_callback` |
| Calibrated IMU | `set_imu_calibration_data_callback` |
| Raw magnetometer | `set_mag_data_callback` |
| Calibrated magnetometer | `set_mag_calibration_data_callback` |

The source repository contains complete console examples, GUIs, sample-rate tables, configuration lifecycle details, and release notes.

## Support

When reporting a connection or API issue, include the package version, Python version, operating system, device model, serial port name, and firmware version.

