diff --git a/freeldr/freeldr/Makefile b/freeldr/freeldr/Makefile index 4d1ff17ce70..8823afacc9b 100644 --- a/freeldr/freeldr/Makefile +++ b/freeldr/freeldr/Makefile @@ -25,7 +25,8 @@ export RM = cmd /C del export CP = cmd /C copy #FLAGS = -Wall -nostdinc -fno-builtin -FLAGS = -Wall -fno-builtin -DDEBUG +#FLAGS = -Wall -fno-builtin -DDEBUG +FLAGS = -Wall -fno-builtin # asmcode.o has to be first in the link line because it contains the startup code OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o stdlib.o fs.a fs.o fs_fat.o \ @@ -33,20 +34,28 @@ OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o stdlib.o fs.a fs.o fs_fat.o \ mem.o memory.o debug.o parseini.o ASM_OBJS = asmcode.o mb.o boot.o mem.o C_OBJS = freeldr.o stdlib.o fs.a reactos.o tui.o menu.o miscboot.o options.o linux.o \ - multiboot.o arcname.o memory.o debug.o parseini.o + multiboot.o +C_OBJS2 = arcname.o memory.o debug.o parseini.o rs232.o portio.o .PHONY : clean all: freeldr.sys freeldr.sys: asmcode.a c_code.a - $(LD) -N -Ttext=0x8000 --oformat=binary -o freeldr.sys asmcode.a c_code.a + $(LD) -N -Ttext=0x8000 --oformat=binary -o f.sys asmcode.a c_code.a + ../bootsect/stubit ../bootsect/fatstub.bin f.sys freeldr.sys asmcode.a: $(ASM_OBJS) $(LD) -r -o asmcode.a $(ASM_OBJS) -c_code.a: $(C_OBJS) - $(LD) -r -o c_code.a $(C_OBJS) +c_code.a: c_code1.a c_code2.a + $(LD) -r -o c_code.a c_code1.a c_code2.a + +c_code1.a: $(C_OBJS) + $(LD) -r -o c_code1.a $(C_OBJS) + +c_code2.a: $(C_OBJS2) + $(LD) -r -o c_code2.a $(C_OBJS2) asmcode.o: asmcode.S asmcode.h Makefile $(CC) $(FLAGS) -o asmcode.o -c asmcode.S @@ -108,6 +117,12 @@ debug.o: debug.c debug.h Makefile parseini.o: parseini.c parseini.h Makefile $(CC) $(FLAGS) -o parseini.o -c parseini.c +rs232.o: rs232.c rs232.h Makefile + $(CC) $(FLAGS) -o rs232.o -c rs232.c + +portio.o: portio.c portio.h Makefile + $(CC) $(FLAGS) -o portio.o -c portio.c + clean: $(RM) *.o $(RM) *.a diff --git a/freeldr/freeldr/debug.c b/freeldr/freeldr/debug.c index 699bfbfdafc..e65c12bdb4e 100644 --- a/freeldr/freeldr/debug.c +++ b/freeldr/freeldr/debug.c @@ -20,15 +20,40 @@ #include "freeldr.h" #include "debug.h" #include "stdlib.h" +#include "rs232.h" +#include "parseini.h" + +#ifdef DEBUG ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY; +#define SCREEN 0 +#define RS232 1 + +#define COM1 1 +#define COM2 2 +#define COM3 3 +#define COM4 4 + +ULONG DebugPort = RS232; //SCREEN; +ULONG ComPort = COM1; +ULONG BaudRate = 19200; + +VOID DebugInit(VOID) +{ + if (DebugPort == RS232) + { + Rs232PortInitialize(ComPort, BaudRate); + } +} + void DebugPrint(ULONG Mask, char *format, ...) { int *dataptr = (int *) &format; char c, *ptr, str[16]; char buffer[512]; char *p = buffer; + int i; // Mask out unwanted debug messages if (!(Mask & DebugPrintMask)) @@ -79,5 +104,21 @@ void DebugPrint(ULONG Mask, char *format, ...) *p=0; - print(buffer); + if (DebugPort == RS232) + { + for (i=0; buffer[i] != 0; i++) + { + Rs232PortPutByte(buffer[i]); + if (buffer[i] == '\n') + { + Rs232PortPutByte('\r'); + } + } + } + else + { + print(buffer); + } } + +#endif // defined DEBUG diff --git a/freeldr/freeldr/debug.h b/freeldr/freeldr/debug.h index 8ac0da93d0d..7bade776994 100644 --- a/freeldr/freeldr/debug.h +++ b/freeldr/freeldr/debug.h @@ -21,9 +21,12 @@ #ifndef __DEBUG_H #define __DEBUG_H +#ifdef DEBUG + #define DPRINT_WARNING 0x00000001 // OR this with DebugPrintMask to enable debugger messages and other misc stuff #define DPRINT_MEMORY 0x00000002 // OR this with DebugPrintMask to enable memory management messages +VOID DebugInit(VOID); void DebugPrint(ULONG Mask, char *format, ...); #define BugCheck0(format) \ @@ -54,4 +57,6 @@ void DebugPrint(ULONG Mask, char *format, ...); for (;;); \ } +#endif // defined DEBUG + #endif // defined __DEBUG_H \ No newline at end of file diff --git a/freeldr/freeldr/freeldr.c b/freeldr/freeldr/freeldr.c index 52db11362df..3f45a279185 100644 --- a/freeldr/freeldr/freeldr.c +++ b/freeldr/freeldr/freeldr.c @@ -28,6 +28,7 @@ #include "linux.h" #include "memory.h" #include "parseini.h" +#include "debug.h" // Variable BootDrive moved to asmcode.S //ULONG BootDrive = 0; // BIOS boot drive, 0-A:, 1-B:, 0x80-C:, 0x81-D:, etc. @@ -58,6 +59,10 @@ void BootMain(void) printf("Loading FreeLoader...\n"); +#ifdef DEBUG + DebugInit(); +#endif + InitMemoryManager((PVOID)0x100000, 0x20000); if (!ParseIniFile()) diff --git a/freeldr/freeldr/freeldr.h b/freeldr/freeldr/freeldr.h index b290d828124..b7fa0b60ab3 100644 --- a/freeldr/freeldr/freeldr.h +++ b/freeldr/freeldr/freeldr.h @@ -31,6 +31,7 @@ #define size_t unsigned int #define BOOL int +#define BOOLEAN int #define NULL 0 #define TRUE 1 #define FALSE 0 @@ -43,6 +44,9 @@ #define PUCHAR unsigned char * #define WCHAR unsigned short #define PWCHAR unsigned short * +#define SHORT short +#define USHORT unsigned short +#define PUSHORT unsigned short * #define LONG long #define ULONG unsigned long #define PULONG unsigned long * diff --git a/freeldr/freeldr/portio.c b/freeldr/freeldr/portio.c new file mode 100644 index 00000000000..1e6865ff215 --- /dev/null +++ b/freeldr/freeldr/portio.c @@ -0,0 +1,183 @@ +/* $Id: portio.c,v 1.1 2001/08/07 06:19:43 bpalmer Exp $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/hal/x86/portio.c + * PURPOSE: Port I/O functions + * PROGRAMMER: Eric Kohl (ekohl@abo.rhein-zeitung.de) + * UPDATE HISTORY: + * Created 18/10/99 + */ + +//#include +#include "freeldr.h" + + +/* FUNCTIONS ****************************************************************/ + +/* + * This file contains the definitions for the x86 IO instructions + * inb/inw/inl/outb/outw/outl and the "string versions" of the same + * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing" + * versions of the single-IO instructions (inb_p/inw_p/..). + * + * This file is not meant to be obfuscating: it's just complicated + * to (a) handle it all in a way that makes gcc able to optimize it + * as well as possible and (b) trying to avoid writing the same thing + * over and over again with slight variations and possibly making a + * mistake somewhere. + */ + +/* + * Thanks to James van Artsdalen for a better timing-fix than + * the two short jumps: using outb's to a nonexistent port seems + * to guarantee better timings even on fast machines. + * + * On the other hand, I'd like to be sure of a non-existent port: + * I feel a bit unsafe about using 0x80 (should be safe, though) + * + * Linus + */ + +#ifdef SLOW_IO_BY_JUMPING +#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:") +#else +#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80") +#endif + +#ifdef REALLY_SLOW_IO +#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; } +#else +#define SLOW_DOWN_IO __SLOW_DOWN_IO +#endif + +VOID /*STDCALL*/ +READ_PORT_BUFFER_UCHAR (PUCHAR Port, + PUCHAR Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; insb\n\t" + : "=D" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +VOID /*STDCALL*/ +READ_PORT_BUFFER_USHORT (PUSHORT Port, + PUSHORT Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; insw" + : "=D" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +VOID /*STDCALL*/ +READ_PORT_BUFFER_ULONG (PULONG Port, + PULONG Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; insl" + : "=D" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +UCHAR /*STDCALL*/ +READ_PORT_UCHAR (PUCHAR Port) +{ + UCHAR Value; + + __asm__("inb %w1, %0\n\t" + : "=a" (Value) + : "d" (Port)); + SLOW_DOWN_IO; + return(Value); +} + +USHORT /*STDCALL*/ +READ_PORT_USHORT (PUSHORT Port) +{ + USHORT Value; + + __asm__("inw %w1, %0\n\t" + : "=a" (Value) + : "d" (Port)); + SLOW_DOWN_IO; + return(Value); +} + +ULONG /*STDCALL*/ +READ_PORT_ULONG (PULONG Port) +{ + ULONG Value; + + __asm__("inl %w1, %0\n\t" + : "=a" (Value) + : "d" (Port)); + SLOW_DOWN_IO; + return(Value); +} + +VOID /*STDCALL*/ +WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, + PUCHAR Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; outsb" + : "=S" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +VOID /*STDCALL*/ +WRITE_PORT_BUFFER_USHORT (PUSHORT Port, + PUSHORT Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; outsw" + : "=S" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +VOID /*STDCALL*/ +WRITE_PORT_BUFFER_ULONG (PULONG Port, + PULONG Buffer, + ULONG Count) +{ + __asm__ __volatile__ ("cld ; rep ; outsl" + : "=S" (Buffer), "=c" (Count) + : "d" (Port),"0" (Buffer),"1" (Count)); +} + +VOID /*STDCALL*/ +WRITE_PORT_UCHAR (PUCHAR Port, + UCHAR Value) +{ + __asm__("outb %0, %w1\n\t" + : + : "a" (Value), + "d" (Port)); + SLOW_DOWN_IO; +} + +VOID /*STDCALL*/ +WRITE_PORT_USHORT (PUSHORT Port, + USHORT Value) +{ + __asm__("outw %0, %w1\n\t" + : + : "a" (Value), + "d" (Port)); + SLOW_DOWN_IO; +} + +VOID /*STDCALL*/ +WRITE_PORT_ULONG (PULONG Port, + ULONG Value) +{ + __asm__("outl %0, %w1\n\t" + : + : "a" (Value), + "d" (Port)); + SLOW_DOWN_IO; +} + +/* EOF */ diff --git a/freeldr/freeldr/portio.h b/freeldr/freeldr/portio.h new file mode 100644 index 00000000000..feee621b4cd --- /dev/null +++ b/freeldr/freeldr/portio.h @@ -0,0 +1,77 @@ +/* + * FreeLoader + * Copyright (C) 2001 Brian Palmer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __PORTIO_H +#define __PORTIO_H + + +/* + * Port I/O functions + */ + +VOID +/*STDCALL*/ +READ_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count); + +VOID +/*STDCALL*/ +READ_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count); + +VOID +/*STDCALL*/ +READ_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count); + +UCHAR +/*STDCALL*/ +READ_PORT_UCHAR (PUCHAR Port); + +ULONG +/*STDCALL*/ +READ_PORT_ULONG (PULONG Port); + +USHORT +/*STDCALL*/ +READ_PORT_USHORT (PUSHORT Port); + +VOID +/*STDCALL*/ +WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count); + +VOID +/*STDCALL*/ +WRITE_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count); + +VOID +/*STDCALL*/ +WRITE_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count); + +VOID +/*STDCALL*/ +WRITE_PORT_UCHAR (PUCHAR Port, UCHAR Value); + +VOID +/*STDCALL*/ +WRITE_PORT_ULONG (PULONG Port, ULONG Value); + +VOID +/*STDCALL*/ +WRITE_PORT_USHORT (PUSHORT Port, USHORT Value); + + +#endif // defined __PORTIO_H diff --git a/freeldr/freeldr/rs232.c b/freeldr/freeldr/rs232.c new file mode 100644 index 00000000000..2c21d7eec73 --- /dev/null +++ b/freeldr/freeldr/rs232.c @@ -0,0 +1,276 @@ +/* + * FreeLoader + * Copyright (C) 2001 Brian Palmer + * Copyright (C) 2001 Eric Kohl + * Copyright (C) 2001 Emanuele Aliberti + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "freeldr.h" +#include "portio.h" + + +/* MACROS *******************************************************************/ + +#define DEFAULT_BAUD_RATE 19200 + +#define SER_RBR(x) ((x)+0) +#define SER_THR(x) ((x)+0) +#define SER_DLL(x) ((x)+0) +#define SER_IER(x) ((x)+1) +#define SER_DLM(x) ((x)+1) +#define SER_IIR(x) ((x)+2) +#define SER_LCR(x) ((x)+3) +#define SR_LCR_CS5 0x00 +#define SR_LCR_CS6 0x01 +#define SR_LCR_CS7 0x02 +#define SR_LCR_CS8 0x03 +#define SR_LCR_ST1 0x00 +#define SR_LCR_ST2 0x04 +#define SR_LCR_PNO 0x00 +#define SR_LCR_POD 0x08 +#define SR_LCR_PEV 0x18 +#define SR_LCR_PMK 0x28 +#define SR_LCR_PSP 0x38 +#define SR_LCR_BRK 0x40 +#define SR_LCR_DLAB 0x80 +#define SER_MCR(x) ((x)+4) +#define SR_MCR_DTR 0x01 +#define SR_MCR_RTS 0x02 +#define SER_LSR(x) ((x)+5) +#define SR_LSR_DR 0x01 +#define SR_LSR_TBE 0x20 +#define SER_MSR(x) ((x)+6) +#define SR_MSR_CTS 0x10 +#define SR_MSR_DSR 0x20 +#define SER_SCR(x) ((x)+7) + +/* STATIC VARIABLES *********************************************************/ + +static ULONG Rs232ComPort = 0; +static ULONG Rs232BaudRate = 0; +static PUCHAR Rs232PortBase = (PUCHAR)0; + +/* The com port must only be initialized once! */ +static BOOLEAN PortInitialized = FALSE; + +/* STATIC FUNCTIONS *********************************************************/ + +static BOOL Rs232DoesComPortExist(PUCHAR BaseAddress) +{ + BOOLEAN found; + BYTE mcr; + BYTE msr; + + found = FALSE; + + /* save Modem Control Register (MCR) */ + mcr = READ_PORT_UCHAR (SER_MCR(BaseAddress)); + + /* enable loop mode (set Bit 4 of the MCR) */ + WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10); + + /* clear all modem output bits */ + WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10); + + /* read the Modem Status Register */ + msr = READ_PORT_UCHAR (SER_MSR(BaseAddress)); + + /* + * the upper nibble of the MSR (modem output bits) must be + * equal to the lower nibble of the MCR (modem input bits) + */ + if ((msr & 0xF0) == 0x00) + { + /* set all modem output bits */ + WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x1F); + + /* read the Modem Status Register */ + msr = READ_PORT_UCHAR (SER_MSR(BaseAddress)); + + /* + * the upper nibble of the MSR (modem output bits) must be + * equal to the lower nibble of the MCR (modem input bits) + */ + if ((msr & 0xF0) == 0xF0) + found = TRUE; + } + + /* restore MCR */ + WRITE_PORT_UCHAR (SER_MCR(BaseAddress), mcr); + + return (found); +} + +/* FUNCTIONS *********************************************************/ + +BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate) +{ + ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8}; + char buffer[80]; + ULONG divisor; + BYTE lcr; + + if (PortInitialized == FALSE) + { + if (BaudRate != 0) + { + Rs232BaudRate = BaudRate; + } + else + { + Rs232BaudRate = DEFAULT_BAUD_RATE; + } + + if (ComPort == 0) + { + if (Rs232DoesComPortExist ((PUCHAR)BaseArray[2])) + { + Rs232PortBase = (PUCHAR)BaseArray[2]; + Rs232ComPort = 2; +/*#ifndef NDEBUG + sprintf (buffer, + "\nSerial port COM%ld found at 0x%lx\n", + ComPort, + (ULONG)PortBase); + HalDisplayString (buffer); +#endif*/ /* NDEBUG */ + } + else if (Rs232DoesComPortExist ((PUCHAR)BaseArray[1])) + { + Rs232PortBase = (PUCHAR)BaseArray[1]; + Rs232ComPort = 1; +/*#ifndef NDEBUG + sprintf (buffer, + "\nSerial port COM%ld found at 0x%lx\n", + ComPort, + (ULONG)PortBase); + HalDisplayString (buffer); +#endif*/ /* NDEBUG */ + } + else + { + /*sprintf (buffer, + "\nKernel Debugger: No COM port found!!!\n\n"); + HalDisplayString (buffer);*/ + return FALSE; + } + } + else + { + if (Rs232DoesComPortExist ((PUCHAR)BaseArray[ComPort])) + { + Rs232PortBase = (PUCHAR)BaseArray[ComPort]; + Rs232ComPort = ComPort; +/*#ifndef NDEBUG + sprintf (buffer, + "\nSerial port COM%ld found at 0x%lx\n", + ComPort, + (ULONG)PortBase); + HalDisplayString (buffer); +#endif*/ /* NDEBUG */ + } + else + { + /*sprintf (buffer, + "\nKernel Debugger: No serial port found!!!\n\n"); + HalDisplayString (buffer);*/ + return FALSE; + } + } + + PortInitialized = TRUE; + } + + /* + * set baud rate and data format (8N1) + */ + + /* turn on DTR and RTS */ + WRITE_PORT_UCHAR (SER_MCR(Rs232PortBase), SR_MCR_DTR | SR_MCR_RTS); + + /* set DLAB */ + lcr = READ_PORT_UCHAR (SER_LCR(Rs232PortBase)) | SR_LCR_DLAB; + WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase), lcr); + + /* set baud rate */ + divisor = 115200 / BaudRate; + WRITE_PORT_UCHAR (SER_DLL(Rs232PortBase), divisor & 0xff); + WRITE_PORT_UCHAR (SER_DLM(Rs232PortBase), (divisor >> 8) & 0xff); + + /* reset DLAB and set 8N1 format */ + WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase), + SR_LCR_CS8 | SR_LCR_ST1 | SR_LCR_PNO); + + /* read junk out of the RBR */ + lcr = READ_PORT_UCHAR (SER_RBR(Rs232PortBase)); + + /* + * set global info + */ + //KdComPortInUse = (ULONG)PortBase; + + /* + * print message to blue screen + */ + /*sprintf (buffer, + "\nKernel Debugger: COM%ld (Port 0x%lx) BaudRate %ld\n\n", + ComPort, + (ULONG)PortBase, + BaudRate); + + HalDisplayString (buffer);*/ + + return TRUE; +} + +BOOL Rs232PortGetByte(PUCHAR ByteRecieved) +{ + if (PortInitialized == FALSE) + return FALSE; + + if ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR)) + { + *ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase)); + return TRUE; + } + + return FALSE; +} + +BOOL Rs232PortPollByte(PUCHAR ByteRecieved) +{ + if (PortInitialized == FALSE) + return FALSE; + + while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR) == 0) + ; + + *ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase)); + + return TRUE; +} + +VOID Rs232PortPutByte(UCHAR ByteToSend) +{ + if (PortInitialized == FALSE) + return; + + while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_TBE) == 0) + ; + + WRITE_PORT_UCHAR (SER_THR(Rs232PortBase), ByteToSend); +} diff --git a/freeldr/freeldr/rs232.h b/freeldr/freeldr/rs232.h new file mode 100644 index 00000000000..2f716e990fe --- /dev/null +++ b/freeldr/freeldr/rs232.h @@ -0,0 +1,31 @@ +/* + * FreeLoader + * Copyright (C) 2001 Brian Palmer + * Copyright (C) 2001 Eric Kohl + * Copyright (C) 2001 Emanuele Aliberti + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __RS232_H +#define __RS232_H + +BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate); +BOOL Rs232PortGetByte(PUCHAR ByteRecieved); +BOOL Rs232PortPollByte(PUCHAR ByteRecieved); +VOID Rs232PortPutByte(UCHAR ByteToSend); + + +#endif // defined __RS232_H \ No newline at end of file