Go Back   CodingForums.com > :: Computing & Sciences > Computer Programming

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 06-11-2009, 05:05 AM   PM User | #1
infineonintern
New to the CF scene

 
Join Date: May 2009
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
infineonintern is an unknown quantity at this point
serial port to poll on request

I currently have two programs("reading" and "writing") and each program run on one PC to do textfile transferring/logging. The PCs is connected via a null modem cable. The program is run in widows and is a DOS application written in c++. The programs work but it is working in a way that i have to run the "reading" program first to let it poll before i can run the "writing" program to send the content of the text file.

How do i make it in a way that the "reading" program will only start polling upon request from the "writing" program? Meaning, when i clicked the "writing" program to send the data, it will communicate with the "reading" program to start and get ready to receive.


This is my codes for the "reading" side (Upon receiving the content from the "writing" side, it will log it into a text file called "new.txt")
Code:
#include "windows.h"
#include <stdio.h>
#include <ctype.h>
#include <io.h>
#include <conio.h>
#include <stdlib.h>

#define maxBytes 111

int main()
{
	HANDLE hSerial;
	DCB dcbSerialParams = {0};
	COMMTIMEOUTS timeouts = {0};
	DWORD dwBytesRead = 0;
	char szBuff[maxBytes] = {0};
	int firstdigit = 0;
	FILE *fp;
	int i;

	//opening the serial port
	hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

	if(hSerial==INVALID_HANDLE_VALUE)
	{
		if(GetLastError()==ERROR_FILE_NOT_FOUND)
		{
			printf("Serial port does not exist\n");
		}
		printf("Other errors\n");
	}

	//setting parameters
	dcbSerialParams.DCBlength = sizeof (dcbSerialParams);

	//GetCommState is to retrieves the current control settings for a specific communications device.
	if (!GetCommState(hSerial, &dcbSerialParams))
	{
		printf("Not GetCommState, not able to retrieves the current control\n");
	}

	dcbSerialParams.BaudRate = CBR_115200;
	dcbSerialParams.ByteSize = 8;
	dcbSerialParams.StopBits = ONESTOPBIT;
	dcbSerialParams.Parity = NOPARITY;

	//SetCommState configures a communications device according to the specifications
	//in DCB. The function reinitializes all hardware control settings but it does not
	//empty output or input queues
	if (!SetCommState(hSerial, &dcbSerialParams))
	{
		printf("Not SetCommState, cannot configures serial port according to DCB specifications set\n");
	}

	//setting timeouts
	timeouts.ReadIntervalTimeout = 40;
	timeouts.ReadTotalTimeoutConstant = 40;
	timeouts.ReadTotalTimeoutMultiplier = 40;
	timeouts.WriteTotalTimeoutConstant = 40;
	timeouts.WriteTotalTimeoutMultiplier = 40;

	//SetCommTimeouts set the time out parameters for all read and write operation
	if (!SetCommTimeouts(hSerial, &timeouts))
	{
		printf("Not SetCommTimeouts, cannot set the timeout parameters to serial port\n");
	}

	//reading data
	//ReadFile reads data from the specified file or i/o devices.
	printf("The content inside the file: \n\n");
	if(!ReadFile(hSerial, szBuff, maxBytes, &dwBytesRead, NULL))
	{
		 printf("error\n");
	}
	else
	{
		fp = fopen("c:\\new.txt", "w");
		while (ReadFile(hSerial, szBuff, maxBytes, &dwBytesRead, NULL))
		{
			
			for (i = 0; i < dwBytesRead; i++)
			{
				if (szBuff[i] == 10 || szBuff[i] == 13)
				{
					fprintf(fp, "\n");
					printf("\n");
					break;
				}
				else
				{
				fprintf(fp, "%c", szBuff[i]);
				printf("%c", szBuff[i]);	
				}
			}
						 
		}

		fclose(fp);

	CloseHandle(hSerial);

	}
}



This is my codes for thw "writing" side (The program will read the content inside a textfile called "helloworld.txt" and write it line by line to the serial port)
Code:
#include "windows.h"
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <stdlib.h>

#define maxBytes 111
#define MAX 256

int main()
{
	HANDLE hSerial;
	DCB dcbSerialParams = {0};
	COMMTIMEOUTS timeouts = {0};
	DWORD dwBytesWrite = 0;
	int i;
	char szBuff[maxBytes];
	char stemp[MAX];
	FILE *fp;


	//opening the serial port
	hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

	if(hSerial==INVALID_HANDLE_VALUE)
	{
		if(GetLastError()==ERROR_FILE_NOT_FOUND)
		{
			printf("Serial port does not exist\n");
		}
		printf("Other errors\n");
	}

	//setting parameters
	dcbSerialParams.DCBlength = sizeof (dcbSerialParams);

	//GetCommState is to retrieves the current control settings for a specific communications device.
	if (!GetCommState(hSerial, &dcbSerialParams))
	{
		printf("Not GetCommState, not able to retrieves the current control.\n");
	}

	dcbSerialParams.BaudRate = CBR_115200;
	dcbSerialParams.ByteSize = 8;
	dcbSerialParams.StopBits = ONESTOPBIT;
	dcbSerialParams.Parity = NOPARITY;

	//SetCommState configures a communications device according to the specifications
	//in DCB. The function reinitializes all hardware control settings but it does not
	//empty output or input queues
	if (!SetCommState(hSerial, &dcbSerialParams))
	{
		printf("Not SetCommState, cannot configures serial port according to DCB specifications set.\n");
	}

	//setting timeouts
	timeouts.ReadIntervalTimeout = 40;
	timeouts.ReadTotalTimeoutConstant = 40;
	timeouts.ReadTotalTimeoutMultiplier = 40;
	timeouts.WriteTotalTimeoutConstant = 40;
	timeouts.WriteTotalTimeoutMultiplier = 40;

	//SetCommTimeouts set the time out parameters for all reand and write operation
	if (!SetCommTimeouts(hSerial, &timeouts))
	{
		printf("Not SetCommTimeouts, cannot set the timeout parameters to serial port.\n");
	}

	//Writting data
	//WriteFile write data from the specified file or i/o devices.
	printf("The content inside the file: \n\n");
	fp = fopen("c:\\helloworld.txt", "r");
	while ((fgets(stemp, MAX, fp)) != NULL)
	{
		i = sprintf(szBuff, "%s", stemp);
		if (!WriteFile(hSerial, szBuff, maxBytes, &dwBytesWrite, NULL))
		{
			printf("Serial port cannot write file.\n");
		}
		else
		{
				printf("%s", szBuff);
		}
	}
	fclose(fp);
	CloseHandle(hSerial);
}
I know that this is just a small program but how do i make the "reading" program poll only when the "writing" program is trying to send data?

Someone please help, new in serial port.

Last edited by infineonintern; 06-11-2009 at 06:30 AM..
infineonintern is offline   Reply With Quote
Old 06-11-2009, 08:33 AM   PM User | #2
Spookster
Supreme Overlord


 
Spookster's Avatar
 
Join Date: May 2002
Location: Marion, IA USA
Posts: 6,220
Thanks: 4
Thanked 80 Times in 79 Posts
Spookster will become famous soon enough
If these are to both run on the same PC then why would you go through the effort of trying to create serial connections? Shared memory would be way easier and faster. For that matter even a simple TCP or UDP connection would be faster and easier.
__________________
Spookster
CodingForums Supreme Overlord
All Hail Spookster
Who gave you that Ugging infraction? Yeah that's right it was me!
Spookster is offline   Reply With Quote
Old 06-11-2009, 09:07 AM   PM User | #3
infineonintern
New to the CF scene

 
Join Date: May 2009
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
infineonintern is an unknown quantity at this point
Quote:
Originally Posted by Spookster View Post
If these are to both run on the same PC then why would you go through the effort of trying to create serial connections?
They run on different PCs. Total there is two PCs.
infineonintern is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 07:24 PM.


Advertisement
Log in to turn off these ads.