navka -> lesavka migration

This commit is contained in:
Brad Stein 2025-06-23 07:18:26 -05:00
parent 90b23145b6
commit 3f0eb0cbbe
18 changed files with 41 additions and 41 deletions

View File

@ -1,9 +1,9 @@
[[bin]] [[bin]]
name = "navka-client" name = "lesavka-client"
path = "src/main.rs" path = "src/main.rs"
[package] [package]
name = "navka_client" name = "lesavka_client"
version = "0.3.0" version = "0.3.0"
edition = "2024" edition = "2024"
@ -12,7 +12,7 @@ tokio = { version = "1.45", features = ["full", "fs", "rt-mult
tonic = { version = "0.13", features = ["transport"] } tonic = { version = "0.13", features = ["transport"] }
tokio-stream = { version = "0.1", features = ["sync"] } tokio-stream = { version = "0.1", features = ["sync"] }
anyhow = "1.0" anyhow = "1.0"
navka_common = { path = "../common" } lesavka_common = { path = "../common" }
tracing = { version = "0.1", features = ["std"] } tracing = { version = "0.1", features = ["std"] }
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] } tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
tracing-appender = "0.2" tracing-appender = "0.2"
@ -29,5 +29,5 @@ raw-window-handle = "0.6"
prost-build = "0.13" prost-build = "0.13"
[lib] [lib]
name = "navka_client" name = "lesavka_client"
path = "src/lib.rs" path = "src/lib.rs"

View File

@ -9,12 +9,12 @@ use tokio_stream::{wrappers::BroadcastStream, StreamExt};
use tonic::Request; use tonic::Request;
use tracing::{debug, error, info, warn}; use tracing::{debug, error, info, warn};
use navka_common::navka::{relay_client::RelayClient, KeyboardReport, MouseReport, MonitorRequest, VideoPacket}; use lesavka_common::lesavka::{relay_client::RelayClient, KeyboardReport, MouseReport, MonitorRequest, VideoPacket};
use navka_client::input::inputs::InputAggregator; use lesavka_client::input::inputs::InputAggregator;
use navka_client::output::video::MonitorWindow; use lesavka_client::output::video::MonitorWindow;
pub struct NavkaClientApp { pub struct LesavkaClientApp {
aggregator: Option<InputAggregator>, aggregator: Option<InputAggregator>,
server_addr: String, server_addr: String,
dev_mode: bool, dev_mode: bool,
@ -22,7 +22,7 @@ pub struct NavkaClientApp {
mou_tx: broadcast::Sender<MouseReport>, mou_tx: broadcast::Sender<MouseReport>,
} }
impl NavkaClientApp { impl LesavkaClientApp {
pub fn new() -> Result<Self> { pub fn new() -> Result<Self> {
let dev_mode = std::env::var("NAVKA_DEV_MODE").is_ok(); let dev_mode = std::env::var("NAVKA_DEV_MODE").is_ok();
let server_addr = std::env::args() let server_addr = std::env::args()

View File

@ -5,7 +5,7 @@ use evdev::{Device, EventType, KeyCode, RelativeAxisCode};
use tokio::{sync::broadcast::Sender, time::{interval, Duration}}; use tokio::{sync::broadcast::Sender, time::{interval, Duration}};
use tracing::{debug, info}; use tracing::{debug, info};
use navka_common::navka::{KeyboardReport, MouseReport}; use lesavka_common::lesavka::{KeyboardReport, MouseReport};
use super::{keyboard::KeyboardAggregator, mouse::MouseAggregator, use super::{keyboard::KeyboardAggregator, mouse::MouseAggregator,
camera::CameraCapture, microphone::MicrophoneCapture}; camera::CameraCapture, microphone::MicrophoneCapture};

View File

@ -5,7 +5,7 @@ use evdev::{Device, EventType, InputEvent, KeyCode};
use tokio::sync::broadcast::Sender; use tokio::sync::broadcast::Sender;
use tracing::{debug, error, info, warn}; use tracing::{debug, error, info, warn};
use navka_common::navka::KeyboardReport; use lesavka_common::lesavka::KeyboardReport;
use super::keymap::{is_modifier, keycode_to_usage}; use super::keymap::{is_modifier, keycode_to_usage};

View File

@ -4,7 +4,7 @@ use evdev::{Device, EventType, InputEvent, KeyCode, RelativeAxisCode};
use tokio::sync::broadcast::{self, Sender}; use tokio::sync::broadcast::{self, Sender};
use tracing::{debug, error, warn}; use tracing::{debug, error, warn};
use navka_common::navka::MouseReport; use lesavka_common::lesavka::MouseReport;
pub struct MouseAggregator { pub struct MouseAggregator {
dev: Device, dev: Device,

View File

@ -6,4 +6,4 @@ pub mod app;
pub mod input; pub mod input;
pub mod output; pub mod output;
pub use app::NavkaClientApp; pub use app::LesavkaClientApp;

View File

@ -8,15 +8,15 @@ use tracing_appender::non_blocking;
use tracing_appender::non_blocking::WorkerGuard; use tracing_appender::non_blocking::WorkerGuard;
use tracing_subscriber::{filter::EnvFilter, fmt, prelude::*}; use tracing_subscriber::{filter::EnvFilter, fmt, prelude::*};
use navka_client::NavkaClientApp; use lesavka_client::LesavkaClientApp;
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
/*------------- common filter & stderr layer ------------------------*/ /*------------- common filter & stderr layer ------------------------*/
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| { let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
EnvFilter::new( EnvFilter::new(
"navka_client=trace,\ "lesavka_client=trace,\
navka_server=trace,\ lesavka_server=trace,\
tonic=debug,\ tonic=debug,\
h2=debug,\ h2=debug,\
tower=debug", tower=debug",
@ -33,7 +33,7 @@ async fn main() -> Result<()> {
/*------------- subscriber setup -----------------------------------*/ /*------------- subscriber setup -----------------------------------*/
if dev_mode { if dev_mode {
let log_path = Path::new("/tmp").join("navka-client.log"); let log_path = Path::new("/tmp").join("lesavka-client.log");
// file → nonblocking writer (+ guard) // file → nonblocking writer (+ guard)
let file = OpenOptions::new() let file = OpenOptions::new()
@ -56,7 +56,7 @@ async fn main() -> Result<()> {
.with(file_layer) .with(file_layer)
.init(); .init();
tracing::info!("navka-client running in DEV mode → {}", log_path.display()); tracing::info!("lesavka-client running in DEV mode → {}", log_path.display());
} else { } else {
tracing_subscriber::registry() tracing_subscriber::registry()
.with(env_filter) .with(env_filter)
@ -65,6 +65,6 @@ async fn main() -> Result<()> {
} }
/*------------- run the actual application -------------------------*/ /*------------- run the actual application -------------------------*/
let mut app = NavkaClientApp::new()?; let mut app = LesavkaClientApp::new()?;
app.run().await app.run().await
} }

View File

@ -3,7 +3,7 @@
use gstreamer as gst; use gstreamer as gst;
use gstreamer_app as gst_app; use gstreamer_app as gst_app;
use gst::prelude::*; use gst::prelude::*;
use navka_common::navka::VideoPacket; use lesavka_common::lesavka::VideoPacket;
use winit::{ use winit::{
event_loop::EventLoop, event_loop::EventLoop,
window::{Window, WindowBuilder}, window::{Window, WindowBuilder},

View File

@ -1,5 +1,5 @@
[package] [package]
name = "navka-common" name = "lesavka-common"
version = "0.2.0" version = "0.2.0"
edition = "2024" edition = "2024"
build = "build.rs" build = "build.rs"
@ -12,5 +12,5 @@ prost = "0.13"
tonic-build = { version = "0.13", features = ["prost"] } tonic-build = { version = "0.13", features = ["prost"] }
[lib] [lib]
name = "navka_common" name = "lesavka_common"
path = "src/lib.rs" path = "src/lib.rs"

View File

@ -4,6 +4,6 @@ fn main() {
tonic_build::configure() tonic_build::configure()
.build_server(true) .build_server(true)
.build_client(true) .build_client(true)
.compile_protos(&["proto/navka.proto"], &["proto"]) .compile_protos(&["proto/lesavka.proto"], &["proto"])
.expect("prost build failed"); .expect("prost build failed");
} }

View File

@ -1,5 +1,5 @@
syntax = "proto3"; syntax = "proto3";
package navka; package lesavka;
// smaller, fixed-size payloads -> less allocation and simpler decoding // smaller, fixed-size payloads -> less allocation and simpler decoding
message KeyboardReport { bytes data = 1; } // exactly 8 bytes message KeyboardReport { bytes data = 1; } // exactly 8 bytes

View File

@ -1,6 +1,6 @@
// Re-export the code generated by build.rs (navka.rs, relay.rs, etc.) // Re-export the code generated by build.rs (lesavka.rs, relay.rs, etc.)
// common/src/lib.rs // common/src/lib.rs
pub mod navka { pub mod lesavka {
include!(concat!(env!("OUT_DIR"), "/navka.rs")); include!(concat!(env!("OUT_DIR"), "/lesavka.rs"));
} }

View File

@ -28,7 +28,7 @@ sudo install -Dm755 "$SRC/client/target/release/lesavka-client" /usr/local/bin/l
# 6. systemd service for system scope: /etc/systemd/system/lesavka-client.service # 6. systemd service for system scope: /etc/systemd/system/lesavka-client.service
sudo tee /etc/systemd/system/lesavka-client.service >/dev/null <<'EOF' sudo tee /etc/systemd/system/lesavka-client.service >/dev/null <<'EOF'
[Unit] [Unit]
Description=Navka Client Description=Lesavka Client
After=network-online.target After=network-online.target
Wants=network-online.target Wants=network-online.target

View File

@ -34,8 +34,8 @@ echo 0x0200 >"$G/bcdUSB"
mkdir -p "$G/strings/0x409" mkdir -p "$G/strings/0x409"
echo "$(cat /proc/sys/kernel/random/uuid)" >"$G/strings/0x409/serialnumber" echo "$(cat /proc/sys/kernel/random/uuid)" >"$G/strings/0x409/serialnumber"
echo "Navka" >"$G/strings/0x409/manufacturer" echo "Lesavka" >"$G/strings/0x409/manufacturer"
echo "Navka Composite" >"$G/strings/0x409/product" echo "Lesavka Composite" >"$G/strings/0x409/product"
# ----------------------- HID keyboard (usb0) ----------------------- # ----------------------- HID keyboard (usb0) -----------------------
mkdir -p "$G/functions/hid.usb0" mkdir -p "$G/functions/hid.usb0"

View File

@ -1,9 +1,9 @@
[[bin]] [[bin]]
name = "navka-server" name = "lesavka-server"
path = "src/main.rs" path = "src/main.rs"
[package] [package]
name = "navka_server" name = "lesavka_server"
version = "0.2.0" version = "0.2.0"
edition = "2024" edition = "2024"
@ -12,7 +12,7 @@ tokio = { version = "1.45", features = ["full", "fs"] }
tokio-stream = "0.1" tokio-stream = "0.1"
tonic = { version = "0.13", features = ["transport"] } tonic = { version = "0.13", features = ["transport"] }
anyhow = "1.0" anyhow = "1.0"
navka_common = { path = "../common" } lesavka_common = { path = "../common" }
tracing = { version = "0.1", features = ["std"] } tracing = { version = "0.1", features = ["std"] }
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
libc = "0.2" libc = "0.2"

View File

@ -1,4 +1,4 @@
//! navka-server — receive HidReport and write to /dev/hidg0 //! lesavka-server — receive HidReport and write to /dev/hidg0
// sever/src/main.rs // sever/src/main.rs
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
@ -12,9 +12,9 @@ use tracing::{error, info, trace, warn};
use tracing_subscriber::{fmt, EnvFilter}; use tracing_subscriber::{fmt, EnvFilter};
use udev::{Enumerator, MonitorBuilder}; use udev::{Enumerator, MonitorBuilder};
use navka_server::{video, usb_reset}; use lesavka_server::{video, usb_reset};
use navka_common::navka::{ use lesavka_common::lesavka::{
relay_server::{Relay, RelayServer}, relay_server::{Relay, RelayServer},
KeyboardReport, MouseReport, KeyboardReport, MouseReport,
MonitorRequest, VideoPacket, MonitorRequest, VideoPacket,
@ -149,7 +149,7 @@ async fn main() -> anyhow::Result<()> {
/* logging */ /* logging */
fmt().with_env_filter( fmt().with_env_filter(
EnvFilter::try_from_default_env() EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("navka_server=info")), .unwrap_or_else(|_| EnvFilter::new("lesavka_server=info")),
) )
.init(); .init();
@ -172,7 +172,7 @@ async fn main() -> anyhow::Result<()> {
ms: Arc::new(Mutex::new(ms)), ms: Arc::new(Mutex::new(ms)),
}; };
println!("🌐 navka-server listening on 0.0.0.0:50051"); println!("🌐 lesavka-server listening on 0.0.0.0:50051");
Server::builder() Server::builder()
.add_service(RelayServer::new(handler)) .add_service(RelayServer::new(handler))
.serve(([0, 0, 0, 0], 50051).into()) .serve(([0, 0, 0, 0], 50051).into())

View File

@ -4,7 +4,7 @@ use anyhow::Context;
use gstreamer as gst; use gstreamer as gst;
use gstreamer_app as gst_app; use gstreamer_app as gst_app;
use gst::prelude::*; use gst::prelude::*;
use navka_common::navka::VideoPacket; use lesavka_common::lesavka::VideoPacket;
use tokio_stream::wrappers::ReceiverStream; use tokio_stream::wrappers::ReceiverStream;
use tonic::Status; use tonic::Status;

View File

@ -1,7 +1,7 @@
#[tokio::test] #[tokio::test]
async fn hid_roundtrip() { async fn hid_roundtrip() {
use navka_common::navka::*; use lesavka_common::lesavka::*;
use navka_server::RelaySvc; // export the struct in lib.rs use lesavka_server::RelaySvc; // export the struct in lib.rs
let svc = RelaySvc::default(); let svc = RelaySvc::default();
let (mut cli, srv) = tonic::transport::Channel::balance_channel(1); let (mut cli, srv) = tonic::transport::Channel::balance_channel(1);
tokio::spawn(tonic::transport::server::Server::builder() tokio::spawn(tonic::transport::server::Server::builder()