updates
This commit is contained in:
parent
54345dcbc8
commit
51d6c27850
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,7 +1,7 @@
|
|||||||
/target/
|
target/
|
||||||
/Cargo.lock
|
Cargo.lock
|
||||||
/override.toml
|
override.toml
|
||||||
/.cache/sccache/
|
.cache/sccache/
|
||||||
/unit-graph.json
|
/unit-graph.json
|
||||||
/**/*.rs.bk
|
/**/*.rs.bk
|
||||||
**/*.rs.orig
|
**/*.rs.orig
|
||||||
|
|||||||
@ -4,7 +4,7 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { version = "1.45", features = ["full"] }
|
tokio = { version = "1.45", features = ["full", "fs"] }
|
||||||
tonic = "0.11"
|
tonic = "0.11"
|
||||||
tokio-stream = { version = "0.1", features = ["sync"] }
|
tokio-stream = { version = "0.1", features = ["sync"] }
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use navka_common::navka::{relay_client::RelayClient, HidReport}; // <- only items that exist
|
use navka_common::navka::{hid_report::*, relay_client::RelayClient, HidReport}; // <- only items that exist
|
||||||
use tokio::{sync::mpsc, time::sleep};
|
use tokio::{sync::mpsc, time::sleep};
|
||||||
use tokio_stream::wrappers::ReceiverStream;
|
use tokio_stream::wrappers::ReceiverStream;
|
||||||
use tonic::{transport::Channel, Request};
|
use tonic::{transport::Channel, Request};
|
||||||
@ -38,7 +38,7 @@ async fn main() -> Result<()> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
while let Some(report) = inbound.message().await? {
|
while let Some(report) = inbound.message().await? {
|
||||||
println!("🔄 got report from server: {:?}", report.data);
|
println!("🔄 {:?}", report.data);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,10 +24,7 @@ sudo -u "$ORIG_USER" bash -c "cd '$SRC/client' && cargo build --release"
|
|||||||
# 5. install binary
|
# 5. install binary
|
||||||
install -Dm755 "$SRC/client/target/release/navka-client" "$HOME/.local/bin/navka-client"
|
install -Dm755 "$SRC/client/target/release/navka-client" "$HOME/.local/bin/navka-client"
|
||||||
|
|
||||||
# 6) Install the client binary
|
# 6) Create the user service file
|
||||||
install -Dm755 client/target/release/navka-client "$HOME/.local/bin/navka-client"
|
|
||||||
|
|
||||||
# 7) Create the user service file
|
|
||||||
mkdir -p "$HOME/.config/systemd/user"
|
mkdir -p "$HOME/.config/systemd/user"
|
||||||
cat >"$HOME/.config/systemd/user/navka-client.service" <<'EOF'
|
cat >"$HOME/.config/systemd/user/navka-client.service" <<'EOF'
|
||||||
[Unit]
|
[Unit]
|
||||||
@ -43,9 +40,9 @@ Restart=on-failure
|
|||||||
WantedBy=default.target
|
WantedBy=default.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# 8) (Optional) keep running when no session is active
|
# 7) (Optional) keep running when no session is active
|
||||||
loginctl enable-linger "$ORIG_USER"
|
loginctl enable-linger "$ORIG_USER"
|
||||||
|
|
||||||
# 9) Enable + start as *you*, not root
|
# 8) Call the *user* instance inside the caller’s session
|
||||||
sudo -u "$ORIG_USER" systemctl --user daemon-reload
|
sudo -iu "$ORIG_USER" systemctl --user daemon-reload
|
||||||
sudo -u "$ORIG_USER" systemctl --user enable --now navka-client.service
|
sudo -iu "$ORIG_USER" systemctl --user enable --now navka-client.service
|
||||||
|
|||||||
@ -1,11 +1,16 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Proven Pi-5 configfs gadget: HID keyboard+mouse + stereo UAC2
|
# Proven Pi-5 configfs gadget: HID keyboard+mouse + stereo UAC2
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
modprobe libcomposite
|
||||||
mountpoint -q /sys/kernel/config || mount -t configfs configfs /sys/kernel/config
|
mountpoint -q /sys/kernel/config || mount -t configfs configfs /sys/kernel/config
|
||||||
G=/sys/kernel/config/usb_gadget/navka
|
G=/sys/kernel/config/usb_gadget/navka
|
||||||
|
|
||||||
[[ -d $G ]] && echo "" >"$G/UDC" && rm -rf "$G"
|
if [[ -d $G ]]; then
|
||||||
|
echo "" >"$G/UDC" || true
|
||||||
|
find "$G/configs" -type l -delete || true
|
||||||
|
rmdir "$G/functions/"* 2>/dev/null || true
|
||||||
|
rmdir "$G" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
mkdir -p "$G"
|
mkdir -p "$G"
|
||||||
echo 0x1d6b >"$G/idVendor" # Linux Foundation
|
echo 0x1d6b >"$G/idVendor" # Linux Foundation
|
||||||
|
|||||||
@ -4,7 +4,7 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = { version = "1.45", features = ["full"] }
|
tokio = { version = "1.45", features = ["full", "fs"] }
|
||||||
tokio-stream = "0.1"
|
tokio-stream = "0.1"
|
||||||
tonic = { version = "0.11", features = ["transport"] }
|
tonic = { version = "0.11", features = ["transport"] }
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use navka_common::navka::{
|
|||||||
relay_server::{Relay, RelayServer},
|
relay_server::{Relay, RelayServer},
|
||||||
HidReport,
|
HidReport,
|
||||||
};
|
};
|
||||||
|
systemctl list services
|
||||||
struct RelaySvc {
|
struct RelaySvc {
|
||||||
// shared broadcast channel (unused for now, but kept for future fan-out)
|
// shared broadcast channel (unused for now, but kept for future fan-out)
|
||||||
_hub_tx: mpsc::Sender<HidReport>,
|
_hub_tx: mpsc::Sender<HidReport>,
|
||||||
@ -24,7 +24,7 @@ impl Relay for RelaySvc {
|
|||||||
async fn stream(
|
async fn stream(
|
||||||
&self,
|
&self,
|
||||||
request: Request<tonic::Streaming<HidReport>>,
|
request: Request<tonic::Streaming<HidReport>>,
|
||||||
) -> Result<Response<Self::StreamStream>, Status> {
|
) -> Result<Response<Pin<Box<dyn Stream<Item = Result<HidReport, Status>> + Send>>>, Status> {
|
||||||
let mut inbound = request.into_inner();
|
let mut inbound = request.into_inner();
|
||||||
|
|
||||||
// each connected client gets its own outbound channel
|
// each connected client gets its own outbound channel
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user