Previous 199869 Revisions Next

r20278 Tuesday 15th January, 2013 at 14:45:36 UTC by R. Belmont
MIDI: Fixed several bugs and bumped the input buffer sizes [R. Belmont]
[src/emu/imagedev]midiin.c midiin.h midiout.c
[src/mess/machine]midiinport.c midioutport.c
[src/osd/portmedia]pmmidi.c

trunk/src/osd/portmedia/pmmidi.c
r20277r20278
1010#include "portmidi/portmidi.h"
1111#include "osdcore.h"
1212
13static const int RX_EVENT_BUF_SIZE = 512;
14
1315struct osd_midi_device
1416{
1517   #ifndef DISABLE_MIDI
1618   PortMidiStream *pmStream;
17   PmEvent rx_evBuf[20];      // up to 20 events
19   PmEvent rx_evBuf[RX_EVENT_BUF_SIZE];
1820   #endif
1921   UINT8 xmit_in[4]; // Pm_Messages mean we can at most have 3 residue bytes
2022   int xmit_cnt;
r20277r20278
8587
8688   if (found_dev >= 0)
8789   {
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)
8991      {
9092         ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device));
9193         memset(ret, 0, sizeof(osd_midi_device));
r20277r20278
132134
133135   if (found_dev >= 0)
134136   {
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)
136138      {
137139         ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device));
138140         memset(ret, 0, sizeof(osd_midi_device));
r20277r20278
175177int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut)
176178{
177179   #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);
179181   int bytesOut = 0;
180182
181183   if (msgsRead <= 0)
trunk/src/emu/imagedev/midiin.c
r20277r20278
3434{
3535   m_input_func.resolve(m_input_callback, *this);
3636   m_timer = timer_alloc(0);
37   m_midi = NULL;
3738}
3839
3940void midiin_device::device_reset()
r20277r20278
7172
7273void midiin_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
7374{
74   UINT8 buf[256];
75   UINT8 buf[8192*4];
7576   int bytesRead;
7677
77   if (osd_poll_midi_channel(m_midi))
78   while (osd_poll_midi_channel(m_midi))
7879   {
7980      bytesRead = osd_read_midi_channel(m_midi, buf);
8081
r20277r20278
112113
113114void midiin_device::call_unload(void)
114115{
115   osd_close_midi_channel(m_midi);
116   if (m_midi)
117   {
118      osd_close_midi_channel(m_midi);
119   }
116120}
117121
118122void midiin_device::tra_complete()
trunk/src/emu/imagedev/midiout.c
r20277r20278
3232
3333void midiout_device::device_start()
3434{
35   m_midi = NULL;
3536}
3637
3738void midiout_device::device_reset()
r20277r20278
7374
7475void midiout_device::call_unload(void)
7576{
76   osd_close_midi_channel(m_midi);
77   if (m_midi)
78   {
79      osd_close_midi_channel(m_midi);
80   }
7781}
7882
7983void midiout_device::rcv_complete()    // Rx completed receiving byte
r20277r20278
8185   receive_register_extract();
8286   UINT8 data = get_received_char();
8387
84   osd_write_midi_channel(m_midi, data);
88   if (m_midi)
89   {
90      osd_write_midi_channel(m_midi, data);
91   }
8592}
8693
8794void midiout_device::input_callback(UINT8 state)
trunk/src/emu/imagedev/midiin.h
r20277r20278
6868   void input_callback(UINT8 state);
6969
7070private:
71   static const int XMIT_RING_SIZE = 64;
71   static const int XMIT_RING_SIZE = (8192*4*4);
7272
7373   void xmit_char(UINT8 data);
7474
trunk/src/mess/machine/midioutport.c
r20277r20278
1313midiout_port_device::midiout_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1414   : device_t(mconfig, MIDIOUT_PORT, "MIDI Out port", tag, owner, clock),
1515      device_serial_port_interface(mconfig, *this),
16      m_midiout(*this, "midiout")
16      m_midiout(*this, "midioutimg")
1717{
1818}
1919
2020static MACHINE_CONFIG_FRAGMENT(midiout_port_config)
21   MCFG_MIDIOUT_ADD("midiout")
21   MCFG_MIDIOUT_ADD("midioutimg")
2222MACHINE_CONFIG_END
2323
2424machine_config_constructor midiout_port_device::device_mconfig_additions() const
trunk/src/mess/machine/midiinport.c
r20277r20278
1313midiin_port_device::midiin_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1414   : device_t(mconfig, MIDIIN_PORT, "MIDI In port", tag, owner, clock),
1515      device_serial_port_interface(mconfig, *this),
16      m_midiin(*this, "midiin")
16      m_midiin(*this, "midiinimg")
1717{
1818}
1919
r20277r20278
2323};
2424
2525static MACHINE_CONFIG_FRAGMENT(midiin_port_config)
26   MCFG_MIDIIN_ADD("midiin", midiin_port_image_config)
26   MCFG_MIDIIN_ADD("midiinimg", midiin_port_image_config)
2727MACHINE_CONFIG_END
2828
2929machine_config_constructor midiin_port_device::device_mconfig_additions() const

Previous 199869 Revisions Next


© 1997-2024 The MAME Team