state_changed now takes frames[] and acks[]
sending side- non-timeout case now implemented by
frames[i].state = INTRANSIT