From a674504d0f4dd1647d15b8265e1b657a68b5c759 Mon Sep 17 00:00:00 2001 From: Hubald Verzijl Date: Mon, 4 Aug 2025 19:53:29 +0200 Subject: [PATCH] Initial commit, working communication. --- .gitignore | 1 + Cargo.lock | 263 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 19 ++++ src/lib.rs | 75 +++++++++++++++ 4 files changed, 358 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..0a56d80 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,263 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bioz-icd-rs" +version = "0.1.0" +dependencies = [ + "postcard-rpc", + "postcard-schema", + "serde", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32 0.2.1", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32 0.3.1", + "stable_deref_trait", +] + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "heapless 0.7.17", + "serde", +] + +[[package]] +name = "postcard-derive" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "postcard-rpc" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1af23d87c9a8308bbfaae655ac770ec10517e6448fa5e0b50838a36e5d860b9" +dependencies = [ + "heapless 0.8.0", + "portable-atomic", + "postcard", + "postcard-schema", + "serde", + "thiserror", +] + +[[package]] +name = "postcard-schema" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a13d8b1f8b3473b45c2c779b97c18c260ac6458eb045d4be75df8087784400" +dependencies = [ + "postcard-derive", + "serde", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1c3de80 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "bioz-icd-rs" +version = "0.1.0" +edition = "2024" + +[dependencies] +postcard-rpc = { version = "0.11.12" } + +[dependencies.serde] +version = "1.0.219" +features = ["derive"] +default-features = false + +[dependencies.postcard-schema] +version = "0.2.4" +features = ["derive"] + +[features] +use-std = [] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..ef945e6 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,75 @@ +#![cfg_attr(not(feature = "use-std"), no_std)] + +use postcard_rpc::{endpoints, topics, TopicDirection}; +use postcard_schema::Schema; +use serde::{Deserialize, Serialize}; + +// --- + +pub type SingleLedSetResult = Result<(), BadPositionError>; +pub type AllLedArray = [Rgb8; 24]; + +endpoints! { + list = ENDPOINT_LIST; + omit_std = true; + | EndpointTy | RequestTy | ResponseTy | Path | + | ---------- | --------- | ---------- | ---- | + | PingEndpoint | u32 | u32 | "ping" | + | GetUniqueIdEndpoint | () | u64 | "get_id" | + | SetSingleLedEndpoint | SingleLed | SingleLedSetResult | "led/set_one" | + | SetAllLedEndpoint | AllLedArray | () | "led/set_all" | + | StartAccelerationEndpoint | StartAccel | () | "accel/start" | + | StopAccelerationEndpoint | () | bool | "accel/stop" | +} + +topics! { + list = TOPICS_IN_LIST; + direction = TopicDirection::ToServer; + | TopicTy | MessageTy | Path | + | ------- | --------- | ---- | +} + +topics! { + list = TOPICS_OUT_LIST; + direction = TopicDirection::ToClient; + | TopicTy | MessageTy | Path | Cfg | + | ------- | --------- | ---- | --- | + | AccelTopic | Acceleration | "accel/data" | | +} + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq)] +pub struct SingleLed { + pub position: u32, + pub rgb: Rgb8, +} + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq, Copy, Clone)] +pub struct Rgb8 { + pub r: u8, + pub g: u8, + pub b: u8, +} + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq)] +pub struct BadPositionError; + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq)] +pub struct Acceleration { + pub x: i16, + pub y: i16, + pub z: i16, +} + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq)] +pub enum AccelRange { + G2, + G4, + G8, + G16, +} + +#[derive(Serialize, Deserialize, Schema, Debug, PartialEq)] +pub struct StartAccel { + pub interval_ms: u32, + pub range: AccelRange, +}