From 0344c0bdcfff3b042c7f54ef9085ddb233b085ca Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sat, 28 Jun 2025 20:23:23 +0200 Subject: [PATCH 1/2] fix readme --- README.md | 20 ++++++++++++-------- example/Makefile | 2 +- example/src/flut.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 example/src/flut.c diff --git a/README.md b/README.md index fa0a49b..e5a3249 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # servicepoint_binding_c -[![Release](https://git.berlin.ccc.de/servicepoint/servicepoint_binding_c/badges/release.svg)](https://git.berlin.ccc.de/servicepoint/servicepoint_binding_c/releases) +[![Release](https://git.berlin.ccc.de/servicepoint/servicepoint-binding-c/badges/release.svg)](https://git.berlin.ccc.de/servicepoint/servicepoint-binding-c/releases) [![crates.io](https://img.shields.io/crates/v/servicepoint_binding_c.svg)](https://crates.io/crates/servicepoint) [![Crates.io Total Downloads](https://img.shields.io/crates/d/servicepoint_binding_c)](https://crates.io/crates/servicepoint) [![docs.rs](https://img.shields.io/docsrs/servicepoint_binding_c)](https://docs.rs/servicepoint/latest/servicepoint/) [![GPLv3 licensed](https://img.shields.io/crates/l/servicepoint_binding_c)](./LICENSE) -[![CI](https://git.berlin.ccc.de/servicepoint/servicepoint_binding_c/badges/workflows/rust.yml/badge.svg)](https://git.berlin.ccc.de/servicepoint/servicepoint_binding_c) +[![CI](https://git.berlin.ccc.de/servicepoint/servicepoint-binding-c/badges/workflows/rust.yml/badge.svg)](https://git.berlin.ccc.de/servicepoint/servicepoint-binding-c) In [CCCB](https://berlin.ccc.de/), there is a big pixel matrix hanging on the wall. It is called "Service Point Display" or "Airport Display". @@ -19,18 +19,22 @@ This crate contains C bindings for the [servicepoint](https://git.berlin.ccc.de/ #include "servicepoint.h" int main(void) { - SPConnection *connection = sp_connection_open("172.23.42.29:2342"); + UdpSocket *connection = sp_udp_socket_open("172.23.42.29:2342"); if (connection == NULL) return 1; - SPBitmap *pixels = sp_bitmap_new(SP_PIXEL_WIDTH, SP_PIXEL_HEIGHT); + Bitmap *pixels = sp_bitmap_new(PIXEL_WIDTH, PIXEL_HEIGHT); sp_bitmap_fill(pixels, true); - SPCommand *command = sp_command_bitmap_linear_win(0, 0, pixels, Uncompressed); - while (sp_connection_send_command(connection, sp_command_clone(command))); + BitmapCommand *command = sp_bitmap_command_new(pixels, 0, 0, COMPRESSION_CODE_LZMA); + Packet *packet = sp_bitmap_command_try_into_packet(command); + if (packet == NULL) + return 1; + + if (!sp_udp_socket_send_packet(connection, packet)) + return 1; - sp_command_free(command); - sp_connection_free(connection); + sp_udp_socket_free(connection); return 0; } ``` diff --git a/example/Makefile b/example/Makefile index 15e53d1..a3c0df4 100644 --- a/example/Makefile +++ b/example/Makefile @@ -96,7 +96,7 @@ endif # ADD NEW EXAMPLES HERE _c_src := src/announce.c src/brightness_tester.c src/header_logger.c \ - src/moving_line.c src/random_stuff.c src/wiping_clear.c src/undefined.c + src/moving_line.c src/random_stuff.c src/wiping_clear.c src/undefined.c src/flut.c _programs := $(basename $(notdir $(_c_src))) _bins := $(_programs) _unstripped_bins := $(addsuffix _unstripped, $(_bins)) diff --git a/example/src/flut.c b/example/src/flut.c new file mode 100644 index 0000000..9f7534f --- /dev/null +++ b/example/src/flut.c @@ -0,0 +1,33 @@ +#include +#include +#include "servicepoint.h" + +volatile bool aborted = false; + +void handle_sigint(int sig) { + (void)sig; // suppress unused warning + aborted = true; +} + +int main(void) { + UdpSocket *connection = sp_udp_socket_open("172.23.42.29:2342"); + if (connection == NULL) + return 1; + + Bitmap *pixels = sp_bitmap_new(PIXEL_WIDTH, PIXEL_HEIGHT); + sp_bitmap_fill(pixels, true); + + BitmapCommand *command = sp_bitmap_command_new(pixels, 0, 0, COMPRESSION_CODE_LZMA); + Packet *packet = sp_bitmap_command_try_into_packet(command); + + signal(SIGINT, handle_sigint); + size_t packets_sent = 0; + while (!aborted && sp_udp_socket_send_packet(connection, sp_packet_clone(packet))) { + ++packets_sent; + } + + printf("packets sent: %zu\n", packets_sent); + sp_packet_free(packet); + sp_udp_socket_free(connection); + return 0; +} -- 2.47.0 From 90f1edb2c1f76c28744899bc2bede4f2de47d550 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sat, 12 Jul 2025 13:02:12 +0200 Subject: [PATCH 2/2] update servicepoint to v0.16.0 --- Cargo.lock | 16 ++-------------- Cargo.toml | 2 +- README.md | 7 ++++++- src/containers/bitmap.rs | 2 +- src/containers/brightness_grid.rs | 2 +- src/containers/char_grid.rs | 7 ++++--- src/containers/cp437_grid.rs | 2 +- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 63012a0..41db3cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,17 +187,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "inherent" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c38228f24186d9cc68c729accb4d413be9eaed6ad07ff79e0270d9e56f3de13" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -395,14 +384,13 @@ dependencies = [ [[package]] name = "servicepoint" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2800caad491cb44f67e5dd5b8c61ece368eecfe588155d03c7d9864acbad6919" +checksum = "9b04582e916474f1bc1605cad3773262c425d9062b487e49a0df59662f2cca8d" dependencies = [ "bitvec", "bzip2", "flate2", - "inherent", "log", "once_cell", "rust-lzma", diff --git a/Cargo.toml b/Cargo.toml index f6bef14..cd9619c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ keywords = ["cccb", "cccb-servicepoint", "cbindgen"] crate-type = ["staticlib", "cdylib", "rlib"] [dependencies.servicepoint] -version = "0.15.1" +version = "0.16.0" default-features = false [dependencies.env_logger] diff --git a/README.md b/README.md index e5a3249..10f3193 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,9 @@ A full example including Makefile is available as part of this crate. This library is still in early development. You can absolutely use it, and it works, but expect minor breaking changes with every version bump. -Please specify the full version including patch in your Cargo.toml until 1.0 is released. +Pin a specific version until 1.0 is released. + +Release notes are published [here](https://git.berlin.ccc.de/servicepoint/servicepoint-binding-c/releases). ## Installation @@ -81,6 +83,9 @@ When linked dynamically, you have to provide the `cdylib` at runtime in the _sam guarantees yet. The Makefile in the example directory contains a bunch of additional compiler flags you might want to add depending on your use case. +The nix flake provides a package for referencing in your flake. +The package provides a pkg-config file for automatic linking. + ## Notes on differences to rust library - function names are: `sp_` \ \. diff --git a/src/containers/bitmap.rs b/src/containers/bitmap.rs index 5974016..8bfb6eb 100644 --- a/src/containers/bitmap.rs +++ b/src/containers/bitmap.rs @@ -1,7 +1,7 @@ use crate::{containers::ByteSlice, macros::wrap}; use servicepoint::{ Bitmap, BitmapCommand, CompressionCode, DataRef, DisplayBitVec, Grid, - Origin, Packet, + GridMut, Origin, Packet, }; use std::ptr::NonNull; diff --git a/src/containers/brightness_grid.rs b/src/containers/brightness_grid.rs index 3b3fabb..e269ced 100644 --- a/src/containers/brightness_grid.rs +++ b/src/containers/brightness_grid.rs @@ -1,7 +1,7 @@ use crate::{containers::ByteSlice, macros::wrap}; use servicepoint::{ Brightness, BrightnessGrid, BrightnessGridCommand, ByteGrid, DataRef, Grid, - Origin, Packet, + GridMut, Origin, Packet, }; use std::{mem::transmute, ptr::NonNull}; diff --git a/src/containers/char_grid.rs b/src/containers/char_grid.rs index 8946b50..bfc3119 100644 --- a/src/containers/char_grid.rs +++ b/src/containers/char_grid.rs @@ -1,5 +1,5 @@ use crate::{containers::ByteSlice, macros::wrap}; -use servicepoint::{CharGrid, CharGridCommand, Grid, Origin, Packet}; +use servicepoint::{CharGrid, CharGridCommand, Grid, GridMut, Origin, Packet}; use std::ptr::NonNull; wrap! { @@ -25,8 +25,9 @@ wrap! { /// Loads a [CharGrid] with the specified dimensions from the provided data. /// /// returns: new CharGrid or NULL in case of an error - fn load(width: val usize, height: val usize, data: slice ByteSlice) -> move_ok *mut CharGrid { - CharGrid::load_utf8(width, height, data.to_vec()) + fn load(width: val usize, height: val usize, data: slice ByteSlice) -> move_some *mut CharGrid { + String::from_utf8(data.to_vec()).ok() + .and_then(|s| CharGrid::load(width, height, &*s.chars().collect::>())) }; methods: /// Returns the current value at the specified position. diff --git a/src/containers/cp437_grid.rs b/src/containers/cp437_grid.rs index b67d1ae..1c4e729 100644 --- a/src/containers/cp437_grid.rs +++ b/src/containers/cp437_grid.rs @@ -1,6 +1,6 @@ use crate::{containers::ByteSlice, macros::wrap}; use servicepoint::{ - Cp437Grid, Cp437GridCommand, DataRef, Grid, Origin, Packet, + Cp437Grid, Cp437GridCommand, DataRef, Grid, GridMut, Origin, Packet, }; use std::ptr::NonNull; -- 2.47.0