Changelog
=========

This page tracks changes between CosmicSDK releases.

.. contents::
   :local:

v1.2.3
------

- **New Features**

  - Added SDK version API: a static ``getVersion()`` method on ``CosmicSDK`` and ``CosmicAsyncSDK``, plus a C-API counterpart,
    along with compile-time macros (``COSMICSDK_VERSION_MAJOR``, ``COSMICSDK_VERSION_MINOR``, ``COSMICSDK_VERSION_PATCH``,
    ``COSMICSDK_VERSION_STRING``) for runtime and compile-time version checking.
  - Added a WebAssembly (WASM) build target using wasi-sdk, exposing an async C API (~44 exports wrapping ``CosmicAsyncSDK``) 
    with a lightweight JavaScript host runtime (~430 lines). Includes a ``connectWasm()`` path that bypasses HIDAPI enumeration 
    for WASM environments and guards ``std::thread`` usage behind ``#ifndef __wasm__``.

- **Bug Fixes**

  - Fixed a missing bounds check in ``i2cScanBus`` that could cause a buffer overread when the device response payload was smaller 
    than expected.
  - Fixed subaddress byte-order (endianness) in I2C and I3C transfers to correctly serialize the sub-address in big-endian order.

- **Documentation**

  - Added known-issue documentation for I2C scan bus timeout behavior, covering both the synchronous ``CosmicSDK`` and the
    ``CosmicAsyncSDK`` API paths, across both the API reference documentation and the FAQ section.
  - Added a FAQ entry on Pull-up resistor requirements for I2C communication.

v1.2.2
------

- **Linux Packaging & Permissions**

  - Added a user-facing Linux helper script `install_udev_rules.sh` for installing CosmicSDK udev permissions from delivered packages.
  - Updated Linux packaging to include `scripts/install_udev_rules.sh` and `udev/65-binho-hid.rules` in release artifacts.
  - Updated Linux installation/build docs to use the packaged user-facing script.

- **Bug Fixes**

  - Revert the inclusion of only public headers in the `include` folder.

v1.2.1
------

- **Language Bindings & Examples**

  - Added a new Java reference integration layer wrapping the C API.
  - Added complete Java examples for `system`, `i2c`, `i3c` (basic/ccc/daa/hdr-ddr/hj-ibi), `spi`, `uart`, and `gpio`.

- **Bug Fixes**

  - Fixed the inclusion of the static HTML documentation on the `docs` folder of deliverable artifacts.
  - Fixed the inclusion of only public headers in the `include` folder.
  - Fixed the Python binding SyntaxError in `i2c_scan_bus`.
  
v1.2.0
------

- **New Features**

  - Added full I3C support for Supernova across C++, C API, and Async API, including:
    controller configuration, bus initialization/reset, SDR and HDR-DDR transfers, target table management, and target configuration.
  - Added broad I3C CCC coverage, including GET/SET operations such as PID/BCR/DCR/STATUS/CAPS, ENEC/DISEC, RSTACT, SETDASA/SETAASA/SETNEWDA, ENTDAA, RSTDAA, MRL, and MWL.
  - Added SPI API support (controller init, parameter configuration, and transfer APIs).
  - Added UART API support enhancements (init and parameter configuration updates).
  - Added GPIO API support enhancements, including digital read/write and interrupt configuration/disable.
  - Added protocol-specific voltage configuration helpers for I2C, I3C, SPI, UART, and GPIO.
  - Added notification callback support and shared notification structures across C/C++ APIs.
  - Added I2C bus scanning support in examples and documentation.

- **Language Bindings & Examples**

  - Refactored Python integration examples into a structured binding-style layout.
  - Added complete Python protocol examples for `system`, `i2c`, `i3c` (basic/ccc/daa/hdr-ddr/hj-ibi), `spi`, `uart`, and `gpio`.
  - Added a new C# reference integration layer wrapping the C API.
  - Added complete C# examples for `system`, `i2c`, `i3c` (basic/ccc/daa/hdr-ddr/hj-ibi), `spi`, `uart`, and `gpio`.
  - Reorganized example folders and naming for consistency (for example `i3c/basic_api` to `i3c/basic`).
  - Added new blocking C and C++ examples for I2C, I3C, SPI, UART, GPIO, and system APIs.

- **API & Naming Updates**

  - Refined API naming consistency across C/C++ layers (including normalized `I3c` naming in C API symbols and camelCase alignment in I2C C API functions).
  - Standardized parameter naming in transfer APIs (`inData` / `outData`) and aligned several data-length types to `uint16_t`.
  - Updated I3C transfer options/event handling to use flag or mask-based interfaces in relevant APIs.
  - Added output length reporting for read APIs, including I3C SDR read and I3C HDR-DDR read paths.

- **Build, Platform, and CI**

  - Improved Linux build and CI support (including Ubuntu arm64 coverage and Linux dependency handling).
  - Updated macOS GitHub Actions runners to current labels to keep Intel and Apple Silicon CI builds supported.
  - Added support scripts and rules for Linux device access setup (`udev` flow).
  - Improved docs build behavior so documentation generation is optional when tools are unavailable.

- **Documentation**

  - Introduced a significantly expanded user-facing documentation set with Sphinx + Doxygen integration.
  - Added protocol guides, API references, constants/structures/result-code references, FAQ content, and improved examples documentation.
  - Improved onboarding/build documentation and README guidance.

- **Bug Fixes**

  - Fixed transaction ID rollover handling in blocking APIs.
  - Fixed read-length handling issues in selected I3C paths.
  - Fixed a cross-platform build issue (reported on Windows MinGW and Ubuntu) in the C API implementation of `I3cGetDeviceTable`.
  - Fixed several build and merge regressions introduced during 1.2.0 development.
  - Fixed multiple documentation rendering/formatting issues.


v1.1.0
------

- **General Improvements**

  - Add support for connecting to a specific USB host adapter by its serial number.

v1.0.0
------

- Initial public release of CosmicSDK.
- C++ synchronous API (`CosmicSDK.hpp`).
- C++ asynchronous API (`CosmicAsyncSDK.hpp`).
- C API (`CosmicSDK_API_c.h`).
- I2C only support for Supernova and Pulsar devices.
