67 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::net::UdpSocket;
 | |
| use crate::{
 | |
|     image_processing::ImageProcessingPipeline,
 | |
|     cli::{ImageProcessingOptions, PixelCommand, SendImageOptions},
 | |
|     stream_window::stream_window
 | |
| };
 | |
| use log::info;
 | |
| use servicepoint::{BinaryOperation, BitVecCommand, BitVecU8Msb0, BitmapCommand, ClearCommand, CompressionCode, Origin, SendCommandExt, PIXEL_COUNT};
 | |
| 
 | |
| pub(crate) fn pixels(connection: &UdpSocket, pixel_command: PixelCommand) {
 | |
|     match pixel_command {
 | |
|         PixelCommand::Off => pixels_off(connection),
 | |
|         PixelCommand::Flip => pixels_invert(connection),
 | |
|         PixelCommand::On => pixels_on(connection),
 | |
|         PixelCommand::Image {
 | |
|             image_processing_options: processing_options,
 | |
|             send_image_options: image_options,
 | |
|         } => pixels_image(connection, image_options, processing_options),
 | |
|         PixelCommand::Screen {
 | |
|             stream_options,
 | |
|             image_processing,
 | |
|         } => stream_window(connection, stream_options, image_processing),
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn pixels_on(connection: &UdpSocket) {
 | |
|     let mask = BitVecU8Msb0::repeat(true, PIXEL_COUNT);
 | |
|     let command = BitVecCommand{offset: 0, bitvec: mask, compression: CompressionCode::Lzma, operation: BinaryOperation::Overwrite};
 | |
|     connection
 | |
|         .send_command(command)
 | |
|         .expect("could not send command");
 | |
|     info!("turned on all pixels")
 | |
| }
 | |
| 
 | |
| fn pixels_invert(connection: &UdpSocket) {
 | |
|     let mask = BitVecU8Msb0::repeat(true, PIXEL_COUNT);
 | |
|     let command = BitVecCommand{offset: 0, bitvec: mask, compression: CompressionCode::Lzma, operation: BinaryOperation::Xor};
 | |
|     connection
 | |
|         .send_command(command)
 | |
|         .expect("could not send command");
 | |
|     info!("inverted all pixels");
 | |
| }
 | |
| 
 | |
| pub(crate) fn pixels_off(connection: &UdpSocket) {
 | |
|     connection
 | |
|         .send_command(ClearCommand)
 | |
|         .expect("failed to clear pixels");
 | |
|     info!("reset pixels");
 | |
| }
 | |
| 
 | |
| fn pixels_image(
 | |
|     connection: &UdpSocket,
 | |
|     options: SendImageOptions,
 | |
|     processing_options: ImageProcessingOptions,
 | |
| ) {
 | |
|     let image = image::open(&options.file_name).expect("failed to open image file");
 | |
|     let mut pipeline = ImageProcessingPipeline::new(processing_options);
 | |
|     let bitmap = pipeline.process(image);
 | |
|     connection
 | |
|         .send_command(BitmapCommand {
 | |
|             origin: Origin::ZERO,
 | |
|             bitmap,
 | |
|             compression: CompressionCode::default(),
 | |
|         })
 | |
|         .expect("failed to send image command");
 | |
|     info!("sent image to display");
 | |
| }
 | 
