C++ School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

Welcome to Dream.In.Code
Become a C++ Expert!

Join 307,153 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,650 people online right now. Registration is fast and FREE... Join Now!




HANDLE and DWORD in Serial programming

 

HANDLE and DWORD in Serial programming

totally_lost

18 Sep, 2006 - 11:43 PM
Post #1

New D.I.C Head
*

Joined: 13 Sep, 2006
Posts: 9



Thanked: 1 times
My Contributions
Hi all,

I am using C++ (using the Dev C++ compiler) for serial port programming. Altough i m well versed in normal C/C++ programming,serial port communication is new to me. Thus before I start on my project what I usually do is source for some code on the net and get an idea on how to do it. I ve been trying to compile the below code but its always giving compilation errors like

"HANDLE does not name a type"
"BOOL does not name a type"
"DCB does not name a type"
"DWORD does not name a type"
"COMMTIMEOUTS does not name a type"

How should I get rid of these errors???

Is there an additional library that I should add??? My Dev C++ compiler has only the basic libraries that comes with the free online version.(Hehe... those features of Dev C++ were more than enough for me for 2/3 years)

I would greatly appreciate any help.

Heres the code

Serial.h
CODE

#define FC_DTRDSR       0x01
#define FC_RTSCTS       0x02
#define FC_XONXOFF      0x04

// ascii definitions

#define ASCII_BEL       0x07
#define ASCII_BS        0x08
#define ASCII_LF        0x0A
#define ASCII_CR        0x0D
#define ASCII_XON       0x11
#define ASCII_XOFF      0x13


HANDLE SerialInit(char*, int);

char SerialGetc(HANDLE*);

void SerialPutc(HANDLE*, char);

char* SerialGets(HANDLE*);

void SerialPuts(HANDLE*, char*);

void sleep(int);

--------------------------------------------------------------------------

Serial.cpp
CODE

#include <stdio.h>
#include <time.h>

//#define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers

#include <afxwin.h>    // serial.cpp : Defines the entry point for the console application.

//#include "stdafx.h"
#include <string.h>

#include "serial.h"

// Flow control flags

#define FC_DTRDSR       0x01
#define FC_RTSCTS       0x02
#define FC_XONXOFF      0x04

// ascii definitions

#define ASCII_BEL       0x07
#define ASCII_BS        0x08
#define ASCII_LF        0x0A
#define ASCII_CR        0x0D
#define ASCII_XON       0x11
#define ASCII_XOFF      0x13

    // variables used with the com port
    BOOL            bPortReady;
    DCB                dcb;
    COMMTIMEOUTS    CommTimeouts;
    BOOL            bWriteRC;
    BOOL            bReadRC;
    DWORD            iBytesWritten;
    DWORD            iBytesRead;

HANDLE SerialInit(char *ComPortName, int BaudRate)
{
    HANDLE hCom;
    
    hCom = CreateFile(ComPortName,
        GENERIC_READ | GENERIC_WRITE,
        0, // exclusive access
        NULL, // no security
        OPEN_EXISTING,
        0, // no overlapped I/O
        NULL); // null template

    bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes


    bPortReady = GetCommState(hCom, &dcb);
    dcb.BaudRate = BaudRate;
    dcb.ByteSize = 8;
    dcb.Parity = NOPARITY;
//    dcb.Parity = EVENPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.fAbortOnError = TRUE;

    // set XON/XOFF
    dcb.fOutX = FALSE;                    // XON/XOFF off for transmit
    dcb.fInX    = FALSE;                    // XON/XOFF off for receive
    // set RTSCTS
    dcb.fOutxCtsFlow = TRUE;                    // turn on CTS flow control
    dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;    //
    // set DSRDTR
    dcb.fOutxDsrFlow = FALSE;                    // turn on DSR flow control
    dcb.fDtrControl = DTR_CONTROL_ENABLE;    //
//    dcb.fDtrControl = DTR_CONTROL_DISABLE;    //
//    dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;    //

    bPortReady = SetCommState(hCom, &dcb);

    // Communication timeouts are optional

    bPortReady = GetCommTimeouts (hCom, &CommTimeouts);

    CommTimeouts.ReadIntervalTimeout = 5000;
    CommTimeouts.ReadTotalTimeoutConstant = 5000;
    CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
    CommTimeouts.WriteTotalTimeoutConstant = 5000;
    CommTimeouts.WriteTotalTimeoutMultiplier = 1000;

    bPortReady = SetCommTimeouts (hCom, &CommTimeouts);

    return hCom;
}

char SerialGetc(HANDLE *hCom)
{
    char rxchar;
    BOOL    bReadRC;
    static    DWORD    iBytesRead;

    bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);

    return rxchar;
}

void SerialPutc(HANDLE *hCom, char txchar)
{
    BOOL    bWriteRC;
    static    DWORD    iBytesWritten;
    
    bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);
}

char* SerialGets(HANDLE *hCom)
{
    static char rxstring[256];
    char c;
    int pos = 0;

    while(pos <= 255) {
        c = SerialGetc(hCom);
        if(c == '\r') continue;        // discard carriage return
        rxstring[pos++] = c;
        if(c == '\n') break;
    }
    rxstring[pos] = 0;

    return    rxstring;
}

void SerialPuts(HANDLE *hCom, char *txstring)
{
    BOOL    bWriteRC;
    static    DWORD    iBytesWritten;

    bWriteRC = WriteFile(*hCom, txstring, strlen(txstring), &iBytesWritten,NULL);

}

void sleep( int _wait)
{
    clock_t goal;
    goal = clock() + _wait;
    while( goal > clock() );
}


User is offlineProfile CardPM
+Quote Post



Reply to this topicStart new topic

Time is now: 11/21/09 04:49PM

Live C++ Help!

Be Social

Dream.In.Code RSS Feed Dream.In.Code LinkedIn Group Follow Us On Twitter Fan Us On Facebook

C++ Tutorials

Reference Sheets

C++ Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month