# CODDE Protocol [![Build & Test](https://github.com/codde-pi/codde_protocol/actions/workflows/build.yml/badge.svg)](https://github.com/codde-pi/codde_protocol/actions/workflows/build.yml) [![crates.io](https://img.shields.io/crates/v/codde_protocol?logo=rust)](https://crates.io/crates/codde_protocol) [![pub.dev](https://img.shields.io/pub/v/codde_protocol.svg?include_prereleases&color=blue)](https://pub.dev/packages/codde_protocol) [![pypi.org](https://img.shields.io/pypi/v/codde_protocol.svg?logo=python&style=flat-square)](https://pypi.org/project/codde_protocol) CODDE Protocol is the base layer of the CODDE Pi Framework. This protocol let CODDE Pi interacts with any hardware through WiFi, Bluetooth and BLE using an embedded library and a mobile app. This technology enables users to freely interact with hardware thanks to a secure, stable and reliable technology without be (too) intrusive. Buy Me A Coffee ## Development This Project is written in Rust, enabling fast serializing/deserializing and data processing. Client side is ported for Dart/Flutter applications, and server side has been translated in python. CODDE Protocol integrates data generated by CODDE Pi App widgets, and received by embedded systems. See https://codde-pi.com to stay tuned about new widgets integration. ## How it works CODDE Pi is based on client-server architecture. Basically, the mobile App you download is the client side, and the base layer you embed on your project is the server side ![Widgets & CODDE Protocol](./assets/codde_pi_widget.drawio.svg) ## Usage ```python import codde_protocol import time # import gpio # instantiate server server = CoddePiServer.use_socket('localhost:12345') # some hardware control # pin10 = gpio.DigitalPin(10, gpio.OUTPUT) @event(server) def toggle_button_1(*args): widget: ToggleButton = args[0] print("value received : ", widget.value) server.callback(1, ServerStatus.Idle, ConfirmResult(True)) @event(server) def click_button_2(*args): pass # pin10.on() if __name__ == "__main__": print('opening server...', end=' ') server.open() try: print('serve') server.serve() while True: sleep(1) except KeyboardInterrupt: print("CTRL + C.") print("Program interrupted.") finally: server.close() ``` ## Roadmap ### Libraries | Protocols | Flutter | Python | Rust | MicroPython | | ------------------ | ------------------------------------- | ------------------------------------- | -------------------------------------- | -------------------------------------- | | WebSocket (client) | Yes | | Yes | | | WebSocket (server) | | Yes | Yes | WIP | | Bluetooth | | | WIP | | | USB | | | | | | Nearby | | | | | ### Hardware compatibility | Protocols | SBC (arm64) | RP2040 | Android | iOS | x86 | | ------------------ | ------------------------------------- | -------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | | WebSocket (client) | Yes | WIP | Yes | Yes | Yes | | WebSocket (server) | Yes | WIP | Yes | Yes | Yes | | Bluetooth | | | | | | | USB | | | | No | | | Nearby | | | | | |