# C++ implementation of IEEE Std 2030.1.1-2021

This is a C++ open source implementation of the IEEE Std 2030.1.1-2021 communication protocol.

> **Note:** This is a "rump library" (Work In Progress). It currently implements a subset of the full protocol stack and is not production-ready.

## Overview

`libIEEE2030.1.1` implements the digital communication parameters for DC Quick and Bidirectional Chargers as defined in **IEEE Std 2030.1.1-2021**. This standard specifies the interface for rapid energy transfer between Electric Vehicles (EVs) and DC chargers.

## Relationship to CHAdeMO

The IEEE 2030.1.1 standard is technically derived from CHAdeMO specifications with the permission of the CHAdeMO Association. Consequently, this library serves as a foundation for systems intended to interoperate with vehicles using the CHAdeMO protocol.

## Supported Versions

The library targets the following protocol definitions:
* **1.1 / 1.2**
* **2.0.1**

## Compliance and Certification

Implementation of this library does not grant compliance with CHAdeMO requirements. While the IEEE standard and CHAdeMO share core specifications, commercial chargers require official certification and adherence to CHAdeMO Association governance.

## Features

* **CAN Communication:** Handling of standard ID allocation (Vehicle: H'100-H'102, Charger: H'108-H'109).
* **Sequence Control:** Basic state machine for charge control sequences (Start, Charging, Stop).
* **Error Handling:** Definitions for standard error flags.

## Integration with EVerest

This library will be (but is not yet) integrated within the `IEEE2030.1.1` module within [EVerest](https://github.com/EVerest/EVerest) — the complete software stack for your charging station. It is recommended to use EVerest together with this IEEE 2030.1.1 implementation.

## Dependencies

To build this library you need [everest-cmake](https://github.com/EVerest/everest-cmake) checkout in the same directory as `libIEEE2030.1.1`. If no `everest-cmake` is available, it is retrieved via FetchContent.

For Debian GNU/Linux 12 you will need the following dependencies:

```bash
sudo apt update
sudo apt install build-essential cmake
```

For Fedora 42+ you will need the following dependencies:

```bash
sudo dnf update
sudo dnf install gcc gcc-c++ git make cmake
```

The build system `ninja` is optional. 

## Getting started

```
# Run cmake (BUILD_TESTING to enable/disable unit tests)
cmake -S . -B build -G Ninja -DBUILD_TESTING=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

# Run cmake with disabled compiler warnings
cmake -S . -B build -G Ninja -DBUILD_TESTING=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DIEEE2030_COMPILE_OPTIONS_WARNING=""

# Build
ninja -C build

# Running tests
ninja -C build test
```

## Get Involved

See the [Contribution Guideline](https://everest.github.io/nightly/project/contributing.html) of the EVerest project to get involved.

## License

This project is licensed under the Apache License 2.0. See the [LICENSE](./LICENSE) file for details.

