mirror of
https://github.com/cccb/servicepoint.git
synced 2025-01-18 10:00:14 +01:00
examples, format
This commit is contained in:
parent
555d917d96
commit
4cd86d3494
|
@ -49,25 +49,9 @@ impl Connection {
|
||||||
/// # use servicepoint::{Command, CompressionCode, Grid, PixelGrid};
|
/// # use servicepoint::{Command, CompressionCode, Grid, PixelGrid};
|
||||||
/// # let connection = servicepoint::Connection::open("172.23.42.29:2342")
|
/// # let connection = servicepoint::Connection::open("172.23.42.29:2342")
|
||||||
/// # .expect("connection failed");
|
/// # .expect("connection failed");
|
||||||
///
|
|
||||||
/// // turn off all pixels on display
|
/// // turn off all pixels on display
|
||||||
/// connection.send(Command::Clear)
|
/// connection.send(Command::Clear)
|
||||||
/// .expect("send failed");
|
/// .expect("send failed");
|
||||||
///
|
|
||||||
/// // turn on all pixels in a grid
|
|
||||||
/// let mut pixels = PixelGrid::max_sized();
|
|
||||||
/// pixels.fill(true);
|
|
||||||
///
|
|
||||||
/// // create command to send pixels
|
|
||||||
/// let command = Command::BitmapLinearWin(
|
|
||||||
/// servicepoint::Origin::new(0, 0),
|
|
||||||
/// pixels,
|
|
||||||
/// CompressionCode::Uncompressed
|
|
||||||
/// );
|
|
||||||
///
|
|
||||||
/// // send command to display
|
|
||||||
/// connection.send(command)
|
|
||||||
/// .expect("send failed");
|
|
||||||
/// ```
|
/// ```
|
||||||
pub fn send(
|
pub fn send(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -1,4 +1,32 @@
|
||||||
//! Abstractions for the UDP protocol of the CCCB servicepoint display.
|
//! Abstractions for the UDP protocol of the CCCB servicepoint display.
|
||||||
|
//!
|
||||||
|
//! # Examples
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! use servicepoint::{Command, CompressionCode, Grid, PixelGrid};
|
||||||
|
//!
|
||||||
|
//! let connection = servicepoint::Connection::open("172.23.42.29:2342")
|
||||||
|
//! .expect("connection failed");
|
||||||
|
//!
|
||||||
|
//! // turn off all pixels on display
|
||||||
|
//! connection.send(Command::Clear)
|
||||||
|
//! .expect("send failed");
|
||||||
|
//!
|
||||||
|
//! // turn on all pixels in a grid
|
||||||
|
//! let mut pixels = PixelGrid::max_sized();
|
||||||
|
//! pixels.fill(true);
|
||||||
|
//!
|
||||||
|
//! // create command to send pixels
|
||||||
|
//! let command = Command::BitmapLinearWin(
|
||||||
|
//! servicepoint::Origin::new(0, 0),
|
||||||
|
//! pixels,
|
||||||
|
//! CompressionCode::Uncompressed
|
||||||
|
//! );
|
||||||
|
//!
|
||||||
|
//! // send command to display
|
||||||
|
//! connection.send(command)
|
||||||
|
//! .expect("send failed");
|
||||||
|
//! ```
|
||||||
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -34,22 +62,76 @@ mod primitive_grid;
|
||||||
/// size of a single tile in one dimension
|
/// size of a single tile in one dimension
|
||||||
pub const TILE_SIZE: usize = 8;
|
pub const TILE_SIZE: usize = 8;
|
||||||
|
|
||||||
/// tile count in the x-direction
|
/// Display tile count in the x-direction
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use servicepoint::{Cp437Grid, TILE_HEIGHT, TILE_WIDTH};
|
||||||
|
/// let grid = Cp437Grid::new(TILE_WIDTH, TILE_HEIGHT);
|
||||||
|
/// ```
|
||||||
pub const TILE_WIDTH: usize = 56;
|
pub const TILE_WIDTH: usize = 56;
|
||||||
|
|
||||||
/// tile count in the y-direction
|
/// Display tile count in the y-direction
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use servicepoint::{Cp437Grid, TILE_HEIGHT, TILE_WIDTH};
|
||||||
|
/// let grid = Cp437Grid::new(TILE_WIDTH, TILE_HEIGHT);
|
||||||
|
/// ```
|
||||||
pub const TILE_HEIGHT: usize = 20;
|
pub const TILE_HEIGHT: usize = 20;
|
||||||
|
|
||||||
/// screen width in pixels
|
/// Display width in pixels
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use servicepoint::{PIXEL_HEIGHT, PIXEL_WIDTH, PixelGrid};
|
||||||
|
/// let grid = PixelGrid::new(PIXEL_WIDTH, PIXEL_HEIGHT);
|
||||||
|
/// ```
|
||||||
pub const PIXEL_WIDTH: usize = TILE_WIDTH * TILE_SIZE;
|
pub const PIXEL_WIDTH: usize = TILE_WIDTH * TILE_SIZE;
|
||||||
|
|
||||||
/// screen height in pixels
|
/// Display height in pixels
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use servicepoint::{PIXEL_HEIGHT, PIXEL_WIDTH, PixelGrid};
|
||||||
|
/// let grid = PixelGrid::new(PIXEL_WIDTH, PIXEL_HEIGHT);
|
||||||
|
/// ```
|
||||||
pub const PIXEL_HEIGHT: usize = TILE_HEIGHT * TILE_SIZE;
|
pub const PIXEL_HEIGHT: usize = TILE_HEIGHT * TILE_SIZE;
|
||||||
|
|
||||||
/// pixel count on whole screen
|
/// pixel count on whole screen
|
||||||
pub const PIXEL_COUNT: usize = PIXEL_WIDTH * PIXEL_HEIGHT;
|
pub const PIXEL_COUNT: usize = PIXEL_WIDTH * PIXEL_HEIGHT;
|
||||||
|
|
||||||
/// Actual hardware limit is around 28-29ms/frame. Rounded up for less dropped packets.
|
/// Actual hardware limit is around 28-29ms/frame. Rounded up for less dropped packets.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use std::time::Instant;
|
||||||
|
/// # use servicepoint::{Command, CompressionCode, FRAME_PACING, Origin, PixelGrid};
|
||||||
|
/// # let connection = servicepoint::Connection::open("172.23.42.29:2342")
|
||||||
|
/// # .expect("connection failed");
|
||||||
|
/// # let pixels = PixelGrid::max_sized();
|
||||||
|
/// loop {
|
||||||
|
/// let start = Instant::now();
|
||||||
|
///
|
||||||
|
/// // Change pixels here
|
||||||
|
///
|
||||||
|
/// connection.send(Command::BitmapLinearWin(
|
||||||
|
/// Origin::new(0,0),
|
||||||
|
/// pixels,
|
||||||
|
/// CompressionCode::Lzma
|
||||||
|
/// ))
|
||||||
|
/// .expect("send failed");
|
||||||
|
///
|
||||||
|
/// // warning: will crash if resulting duration is negative, e.g. when resuming from standby
|
||||||
|
/// std::thread::sleep(FRAME_PACING - start.elapsed());
|
||||||
|
/// # break; // prevent doctest from hanging
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
pub const FRAME_PACING: Duration = Duration::from_millis(30);
|
pub const FRAME_PACING: Duration = Duration::from_millis(30);
|
||||||
|
|
||||||
// include README.md in doctest
|
// include README.md in doctest
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
//!
|
//!
|
||||||
//! prefix `sp_brightness_grid_`
|
//! prefix `sp_brightness_grid_`
|
||||||
|
|
||||||
|
use servicepoint::{Brightness, BrightnessGrid, DataRef, Grid, PrimitiveGrid};
|
||||||
use std::intrinsics::transmute;
|
use std::intrinsics::transmute;
|
||||||
use servicepoint::{BrightnessGrid, DataRef, Grid, PrimitiveGrid, Brightness};
|
|
||||||
|
|
||||||
use crate::c_slice::CByteSlice;
|
use crate::c_slice::CByteSlice;
|
||||||
|
|
||||||
|
@ -26,7 +26,9 @@ pub unsafe extern "C" fn sp_brightness_grid_new(
|
||||||
width: usize,
|
width: usize,
|
||||||
height: usize,
|
height: usize,
|
||||||
) -> *mut CBrightnessGrid {
|
) -> *mut CBrightnessGrid {
|
||||||
Box::into_raw(Box::new(CBrightnessGrid(BrightnessGrid::new(width, height))))
|
Box::into_raw(Box::new(CBrightnessGrid(BrightnessGrid::new(
|
||||||
|
width, height,
|
||||||
|
))))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Loads a `BrightnessGrid` with the specified dimensions from the provided data.
|
/// Loads a `BrightnessGrid` with the specified dimensions from the provided data.
|
||||||
|
@ -52,8 +54,8 @@ pub unsafe extern "C" fn sp_brightness_grid_load(
|
||||||
) -> *mut CBrightnessGrid {
|
) -> *mut CBrightnessGrid {
|
||||||
let data = std::slice::from_raw_parts(data, data_length);
|
let data = std::slice::from_raw_parts(data, data_length);
|
||||||
let grid = PrimitiveGrid::load(width, height, data);
|
let grid = PrimitiveGrid::load(width, height, data);
|
||||||
let grid = BrightnessGrid::try_from(grid)
|
let grid =
|
||||||
.expect("invalid brightness value");
|
BrightnessGrid::try_from(grid).expect("invalid brightness value");
|
||||||
Box::into_raw(Box::new(CBrightnessGrid(grid)))
|
Box::into_raw(Box::new(CBrightnessGrid(grid)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +86,9 @@ pub unsafe extern "C" fn sp_brightness_grid_clone(
|
||||||
/// - `this` is not used concurrently or after this call
|
/// - `this` is not used concurrently or after this call
|
||||||
/// - `this` was not passed to another consuming function, e.g. to create a `Command`
|
/// - `this` was not passed to another consuming function, e.g. to create a `Command`
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_brightness_grid_dealloc(this: *mut CBrightnessGrid) {
|
pub unsafe extern "C" fn sp_brightness_grid_dealloc(
|
||||||
|
this: *mut CBrightnessGrid,
|
||||||
|
) {
|
||||||
_ = Box::from_raw(this);
|
_ = Box::from_raw(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,8 +145,8 @@ pub unsafe extern "C" fn sp_brightness_grid_set(
|
||||||
y: usize,
|
y: usize,
|
||||||
value: u8,
|
value: u8,
|
||||||
) {
|
) {
|
||||||
let brightness = Brightness::try_from(value)
|
let brightness =
|
||||||
.expect("invalid brightness value");
|
Brightness::try_from(value).expect("invalid brightness value");
|
||||||
(*this).0.set(x, y, brightness);
|
(*this).0.set(x, y, brightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,9 +164,12 @@ pub unsafe extern "C" fn sp_brightness_grid_set(
|
||||||
/// - `this` points to a valid `BrightnessGrid`
|
/// - `this` points to a valid `BrightnessGrid`
|
||||||
/// - `this` is not written to or read from concurrently
|
/// - `this` is not written to or read from concurrently
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_brightness_grid_fill(this: *mut CBrightnessGrid, value: u8) {
|
pub unsafe extern "C" fn sp_brightness_grid_fill(
|
||||||
let brightness = Brightness::try_from(value)
|
this: *mut CBrightnessGrid,
|
||||||
.expect("invalid brightness value");
|
value: u8,
|
||||||
|
) {
|
||||||
|
let brightness =
|
||||||
|
Brightness::try_from(value).expect("invalid brightness value");
|
||||||
(*this).0.fill(brightness);
|
(*this).0.fill(brightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +185,9 @@ pub unsafe extern "C" fn sp_brightness_grid_fill(this: *mut CBrightnessGrid, val
|
||||||
///
|
///
|
||||||
/// - `this` points to a valid `BrightnessGrid`
|
/// - `this` points to a valid `BrightnessGrid`
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_brightness_grid_width(this: *const CBrightnessGrid) -> usize {
|
pub unsafe extern "C" fn sp_brightness_grid_width(
|
||||||
|
this: *const CBrightnessGrid,
|
||||||
|
) -> usize {
|
||||||
(*this).0.width()
|
(*this).0.width()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +203,9 @@ pub unsafe extern "C" fn sp_brightness_grid_width(this: *const CBrightnessGrid)
|
||||||
///
|
///
|
||||||
/// - `this` points to a valid `BrightnessGrid`
|
/// - `this` points to a valid `BrightnessGrid`
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_brightness_grid_height(this: *const CBrightnessGrid) -> usize {
|
pub unsafe extern "C" fn sp_brightness_grid_height(
|
||||||
|
this: *const CBrightnessGrid,
|
||||||
|
) -> usize {
|
||||||
(*this).0.height()
|
(*this).0.height()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,9 @@ pub unsafe extern "C" fn sp_cp437_grid_width(this: *const CCp437Grid) -> usize {
|
||||||
///
|
///
|
||||||
/// - `this` points to a valid `Cp437Grid`
|
/// - `this` points to a valid `Cp437Grid`
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn sp_cp437_grid_height(this: *const CCp437Grid) -> usize {
|
pub unsafe extern "C" fn sp_cp437_grid_height(
|
||||||
|
this: *const CCp437Grid,
|
||||||
|
) -> usize {
|
||||||
(*this).0.height()
|
(*this).0.height()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue