Skip to content

Commit c0cc1a5

Browse files
committed
更新vmouse接收方向功能
1 parent c6cf226 commit c0cc1a5

2 files changed

Lines changed: 54 additions & 8 deletions

File tree

main.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -566,13 +566,13 @@ func main() {
566566
var using_v_mouse *bool = parser.Flag("v", "v-mouse", &argparse.Options{
567567
Required: false,
568568
Default: false,
569-
Help: "用触摸操作模拟鼠标,需要额光标外显示程序",
569+
Help: "用触摸操作模拟鼠标,需要额光标外显示程序,同时可用于在HID与OTG模式下获取屏幕方向",
570570
})
571571

572572
var using_remote_v_mouse *string = parser.String("", "v-mouse-addr", &argparse.Options{
573573
Required: false,
574574
Default: "",
575-
Help: "模拟光标显示程序地址,默认本机6533端口,输入 IP:PORT 例如 192.168.3.7:61069 或者仅输入IP使用默认端口6533",
575+
Help: "模拟光标显示程序地址,默认本机6533端口,输入 IP:PORT 例如 192.168.3.7:6533 或者仅输入IP使用默认端口6533",
576576
})
577577

578578
var view_release_timeout *int = parser.Int("", "auto-release", &argparse.Options{
@@ -827,7 +827,9 @@ func main() {
827827

828828
} else {
829829
go touchHandler.mix_touch(touch_event_ch, max_mt_x, max_mt_y)
830-
go listen_device_orientation()
830+
if !*using_v_mouse {
831+
go listen_device_orientation()
832+
}
831833
}
832834
go touchHandler.auto_handel_view_release(*view_release_timeout)
833835
go touchHandler.loop_handel_wasd_wheel()
@@ -867,6 +869,7 @@ func main() {
867869
}
868870

869871
if *using_remote_control {
872+
logger.Errorf("使用远程控制中。。。。")
870873
go udp_event_injector(events_ch, *port)
871874
}
872875

v_mouse.go

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,67 @@ func init_v_mouse_controller(
2828
map_switch_signal chan bool,
2929
addr net.UDPAddr,
3030
) *v_mouse_controller {
31-
udp_ch := make(chan []byte)
31+
udp_write_ch := make(chan []byte)
3232
go (func() {
33-
socket, err := net.DialUDP("udp", nil, &addr)
33+
// socket, err := net.DialUDP("udp", nil, &addr)
34+
localAddr, err := net.ResolveUDPAddr("udp", ":0") // 使用随机本地端口
35+
if err != nil {
36+
logger.Errorf("解析本地地址失败: %s", err.Error())
37+
os.Exit(3)
38+
}
39+
socket, err := net.ListenUDP("udp", localAddr)
40+
if err != nil {
41+
logger.Errorf("udp error : %v", err)
42+
return
43+
}
3444
if err != nil {
3545
logger.Errorf("连接v_mouse失败 : %s", err.Error())
3646
os.Exit(3)
3747
}
3848
defer socket.Close()
49+
localAddrReal := socket.LocalAddr().(*net.UDPAddr)
50+
logger.Infof("v_mouse服务启动在端口: %d", localAddrReal.Port)
51+
52+
// 启动读取goroutine
53+
udpRecvCh := make(chan []byte, 100) // 缓冲大小可以根据需要调整
54+
go func() {
55+
readBuffer := make([]byte, 32)
56+
for {
57+
select {
58+
case <-global_close_signal:
59+
close(udpRecvCh) // 关闭管道
60+
return
61+
default:
62+
n, remoteAddr, err := socket.ReadFromUDP(readBuffer)
63+
if err != nil {
64+
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
65+
continue
66+
}
67+
logger.Errorf("读取UDP数据失败: %s", err.Error())
68+
continue
69+
}
70+
if n > 0 {
71+
data := make([]byte, n)
72+
copy(data, readBuffer[:n])
73+
global_device_orientation = int32(data[0])
74+
logger.Infof("从 %s 接收到 vpoint上报屏幕方向 %d ", remoteAddr.String(), int32(data[0]))
75+
76+
}
77+
}
78+
}
79+
}()
80+
3981
for {
4082
select {
4183
case <-global_close_signal:
4284
return
4385
default:
44-
data := <-udp_ch
45-
socket.Write(data)
86+
data := <-udp_write_ch
87+
socket.WriteToUDP(data, &addr)
4688
}
4789
}
4890
})()
91+
4992
screen_x, screen_y := int32(0), int32(0)
5093
if global_is_wordking_remote {
5194
screen_x = global_screen_x
@@ -62,7 +105,7 @@ func init_v_mouse_controller(
62105
left_downing: false,
63106
mouse_x: 0,
64107
mouse_y: 0,
65-
udp_write_ch: udp_ch,
108+
udp_write_ch: udp_write_ch,
66109
mouse_id: -1,
67110
screen_x: screen_x,
68111
screen_y: screen_y,

0 commit comments

Comments
 (0)