From 6e790c28640b0a74775444bc6ca49feb36b80068 Mon Sep 17 00:00:00 2001 From: miranda Date: Tue, 2 Jul 2024 00:20:27 +0300 Subject: [PATCH] extract writer loop into run_writer() --- src/main.rs | 68 +++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/src/main.rs b/src/main.rs index b1544d1..9e1fc37 100644 --- a/src/main.rs +++ b/src/main.rs @@ -276,39 +276,7 @@ fn run() -> Result<()> { thread::scope(|s| { let writer_thread = s.spawn(|| { - let sock = UdpSocket::bind(config.osc_in_addr).unwrap(); - println!("listening to {}", config.osc_in_addr); - - let mut buf = [0u8; rosc::decoder::MTU]; - loop { - match sock.recv_from(&mut buf) { - Ok((size, addr)) => { - let (_, packet) = rosc::decoder::decode_udp(&buf[..size]).unwrap(); - match packet { - OscPacket::Message(msg) => { - let write = |bytes: &[u8]| { - println!("write: {:02x?}", bytes); - handle.write_interrupt(ctrl_out_endpoint.address, bytes, default_timeout).unwrap(); - }; - - let Some(osc_match_data) = config.match_osc(&msg) else { - println!("unhandled osc message: with size {} from {}: {} {:?}", size, addr, msg.addr, msg.args); - continue; - }; - - write(&osc_match_data.ctrl_data); - } - OscPacket::Bundle(bundle) => { - println!("OSC Bundle: {:?}", bundle); - } - } - } - Err(e) => { - println!("error receiving from socket: {}", e); - break; - } - } - } + run_writer(&config, &handle, &ctrl_out_endpoint); }); let mut all_bytes = [0u8; 8]; @@ -673,3 +641,37 @@ fn configure_endpoint( fn float_to_7bit(val: f32) -> u8 { (val.max(0.0).min(1.0) * 127.0).round() as u8 } + +fn run_writer(config: &Config, handle: &DeviceHandle, endpoint: &Endpoint) -> Result<()> { + let sock = UdpSocket::bind(config.osc_in_addr)?; + println!("listening to {}", config.osc_in_addr); + + let mut buf = [0u8; rosc::decoder::MTU]; + loop { + match sock.recv_from(&mut buf) { + Ok((size, addr)) => { + let (_, packet) = rosc::decoder::decode_udp(&buf[..size])?; + match packet { + OscPacket::Message(msg) => { + let Some(osc_match_data) = config.match_osc(&msg) else { + println!("unhandled osc message: with size {} from {}: {} {:?}", size, addr, msg.addr, msg.args); + continue; + }; + + println!("write: {:02x?}", osc_match_data.ctrl_data); + handle.write_interrupt(endpoint.address, &osc_match_data.ctrl_data, default_timeout)?; + } + OscPacket::Bundle(bundle) => { + println!("OSC Bundle: {:?}", bundle); + } + } + } + Err(e) => { + println!("error receiving from socket: {}", e); + break; + } + } + } + + Ok(()) +}