This is my Class 1
using
System;using
System.Runtime.InteropServices;using
System.IO;using
System.Text;using
System.Globalization;using
System.Threading;
namespace
yong{
public class port{
/*-- Definition of variables by Programmer --*/ /*-- Setting win32 API constants --*/ private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int CREATE_ALWAYS = 2; private const int INVALID_HANDLE_VALUE = -1; /*-- End ofSetting win32 API constants --*/ public int PortNum = 1; //-------------Delaring of Port number to 1 public int BaudRate = 9600; //---------Set BaudRate to 9600 public byte ByteSize = 8; //-----------Set ByteSize to 8 public byte Parity = 0; //-------------0-4 = no,odd,even,mark,space public byte StopBits = 0; //-----------0,1,2 = 1, 1.5, 2 public int ReadTimeout = 1500; //------Set TimeOut to 1500 private int hComm = -1; //-------------Declaring of comm port win32 file handle public bool Opened = false; //---------Declaring of Opened and set to false /*-- End of Definition of variables by Programmer --*/[StructLayout(LayoutKind.Sequential)]
public struct DCB{
/*-- taken from c struct in platform sdk --*/ public int DCBlength; //-----------Sizeof(DCB) public int BaudRate; //------------Current baud rate public uint flags; //--------------Flags public ushort wReserved; //--------Not currently used public ushort XonLim; //-----------Transmit XON threshold public ushort XoffLim; //----------Transmit XOFF threshold public byte ByteSize; //-----------Number of bits/byte, 4-8 public byte Parity; //-------------0-4 = no,odd,even,mark,space public byte StopBits; //-----------0,1,2 = 1, 1.5, 2 public char XonChar; //------------Tx and Rx XON character public char XoffChar; //-----------Tx and Rx XOFF character public char ErrorChar; //----------Error replacement character public char EofChar; //------------End of input character public char EvtChar; //------------Received event character public ushort wReserved1; //-------Reserved; Do not use}
/*-- End of StructLayout DCB --*/[StructLayout(LayoutKind.Sequential)]
private struct COMMTIMEOUTS{
public int ReadIntervalTimeout; public int ReadTotalTimeoutMultiplier; public int ReadTotalTimeoutConstant; public int WriteTotalTimeoutMultiplier; public int WriteTotalTimeoutConstant;}
/*-- End of StructLayout Commtimeout --*/[StructLayout(LayoutKind.Sequential)]
private struct OVERLAPPED{
public int Internal; public int InternalHigh; public int Offset; public int OffsetHigh; public int hEvent;}
/*-- End of StructLayout Overlapped --*/ /*-- Importing of Kernel32.dll --*/[DllImport("kernel32.dll")]
private static extern int CreateFile(
string lpFileName, //--------------File name uint dwDesiredAccess, //-----------Access mode int dwShareMode, //----------------Share mode int lpSecurityAttributes, //-------SD int dwCreationDisposition, //------How to create int dwFlagsAndAttributes, //-------File attributes int hTemplateFile //---------------Handle to template file);
[DllImport("kernel32.dll")]
private static extern bool GetCommState(
int hFile, //---------Handle to communications device ref DCB lpDCB //------Device-control block);
[DllImport("kernel32.dll")]
private static extern bool BuildCommDCB(
string lpDef, //------Device-control string ref DCB lpDCB //------Device-control block);
[DllImport("kernel32.dll")]
private static extern bool SetCommState(
int hFile, //---------Handle to communications device ref DCB lpDCB //------Device-control block);
[DllImport("kernel32.dll")]
private static extern bool GetCommTimeouts(
int hFile, //---------------------------Handle to comm device ref COMMTIMEOUTS lpCommTimeouts //------Time-out values);
[DllImport("kernel32.dll")]
private static extern bool SetCommTimeouts(
int hFile, //---------------------------Handle to comm device ref COMMTIMEOUTS lpCommTimeouts //------Time-out values);
[DllImport("kernel32.dll")]
private static extern bool ReadFile(
int hFile, //------------------------Handle to file byte[] lpBuffer, //------------------Data buffer int nNumberOfBytesToRead, //---------Number of bytes to read ref int lpNumberOfBytesRead, //------Number of bytes read ref OVERLAPPED lpOverlapped //-------Overlapped buffer);
[DllImport("kernel32.dll")]
private static extern bool WriteFile(
int hFile, //--------------------------Handle to file byte[] lpBuffer, //--------------------Data buffer int nNumberOfBytesToWrite, //----------Number of bytes to write ref int lpNumberOfBytesWritten, //-----Number of bytes written ref OVERLAPPED lpOverlapped //---------Overlapped buffer);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(
int hObject //-------Handle to object);
[DllImport("kernel32.dll")]
private static extern uint GetLastError(); /*-- End of Importing of Kernel32.dll --*//*-- Function Open --*/ /*-- To Open the connection between 2 ports via RS232 --*/ public void Open()
{
DCB dcbCommPort =
new DCB(); //------Declaring of DCBCOMMTIMEOUTS ctoCommPort =
new COMMTIMEOUTS(); //------Declaring of COMMTIMEOUTS /*-- Open Comm Port --*/hComm = CreateFile( "COM" + PortNum ,GENERIC_READ | GENERIC_WRITE,0, 0,CREATE_ALWAYS ,0,0 );
//------Open comm port by calling dll from kernel32 and get the handle /*-- Check port cannot be open --*/ if( hComm == INVALID_HANDLE_VALUE ){
throw(new ApplicationException("Comm Port Can Not Be Opened"));}
/*-- End of Check port cannot be open --*/ /*-- Set the Time out property --*/GetCommTimeouts(hComm,
ref ctoCommPort);ctoCommPort.ReadTotalTimeoutConstant = 0;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm,
ref ctoCommPort); /*-- End of Set the Time out property --*/ /*-- Setting of Baud rate, Parity, Word size and Stop bits --*/GetCommState(hComm,
ref dcbCommPort); //------Get the status of current configurationdcbCommPort.BaudRate = BaudRate;
//------Setting of baud ratedcbCommPort.flags = 0;
//------Setting of Flags //dcbCommPort.flags = 1;//------Setting of Flags /*-- Check parity more than 0 --*/ if(Parity > 0){
dcbCommPort.flags = 2;
//------Setting of Flags}
/*-- End of Check parity more than 0 --*/dcbCommPort.Parity = Parity;
//------Setting of ParitydcbCommPort.ByteSize = ByteSize;
//------Setting of ByteSizedcbCommPort.StopBits = StopBits;
//------Setting of StopBits /*-- Set property and Check for error --*/ if( !SetCommState(hComm, ref dcbCommPort) ){
throw(new ApplicationException("Comm Port Can Not Be Opened"));}
/*-- End of Set property and Check for error --*/ /*-- End of Setting of Baud rate, Parity, Word size and Stop bits --*/ //Opened = true; //------Set Opened to trueOpened =
true;}
/*-- End of Function Open --*/ /*-- Function Close --*/ /*-- Closing of Comm port --*/ public void Close(){
/*-- Check Open handle is open --*/ if (hComm != INVALID_HANDLE_VALUE){
CloseHandle(hComm);
//------Close port}
/*-- End of Check Open handle is open --*/}
/*-- End of Function Close --*//*-- Function Read --*/ /*-- For receiving of data from other parties --*/ public MemoryStream Read(int bufSize)
{
byte[] BufBytes = new byte[bufSize];MemoryStream stream =
new MemoryStream(); /*-- Check Port is Open --*/ if( hComm != INVALID_HANDLE_VALUE ){
OVERLAPPED ovlCommPort =
new OVERLAPPED(); int BytesRead = 0; while(ReadFile(hComm, BufBytes, bufSize, ref BytesRead, ref ovlCommPort) != false /* or true (based on your interop declaration) */)stream.Read(BufBytes,0,BytesRead);
}
return stream;}
/*-- Function Write --*/ /*-- For transfering of data from other parties --*/ public void Write(byte[] WriteBytes)
{
/*-- Check Port is Open --*/ if( hComm != INVALID_HANDLE_VALUE ){
OVERLAPPED ovlCommPort =
new OVERLAPPED(); //------Declaring of ovlCommport int BytesWritten = 0; //------Declaring of BytesWritten and set to 0WriteFile(hComm, WriteBytes, WriteBytes.Length,
ref BytesWritten, ref ovlCommPort); //------Transfer data to RS232}
/*-- End of Check Port is Open --*/}
/*-- End of Function Write --*/}
/*-- End of class Port --*/}
This is my class 2
using
System;using
System.Text;using
System.Threading;namespace
yong{
public class Class2{
static void Main(string[] args){
port CommPort =
new port();CommPort.Open();
while(true){
/*call write function*/
// Convert string to byte array and send
//string x = Console.ReadLine(); //byte[] byteDateLine = Encoding.ASCII.GetBytes( x.ToCharArray() ); //CommPort.Write(byteDateLine);
/*call read function*/
//Convert Byte to String string sBuffer = Encoding.ASCII.GetString());Console.WriteLine( sBuffer.ToString() );
}
}
}
Replies
Know the answer? Post it — somebody with the same question will find it here.