mirror of
https://github.com/reactos/reactos.git
synced 2024-11-06 14:44:19 +00:00
93 lines
1.5 KiB
C
93 lines
1.5 KiB
C
/*
|
|
ReactOS Sound System
|
|
MIDI UART support
|
|
|
|
Author:
|
|
Andrew Greenwood (silverblade@reactos.org)
|
|
|
|
History:
|
|
26 May 2008 - Created
|
|
|
|
Notes:
|
|
Functions documented in midiuart.h
|
|
*/
|
|
|
|
#include <ntddk.h>
|
|
#include "midiuart.h"
|
|
|
|
BOOLEAN
|
|
WaitForMidiUartStatus(
|
|
IN PUCHAR UartBasePort,
|
|
IN UCHAR StatusFlags,
|
|
IN ULONG Timeout)
|
|
{
|
|
ULONG RemainingTime = Timeout;
|
|
|
|
while ( RemainingTime -- )
|
|
{
|
|
if ( READ_MIDIUART_STATUS(UartBasePort) & StatusFlags )
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN
|
|
WriteMidiUartByte(
|
|
IN PUCHAR UartBasePort,
|
|
IN UCHAR Data,
|
|
IN ULONG Timeout)
|
|
{
|
|
if ( ! WaitForMidiUartCTS(UartBasePort, Timeout) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WRITE_MIDIUART_DATA(UartBasePort, Data);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOLEAN
|
|
WriteMidiUartMulti(
|
|
IN PUCHAR UartBasePort,
|
|
IN PUCHAR Data,
|
|
IN ULONG DataLength,
|
|
IN ULONG Timeout)
|
|
{
|
|
ULONG DataIndex;
|
|
|
|
for ( DataIndex = 0; DataIndex < DataLength; ++ DataIndex )
|
|
{
|
|
if ( ! WriteMidiUartByte(UartBasePort, Data[DataIndex], Timeout) )
|
|
{
|
|
/* We failed - don't try writing any more */
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOLEAN
|
|
ReadMidiUartByte(
|
|
IN PUCHAR UartBasePort,
|
|
OUT UCHAR* Data,
|
|
IN ULONG Timeout)
|
|
{
|
|
if ( ! Data )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if ( ! WaitForMidiUartDTR(UartBasePort, Timeout) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
*Data = READ_MIDIUART_DATA(UartBasePort);
|
|
|
|
return TRUE;
|
|
}
|