trunk/src/osd/portmedia/pmmidi.c
| r20277 | r20278 | |
| 10 | 10 | #include "portmidi/portmidi.h" |
| 11 | 11 | #include "osdcore.h" |
| 12 | 12 | |
| 13 | static const int RX_EVENT_BUF_SIZE = 512; |
| 14 | |
| 13 | 15 | struct osd_midi_device |
| 14 | 16 | { |
| 15 | 17 | #ifndef DISABLE_MIDI |
| 16 | 18 | PortMidiStream *pmStream; |
| 17 | | PmEvent rx_evBuf[20]; // up to 20 events |
| 19 | PmEvent rx_evBuf[RX_EVENT_BUF_SIZE]; |
| 18 | 20 | #endif |
| 19 | 21 | UINT8 xmit_in[4]; // Pm_Messages mean we can at most have 3 residue bytes |
| 20 | 22 | int xmit_cnt; |
| r20277 | r20278 | |
| 85 | 87 | |
| 86 | 88 | if (found_dev >= 0) |
| 87 | 89 | { |
| 88 | | if (Pm_OpenInput(&stm, found_dev, NULL, 20, NULL, NULL) == pmNoError) |
| 90 | if (Pm_OpenInput(&stm, found_dev, NULL, RX_EVENT_BUF_SIZE, NULL, NULL) == pmNoError) |
| 89 | 91 | { |
| 90 | 92 | ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device)); |
| 91 | 93 | memset(ret, 0, sizeof(osd_midi_device)); |
| r20277 | r20278 | |
| 132 | 134 | |
| 133 | 135 | if (found_dev >= 0) |
| 134 | 136 | { |
| 135 | | if (Pm_OpenOutput(&stm, found_dev, NULL, 20, NULL, NULL, 0) == pmNoError) |
| 137 | if (Pm_OpenOutput(&stm, found_dev, NULL, 100, NULL, NULL, 0) == pmNoError) |
| 136 | 138 | { |
| 137 | 139 | ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device)); |
| 138 | 140 | memset(ret, 0, sizeof(osd_midi_device)); |
| r20277 | r20278 | |
| 175 | 177 | int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut) |
| 176 | 178 | { |
| 177 | 179 | #ifndef DISABLE_MIDI |
| 178 | | int msgsRead = Pm_Read(dev->pmStream, dev->rx_evBuf, 20); |
| 180 | int msgsRead = Pm_Read(dev->pmStream, dev->rx_evBuf, RX_EVENT_BUF_SIZE); |
| 179 | 181 | int bytesOut = 0; |
| 180 | 182 | |
| 181 | 183 | if (msgsRead <= 0) |
trunk/src/emu/imagedev/midiin.c
| r20277 | r20278 | |
| 34 | 34 | { |
| 35 | 35 | m_input_func.resolve(m_input_callback, *this); |
| 36 | 36 | m_timer = timer_alloc(0); |
| 37 | m_midi = NULL; |
| 37 | 38 | } |
| 38 | 39 | |
| 39 | 40 | void midiin_device::device_reset() |
| r20277 | r20278 | |
| 71 | 72 | |
| 72 | 73 | void midiin_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 73 | 74 | { |
| 74 | | UINT8 buf[256]; |
| 75 | UINT8 buf[8192*4]; |
| 75 | 76 | int bytesRead; |
| 76 | 77 | |
| 77 | | if (osd_poll_midi_channel(m_midi)) |
| 78 | while (osd_poll_midi_channel(m_midi)) |
| 78 | 79 | { |
| 79 | 80 | bytesRead = osd_read_midi_channel(m_midi, buf); |
| 80 | 81 | |
| r20277 | r20278 | |
| 112 | 113 | |
| 113 | 114 | void midiin_device::call_unload(void) |
| 114 | 115 | { |
| 115 | | osd_close_midi_channel(m_midi); |
| 116 | if (m_midi) |
| 117 | { |
| 118 | osd_close_midi_channel(m_midi); |
| 119 | } |
| 116 | 120 | } |
| 117 | 121 | |
| 118 | 122 | void midiin_device::tra_complete() |
trunk/src/emu/imagedev/midiout.c
| r20277 | r20278 | |
| 32 | 32 | |
| 33 | 33 | void midiout_device::device_start() |
| 34 | 34 | { |
| 35 | m_midi = NULL; |
| 35 | 36 | } |
| 36 | 37 | |
| 37 | 38 | void midiout_device::device_reset() |
| r20277 | r20278 | |
| 73 | 74 | |
| 74 | 75 | void midiout_device::call_unload(void) |
| 75 | 76 | { |
| 76 | | osd_close_midi_channel(m_midi); |
| 77 | if (m_midi) |
| 78 | { |
| 79 | osd_close_midi_channel(m_midi); |
| 80 | } |
| 77 | 81 | } |
| 78 | 82 | |
| 79 | 83 | void midiout_device::rcv_complete() // Rx completed receiving byte |
| r20277 | r20278 | |
| 81 | 85 | receive_register_extract(); |
| 82 | 86 | UINT8 data = get_received_char(); |
| 83 | 87 | |
| 84 | | osd_write_midi_channel(m_midi, data); |
| 88 | if (m_midi) |
| 89 | { |
| 90 | osd_write_midi_channel(m_midi, data); |
| 91 | } |
| 85 | 92 | } |
| 86 | 93 | |
| 87 | 94 | void midiout_device::input_callback(UINT8 state) |
trunk/src/mess/machine/midioutport.c
| r20277 | r20278 | |
| 13 | 13 | midiout_port_device::midiout_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 14 | 14 | : device_t(mconfig, MIDIOUT_PORT, "MIDI Out port", tag, owner, clock), |
| 15 | 15 | device_serial_port_interface(mconfig, *this), |
| 16 | | m_midiout(*this, "midiout") |
| 16 | m_midiout(*this, "midioutimg") |
| 17 | 17 | { |
| 18 | 18 | } |
| 19 | 19 | |
| 20 | 20 | static MACHINE_CONFIG_FRAGMENT(midiout_port_config) |
| 21 | | MCFG_MIDIOUT_ADD("midiout") |
| 21 | MCFG_MIDIOUT_ADD("midioutimg") |
| 22 | 22 | MACHINE_CONFIG_END |
| 23 | 23 | |
| 24 | 24 | machine_config_constructor midiout_port_device::device_mconfig_additions() const |
trunk/src/mess/machine/midiinport.c
| r20277 | r20278 | |
| 13 | 13 | midiin_port_device::midiin_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 14 | 14 | : device_t(mconfig, MIDIIN_PORT, "MIDI In port", tag, owner, clock), |
| 15 | 15 | device_serial_port_interface(mconfig, *this), |
| 16 | | m_midiin(*this, "midiin") |
| 16 | m_midiin(*this, "midiinimg") |
| 17 | 17 | { |
| 18 | 18 | } |
| 19 | 19 | |
| r20277 | r20278 | |
| 23 | 23 | }; |
| 24 | 24 | |
| 25 | 25 | static MACHINE_CONFIG_FRAGMENT(midiin_port_config) |
| 26 | | MCFG_MIDIIN_ADD("midiin", midiin_port_image_config) |
| 26 | MCFG_MIDIIN_ADD("midiinimg", midiin_port_image_config) |
| 27 | 27 | MACHINE_CONFIG_END |
| 28 | 28 | |
| 29 | 29 | machine_config_constructor midiin_port_device::device_mconfig_additions() const |