Ignore:
Timestamp:
May 28, 2000, 6:50:46 PM (25 years ago)
Author:
sandervl
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sbliveos2/trunk/drv16/mpu401.cpp

    r147 r151  
    4040#include "parse.h"
    4141#include "ossidc.h"
     42#include <dbgos2.h>
     43
     44#define TIMEOUT   60000
    4245
    4346
     
    4750   MIDIAUDIO ( AUDIOHW_MPU401_PLAY, pTimer )
    4851{
    49    static char szName[] = "SBLive #";  // Instance name for RTMIDI.  A number will be appended.
     52   static char szName[] = "SBLive RTMIDI #";  // Instance name for RTMIDI.  A number will be appended.
    5053   static char szSuffix[] = "0";       // Printable char that is appended to szName.
    5154
    5255   // RTMIDI (MIDI.SYS) related stuff
    53    ++szSuffix[0];                      // Bump number in instance name.
     56////   ++szSuffix[0];                      // Bump number in instance name.
    5457   strcpy( szRTMIDI_Name, szName );    // Setup instance name.
    5558   strcat( szRTMIDI_Name, szSuffix );  // Append ASCII number to instance name.
    56    ulRTMIDI_Caps = MIDICAPSA_INPUT;    // Set RTMIDI caps.
    57    // When we have an IRQ and a send capability, add next line.
    58    // ulCapabilities |= MIDICAPSA_OUTPUT;
     59   ulRTMIDI_Caps = MIDICAPSA_INPUT | MIDICAPSA_OUTPUT;    // Set RTMIDI caps.
    5960
    6061   midiOutStreamId = 0;
     
    124125int MPU_401::writeByte(BYTE b)
    125126{
    126    //TODO:
     127   if(!midiOutStreamId) {
     128        DebugInt3();
     129        return 0;
     130   }
     131   unsigned int i;
     132
     133   for (i=0; i<TIMEOUT; i++) {
     134        if(OSS16_WriteMidiByte(midiOutStreamId, b)) {
     135                return 1;
     136        }
     137        iodelay(1);
     138   }
    127139   return 0;
    128140}
     
    132144   //TODO:
    133145   return -1;
     146}
     147
     148void MPU_401::processIrq(unsigned long streamid)
     149{
     150 char buffer[64];
     151 int  bufsize;
     152
     153   MIDIAUDIO* pma = (MIDIAUDIO *) pAudioHWList->Head();
     154   while (pma) {
     155      if((pma->ulDeviceType == AUDIOHW_MPU401_CAPTURE) ||
     156        (pma->ulDeviceType == AUDIOHW_MPU401_PLAY)) {
     157                break;
     158      }
     159      pma = (MIDIAUDIO *) pma->pNext;
     160   }
     161   if(pma == NULL) {
     162        dprintf(("MPU_401::processIrq: mpu device found!!"));
     163        return;
     164   }
     165
     166   while(TRUE) {
     167        bufsize = OSS16_ReadMidiBytes(streamid, &buffer[0], sizeof(buffer));
     168        for(int i=0;i<bufsize;i++) {
     169                pma->pfnSendByte(pma->ulRTMIDI_Handle, buffer[i]);
     170        }
     171        if(bufsize != sizeof(buffer)) {
     172                break;
     173        }
     174   }   
    134175}
    135176
     
    175216USHORT MPU_401::RTMIDI_OpenReceive(void)
    176217{
     218   if(midiOutStreamId == 0) {
     219          midiOutStreamId = OSS16_OpenMidiStream(MIDI_RECEIVE);
     220   }
     221   return (midiOutStreamId) ? 0 : MIDIERRA_HW_FAILED;
     222}
     223
     224USHORT MPU_401::RTMIDI_OpenSend(void)
     225{
    177226   if(midiInStreamId == 0) {
    178           midiInStreamId = OSS16_OpenMidiStream(MIDI_RECEIVE);
     227          midiInStreamId = OSS16_OpenMidiStream(MIDI_SEND);
    179228   }
    180229   return (midiInStreamId) ? 0 : MIDIERRA_HW_FAILED;
    181230}
    182231
    183 USHORT MPU_401::RTMIDI_OpenSend(void)
    184 {
    185    if(midiOutStreamId == 0) {
    186           midiOutStreamId = OSS16_OpenMidiStream(MIDI_SEND);
    187    }
    188    return (midiOutStreamId) ? 0 : MIDIERRA_HW_FAILED;
    189 }
    190 
    191232USHORT MPU_401::RTMIDI_CloseReceive(void)
    192233{
    193    OSS16_CloseMidiStream(MIDI_RECEIVE, midiInStreamId);
     234   if(midiOutStreamId) {
     235        OSS16_CloseMidiStream(MIDI_RECEIVE, midiOutStreamId);
     236        midiOutStreamId = 0;
     237   }
    194238   return 0;
    195239}
     
    197241USHORT MPU_401::RTMIDI_CloseSend(void)
    198242{
    199    OSS16_CloseMidiStream(MIDI_SEND, midiOutStreamId);
    200    return 0;
    201 }
    202 
     243   if(midiInStreamId) {
     244        OSS16_CloseMidiStream(MIDI_SEND, midiInStreamId);
     245        midiInStreamId = 0;
     246   }
     247   return 0;
     248}
     249
Note: See TracChangeset for help on using the changeset viewer.