#include #include "SerialPort.h" #include "messageData.h" //******************************************************************* // CONSTRUCTOR FUNCTION //******************************************************************* SerialPort::SerialPort() { } //******************************************************************* // DESTRUCTOR FUNCTION //******************************************************************* SerialPort::~SerialPort() { if( hcomm ) { CloseHandle(hcomm); } } //******************************************************************* // INIT FUNCTION //******************************************************************* bool SerialPort::init() { //serial activities to monitor DWORD dwStoredFlags = EV_RXCHAR; hcomm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, //non-overlaping //FILE_FLAG_OVERLAPPED,//overlapping 0); //checks to see if port was created if (hcomm == INVALID_HANDLE_VALUE) { return(1); } //getting current dcb structure values if (!GetCommState(hcomm, &dcb)) { return (1); } //changing dcb structure values to match transmitter dcb.BaudRate = CBR_1200; // set the baud rate dcb.ByteSize = 8; // data size, xmit, and rcv dcb.Parity = NOPARITY; // no parity bit dcb.StopBits = ONESTOPBIT; // one stop bit //setting dcb structure values if (!SetCommState(hcomm, &dcb)) { return (1); } //setting what to monitor via serial port if (!SetCommMask(hcomm, dwStoredFlags)) { return(1); } return(0); } /////////////////////////////// //overlapped monitor ///////////////////////////// /* //******************************************************************* // MONITOR FUNCTION //******************************************************************* char SerialPort::Monitor(bool situation) { DWORD nextSize = sizeof(char); DWORD NumBytesRead; DWORD dwCommEvent; DWORD overlapChecker; BOOL fWaitingOnStat = FALSE; OVERLAPPED osStatus = {0}; char toDisptxt[1]; int checker = 0; osStatus.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); while(1) { if (!fWaitingOnStat) { if(!WaitCommEvent(hcomm, &dwCommEvent, &osStatus)) { fWaitingOnStat = true; } else { checker = ReadFile(hcomm, &toDisptxt, nextSize, &NumBytesRead, NULL); if( checker == 0 ) { return('X'); } CloseHandle(osStatus.hEvent); return(toDisptxt[0]); } } if (fWaitingOnStat) { overlapChecker = WaitForSingleObject(osStatus.hEvent, STATUS_CHECK_TIMEOUT); } switch(overlapChecker) { //char read from serial port case WAIT_OBJECT_0: checker = ReadFile(hcomm, &toDisptxt, nextSize, &NumBytesRead, NULL); if( checker == 0 ) { return('X'); } CloseHandle(osStatus.hEvent); return(toDisptxt[0]); //no character read, just timed out case WAIT_TIMEOUT: if(situation) { break; } else { CloseHandle(osStatus.hEvent); return('X'); } //Error has occurred, exit function default: CloseHandle(osStatus.hEvent); return('X'); } } } */ /////////////////////////////// //non-overlap monitor ///////////////////////////// //***************************************************************************** //Function: SerialMonitor //Parameters: HANDLE hcomm //Purpose: Monitors the serial port for any activities, if detects activity, // sends an email, if email is sent it returns a char 'x' to the // serial port. //Return: char received //***************************************************************************** char SerialPort::SerialMonitor() { DWORD nextSize = sizeof(char); DWORD NumBytesRead; DWORD dwCommEvent; char toDisptxt[1]; int checker = 0; if(WaitCommEvent(hcomm, &dwCommEvent, NULL)) { //reads from comm port checker = ReadFile(hcomm, toDisptxt, nextSize, &NumBytesRead, NULL); //cout << "here" << endl; if( checker == 0 ) { //cout << "Received Char: " << toDisptxt[0] << endl << endl; return('X'); } else { //cout << "Received Char: " << toDisptxt[0] << endl << endl; return(toDisptxt[0]); } } return('X'); } //******************************************************************* // SENDCHAR FUNCTION //******************************************************************* void SerialPort::SendChar(char toSend) { TransmitCommChar( hcomm, toSend ); } //******************************************************************* // SENDMESSAGE FUNCTION //******************************************************************* void SerialPort::SendMessage(int number, char *message, int length, bool situation) { int i; //sending start bit SendChar('M'); Sleep(30); //sending email number SendChar(number); //sending email message for(i=0; i