diff -r 9d7ce34704c8 -r b564fb5fd78b serialserver/c32serialserver/Test/te_C32Performance/USB PC Side Code/SerialConnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serialserver/c32serialserver/Test/te_C32Performance/USB PC Side Code/SerialConnection.cpp Wed Sep 01 12:35:48 2010 +0100 @@ -0,0 +1,207 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// SerialConnection.cpp: implementation of the CSerialConnection class. +// This class opens a virtual comm port to perform read/write operation between PC and hardware +// through USB cable. +// This application is used to receive data from the H4 board.An USB driver should be installed on the PC +// which maps the USB port to the virtual com port. +// The data received from the hardware is displayed to debug output window. +// +// + +/** + @file + @internalComponent. +*/ + +#include "stdafx.h" +#include "SerialPort.h" +#include "SerialConnection.h" +#include "SerialPortDlg.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + +//set the baud rate +#define BAUD_RATE 115200 +//set the buffer size to receive data +#define BUFFER_SIZE 64 + +// +// Construction/Destruction +// +static HANDLE hPort; +CSerialConnection::CSerialConnection() +{ +} +CSerialConnection::~CSerialConnection() //destructor +{ + if( CloseHandle(hPort)>0 ) + OutputDebugString ("Com port is closed successfully"); +} +BOOL CSerialConnection::PortInitialize(CString strPort) +{ + + DCB PortDCB; + COMMTIMEOUTS CommTimeouts; + + //open the serial port. + hPort = CreateFile ( strPort, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + // If it fails to open the port, return FALSE. + if ( hPort == INVALID_HANDLE_VALUE ) + { + AfxMessageBox("Unable to open port"); + return FALSE; + } + + PortDCB.DCBlength = sizeof (DCB); + + //Get the default port setting information. + if (!GetCommState (hPort, &PortDCB)) + { + AfxMessageBox("Unable to retrieve default port setting information"); + return FALSE; + } + + //Change the DCB structure settings. + + PortDCB.BaudRate = BAUD_RATE; // Current baud + PortDCB.fBinary = FALSE; // Binary mode; no EOF check + PortDCB.fParity = FALSE; // Enable parity checking. + PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control + PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control + PortDCB.fDtrControl = DTR_CONTROL_ENABLE; + // DTR flow control type + PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity + PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx + PortDCB.fOutX = FALSE; // No XON/XOFF out flow control + PortDCB.fInX = FALSE; // No XON/XOFF in flow control + PortDCB.fErrorChar = FALSE; // Disable error replacement. + PortDCB.fNull = FALSE; // Disable null stripping. + PortDCB.fRtsControl = RTS_CONTROL_ENABLE; + // RTS flow control + PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on + // error. + PortDCB.ByteSize = 8; // Number of bits/bytes, 4-8 + PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space + PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2 + + // Configure the port according to the specifications of the DCB + // structure. + + if (!SetCommState (hPort, &PortDCB)) + { + // could not create the read thread. + AfxMessageBox("Unable to configure the serial port"); + return FALSE; + } + + // retrieve the time-out parameters for all read and write operations + // on the port. + if (!GetCommTimeouts (hPort, &CommTimeouts)) + { + AfxMessageBox("Unable to retrieve the time-out parameters"); + return FALSE; + } + + // Change the COMMTIMEOUTS structure settings. + CommTimeouts.ReadIntervalTimeout = MAXDWORD; + CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutConstant = 0; + CommTimeouts.WriteTotalTimeoutMultiplier = 10; + CommTimeouts.WriteTotalTimeoutConstant = 1000; + + // Set the time-out parameters for all read and write operations + // on the port. + if (!SetCommTimeouts (hPort, &CommTimeouts)) + { + AfxMessageBox("Unable to set the time-out parameters"); + return FALSE; + } + + LPVOID pPARAM=NULL; + AfxBeginThread(PortReadThread,pPARAM); + + return TRUE; +} + +UINT CSerialConnection::PortReadThread(LPVOID lpvoid) +{ + int loopSize = 0; + + BYTE readByte[BUFFER_SIZE]; + BYTE writeByte = 255; + + DWORD dwCommModemStatus; + DWORD dwBytesTransferred; + DWORD dwNumBytesWritten; + + CString str_LoopSize; + + if (hPort != INVALID_HANDLE_VALUE) + { + /* + send some data to the harware.This is used for handshaking with the hardware. + The USB Test code running on hardware will be on wait state until it receives any + data from the PC + */ + + WriteFile (hPort, &writeByte,1,&dwNumBytesWritten,NULL); + //when a character appears it unblocks waitcommevent + SetCommMask (hPort,EV_RXCHAR); + //waits until a character appears at port + WaitCommEvent (hPort, &dwCommModemStatus, 0); + + while(1) + { + if (EV_RXCHAR) + { + SetCommMask (hPort, EV_RXCHAR ); + //read data send from the hardware + ReadFile (hPort, &readByte, BUFFER_SIZE, &dwBytesTransferred, 0); + + if (dwBytesTransferred >= 1) + { + CString str_PortData((LPCSTR)&readByte,sizeof(readByte)); + str_LoopSize.Format("%d",loopSize); + loopSize++; + //output the data to debug output window + OutputDebugString (str_LoopSize + "Data send by USB = "+ str_PortData + "\n"); + } + } + } + } + + return 0; +} + + + + + + + + + +