/* simple midi io stuff 

   (C) 1988 by O.Wagner
               Landsberge 5
               4322 Sprockhövel 2
               West Germany
*/

#include <devices/serial.h>
#include <functions.h>

static char *sername=SERIALNAME;
static struct MsgPort *ReadPort,*WritePort,*CreatePort();
static struct IOExtSer *Read_Request,*Write_Request,*CreateExtIO();
static unsigned char ReadB,WriteB=0;

int midiopen()
{
 Read_Request=CreateExtIO((ReadPort=CreatePort(0L,0L)),(LONG)sizeof(struct IOExtSer));
 Read_Request->io_SerFlags=SERF_SHARED|SERF_RAD_BOOGIE;
 if(OpenDevice(sername,NULL,Read_Request,NULL)) {
  DeleteExtIO(Read_Request);
  DeletePort(ReadPort);
  return(1);
 }
 Read_Request->IOSer.io_Length =1;
 Read_Request->IOSer.io_Data   =(APTR)&ReadB;
 Read_Request->io_Baud         =31250;
 Read_Request->io_ReadLen      =8;
 Read_Request->io_WriteLen     =8;
 Read_Request->io_CtlChar      =0xf4f4f4f4L;
 Read_Request->IOSer.io_Command=SDCMD_SETPARAMS;
 DoIO(Read_Request); 
 Read_Request->IOSer.io_Command=CMD_READ;
 Write_Request=CreateExtIO((WritePort=CreatePort(0L,0L)),(LONG)sizeof(struct IOExtSer));
 Write_Request->io_SerFlags=SERF_SHARED|SERF_RAD_BOOGIE;
 Write_Request->io_StopBits=1;
 if(OpenDevice(sername,NULL,Write_Request,NULL)) {
  DeleteExtIO(Read_Request);
  DeletePort(ReadPort);
  DeleteExtIO(Write_Request);
  DeletePort(WritePort);
  return(2);
 }
 Write_Request->IOSer.io_Command=CMD_WRITE;
 Write_Request->IOSer.io_Length =1;
 Write_Request->IOSer.io_Data   =(APTR)&WriteB;
 Write_Request->io_SerFlags     =SERF_SHARED|SERF_XDISABLED;
 BeginIO(Read_Request);
 return(0);
}

void midiclose()
{ 
 CloseDevice(Read_Request); 
 CloseDevice(Write_Request);
 DeleteExtIO(Read_Request);
 DeletePort(ReadPort);
 DeleteExtIO(Write_Request);
 DeletePort(WritePort);
} 

void midiput(c)
register int c;
{
 WriteB=c;
 DoIO(Write_Request);
}

int midiget()
{
 register int c;

 WaitIO(Read_Request);
 c=ReadB;
 BeginIO(Read_Request);
 return(c);
}
