Compare commits

..

No commits in common. "08b26de45ebcdae2da05e595ca0b19141bc959c0" and "4f31b4d8fda2aceaf2bbacc42232936f2778a9eb" have entirely different histories.

6 changed files with 90 additions and 102 deletions

117
README.md
View file

@ -40,7 +40,7 @@ Commands:
reset-everything Reset both pixels and brightness [aliases: r]
pixels Commands for manipulating pixels [aliases: p]
brightness Commands for manipulating the brightness [aliases: b]
text Commands for sending text to the screen [aliases: t]
stream Continuously send data to the display [aliases: s]
help Print this message or the help of the given subcommand(s)
Options:
@ -51,6 +51,59 @@ Options:
-V, --version Print version
```
### Stream
```
Continuously send data to the display
Usage: servicepoint-cli stream <COMMAND>
Commands:
stdin Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`
screen Stream the default source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen.
```
#### Screen
```
Stream the default source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen.
Usage: servicepoint-cli stream screen [OPTIONS]
Options:
-p, --pointer Show mouse pointer in video feed
--no-hist Disable histogram correction
--no-blur Disable blur
--no-sharp Disable sharpening
--no-dither Disable dithering. Brightness will be adjusted so that around half of the pixels are on.
--no-spacers Do not remove the spacers from the image.
--no-aspect Do not keep aspect ratio when resizing.
```
#### Stdin
```
Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`
Usage: servicepoint-cli stream stdin [OPTIONS]
Options:
-s, --slow Wait for a short amount of time before sending the next line
```
### Brightness
```
Commands for manipulating the brightness
Usage: servicepoint-cli brightness <COMMAND>
Commands:
max Reset brightness to the default (max) level [aliases: r, reset]
set Set one brightness for the whole screen [aliases: s]
min Set brightness to lowest possible level.
```
### Pixels
```
@ -59,11 +112,10 @@ Commands for manipulating pixels
Usage: servicepoint-cli pixels <COMMAND>
Commands:
off Reset all pixels to the default (off) state [aliases: r, reset, clear]
flip Invert the state of all pixels [aliases: f]
on Set all pixels to the on state
image Send an image file (e.g. jpeg or png) to the display. [aliases: i]
screen Stream the default screen capture source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen. [aliases: s]
off Reset all pixels to the default (off) state [aliases: r, reset, clear]
flip Invert the state of all pixels [aliases: f]
on Set all pixels to the on state
image Send an image file (e.g. jpeg or png) to the display. [aliases: i]
```
#### Image
@ -85,59 +137,6 @@ Options:
--no-aspect Do not keep aspect ratio when resizing.
```
#### Screen
```
Stream the default screen capture source to the display. On Linux Wayland, this pops up a screen or window chooser, but it also may directly start streaming your main screen.
Usage: servicepoint-cli pixels screen [OPTIONS]
Options:
-p, --pointer Show mouse pointer in video feed
--no-hist Disable histogram correction
--no-blur Disable blur
--no-sharp Disable sharpening
--no-dither Disable dithering. Brightness will be adjusted so that around half of the pixels are on.
--no-spacers Do not remove the spacers from the image.
--no-aspect Do not keep aspect ratio when resizing.
```
### Brightness
```
Commands for manipulating the brightness
Usage: servicepoint-cli brightness <COMMAND>
Commands:
max Reset brightness to the default (max) level [aliases: r, reset]
set Set one brightness for the whole screen [aliases: s]
min Set brightness to lowest possible level.
```
### Text
```
Commands for sending text to the screen
Usage: servicepoint-cli text <COMMAND>
Commands:
stdin Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`
```
#### Stdin
```
Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`
Usage: servicepoint-cli stream stdin [OPTIONS]
Options:
-s, --slow Wait for a short amount of time before sending the next line
```
## Contributing
If you have ideas on how to improve the code, add features or improve documentation feel free to open a pull request.

View file

@ -40,10 +40,10 @@ pub enum Mode {
#[clap(subcommand)]
brightness_command: BrightnessCommand,
},
#[command(visible_alias = "t")]
Text {
#[command(visible_alias = "s")]
Stream {
#[clap(subcommand)]
text_command: TextCommand,
stream_command: StreamCommand,
},
}
@ -71,18 +71,6 @@ pub enum PixelCommand {
#[command(flatten)]
image_processing_options: ImageProcessingOptions,
},
#[command(
visible_alias = "s",
about = "Stream the default screen capture source to the display. \
On Linux Wayland, this pops up a screen or window chooser, \
but it also may directly start streaming your main screen."
)]
Screen {
#[command(flatten)]
stream_options: StreamScreenOptions,
#[command(flatten)]
image_processing: ImageProcessingOptions,
},
}
#[derive(clap::Parser, std::fmt::Debug)]
@ -111,8 +99,8 @@ pub enum Protocol {
}
#[derive(clap::Parser, std::fmt::Debug)]
#[clap(about = "Commands for sending text to the screen")]
pub enum TextCommand {
#[clap(about = "Continuously send data to the display")]
pub enum StreamCommand {
#[command(
about = "Pipe text to the display, example: `journalctl | servicepoint-cli stream stdin`"
)]
@ -125,6 +113,15 @@ pub enum TextCommand {
)]
slow: bool,
},
#[command(about = "Stream the default source to the display. \
On Linux Wayland, this pops up a screen or window chooser, \
but it also may directly start streaming your main screen.")]
Screen {
#[command(flatten)]
stream_options: StreamScreenOptions,
#[command(flatten)]
image_processing: ImageProcessingOptions,
},
}
#[derive(clap::Parser, std::fmt::Debug, Clone)]

View file

@ -1,8 +1,9 @@
use crate::{
brightness::{brightness, brightness_set},
cli::{Cli, Mode, Protocol},
cli::{Cli, Mode, Protocol, StreamCommand},
pixels::{pixels, pixels_off},
text::text
stream_stdin::stream_stdin,
stream_window::stream_window,
};
use clap::Parser;
use log::debug;
@ -15,7 +16,6 @@ mod ledwand_dither;
mod pixels;
mod stream_stdin;
mod stream_window;
mod text;
fn main() {
let cli = Cli::parse();
@ -36,7 +36,13 @@ pub fn execute_mode(mode: Mode, connection: Connection) {
}
Mode::Pixels { pixel_command } => pixels(&connection, pixel_command),
Mode::Brightness { brightness_command } => brightness(&connection, brightness_command),
Mode::Text { text_command} => text(&connection, text_command),
Mode::Stream { stream_command } => match stream_command {
StreamCommand::Stdin { slow } => stream_stdin(connection, slow),
StreamCommand::Screen {
stream_options,
image_processing,
} => stream_window(&connection, stream_options, image_processing),
},
}
}

View file

@ -1,8 +1,5 @@
use crate::{
image_processing::ImageProcessingPipeline,
cli::{ImageProcessingOptions, PixelCommand, SendImageOptions},
stream_window::stream_window
};
use crate::cli::{ImageProcessingOptions, PixelCommand, SendImageOptions};
use crate::image_processing::ImageProcessingPipeline;
use log::info;
use servicepoint::{BitVec, Command, CompressionCode, Connection, Origin, PIXEL_COUNT};
@ -15,10 +12,6 @@ pub(crate) fn pixels(connection: &Connection, pixel_command: PixelCommand) {
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),
}
}

View file

@ -2,7 +2,7 @@ use log::warn;
use servicepoint::*;
use std::thread::sleep;
pub(crate) fn stream_stdin(connection: &Connection, slow: bool) {
pub(crate) fn stream_stdin(connection: Connection, slow: bool) {
warn!("This mode will break when using multi-byte characters and does not support ANSI escape sequences yet.");
let mut app = App {
connection,
@ -13,14 +13,14 @@ pub(crate) fn stream_stdin(connection: &Connection, slow: bool) {
app.run()
}
struct App<'t> {
connection: &'t Connection,
struct App {
connection: Connection,
mirror: CharGrid,
y: usize,
slow: bool,
}
impl<'t> App<'t> {
impl App {
fn run(&mut self) {
self.connection
.send(Command::Clear)
@ -63,9 +63,9 @@ impl<'t> App<'t> {
fn send_mirror(&self) {
self.connection
.send(Command::Utf8Data(
.send(Command::Cp437Data(
Origin::ZERO,
self.mirror.clone(),
Cp437Grid::from(&self.mirror),
))
.expect("couldn't send screen to display");
}

View file

@ -1,7 +0,0 @@
use servicepoint::Connection;
use crate::cli::TextCommand;
use crate::stream_stdin::stream_stdin;
pub fn text(connection: &Connection, command: TextCommand) {
match command { TextCommand::Stdin { slow } => stream_stdin(connection, slow), }
}