From c3747ebc7d103a2848b171becb7a00758ab3bddc Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Wed, 8 Jun 2022 22:18:16 +0800 Subject: [PATCH] pointerc: support button events --- tools/pointerc/main.ha | 67 ++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/tools/pointerc/main.ha b/tools/pointerc/main.ha index 24a9180..0d18984 100644 --- a/tools/pointerc/main.ha +++ b/tools/pointerc/main.ha @@ -6,10 +6,21 @@ use net::udp; use os; use proto::control; use strconv; +use strings; +use time; + +fn send(sock: io::file, bytes: []u8) void = { + match (udp::send(sock, bytes)) { + case let err: net::error => + fmt::fatalf("Cannot send(): {}", net::strerror(err)); + case size => + yield; + }; +}; export fn main() int = { - if (len(os::args) != 5) { - fmt::fatalf("Usage: {} addr port x y", os::args[0]); + if (len(os::args) > 5 || len(os::args) < 4) { + fmt::fatalf("Usage: {} addr port (x y | left | right)", os::args[0]); }; const addr = match (ip::parse(os::args[1])) { case let addr: ip::addr => @@ -23,24 +34,6 @@ export fn main() int = { case => fmt::fatalf("Invalid port {}", os::args[2]); }; - const x = match (strconv::stoi8(os::args[3])) { - case let n: i8 => - yield n; - case => - fmt::fatalf("Invalid x {}", os::args[3]); - }; - const y = match (strconv::stoi8(os::args[4])) { - case let n: i8 => - yield n; - case => - fmt::fatalf("Invalid y {}", os::args[4]); - }; - - const buf = control::request { - code = control::code::RELATIVE_MOVEMENT, - x = x, - y = y, - }; const sock = match (udp::connect(addr, port)) { case let s: io::file => @@ -50,11 +43,35 @@ export fn main() int = { }; defer io::close(sock)!; - match (udp::send(sock, buf.bytes)) { - case let err: net::error => - fmt::fatalf("Cannot send(): {}", net::strerror(err)); - case size => - yield; + let buf = control::request {...}; + + if (strings::compare(os::args[3], "left") == 0) { + buf.code = control::code::KEY_PRESSED; + buf.key = control::key::BTN_LEFT; + send(sock, buf.bytes); + buf.code = control::code::KEY_RELEASED; + send(sock, buf.bytes); + } else if (strings::compare(os::args[3], "right") == 0) { + buf.code = control::code::KEY_PRESSED; + buf.key = control::key::BTN_RIGHT; + send(sock, buf.bytes); + buf.code = control::code::KEY_RELEASED; + send(sock, buf.bytes); + } else { + buf.code = control::code::RELATIVE_MOVEMENT; + buf.x = match (strconv::stoi8(os::args[3])) { + case let n: i8 => + yield n; + case => + fmt::fatalf("Invalid x {}", os::args[3]); + }; + buf.y = match (strconv::stoi8(os::args[4])) { + case let n: i8 => + yield n; + case => + fmt::fatalf("Invalid y {}", os::args[4]); + }; + send(sock, buf.bytes); }; return 0; }; -- 2.45.2