sin-sdk/arcade_comm.cpp
1999-11-02 00:00:00 +00:00

186 lines
No EOL
5 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/arcade_comm.cpp $
// $Revision:: 5 $
// $Author:: Jimdose $
// $Date:: 2/16/99 8:38p $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/arcade_comm.cpp $
//
// 5 2/16/99 8:38p Jimdose
// moved sin arcade comm stuff to client
//
// 4 12/14/98 8:16p Aldie
// Added a disablecom command
//
// 3 12/14/98 5:23p Aldie
// Added generic COM ports
//
// 2 12/08/98 7:04p Aldie
// First version of serial comm for arcade
//
// DESCRIPTION:
// Sin Arcade Serial Communications
#ifdef SIN_ARCADE
#include "..\\client\\client.h"
#include "arcade_comm.h"
#include <windows.h>
static LPDCB lpDCB=NULL;
static HANDLE COMHANDLE=NULL;
static cvar_t *disable_com;
void ARCADE_ComError
(
void
)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&lpMsgBuf,
0,
NULL );
// Display the string.
Com_Error( ERR_FATAL, (const char *)lpMsgBuf );
// Free the buffer.
LocalFree( lpMsgBuf );
}
qboolean ARCADE_ComWriteByte
(
byte b
)
{
DWORD bytesWritten;
LPBYTE lpByte;
BOOL retval;
if ( disable_com->value )
return( true );
lpByte = (BYTE *)"UB";
if ( !lpDCB || !COMHANDLE )
{
return false;
}
retval = WriteFile( COMHANDLE,
lpByte,
2,
&bytesWritten,
NULL );
if (!retval)
{
return false;
}
// 50 millisecond wait for the board
Sleep( 50 );
// Byte command to send to the Universal Board
lpByte = &b;
// Send over the byte command
retval = WriteFile( COMHANDLE,
lpByte,
2,
&bytesWritten,
NULL );
if (!retval)
{
return false;
}
return true;
}
void ARCADE_SetupCommunications
(
void
)
{
LPCTSTR lpDef;
BOOL retval;
cvar_t *comport;
const char *comstring;
if ( lpDCB ) // Already setup
return;
disable_com = Cvar_Get( "disablecom", "0", 0 );
if ( disable_com->value )
return;
comport = Cvar_Get( "comport", "1", 0 );
if ( comport->value == 2 )
{
lpDef = "COM2: baud=9600 parity=N data=8 stop=1";
comstring = "COM2";
}
else
{
lpDef = "COM1: baud=9600 parity=N data=8 stop=1";
comstring = "COM1";
}
lpDCB = new DCB;
retval = BuildCommDCB( lpDef, lpDCB );
if ( !retval )
{
// An error occurred creating the device
ARCADE_ComError();
return;
}
if ( ( COMHANDLE = ( CreateFile( comstring,
GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
) ) ) == (HANDLE) -1 )
{
Com_Error( ERR_FATAL, "Could not create COM I/O file\n");
}
else
{
PurgeComm( COMHANDLE, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
}
}
void ARCADE_CloseCommunications
(
void
)
{
CloseHandle( COMHANDLE );
free( lpDCB );
}
#endif