diff --git a/beamer/client/.gitignore b/beamer/client/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/beamer/client/.gitignore @@ -0,0 +1 @@ +target diff --git a/beamer/client/Cargo.toml b/beamer/client/Cargo.toml new file mode 100644 index 0000000..6eca4c8 --- /dev/null +++ b/beamer/client/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "client" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +semserialize = {path='../libs/semserialize'} +postcard = "1.0.0" +serde = { version = "1.0.*"} +argh = "0.1.13" diff --git a/beamer/client/src/main.rs b/beamer/client/src/main.rs new file mode 100644 index 0000000..222b034 --- /dev/null +++ b/beamer/client/src/main.rs @@ -0,0 +1,24 @@ + +use semserialize::SemLine; +use serde::{Serialize, Deserialize}; +use postcard::{from_bytes}; + +use argh::FromArgs; +use std::net; +#[derive(FromArgs)] +///Config options for the client +struct Config { +///listener IP, defaults to 0.0.0.0 +#[argh(option, default = "String::from(\"0.0.0.0\")",short='i')] +ip: String, +///listener port +#[argh(option, default = "2137",short='p')] +udpport: usize, +} +fn main() { + let config:Config = argh::from_env(); + println!("UDP listener Port is {}",config.udpport); + let socket_addr:std::net::SocketAddr = format!("{}:{}",config.ip,config.udpport).parse::().unwrap_or("0.0.0.0:2137".parse::().unwrap()); + let udpsocket = std::net::UdpSocket::bind(socket_addr).expect("couldn't bind to address"); + +} diff --git a/beamer/libs/semserialize/.gitignore b/beamer/libs/semserialize/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/beamer/libs/semserialize/.gitignore @@ -0,0 +1 @@ +target diff --git a/beamer/libs/semserialize/Cargo.lock b/beamer/libs/semserialize/Cargo.lock new file mode 100644 index 0000000..819f47f --- /dev/null +++ b/beamer/libs/semserialize/Cargo.lock @@ -0,0 +1,96 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "semserialize" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "serde" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.134" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "2.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ae51629bf965c5c098cc9e87908a3df5301051a9e087d6f9bef5c9771ed126" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" diff --git a/beamer/libs/semserialize/Cargo.toml b/beamer/libs/semserialize/Cargo.toml new file mode 100644 index 0000000..4835f1a --- /dev/null +++ b/beamer/libs/semserialize/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "semserialize" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +# By default, `serde` has the `std` feature enabled, which makes it unsuitable for embedded targets +# disabling default-features fixes this +serde = { version = "1.0", features = ["derive"] } + +[dev-dependencies] +serde_json = "1.0.134" diff --git a/beamer/libs/semserialize/shell.nix b/beamer/libs/semserialize/shell.nix new file mode 100644 index 0000000..e0b545f --- /dev/null +++ b/beamer/libs/semserialize/shell.nix @@ -0,0 +1,17 @@ +{ pkgs ? import {}}: +let rust-toolchain = with pkgs; symlinkJoin { + name = "rust-toolchain"; + paths = [ + rustc + cargo + rustfmt + rust-analyzer + clippy + rustPlatform.rustcSrc + ]; + }; +in pkgs.mkShell { + RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; + buildInputs = [rust-toolchain]; + RUST_BACKTRACE = 1; +} diff --git a/beamer/libs/semserialize/src/lib.rs b/beamer/libs/semserialize/src/lib.rs new file mode 100644 index 0000000..dbc93e8 --- /dev/null +++ b/beamer/libs/semserialize/src/lib.rs @@ -0,0 +1,27 @@ +#[macro_use] +use serde::{Serialize, Deserialize}; + +// How many lines are there from HIGHEST to LOWEST +pub const HEIGHT: usize = 32; +// "Pixels" from left to right +pub const WIDTH: usize = 32; +#[derive(Serialize, Deserialize, Debug,PartialEq)] +pub struct SemLine{ + line: u32, + pixels:[u8;WIDTH] + +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json; + #[test] + fn test_serialize(){ + let test_struct: SemLine = SemLine{line:0,pixels:[0;WIDTH]}; + let serialized = serde_json::to_string(&test_struct).unwrap(); + let deserialized:SemLine = serde_json::from_str(&serialized).unwrap(); + assert_eq!(test_struct,deserialized); + + } +}