Skip to content

Commit

Permalink
fix state management for OnOffMode::Raw
Browse files Browse the repository at this point in the history
  • Loading branch information
ahihi committed Jul 18, 2024
1 parent df44012 commit 7879224
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 22 deletions.
46 changes: 25 additions & 21 deletions src/autocrap/interpreter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,29 +100,31 @@ pub struct OnOffLogic {
}

impl OnOffLogic {
fn update(&mut self, new_state: bool) -> Response {
let changed = new_state != self.state;
self.state = new_state;
fn update(&mut self, new_state: bool, remember: bool) -> Response {
if remember {
let changed = new_state != self.state;
self.state = new_state;

if !changed {
return Response::new();
if !changed {
return Response::new();
}
}

Response {
osc: Some(OscResponse {
addr: self.osc_addr.clone(),
args: vec![OscType::Float(if self.state { 1.0 } else { 0.0 })]
args: vec![OscType::Float(if new_state { 1.0 } else { 0.0 })]
}),
ctrl: self.ctrl_out_num.map(|num| CtrlResponse {
data: vec![num, if self.state { 0x7f } else { 0x00 }]
data: vec![num, if new_state { 0x7f } else { 0x00 }]
}),
midi: self.midi.map(|midi| {
let data = match midi.kind {
MidiKind::Cc => {
vec![
0b10110000 | midi.channel,
midi.num,
if self.state { 0x7f } else { 0x00 }
if new_state { 0x7f } else { 0x00 }
]
}
};
Expand Down Expand Up @@ -163,10 +165,12 @@ impl CtrlLogic for OnOffLogic {
let mut new_state = self.state;
let mut send_ctrl = true;
let mut send_osc = true;
let mut remember = true;
match self.mode {
OnOffMode::Raw => {
new_state = pressed;
send_ctrl = false;
remember = false;
},
OnOffMode::Momentary => {
new_state = pressed;
Expand All @@ -181,7 +185,7 @@ impl CtrlLogic for OnOffLogic {
}
}

let mut response = self.update(new_state);
let mut response = self.update(new_state, remember);

if !send_ctrl {
response.ctrl = None;
Expand Down Expand Up @@ -211,9 +215,9 @@ impl CtrlLogic for OnOffLogic {
return None;
};

self.update(val != 0.0)
.ctrl
.map(|r| r.into())
let mut response = Response::new();
response.ctrl = self.update(val != 0.0, true).ctrl;
Some(response)
}

fn handle_midi(&mut self, msg: &[u8]) -> Option<Response> {
Expand Down Expand Up @@ -241,9 +245,9 @@ impl CtrlLogic for OnOffLogic {
return None;
}

self.update(val != 0)
.ctrl
.map(|r| r.into())
let mut response = Response::new();
response.ctrl = self.update(val != 0, true).ctrl;
Some(response)
}
}

Expand Down Expand Up @@ -440,9 +444,9 @@ impl CtrlLogic for RelativeLogic {

let new_state = float_to_7bit(val);

self.update(new_state)
.ctrl
.map(|r| r.into())
let mut response = Response::new();
response.ctrl = self.update(new_state).ctrl;
Some(response)
}

fn handle_midi(&mut self, msg: &[u8]) -> Option<Response> {
Expand Down Expand Up @@ -470,9 +474,9 @@ impl CtrlLogic for RelativeLogic {
return None;
}

self.update(val)
.ctrl
.map(|r| r.into())
let mut response = Response::new();
response.ctrl = self.update(val).ctrl;
Some(response)
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ fn run_reader<T: UsbContext>(
addr: addr,
args: args,
});
println!("osc: {:?}", msg);
// println!("osc out: {:?}", msg);
let msg_buf = encoder::encode(&msg)?;

sock.send_to(&msg_buf, out_addr)?;
Expand Down Expand Up @@ -315,6 +315,7 @@ fn run_writer<T: UsbContext>(
) -> Result<()> {
loop {
let ctrl_out = ctrl_rx.recv()?;
// println!("ctrl out: {:02x?}", ctrl_out);
handle.write_interrupt(endpoint.address, &ctrl_out, DEFAULT_TIMEOUT)?;
}
}
Expand All @@ -338,11 +339,14 @@ fn run_osc_receiver(
let (_, packet) = rosc::decoder::decode_udp(&buf[..size])?;
match packet {
OscPacket::Message(msg) => {
// println!("osc in: {} {:?}", msg.addr, msg.args);
let Some(response) = interpreter.write().unwrap().handle_osc(&msg) else {
println!("unhandled osc message: with size {} from {}: {} {:?}", size, addr, msg.addr, msg.args);
continue;
};

// println!("osc in response: {:?}", response);

let Some(CtrlResponse { data }) = response.ctrl else {
continue;
};
Expand Down

0 comments on commit 7879224

Please sign in to comment.