add first specific commands
This commit is contained in:
		
							parent
							
								
									84adf166a9
								
							
						
					
					
						commit
						373725c648
					
				
					 7 changed files with 360 additions and 66 deletions
				
			
		|  | @ -32,7 +32,7 @@ features = ["full"] | ||||||
| 
 | 
 | ||||||
| [export] | [export] | ||||||
| include = [] | include = [] | ||||||
| exclude = [] | exclude = ["BitVec"] | ||||||
| 
 | 
 | ||||||
| [export.rename] | [export.rename] | ||||||
| "SpBitVec" = "BitVec" | "SpBitVec" = "BitVec" | ||||||
|  |  | ||||||
|  | @ -179,6 +179,22 @@ enum CompressionCode | ||||||
| typedef uint16_t CompressionCode; | typedef uint16_t CompressionCode; | ||||||
| #endif // __cplusplus
 | #endif // __cplusplus
 | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Set pixel data starting at the pixel offset on screen. | ||||||
|  |  * | ||||||
|  |  * The screen will continuously overwrite more pixel data without regarding the offset, meaning | ||||||
|  |  * once the starting row is full, overwriting will continue on column 0. | ||||||
|  |  * | ||||||
|  |  * The [`BinaryOperation`] will be applied on the display comparing old and sent bit. | ||||||
|  |  * | ||||||
|  |  * `new_bit = old_bit op sent_bit` | ||||||
|  |  * | ||||||
|  |  * For example, [`BinaryOperation::Or`] can be used to turn on some pixels without affecting other pixels. | ||||||
|  |  * | ||||||
|  |  * The contained [`DisplayBitVec`] is always uncompressed. | ||||||
|  |  */ | ||||||
|  | typedef struct BitVecCommand BitVecCommand; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * A fixed-size 2D grid of booleans. |  * A fixed-size 2D grid of booleans. | ||||||
|  * |  * | ||||||
|  | @ -196,6 +212,38 @@ typedef uint16_t CompressionCode; | ||||||
|  */ |  */ | ||||||
| typedef struct Bitmap Bitmap; | typedef struct Bitmap Bitmap; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Overwrites a rectangular region of pixels. | ||||||
|  |  * | ||||||
|  |  * Origin coordinates must be divisible by 8. | ||||||
|  |  * | ||||||
|  |  * # Examples | ||||||
|  |  * | ||||||
|  |  * ```rust | ||||||
|  |  * # use servicepoint::*; | ||||||
|  |  * # let connection = FakeConnection; | ||||||
|  |  * # | ||||||
|  |  * let mut bitmap = Bitmap::max_sized(); | ||||||
|  |  * // draw something to the pixels here
 | ||||||
|  |  * # bitmap.set(2, 5, true); | ||||||
|  |  * | ||||||
|  |  * // create command to send pixels
 | ||||||
|  |  * let command = BitmapCommand { | ||||||
|  |  *     bitmap, | ||||||
|  |  *     origin: Origin::ZERO, | ||||||
|  |  *     compression: CompressionCode::Uncompressed | ||||||
|  |  * }; | ||||||
|  |  * | ||||||
|  |  * connection.send_command(command).expect("send failed"); | ||||||
|  |  * ``` | ||||||
|  |  */ | ||||||
|  | typedef struct BitmapCommand BitmapCommand; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * This is a type only used by cbindgen to have a type for pointers. | ||||||
|  |  */ | ||||||
|  | typedef struct DisplayBitVec DisplayBitVec; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * The raw packet. |  * The raw packet. | ||||||
|  * |  * | ||||||
|  | @ -348,6 +396,11 @@ typedef uint8_t Brightness; | ||||||
|  */ |  */ | ||||||
| typedef ValueGrid_char CharGrid; | typedef ValueGrid_char CharGrid; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Type alias for documenting the meaning of the u16 in enum values | ||||||
|  |  */ | ||||||
|  | typedef size_t Offset; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * A grid containing codepage 437 characters. |  * A grid containing codepage 437 characters. | ||||||
|  * |  * | ||||||
|  | @ -908,17 +961,64 @@ void sp_char_grid_set(CharGrid */*notnull*/ char_grid, | ||||||
|  */ |  */ | ||||||
| size_t sp_char_grid_width(CharGrid */*notnull*/ char_grid); | size_t sp_char_grid_width(CharGrid */*notnull*/ char_grid); | ||||||
| 
 | 
 | ||||||
|  | BitmapCommand */*notnull*/ sp_cmd_bitmap_from_bitmap(Bitmap */*notnull*/ bitmap); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Returns a pointer to the provided `BitmapCommand`. | ||||||
|  |  * | ||||||
|  |  * # Safety | ||||||
|  |  * | ||||||
|  |  * - The returned bitmap inherits the lifetime of the command in which it is contained. | ||||||
|  |  * - The returned pointer may not be used in a function that consumes the instance, e.g. to create a command. | ||||||
|  |  */ | ||||||
|  | Bitmap */*notnull*/ sp_cmd_bitmap_get(BitmapCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | CompressionCode sp_cmd_bitmap_get_compression(BitmapCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitmap_get_origin(BitmapCommand */*notnull*/ command, | ||||||
|  |                               size_t */*notnull*/ origin_x, | ||||||
|  |                               size_t */*notnull*/ origin_y); | ||||||
|  | 
 | ||||||
|  | Packet *sp_cmd_bitmap_into_packet(BitmapCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | TypedCommand */*notnull*/ sp_cmd_bitmap_into_typed(BitmapCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Sets a window of pixels to the specified values. |  * Sets a window of pixels to the specified values. | ||||||
|  * |  * | ||||||
|  * The passed [Bitmap] gets consumed. |  * The passed [Bitmap] gets consumed. | ||||||
|  * |  * | ||||||
|  * Returns: a new [servicepoint::BitmapCommand] instance. |  * Returns: a new [BitmapCommand] instance. | ||||||
|  */ |  */ | ||||||
| TypedCommand *sp_command_bitmap(size_t x, | BitmapCommand */*notnull*/ sp_cmd_bitmap_new(Bitmap */*notnull*/ bitmap, | ||||||
|                                 size_t y, |                                              size_t origin_x, | ||||||
|                                 Bitmap */*notnull*/ bitmap, |                                              size_t origin_y, | ||||||
|                                 CompressionCode compression); |                                              CompressionCode compression); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Moves the provided bitmap to be contained in the command. | ||||||
|  |  */ | ||||||
|  | void sp_cmd_bitmap_set(BitmapCommand */*notnull*/ command, | ||||||
|  |                        Bitmap */*notnull*/ bitmap); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitmap_set_compression(BitmapCommand */*notnull*/ command, | ||||||
|  |                                    CompressionCode compression); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitmap_set_origin(BitmapCommand */*notnull*/ command, | ||||||
|  |                               size_t origin_x, | ||||||
|  |                               size_t origin_y); | ||||||
|  | 
 | ||||||
|  | DisplayBitVec *sp_cmd_bitvec_get(BitVecCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | CompressionCode sp_cmd_bitvec_get_compression(BitVecCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | Offset sp_cmd_bitvec_get_offset(BitVecCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | BinaryOperation sp_cmd_bitvec_get_operation(BitVecCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | Packet *sp_cmd_bitvec_into_packet(BitVecCommand */*notnull*/ command); | ||||||
|  | 
 | ||||||
|  | TypedCommand */*notnull*/ sp_cmd_bitvec_into_typed(BitVecCommand */*notnull*/ command); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Set pixel data starting at the pixel offset on screen. |  * Set pixel data starting at the pixel offset on screen. | ||||||
|  | @ -932,12 +1032,27 @@ TypedCommand *sp_command_bitmap(size_t x, | ||||||
|  * |  * | ||||||
|  * For example, [`BinaryOperation::Or`] can be used to turn on some pixels without affecting other pixels. |  * For example, [`BinaryOperation::Or`] can be used to turn on some pixels without affecting other pixels. | ||||||
|  * |  * | ||||||
|  * The contained [`BitVecU8Msb0`] is always uncompressed. |  * The contained [`DisplayBitVec`] is always uncompressed. | ||||||
|  */ |  */ | ||||||
| TypedCommand *sp_command_bitvec(size_t offset, | BitVecCommand */*notnull*/ sp_cmd_bitvec_new(DisplayBitVec */*notnull*/ bitvec, | ||||||
|                                 SPBitVec */*notnull*/ bit_vec, |                                              size_t offset, | ||||||
|                                 CompressionCode compression, |                                              BinaryOperation operation, | ||||||
|                                 BinaryOperation operation); |                                              CompressionCode compression); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Moves the provided bitmap to be contained in the command. | ||||||
|  |  */ | ||||||
|  | void sp_cmd_bitvec_set(BitVecCommand */*notnull*/ command, | ||||||
|  |                        DisplayBitVec */*notnull*/ bitvec); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitvec_set_compression(BitVecCommand */*notnull*/ command, | ||||||
|  |                                    CompressionCode compression); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitvec_set_offset(BitVecCommand */*notnull*/ command, | ||||||
|  |                               Offset offset); | ||||||
|  | 
 | ||||||
|  | void sp_cmd_bitvec_set_operation(BitVecCommand */*notnull*/ command, | ||||||
|  |                                  BinaryOperation operation); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Set the brightness of individual tiles in a rectangular area of the display. |  * Set the brightness of individual tiles in a rectangular area of the display. | ||||||
|  |  | ||||||
							
								
								
									
										110
									
								
								src/commands/bitmap_command.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								src/commands/bitmap_command.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,110 @@ | ||||||
|  | use crate::{heap_move_nonnull, heap_move_ok, heap_remove}; | ||||||
|  | use servicepoint::{ | ||||||
|  |     Bitmap, BitmapCommand, CompressionCode, Origin, Packet, TypedCommand, | ||||||
|  | }; | ||||||
|  | use std::ptr::NonNull; | ||||||
|  | 
 | ||||||
|  | /// Sets a window of pixels to the specified values.
 | ||||||
|  | ///
 | ||||||
|  | /// The passed [Bitmap] gets consumed.
 | ||||||
|  | ///
 | ||||||
|  | /// Returns: a new [BitmapCommand] instance.
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_new( | ||||||
|  |     bitmap: NonNull<Bitmap>, | ||||||
|  |     origin_x: usize, | ||||||
|  |     origin_y: usize, | ||||||
|  |     compression: CompressionCode, | ||||||
|  | ) -> NonNull<BitmapCommand> { | ||||||
|  |     heap_move_nonnull(BitmapCommand { | ||||||
|  |         bitmap: unsafe { heap_remove(bitmap) }, | ||||||
|  |         origin: Origin::new(origin_x, origin_y), | ||||||
|  |         compression, | ||||||
|  |     }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_from_bitmap( | ||||||
|  |     bitmap: NonNull<Bitmap>, | ||||||
|  | ) -> NonNull<BitmapCommand> { | ||||||
|  |     heap_move_nonnull(unsafe { heap_remove(bitmap) }.into()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_into_typed( | ||||||
|  |     command: NonNull<BitmapCommand>, | ||||||
|  | ) -> NonNull<TypedCommand> { | ||||||
|  |     heap_move_nonnull(unsafe { heap_remove(command) }.into()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_into_packet( | ||||||
|  |     command: NonNull<BitmapCommand>, | ||||||
|  | ) -> *mut Packet { | ||||||
|  |     heap_move_ok(unsafe { heap_remove(command) }.try_into()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Returns a pointer to the provided `BitmapCommand`.
 | ||||||
|  | ///
 | ||||||
|  | /// # Safety
 | ||||||
|  | ///
 | ||||||
|  | /// - The returned bitmap inherits the lifetime of the command in which it is contained.
 | ||||||
|  | /// - The returned pointer may not be used in a function that consumes the instance, e.g. to create a command.
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_get( | ||||||
|  |     mut command: NonNull<BitmapCommand>, | ||||||
|  | ) -> NonNull<Bitmap> { | ||||||
|  |     unsafe { NonNull::from(&mut (command.as_mut().bitmap)) } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Moves the provided bitmap to be contained in the command.
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_set( | ||||||
|  |     mut command: NonNull<BitmapCommand>, | ||||||
|  |     bitmap: NonNull<Bitmap>, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().bitmap = heap_remove(bitmap); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_get_origin( | ||||||
|  |     command: NonNull<BitmapCommand>, | ||||||
|  |     origin_x: NonNull<usize>, | ||||||
|  |     origin_y: NonNull<usize>, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         let origin = &command.as_ref().origin; | ||||||
|  |         *origin_x.as_ptr() = origin.x; | ||||||
|  |         *origin_y.as_ptr() = origin.y; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_set_origin( | ||||||
|  |     mut command: NonNull<BitmapCommand>, | ||||||
|  |     origin_x: usize, | ||||||
|  |     origin_y: usize, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().origin = Origin::new(origin_x, origin_y); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_set_compression( | ||||||
|  |     mut command: NonNull<BitmapCommand>, | ||||||
|  |     compression: CompressionCode, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().compression = compression; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitmap_get_compression( | ||||||
|  |     command: NonNull<BitmapCommand>, | ||||||
|  | ) -> CompressionCode { | ||||||
|  |     unsafe { command.as_ref().compression } | ||||||
|  | } | ||||||
							
								
								
									
										115
									
								
								src/commands/bitvec_command.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								src/commands/bitvec_command.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,115 @@ | ||||||
|  | use crate::{heap_move_nonnull, heap_move_ok, heap_remove}; | ||||||
|  | use servicepoint::{ | ||||||
|  |     BinaryOperation, BitVecCommand, CompressionCode, DisplayBitVec, Offset, | ||||||
|  |     Packet, TypedCommand, | ||||||
|  | }; | ||||||
|  | use std::ptr::NonNull; | ||||||
|  | 
 | ||||||
|  | /// Set pixel data starting at the pixel offset on screen.
 | ||||||
|  | ///
 | ||||||
|  | /// The screen will continuously overwrite more pixel data without regarding the offset, meaning
 | ||||||
|  | /// once the starting row is full, overwriting will continue on column 0.
 | ||||||
|  | ///
 | ||||||
|  | /// The [`BinaryOperation`] will be applied on the display comparing old and sent bit.
 | ||||||
|  | ///
 | ||||||
|  | /// `new_bit = old_bit op sent_bit`
 | ||||||
|  | ///
 | ||||||
|  | /// For example, [`BinaryOperation::Or`] can be used to turn on some pixels without affecting other pixels.
 | ||||||
|  | ///
 | ||||||
|  | /// The contained [`DisplayBitVec`] is always uncompressed.
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_new( | ||||||
|  |     bitvec: NonNull<DisplayBitVec>, | ||||||
|  |     offset: usize, | ||||||
|  |     operation: BinaryOperation, | ||||||
|  |     compression: CompressionCode, | ||||||
|  | ) -> NonNull<BitVecCommand> { | ||||||
|  |     heap_move_nonnull(BitVecCommand { | ||||||
|  |         bitvec: unsafe { heap_remove(bitvec) }, | ||||||
|  |         offset, | ||||||
|  |         operation, | ||||||
|  |         compression, | ||||||
|  |     }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_into_typed( | ||||||
|  |     command: NonNull<BitVecCommand>, | ||||||
|  | ) -> NonNull<TypedCommand> { | ||||||
|  |     heap_move_nonnull(unsafe { heap_remove(command) }.into()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_into_packet( | ||||||
|  |     command: NonNull<BitVecCommand>, | ||||||
|  | ) -> *mut Packet { | ||||||
|  |     heap_move_ok(unsafe { heap_remove(command) }.try_into()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_get( | ||||||
|  |     mut command: NonNull<BitVecCommand>, | ||||||
|  | ) -> *mut DisplayBitVec { | ||||||
|  |     &mut unsafe { command.as_mut() }.bitvec | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Moves the provided bitmap to be contained in the command.
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_set( | ||||||
|  |     mut command: NonNull<BitVecCommand>, | ||||||
|  |     bitvec: NonNull<DisplayBitVec>, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().bitvec = heap_remove(bitvec); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_get_offset( | ||||||
|  |     command: NonNull<BitVecCommand>, | ||||||
|  | ) -> Offset { | ||||||
|  |     unsafe { command.as_ref().offset } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_set_offset( | ||||||
|  |     mut command: NonNull<BitVecCommand>, | ||||||
|  |     offset: Offset, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().offset = offset; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_get_operation( | ||||||
|  |     command: NonNull<BitVecCommand>, | ||||||
|  | ) -> BinaryOperation { | ||||||
|  |     unsafe { command.as_ref().operation.clone() } // TODO remove clone
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_set_operation( | ||||||
|  |     mut command: NonNull<BitVecCommand>, | ||||||
|  |     operation: BinaryOperation, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().operation = operation; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_set_compression( | ||||||
|  |     mut command: NonNull<BitVecCommand>, | ||||||
|  |     compression: CompressionCode, | ||||||
|  | ) { | ||||||
|  |     unsafe { | ||||||
|  |         command.as_mut().compression = compression; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[no_mangle] | ||||||
|  | pub unsafe extern "C" fn sp_cmd_bitvec_get_compression( | ||||||
|  |     command: NonNull<BitVecCommand>, | ||||||
|  | ) -> CompressionCode { | ||||||
|  |     unsafe { command.as_ref().compression } | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								src/commands/mod.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/commands/mod.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | mod bitmap_command; | ||||||
|  | mod bitvec_command; | ||||||
|  | @ -42,6 +42,7 @@ mod bitvec; | ||||||
| mod brightness_grid; | mod brightness_grid; | ||||||
| mod byte_slice; | mod byte_slice; | ||||||
| mod char_grid; | mod char_grid; | ||||||
|  | mod commands; | ||||||
| mod cp437_grid; | mod cp437_grid; | ||||||
| mod packet; | mod packet; | ||||||
| mod typed_command; | mod typed_command; | ||||||
|  | @ -78,3 +79,6 @@ pub(crate) unsafe fn heap_remove<T>(x: NonNull<T>) -> T { | ||||||
| 
 | 
 | ||||||
| /// This is a type only used by cbindgen to have a type for pointers.
 | /// This is a type only used by cbindgen to have a type for pointers.
 | ||||||
| pub struct UdpSocket; | pub struct UdpSocket; | ||||||
|  | 
 | ||||||
|  | /// This is a type only used by cbindgen to have a type for pointers.
 | ||||||
|  | pub struct DisplayBitVec; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| use crate::{heap_drop, heap_move, heap_move_nonnull, heap_move_ok, SPBitVec}; | use crate::{heap_drop, heap_move_nonnull, heap_move_ok}; | ||||||
| use servicepoint::{ | use servicepoint::{ | ||||||
|     BinaryOperation, Bitmap, Brightness, BrightnessGrid, CharGrid, |     Brightness, BrightnessGrid, CharGrid, Cp437Grid, GlobalBrightnessCommand, | ||||||
|     CompressionCode, Cp437Grid, GlobalBrightnessCommand, Packet, TypedCommand, |     Packet, TypedCommand, | ||||||
| }; | }; | ||||||
| use std::ptr::NonNull; | use std::ptr::NonNull; | ||||||
| 
 | 
 | ||||||
|  | @ -92,36 +92,6 @@ pub unsafe extern "C" fn sp_command_brightness_grid( | ||||||
|     heap_move_nonnull(result) |     heap_move_nonnull(result) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Set pixel data starting at the pixel offset on screen.
 |  | ||||||
| ///
 |  | ||||||
| /// The screen will continuously overwrite more pixel data without regarding the offset, meaning
 |  | ||||||
| /// once the starting row is full, overwriting will continue on column 0.
 |  | ||||||
| ///
 |  | ||||||
| /// The [`BinaryOperation`] will be applied on the display comparing old and sent bit.
 |  | ||||||
| ///
 |  | ||||||
| /// `new_bit = old_bit op sent_bit`
 |  | ||||||
| ///
 |  | ||||||
| /// For example, [`BinaryOperation::Or`] can be used to turn on some pixels without affecting other pixels.
 |  | ||||||
| ///
 |  | ||||||
| /// The contained [`BitVecU8Msb0`] is always uncompressed.
 |  | ||||||
| #[no_mangle] |  | ||||||
| pub unsafe extern "C" fn sp_command_bitvec( |  | ||||||
|     offset: usize, |  | ||||||
|     bit_vec: NonNull<SPBitVec>, |  | ||||||
|     compression: CompressionCode, |  | ||||||
|     operation: BinaryOperation, |  | ||||||
| ) -> *mut TypedCommand { |  | ||||||
|     let bit_vec = unsafe { *Box::from_raw(bit_vec.as_ptr()) }; |  | ||||||
|     let command = servicepoint::BitVecCommand { |  | ||||||
|         offset, |  | ||||||
|         operation, |  | ||||||
|         bitvec: bit_vec.0, |  | ||||||
|         compression, |  | ||||||
|     } |  | ||||||
|     .into(); |  | ||||||
|     heap_move(command) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /// Show codepage 437 encoded text on the screen.
 | /// Show codepage 437 encoded text on the screen.
 | ||||||
| ///
 | ///
 | ||||||
| /// The passed [Cp437Grid] gets consumed.
 | /// The passed [Cp437Grid] gets consumed.
 | ||||||
|  | @ -162,28 +132,6 @@ pub unsafe extern "C" fn sp_command_char_grid( | ||||||
|     heap_move_nonnull(result) |     heap_move_nonnull(result) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Sets a window of pixels to the specified values.
 |  | ||||||
| ///
 |  | ||||||
| /// The passed [Bitmap] gets consumed.
 |  | ||||||
| ///
 |  | ||||||
| /// Returns: a new [servicepoint::BitmapCommand] instance.
 |  | ||||||
| #[no_mangle] |  | ||||||
| pub unsafe extern "C" fn sp_command_bitmap( |  | ||||||
|     x: usize, |  | ||||||
|     y: usize, |  | ||||||
|     bitmap: NonNull<Bitmap>, |  | ||||||
|     compression: CompressionCode, |  | ||||||
| ) -> *mut TypedCommand { |  | ||||||
|     let bitmap = unsafe { *Box::from_raw(bitmap.as_ptr()) }; |  | ||||||
|     let command = servicepoint::BitmapCommand { |  | ||||||
|         origin: servicepoint::Origin::new(x, y), |  | ||||||
|         bitmap, |  | ||||||
|         compression, |  | ||||||
|     } |  | ||||||
|     .into(); |  | ||||||
|     heap_move(command) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /// Deallocates a [TypedCommand].
 | /// Deallocates a [TypedCommand].
 | ||||||
| ///
 | ///
 | ||||||
| /// # Examples
 | /// # Examples
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vinzenz Schroeter
						Vinzenz Schroeter