navka -> lesavka migration
This commit is contained in:
parent
90b23145b6
commit
3f0eb0cbbe
@ -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"
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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};
|
||||||
|
|||||||
@ -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};
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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 → non‑blocking writer (+ guard)
|
// file → non‑blocking 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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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},
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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"));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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())
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user