On Tue, Dec 17, 2019 at 07:09:02PM -0600, Scott Cheloha wrote: > The only conversion I'm having trouble with is the tsleep(). > The comment says "20ms", but then we use some arithmetic > to derive a count of ticks. > > Given > > hz * MIDI_MAXWRITE / MIDI_RATE > > You have hz ticks/second, and 32 bytes, and 3125 bytes/second, so you > have > > hz ticks 32 bytes 3125 bytes > -------- * -------- / ---------- > second 1 second > > = 32 * hz ticks > ------------- > 3125 > > = 1 ticks > > if hz = 100, with integer division. > > I'm not sure how to use the constants to produce a count of > milliseconds. Maybe I'm just having a slow day.
The problem is that close() may reset the transmitter before the few bytes of its internal buffer is sent on the wire; there's no "wait for completion" feature in such simple hardware, so we just wait few milliseconds. The transmitter buffer size is around 16 bytes, the byte rate is 3125 bytes/second. So if we wait at least 16B / 3125B/s = 5.12ms, we're safe. Waiting 10ms-20ms is enough and is unnoticeable. ok ratchov
