examples, format
This commit is contained in:
		
							parent
							
								
									555d917d96
								
							
						
					
					
						commit
						4cd86d3494
					
				
					 4 changed files with 112 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -49,25 +49,9 @@ impl Connection {
 | 
			
		|||
    /// # 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");
 | 
			
		||||
    /// ```
 | 
			
		||||
    pub fn send(
 | 
			
		||||
        &self,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,32 @@
 | 
			
		|||
//! 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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -34,22 +62,76 @@ mod primitive_grid;
 | 
			
		|||
/// size of a single tile in one dimension
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
/// 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;
 | 
			
		||||
 | 
			
		||||
/// 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;
 | 
			
		||||
 | 
			
		||||
/// 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;
 | 
			
		||||
 | 
			
		||||
/// pixel count on whole screen
 | 
			
		||||
pub const PIXEL_COUNT: usize = PIXEL_WIDTH * PIXEL_HEIGHT;
 | 
			
		||||
 | 
			
		||||
/// 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);
 | 
			
		||||
 | 
			
		||||
// include README.md in doctest
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,8 @@
 | 
			
		|||
//!
 | 
			
		||||
//! prefix `sp_brightness_grid_`
 | 
			
		||||
 | 
			
		||||
use servicepoint::{Brightness, BrightnessGrid, DataRef, Grid, PrimitiveGrid};
 | 
			
		||||
use std::intrinsics::transmute;
 | 
			
		||||
use servicepoint::{BrightnessGrid, DataRef, Grid, PrimitiveGrid, Brightness};
 | 
			
		||||
 | 
			
		||||
use crate::c_slice::CByteSlice;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,9 @@ pub unsafe extern "C" fn sp_brightness_grid_new(
 | 
			
		|||
    width: usize,
 | 
			
		||||
    height: usize,
 | 
			
		||||
) -> *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.
 | 
			
		||||
| 
						 | 
				
			
			@ -52,8 +54,8 @@ pub unsafe extern "C" fn sp_brightness_grid_load(
 | 
			
		|||
) -> *mut CBrightnessGrid {
 | 
			
		||||
    let data = std::slice::from_raw_parts(data, data_length);
 | 
			
		||||
    let grid = PrimitiveGrid::load(width, height, data);
 | 
			
		||||
    let grid = BrightnessGrid::try_from(grid)
 | 
			
		||||
        .expect("invalid brightness value");
 | 
			
		||||
    let grid =
 | 
			
		||||
        BrightnessGrid::try_from(grid).expect("invalid brightness value");
 | 
			
		||||
    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` was not passed to another consuming function, e.g. to create a `Command`
 | 
			
		||||
#[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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -141,8 +145,8 @@ pub unsafe extern "C" fn sp_brightness_grid_set(
 | 
			
		|||
    y: usize,
 | 
			
		||||
    value: u8,
 | 
			
		||||
) {
 | 
			
		||||
    let brightness = Brightness::try_from(value)
 | 
			
		||||
        .expect("invalid brightness value");
 | 
			
		||||
    let brightness =
 | 
			
		||||
        Brightness::try_from(value).expect("invalid brightness value");
 | 
			
		||||
    (*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` is not written to or read from concurrently
 | 
			
		||||
#[no_mangle]
 | 
			
		||||
pub unsafe extern "C" fn sp_brightness_grid_fill(this: *mut CBrightnessGrid, value: u8) {
 | 
			
		||||
    let brightness = Brightness::try_from(value)
 | 
			
		||||
        .expect("invalid brightness value");
 | 
			
		||||
pub unsafe extern "C" fn sp_brightness_grid_fill(
 | 
			
		||||
    this: *mut CBrightnessGrid,
 | 
			
		||||
    value: u8,
 | 
			
		||||
) {
 | 
			
		||||
    let brightness =
 | 
			
		||||
        Brightness::try_from(value).expect("invalid brightness value");
 | 
			
		||||
    (*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`
 | 
			
		||||
#[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()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +203,9 @@ pub unsafe extern "C" fn sp_brightness_grid_width(this: *const CBrightnessGrid)
 | 
			
		|||
///
 | 
			
		||||
/// - `this` points to a valid `BrightnessGrid`
 | 
			
		||||
#[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()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,9 @@ pub unsafe extern "C" fn sp_cp437_grid_width(this: *const CCp437Grid) -> usize {
 | 
			
		|||
///
 | 
			
		||||
/// - `this` points to a valid `Cp437Grid`
 | 
			
		||||
#[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()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue