connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/RealSerialComm.cpp
author stechong
Wed, 20 Oct 2010 11:19:31 -0500
changeset 2165 2a7b5eccb0bc
parent 1481 c7f22cc57d44
permissions -rw-r--r--
Keeping PlatSim internal only.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     1
/*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     3
* All rights reserved.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     4
* This component and the accompanying materials are made available
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     6
* which accompanies this distribution, and is available
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     8
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
     9
* Initial Contributors:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    11
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    12
* Contributors:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    13
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    14
* Description: 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    15
*
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    16
*/
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    17
// RealSerialComm.cpp: implementation of the CRealSerialComm class.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    18
//
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    19
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    20
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    21
#include "stdafx.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    22
#include "RealSerialComm.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    23
//#include "pn_const.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    24
//#include "OSTConstants.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    25
#include "Connection.h"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    26
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    27
#ifdef _DEBUG
366
b054461d2f85 fix bug 9433 - also some logging changes
chpeckha
parents: 60
diff changeset
    28
//static char sLogMsg[3000];
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    29
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    30
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    31
// Construction/Destruction
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    32
//////////////////////////////////////////////////////////////////////
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    33
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    34
#define LogErrorText(err) { if (err > 0) GetErrorText(err); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    35
#define LogErrorText2(err) { if (err > 0) GetErrorText2(err); }
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    36
#else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    37
#define LogErrorText(err) {}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    38
#define LogErrorText2(err) {}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    39
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    40
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    41
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    42
#define DUMPCOMSTAT(x) DumpComStat(x)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    43
#define DUMPCOMSTATP(x) DumpComStatP(x)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    44
#else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    45
#define DUMPCOMSTAT(x)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    46
#define DUMPCOMSTATP(x)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    47
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    48
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    49
CRealSerialComm::CRealSerialComm()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    50
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    51
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    52
	if (gDoLogging)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    53
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    54
		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    55
		fprintf(f, "CRealSerialComm::CRealSerialComm() (default constructor)\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    56
		fclose(f);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    57
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    58
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    59
	m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    60
	m_serialPortName[0] = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    61
	m_pBuffer = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    62
	m_ProcDebugLog = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    63
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    64
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    65
CRealSerialComm::CRealSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    66
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    67
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    68
	if (gDoLogging)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    69
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    70
		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    71
		fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    72
		fclose(f);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    73
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    74
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    75
	m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    76
	m_serialPortName[0] = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    77
	m_pBuffer = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    78
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    79
	m_connId = connectionId;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    80
	m_Protocol = protocol;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    81
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    82
	m_ConnectSettings = new ConnectData();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    83
	memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    84
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    85
#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    86
	if (gDoLogging)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    87
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    88
		m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    89
		m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    90
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    91
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    92
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    93
CRealSerialComm::~CRealSerialComm()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    94
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    95
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    96
	if (gDoLogging)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    97
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    98
		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
    99
		fprintf(f, "CRealSerialComm::~CRealSerialComm()\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   100
		fclose(f);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   101
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   102
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   103
	if (m_hSerial != INVALID_HANDLE_VALUE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   104
		::CloseHandle(m_hSerial);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   105
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   106
	if (m_pBuffer)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   107
		delete[] m_pBuffer;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   108
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   109
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   110
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   111
long CRealSerialComm::OpenPort()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   112
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   113
	COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   114
	COMMLOGS("CRealSerialComm::OpenPort\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   115
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   116
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   117
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   118
	char* comPort = m_ConnectSettings->realSerialSettings.comPort;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   119
	DWORD baudRate = m_ConnectSettings->realSerialSettings.baudRate;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   120
	DWORD dataBits = m_ConnectSettings->realSerialSettings.dataBits;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   121
	eParity parity = m_ConnectSettings->realSerialSettings.parity;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   122
	eStopBits stopBits = m_ConnectSettings->realSerialSettings.stopBits;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   123
	eFlowControl flow = m_ConnectSettings->realSerialSettings.flowControl;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   124
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   125
	COMMLOGA2("CRealSerialComm::OpenPort comPort=%s baudRate=%d\n", comPort, baudRate);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   126
	COMMLOGA2("CRealSerialComm::OpenPort dataBits=%d parity=%d\n", dataBits, parity);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   127
	COMMLOGA2("CRealSerialComm::OpenPort stopBits=%d flow=%d\n", stopBits, flow);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   128
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   129
	// fill in DCB
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   130
	m_dcb.DCBlength = sizeof(DCB);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   131
	m_dcb.BaudRate = baudRate;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   132
	m_dcb.ByteSize = dataBits;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   133
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   134
	// parity
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   135
	switch(parity)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   136
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   137
	default:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   138
	case eParityNone:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   139
		m_dcb.fParity = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   140
		m_dcb.Parity = NOPARITY;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   141
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   142
	case eParityEven:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   143
		m_dcb.fParity = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   144
		m_dcb.Parity = EVENPARITY;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   145
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   146
	case eParityOdd:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   147
		m_dcb.fParity = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   148
		m_dcb.Parity = ODDPARITY;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   149
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   150
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   151
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   152
	// stop bits
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   153
	switch(stopBits)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   154
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   155
	default:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   156
	case eStopBits1:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   157
		m_dcb.StopBits = ONESTOPBIT;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   158
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   159
	case eStopBits15:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   160
		m_dcb.StopBits = ONE5STOPBITS;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   161
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   162
	case eStopBits2:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   163
		m_dcb.StopBits = TWOSTOPBITS;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   164
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   165
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   166
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   167
	// flow control
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   168
	switch(flow)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   169
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   170
	default:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   171
	case eFlowControlNone:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   172
		m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   173
		m_dcb.fOutxCtsFlow = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   174
		m_dcb.fInX = m_dcb.fOutX = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   175
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   176
	case eFlowControlHW:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   177
		m_dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   178
		m_dcb.fOutxCtsFlow = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   179
		m_dcb.fInX = m_dcb.fOutX = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   180
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   181
	case eFlowControlSW:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   182
		m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   183
		m_dcb.fOutxCtsFlow = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   184
		m_dcb.fInX = m_dcb.fOutX = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   185
		m_dcb.XonChar = '\021';	// Ctrl-Q;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   186
		m_dcb.XoffChar = '\023';	// Ctrl-S;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   187
		m_dcb.XonLim = 100;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   188
		m_dcb.XoffLim = 100;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   189
		break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   190
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   191
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   192
	// other things in DCB
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   193
	m_dcb.fDtrControl = DTR_CONTROL_ENABLE;	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   194
	m_dcb.fDsrSensitivity = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   195
	m_dcb.fBinary = TRUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   196
	m_dcb.fNull = FALSE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   197
	m_dcb.fAbortOnError = TRUE;		// reads & writes will terminate with errors if one occurs
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   198
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   199
	// translate serial port
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   200
	char p[20]; char* pp = p;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   201
	strncpy(p, comPort, 20);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   202
	int len = (int)strlen(p);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   203
	for (int i = 0; i < len; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   204
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   205
		p[i] = toupper(p[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   206
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   207
	if (strncmp(p, "COM", 3) == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   208
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   209
		pp+=3;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   210
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   211
	int val = atoi((const char*)pp);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   212
	if (val == INT_MIN || val == INT_MAX)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   213
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   214
		err = TCAPI_ERR_INVALID_MEDIA_DATA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   215
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   216
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   217
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   218
		// must translate for CreatFile
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   219
		_snprintf(m_serialPortName, MAX_COMPORT_SIZE, "\\\\.\\COM%d", val);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   220
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   221
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   222
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   223
	if (err == TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   224
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   225
		m_hSerial = CreateFile(m_serialPortName,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   226
			GENERIC_READ|GENERIC_WRITE,	// dwDesiredAccess = read & write
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   227
			0,							// dwSharedMode = 0 ==> device not shared
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   228
			NULL,						// lpSecurityAttributes = NULL ==> not inheritable
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   229
			OPEN_EXISTING,				// dwCreationDisposition ==> required for devices
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   230
			0,							// dwFlagsAndAttributes ==> no special flags or attributes (not overlapped)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   231
			NULL );						// hTemplateFile = NULL ==> required for devices
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   232
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   233
		if (m_hSerial != INVALID_HANDLE_VALUE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   234
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   235
			// TODO: this is really not needed as we're not doing overlapped IO
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   236
			//   and we're not creating an event nor waiting on that event
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   237
			if (!SetCommMask(m_hSerial, EV_RXCHAR))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   238
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   239
				::CloseHandle(m_hSerial);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   240
				m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   241
				m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   242
				err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   243
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   244
			else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   245
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   246
				// no error from SetCommMask
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   247
				if (!SetupComm(m_hSerial,MAX_MESSAGE_LENGTH,MAX_SERIAL_MESSAGE_BUFFER_LENGTH))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   248
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   249
					CloseHandle(m_hSerial);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   250
					m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   251
					m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   252
					err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   253
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   254
				else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   255
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   256
					// no error from SetupComm
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   257
					// Get rid of any junk that might be sitting there.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   258
					PurgeComm( m_hSerial, PURGE_TXABORT | PURGE_RXABORT |
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   259
										  PURGE_TXCLEAR | PURGE_RXCLEAR );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   260
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   261
					// Using these settings, the ReadFile command will return immediately
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   262
					// rather than waiting for a timeout.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   263
					COMMTIMEOUTS lclCommTimeOuts;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   264
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   265
					lclCommTimeOuts.ReadIntervalTimeout			= MAXDWORD;	// we don't care about time between chars
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   266
					lclCommTimeOuts.ReadTotalTimeoutMultiplier	= 100;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   267
					lclCommTimeOuts.ReadTotalTimeoutConstant	= 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   268
					lclCommTimeOuts.WriteTotalTimeoutMultiplier	= 100;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   269
					lclCommTimeOuts.WriteTotalTimeoutConstant	= 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   270
					
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   271
					if (!SetCommTimeouts( m_hSerial, &lclCommTimeOuts ))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   272
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   273
						CloseHandle(m_hSerial); 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   274
						m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   275
						m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   276
						err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   277
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   278
					else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   279
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   280
						// no error from SetCommTimeouts
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   281
						err = SetDCB();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   282
						if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   283
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   284
							CloseHandle(m_hSerial); 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   285
							m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   286
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   287
						else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   288
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   289
							// no error from SetDCB 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   290
							err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   291
							m_numberBytes = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   292
							m_lastCommError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   293
							m_isConnected = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   294
							m_pBuffer = new BYTE[MAX_SERIAL_MESSAGE_BUFFER_LENGTH];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   295
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   296
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   297
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   298
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   299
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   300
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   301
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   302
			// error from CreateFile
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   303
			// couldn't open serial port
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   304
			m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   305
			err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   306
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   307
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   308
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   309
	COMMLOGA2("CRealSerialComm::OpenPort err=%d osError=%d\n", err, m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   310
	LogErrorText(m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   311
//	if (m_lastCommError > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   312
//		LogErrorText(m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   313
	COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   314
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   315
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   316
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   317
long CRealSerialComm::SetDCB()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   318
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   319
	// assumes serial port is open
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   320
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   321
	if (m_hSerial == INVALID_HANDLE_VALUE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   322
		return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   323
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   324
	// setup DCB
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   325
	DCB lcldcb;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   326
	lcldcb.DCBlength = sizeof(DCB);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   327
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   328
	if (!GetCommState( m_hSerial, &lcldcb ))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   329
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   330
		m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   331
		err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   332
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   333
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   334
//	LogDCB(pInfo);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   335
	// copy only the ones that Connect() set initially
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   336
	lcldcb.BaudRate = m_dcb.BaudRate;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   337
	lcldcb.ByteSize = m_dcb.ByteSize;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   338
	lcldcb.Parity = m_dcb.Parity;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   339
	lcldcb.StopBits = m_dcb.StopBits;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   340
	lcldcb.fRtsControl = m_dcb.fRtsControl;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   341
	lcldcb.fOutxCtsFlow = m_dcb.fOutxCtsFlow;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   342
	lcldcb.fDtrControl = m_dcb.fDtrControl;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   343
	lcldcb.fDsrSensitivity = m_dcb.fDsrSensitivity;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   344
	lcldcb.fInX = m_dcb.fInX;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   345
	lcldcb.fOutX = m_dcb.fOutX;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   346
	lcldcb.XonChar = m_dcb.XonChar;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   347
	lcldcb.XoffChar = m_dcb.XoffChar;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   348
	lcldcb.XonLim = m_dcb.XonLim;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   349
	lcldcb.XoffLim = m_dcb.XoffLim;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   350
	lcldcb.fBinary = m_dcb.fBinary;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   351
	lcldcb.fParity = m_dcb.fParity;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   352
	lcldcb.fNull = m_dcb.fNull;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   353
	lcldcb.fAbortOnError = m_dcb.fAbortOnError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   354
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   355
	// DCB has been changed
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   356
	// If setting the port went well then we are connected properly!
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   357
	if (!SetCommState( m_hSerial, &lcldcb))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   358
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   359
		m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   360
		err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   361
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   362
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   363
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   364
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   365
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   366
long CRealSerialComm::ClosePort()
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   367
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   368
	COMMLOGOPEN();
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   369
	COMMLOGA1("CRealSerialComm::ClosePort connected=%d\n", IsConnected());
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   370
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   371
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   372
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   373
	if (!IsConnected()) 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   374
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   375
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   376
		err = TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   377
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   378
	else if (m_hSerial != INVALID_HANDLE_VALUE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   379
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   380
		// disable event notification 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   381
		SetCommMask( m_hSerial, 0 );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   382
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   383
		// drop DTR
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   384
		EscapeCommFunction( m_hSerial, CLRDTR );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   385
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   386
		// purge any outstanding reads/writes and close device handle
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   387
		PurgeComm(	m_hSerial, 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   388
					PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   389
		
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   390
		CloseHandle( m_hSerial );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   391
		m_hSerial = INVALID_HANDLE_VALUE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   392
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   393
		if (m_pBuffer)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   394
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   395
			delete[] m_pBuffer;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   396
			m_pBuffer = NULL;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   397
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   398
		m_isConnected = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   399
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   400
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   401
	COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   402
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   403
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   404
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   405
void CRealSerialComm::DeleteMsg(DWORD inMsgLength)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   406
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   407
	if (!IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   408
		return;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   409
	// inMsgLength includes header
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   410
	// delete from beginning of buffer
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   411
	if (inMsgLength == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   412
		return;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   413
	if (m_numberBytes > 0 && m_numberBytes >= inMsgLength)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   414
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   415
		size_t moveLen = m_numberBytes - inMsgLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   416
		if (moveLen > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   417
			memcpy(&m_pBuffer[0], &m_pBuffer[inMsgLength], moveLen);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   418
		m_numberBytes -= inMsgLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   419
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   420
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   421
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   422
long CRealSerialComm::SendDataToPort(DWORD inSize, const void *inData)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   423
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   424
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   425
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   426
	DWORD lclNumBytes=0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   427
	COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   428
	COMMLOGS("CRealSerialComm::SendDataToPort\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   429
	COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   430
	if (!IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   431
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   432
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   433
		COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   434
		COMMLOGS("CRealSerialComm::SendDataToPort notConnected\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   435
		COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   436
		return TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   437
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   438
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   439
	if (WriteFile(m_hSerial, inData, inSize, &lclNumBytes, NULL))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   440
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   441
		// we were successful, but did we send all data? (i.e., a timeout occurred)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   442
		// we are not doing overlapped I/O so if not all data went, then we timed out
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   443
		//   and there was some kind of error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   444
		if (lclNumBytes != inSize)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   445
		{
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   446
			m_lastCommError = 0;
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   447
			COMMLOGOPEN();
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   448
			COMMLOGA3("CRealSerialComm::SendDataToPort WriteFile not all bytes sent: lclNumBytes=%d inSize=%d err=%d\n", lclNumBytes, inSize, m_lastCommError);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   449
			COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   450
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   451
			COMSTAT lclComStat;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   452
			DWORD lclErrorFlags = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   453
			if (!ClearCommError(m_hSerial, &lclErrorFlags, &lclComStat))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   454
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   455
				// clear comm error returned error (this doesn't normally happen if the handle is valid and port is still open)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   456
				m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   457
				err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   458
				COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   459
				COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError failed=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   460
				COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   461
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   462
			else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   463
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   464
				// clear comm error returned OK
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   465
				// check error flags
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   466
				if (lclErrorFlags)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   467
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   468
					// there really was an error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   469
					err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   470
					COMMLOGOPEN();
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   471
					COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=%d\n", lclErrorFlags);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   472
					COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   473
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   474
				else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   475
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   476
					// No OS error returned, but WriteFile failed to write out all bytes
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   477
					//  therefore, since we are not doing overlapped I/O, this is an error.
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   478
//					DUMPCOMSTAT(&lclComStat);
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   479
					BOOL flush = FlushFileBuffers(m_hSerial); // flush transmit buffer
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   480
//					ClearCommError(m_hSerial, &lclErrorFlags, &lclComStat);
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   481
//					if (WriteFile(m_hSerial, inData, inSize, &lclNumBytes, NULL))
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   482
//					{
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   483
//						COMMLOGOPEN();
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   484
//						COMMLOGA1("CRealSerialComm::SendDataToPort WriteFile#2 succeeded lclNumBytes=%d\n", lclNumBytes);
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   485
//						COMMLOGCLOSE();
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   486
//					}
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   487
					err = TCAPI_ERR_COMM_ERROR_DEVICE_NOT_READING;
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   488
					COMMLOGOPEN();
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   489
					COMMLOGA2("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=0 err=%d flush=%d\n", m_lastCommError, flush);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   490
					COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   491
//					DUMPCOMSTAT(&lclComStat);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   492
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   493
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   494
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   495
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   496
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   497
			// we sent all the data we requested
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   498
			err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   499
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   500
			COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   501
			COMMLOGS("CRealSerialComm::SendDataToPort WriteFile successful\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   502
			BYTE* ptr = (BYTE*)inData;
424
9f38f9ad4716 fix bug 9582
Chad Peckham <chad.peckham@nokia.com>
parents: 366
diff changeset
   503
			long numBytes = (inSize > 80) ? 80 : inSize;
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   504
			char msg[300];
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   505
			sprintf(msg, "CRealSerialComm::SendDataToPort = ");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   506
			for (int i = 0; i < numBytes; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   507
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   508
				sprintf(msg, "%s %02.2x", msg, ptr[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   509
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   510
			sprintf(msg, "%s\n", msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   511
			COMMLOGS(msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   512
			COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   513
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   514
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   515
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   516
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   517
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   518
		// write failed
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   519
		m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   520
		err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   521
		COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   522
		COMMLOGA1("CRealSerialComm::SendDataToPort WriteFile failed = %d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   523
		COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   524
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   525
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   526
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   527
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   528
long CRealSerialComm::PollPort(DWORD &outSize)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   529
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   530
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   531
	outSize = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   532
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   533
	COMSTAT lclComStat;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   534
	DWORD lclErrorFlags=0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   535
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   536
	if (!IsConnected() || m_hSerial == INVALID_HANDLE_VALUE)
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   537
		return TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   538
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   539
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   540
//	Sleep(1);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   541
	if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   542
	{
1481
c7f22cc57d44 Commit some changes from Ed, also for USB, return different error for h/w comm error as opposed to where there is no error reported by windows, but the bytes did not get sent to the device (not responding)
Chad Peckham <chad.peckham@nokia.com>
parents: 1473
diff changeset
   543
		if (!IsConnected() || m_hSerial == INVALID_HANDLE_VALUE)
1473
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   544
			return TCAPI_ERR_MEDIA_NOT_OPEN;
6c45b7c9cdac Close ports when there is a fatal error allowing OS to free all handles to it. Do not report OSErrors on sending messages as these are confusing.
Chad Peckham <chad.peckham@nokia.com>
parents: 477
diff changeset
   545
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   546
		m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   547
		err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   548
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   549
		PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   550
		PROCLOGA1("CRealSerialComm::PollPort ClearCommError failed=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   551
//		if (m_lastCommError > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   552
		LogErrorText2(m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   553
		PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   554
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   555
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   556
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   557
		// ClearCommError succeeded
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   558
		if (lclErrorFlags)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   559
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   560
			m_lastCommError = lclErrorFlags;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   561
			err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   562
			PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   563
			PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   564
			PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   565
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   566
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   567
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   568
//			DUMPCOMSTATP(&lclComStat);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   569
//			PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   570
//			PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded cbInQue=%d\n", lclComStat.cbInQue);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   571
//			PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   572
			m_lastCommError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   573
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   574
		outSize = lclComStat.cbInQue;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   575
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   576
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   577
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   578
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   579
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   580
void CRealSerialComm::DumpComStat(COMSTAT* stat)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   581
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   582
	COMMLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   583
	COMMLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   584
	COMMLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof     =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   585
	COMMLOGA3(" comstat fTxim    =%d cbInQue  =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   586
	COMMLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   587
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   588
void CRealSerialComm::DumpComStatP(COMSTAT* stat)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   589
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   590
	PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   591
	PROCLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   592
	PROCLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof     =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   593
	PROCLOGA3(" comstat fTxim    =%d cbInQue  =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   594
	PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   595
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   596
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   597
long CRealSerialComm::ReadPort(DWORD inSize, void *outData, DWORD &outSize)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   598
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   599
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   600
	outSize = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   601
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   602
	COMSTAT lclComStat;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   603
	DWORD lclErrorFlags=0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   604
	DWORD lclLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   605
	if (!IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   606
		return TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   607
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   608
	// clear out any errors in the channel and get the length of the buffer
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   609
	if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   610
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   611
		// ClearCommError failed
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   612
		m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   613
		err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   614
		PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   615
		PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   616
		PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   617
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   618
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   619
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   620
		if (lclErrorFlags)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   621
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   622
			m_lastCommError = lclErrorFlags;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   623
			err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   624
			PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   625
			PROCLOGA1("CRealSerialComm::ReadPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   626
			PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   627
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   628
		else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   629
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   630
			m_lastCommError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   631
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   632
			lclLength = min( inSize, lclComStat.cbInQue );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   633
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   634
			if (lclLength > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   635
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   636
				// Read lclLength number of bytes into outData.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   637
				if (!ReadFile(m_hSerial,outData,lclLength,&outSize,NULL))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   638
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   639
					m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   640
					err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   641
					PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   642
					PROCLOGA1("CRealSerialComm::ReadPort ReadFile failed = %d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   643
					PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   644
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   645
				else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   646
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   647
					// ReadFile returned successful, check to see all our bytes came in
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   648
					//  If a timeout happened - we may not get all the data
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   649
					if (lclLength != outSize)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   650
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   651
						lclErrorFlags = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   652
						if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   653
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   654
							// ClearCommError failed
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   655
							m_lastCommError = GetLastError();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   656
							err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   657
							PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   658
							PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   659
							PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   660
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   661
						else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   662
						{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   663
							// ClearCommError succeeded
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   664
							if (lclErrorFlags)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   665
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   666
								// there really was an error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   667
								m_lastCommError = lclErrorFlags;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   668
								err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   669
								PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   670
								PROCLOGA1("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=%d\n", m_lastCommError);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   671
								PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   672
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   673
							else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   674
							{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   675
								// Since we are not doing overlapped I/O 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   676
								//  and our timeout values say to timeout, we should read all the bytes
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   677
								//  that the last Poll told us, if not this is an error
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   678
								err = TCAPI_ERR_COMM_ERROR;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   679
								PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   680
								PROCLOGS("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=0\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   681
								PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   682
							}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   683
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   684
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   685
					else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   686
					{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   687
						// all data read
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   688
						m_lastCommError = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   689
						PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   690
						PROCLOGS("CRealSerialComm::ReadPort ReadFile successful\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   691
						PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   692
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   693
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   694
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   695
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   696
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   697
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   698
	return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   699
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   700
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   701
long CRealSerialComm::ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   702
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   703
	PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   704
	PROCLOGS("CRealSerialComm::ProcessBuffer\n");
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   705
	PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   706
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   707
	long err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   708
	long routingErr = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   709
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   710
	if (!IsConnected())
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   711
		return TCAPI_ERR_MEDIA_NOT_OPEN;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   712
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   713
	if (!m_Protocol)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   714
		return TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   715
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   716
	DWORD protocolHeaderLength = m_Protocol->GetHeaderLength();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   717
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   718
	// fill buffer
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   719
	if (m_numberBytes < MAX_SERIAL_MESSAGE_BUFFER_LENGTH)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   720
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   721
		DWORD outLen = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   722
		err = PollPort(outLen);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   723
		if (err == TCAPI_ERR_NONE && outLen > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   724
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   725
			if (outLen > (MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes))
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   726
				outLen = MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   727
			BYTE *ptr = &m_pBuffer[m_numberBytes];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   728
			err = ReadPort(outLen, ptr, outLen);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   729
			if (err == TCAPI_ERR_NONE && outLen > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   730
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   731
				m_numberBytes += outLen;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   732
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   733
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   734
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   735
	// now process buffer but only for complete messages
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   736
	if (err == TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   737
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   738
		if (m_numberBytes >= protocolHeaderLength)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   739
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   740
			BYTE* ptr = m_pBuffer;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   741
			long bytesRemaining = m_numberBytes;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   742
			long usedLen = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   743
			bool done = false;
458
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   744
			long numberSkipped=0;
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   745
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   746
			while (!done)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   747
			{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   748
				DWORD fullMessageLength = bytesRemaining;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   749
				DWORD rawLength = 0;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   750
				BYTE* fullMessage = ptr;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   751
				BYTE* rawMessage = ptr;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   752
				BYTE msgId = 0;
458
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   753
				int result = m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength);
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   754
				if (result == DECODE_NOT_ENOUGH_BYTES_TO_SEARCH)
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   755
				{
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   756
					done = true;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   757
				}
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   758
				else if (result == DECODE_MESSAGE_NOT_FOUND)
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   759
				{
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   760
					numberSkipped++;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   761
					usedLen += fullMessageLength;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   762
					bytesRemaining -= fullMessageLength;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   763
					ptr += fullMessageLength;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   764
					if (bytesRemaining < protocolHeaderLength)
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   765
						done = true;
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   766
				}
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   767
				else if (result == DECODE_MESSAGE_FOUND)
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   768
				{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   769
					err = PreProcessMessage(msgId, fullMessageLength, fullMessage);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   770
					if (err != TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   771
					{
458
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   772
						PROCLOGOPEN();
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   773
						PROCLOGA1("CTcpComm::ProcessBuffer Notify err = %x\n", err);
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   774
						PROCLOGCLOSE();
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   775
						// notify all clients right now 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   776
						pConn->NotifyClientsCommError(err, false, 0);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   777
						err = TCAPI_ERR_NONE;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   778
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   779
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   780
					int reallen = fullMessageLength;
458
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   781
					if (reallen > 80) reallen = 80;
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   782
					char msg[6];
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   783
					msg[0] = '\0';
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   784
477
cedd5978e2bc Debug logging changes
Chad Peckham <chad.peckham@nokia.com>
parents: 458
diff changeset
   785
					sLogMsg[0] = '\0';
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   786
					if (reallen > 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   787
					{
477
cedd5978e2bc Debug logging changes
Chad Peckham <chad.peckham@nokia.com>
parents: 458
diff changeset
   788
						sLogMsg[0] = '\0';
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   789
						for (int i = 0; i < reallen; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   790
						{
458
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   791
							if (isalnum(ptr[i]))
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   792
							{
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   793
								sprintf(msg, "%c", ptr[i]);
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   794
							}
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   795
							else
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   796
							{
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   797
								sprintf(msg, "%02.2x ", ptr[i]);
70467d598794 Fix for bug 9652
Chad Peckham <chad.peckham@nokia.com>
parents: 424
diff changeset
   798
							}
477
cedd5978e2bc Debug logging changes
Chad Peckham <chad.peckham@nokia.com>
parents: 458
diff changeset
   799
							strcat(sLogMsg, msg);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   800
						}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   801
					}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   802
#endif
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   803
					PROCLOGOPEN();
477
cedd5978e2bc Debug logging changes
Chad Peckham <chad.peckham@nokia.com>
parents: 458
diff changeset
   804
					PROCLOGA5("CRealSerialComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sLogMsg);
60
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   805
					PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   806
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   807
					err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   808
					if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   809
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   810
					numberProcessed++;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   811
					usedLen += fullMessageLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   812
					bytesRemaining -= fullMessageLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   813
					ptr += fullMessageLength;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   814
					if (bytesRemaining < protocolHeaderLength)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   815
						done = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   816
				}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   817
			}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   818
			DeleteMsg(usedLen);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   819
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   820
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   821
//	PROCLOGOPEN();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   822
//	PROCLOGA1("CRealSerialComm::ProcessBuffer err = %d\n", err);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   823
//	PROCLOGCLOSE();
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   824
	if (routingErr == TCAPI_ERR_NONE)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   825
		return err;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   826
	else
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   827
		return routingErr;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   828
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   829
bool CRealSerialComm::IsConnectionEqual(ConnectData* pConn)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   830
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   831
	bool equal = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   832
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   833
	// forms accepted:
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   834
	//   "comNN", "NN"
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   835
	char* ptr1 = m_ConnectSettings->realSerialSettings.comPort;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   836
	char* ptr2 = pConn->realSerialSettings.comPort;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   837
	bool digit1found = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   838
	while(!digit1found && *ptr1 != NULL) 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   839
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   840
		if (*ptr1 >= '0' && *ptr1 <= '9')
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   841
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   842
			digit1found = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   843
			break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   844
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   845
		ptr1++;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   846
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   847
	bool digit2found = false;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   848
	while(!digit2found && *ptr2 != NULL) 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   849
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   850
		if (*ptr2 >= '0' && *ptr2 <= '9')
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   851
		{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   852
			digit2found = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   853
			break;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   854
		}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   855
		ptr2++;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   856
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   857
	if (digit1found && digit2found)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   858
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   859
		if (strcmp(ptr1, ptr2) == 0)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   860
			equal = true;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   861
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   862
	return equal;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   863
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   864
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   865
#ifdef _DEBUG
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   866
DWORD CRealSerialComm::GetErrorText(DWORD inError)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   867
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   868
	LPVOID lpMsgBuf;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   869
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   870
	if (inError == 0) return inError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   871
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   872
	FormatMessage( 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   873
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   874
		NULL,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   875
		inError,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   876
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 	// Default language
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   877
		(LPTSTR) &lpMsgBuf,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   878
		0,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   879
		NULL );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   880
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   881
	COMMLOGA1(" -- GetErrorText=%s", lpMsgBuf);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   882
	// Free the buffer.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   883
	LocalFree( lpMsgBuf );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   884
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   885
	return inError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   886
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   887
DWORD CRealSerialComm::GetErrorText2(DWORD inError)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   888
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   889
	LPVOID lpMsgBuf;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   890
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   891
	if (inError == 0) return inError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   892
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   893
	FormatMessage( 
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   894
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   895
		NULL,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   896
		inError,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   897
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 	// Default language
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   898
		(LPTSTR) &lpMsgBuf,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   899
		0,
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   900
		NULL );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   901
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   902
	PROCLOGA1(" -- GetErrorText=%s", lpMsgBuf);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   903
	// Free the buffer.
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   904
	LocalFree( lpMsgBuf );
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   905
	
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   906
	return inError;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   907
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   908
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   909
void CRealSerialComm::DumpBuffer(BYTE* ptr, long length)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   910
{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   911
	char msg[256] = {0};
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   912
	if (length > 50) length = 50;
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   913
	for (int i = 0; i < length; i++)
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   914
	{
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   915
		sprintf(msg, "%s%02.2X ", msg, ptr[i]);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   916
	}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   917
	sprintf(msg, "%s\n", msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   918
	PROCLOGS(msg);
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   919
}
9d2210c8eed2 Commit changes for 2.1.0
chpeckha
parents:
diff changeset
   920
#endif