186 lines
No EOL
5 KiB
C++
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 |