📄 testresource.h
字号:
//####COPYRIGHTBEGIN####
//
// ----------------------------------------------------------------------------
// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
//
// This program is part of the eCos host tools.
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ----------------------------------------------------------------------------
//
//####COPYRIGHTEND####
//=================================================================
//
// TestResource.h
//
// Test resource class
//
//=================================================================
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): sdf
// Contributors: sdf
// Date: 1999-04-01
// Description: This class abstracts test resources for use in the testing infrastructure
// Usage:
//
//####DESCRIPTIONEND####
#ifndef _TESTRESOURCE_H
#define _TESTRESOURCE_H
#include "Collections.h"
#include "eCosStd.h"
#include "eCosTest.h"
#include "eCosSerial.h"
#include "Properties.h"
#include "ResetAttributes.h"
// This class is used to manipulate test resources. A test resource is the means to execute
// a test (usually an eCosTestServer running on a tcp/ip port)
class CTestResource {
public:
// ctors/dtors
CTestResource(
LPCTSTR pszHostPort, // Where the resource "lives" - i.e. the host and TCP/IP port for the server
LPCTSTR target,
// Physical port characteristics. If pszPort is null, simulator run is meant (in which case nBaud is ignored)
LPCTSTR pszPort=0, int nBaud=0,
// Associated reset characteristics: pszPort may be a remote server (host:port) or a local port
LPCTSTR pszResetString=_T("")
);
// Not chained or fully initialized
CTestResource():m_nBaud(0),m_bLocked(false),m_pNextInstance(0),m_pPrevInstance(0){}
virtual ~CTestResource();
bool Use(); // Mark this resource as "in use"
// This causes the reset to be performed (via rsh, on the machine
CResetAttributes::ResetResult RemoteReset(LogFunc *pfnLog, void *pfnLogparam=0);
const String Image() const;
// Receive details from the socket
static bool Load(Duration dTimeout=10*1000) { return LoadSocket(strResourceHostPort,dTimeout); }
static bool Save(Duration dTimeout=10*1000) { return SaveSocket(strResourceHostPort,dTimeout); }
CeCosTest::ServerStatus Query();
// [Resource] locking:
bool Unlock();
bool Lock ();
bool IsLocked() const { return m_bLocked; }
static CTestResource *First() { return pFirstInstance; }
CTestResource *Next() const { return m_pNextInstance; }
static CTestResource * Lookup(LPCTSTR pszHostPort);
static unsigned int ResourceCount() { return nCount; }
static void DeleteAllInstances();
static bool LoadFromDirectory (LPCTSTR psz); // Load information from a set of files in given directory
static bool SaveToDirectory (LPCTSTR psz); // Save information, likewise
#ifdef _WIN32
static bool SaveToRegistry(HKEY key,LPCTSTR pszKey); // Save information to the registry
static bool LoadFromRegistry(HKEY key,LPCTSTR pszKey);// Load information from the registry
#endif
void SetInfo (LPCTSTR pszInfo) { m_strInfo=pszInfo; }
LPCTSTR Info() const { return m_strInfo; }
// Host and TCP/IP port:
String HostPort() const { return CeCosSocket::HostPort(m_strHost,m_nPort); }
// Same information, but separately:
String Host() const { return m_strHost; }
int TcpIPPort() const { return m_nPort; }
// Serial (comms) port:
LPCTSTR Serial() const { return m_strPort; }
LPCTSTR Target() const { return m_Target; }
// Is there an associated reset string?
bool HasReset() const { return !m_strReset.empty(); }
// Baud rate:
int Baud() const { return m_nBaud; }
void SetHostPort(LPCTSTR pszHostPort) { CeCosSocket::ParseHostPort(pszHostPort,m_strHost,m_nPort); }
void SetTarget (LPCTSTR target) { m_Target=target; }
void SetDownload(LPCTSTR pszDownloadPort,int nBaud) { m_strPort=pszDownloadPort; m_nBaud=nBaud; }
void SetReset (LPCTSTR pszReset) { m_strReset=pszReset; }
void SetUser (LPCTSTR pszUser,LPCTSTR pszEmail) {m_strUser=pszUser; m_strEmail=pszEmail; }
void SetReason (LPCTSTR pszReason) {m_strReason=pszReason; }
void SetBoardID(LPCTSTR pszBoardID){m_strBoardID=pszBoardID; }
void SetDate (LPCTSTR pszDate) {m_strDate =pszDate; }
LPCTSTR Email () { return m_strEmail; }
LPCTSTR User () { return m_strUser; }
LPCTSTR Reason () { return m_strReason; }
LPCTSTR BoardID() { return m_strBoardID; }
LPCTSTR Date () { return m_strDate; }
// Scheduling functions
// Get the array of resources capable of executing "e"
// nCount gives the number of entries in ar on input
// result is the number of entries required in ar (may exceed nCount, but this case does no damage)
static unsigned int GetMatchCount (const CeCosTest::ExecutionParameters &e,bool bIgnoreLocking=false);
static bool GetMatches (const CeCosTest::ExecutionParameters &e,StringArray &arstr,bool bIgnoreLocking=false); // as before, but callee allocates. Deallocate using delete [].
static bool SetResourceServer (LPCTSTR pszHostPort) { bool b=CeCosSocket::IsLegalHostPort(pszHostPort);if(b)strResourceHostPort=pszHostPort; return b;}
static String GetResourceServer (){ return strResourceHostPort; }
static bool ResourceServerSet() { return CeCosSocket::IsLegalHostPort(GetResourceServer()); }
static CTestResource *GetResource(const CeCosTest::ExecutionParameters &e);
void Release() {
//VTRACE(_T("Release %s\n"),Serial1());
m_bInUse=false;
}
bool InUse() const { return m_bInUse; }
static int Count (const CeCosTest::ExecutionParameters &e);
// Reset the hardware attached to this port. Output goes to pfnLog
CResetAttributes::ResetResult Reset(LogFunc *pfnLog=0, void *pfnLogparam=0);
CResetAttributes::ResetResult Reset(String &str); // as above, output to string
static bool Matches(LPCTSTR pszHostPort, const CeCosTest::ExecutionParameters &e);
bool FromStr(LPCTSTR pszImage);
LPCTSTR ResetString() const { return m_strReset; }
class CTestResourceProperties : public CProperties {
public:
CTestResourceProperties(CTestResource *pResource);
virtual ~CTestResourceProperties(){}
protected:
};
protected:
friend class CTestResourceProperties;
String FileName() const;
String m_strReason,m_strUser,m_strEmail,m_strBoardID, m_strDate;
String m_strReset;
static void CALLBACK StringLogFunc (void *pParam,LPCTSTR psz);
static bool LoadSocket (LPCTSTR pszHostPort,Duration dTimeout=10*1000);
static bool SaveSocket (LPCTSTR pszHostPort,Duration dTimeout=10*1000);
static LPCTSTR szFormat;
void Chain();
unsigned static int nCount;
static String strResourceHostPort;
static CTestResource *pFirstInstance;
bool Matches (const CeCosTest::ExecutionParameters &e,bool bIgnoreLocking=false) const;
String m_strInfo;
bool m_bFlag;
bool m_bInUse;
int m_nBaud;
String m_strPort;
bool m_bLocked;
String m_Target;
String m_strHost;
int m_nPort;
CTestResource *m_pNextInstance;
CTestResource *m_pPrevInstance;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -