//! C API wrapper for the [servicepoint](https://docs.rs/servicepoint/latest/servicepoint/) crate. //! //! # Examples //! //! Make sure to check out [this GitHub repo](https://github.com/arfst23/ServicePoint) as well! //! //! ```C //! #include //! #include "servicepoint.h" //! //! int main(void) { //! UdpConnection *connection = sp_udp_open("172.23.42.29:2342"); //! if (connection == NULL) //! return 1; //! //! Bitmap *pixels = sp_bitmap_new(SP_PIXEL_WIDTH, SP_PIXEL_HEIGHT); //! sp_bitmap_fill(pixels, true); //! //! TypedCommand *command = sp_command_bitmap_linear_win(0, 0, pixels, Uncompressed); //! while (sp_udp_send_command(connection, sp_command_clone(command))); //! //! sp_command_free(command); //! sp_udp_free(connection); //! return 0; //! } //! ``` pub use crate::bitmap::*; pub use crate::bitvec::*; pub use crate::brightness_grid::*; pub use crate::byte_slice::*; pub use crate::char_grid::*; pub use crate::cp437_grid::*; pub use crate::packet::*; pub use servicepoint::CommandCode; use std::ptr::NonNull; pub use typed_command::*; mod bitmap; mod bitvec; mod brightness_grid; mod byte_slice; mod char_grid; mod cp437_grid; mod packet; mod typed_command; #[cfg(feature = "protocol_udp")] mod udp; #[cfg(feature = "protocol_udp")] pub use udp::*; use std::time::Duration; /// Actual hardware limit is around 28-29ms/frame. Rounded up for less dropped packets. pub const SP_FRAME_PACING_MS: u128 = Duration::from_millis(30).as_millis(); pub(crate) fn heap_move(x: T) -> *mut T { Box::into_raw(Box::new(x)) } pub(crate) fn heap_move_nonnull(x: T) -> NonNull { NonNull::from(Box::leak(Box::new(x))) } pub(crate) unsafe fn heap_drop(x: NonNull) { drop(unsafe { heap_remove(x) }); } pub(crate) unsafe fn heap_remove(x: NonNull) -> T { unsafe { *Box::from_raw(x.as_ptr()) } }