TMLSendCommand.cpp 3.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck,
Ludovic Apvrille, Renaud Pacalet
 *
 * ludovic.apvrille AT telecom-paristech.fr
 *
 * This software is a computer program whose purpose is to allow the
 * edition of TURTLE analysis, design and deployment diagrams, to
 * allow the generation of RT-LOTOS or Java code from this diagram,
 * and at last to allow the analysis of formal validation traces
 * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
 * from INRIA Rhone-Alpes.
 *
 * This software is governed by the CeCILL  license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 *
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 *
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 *
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL license and that you accept its terms.
 *
 */

Daniel Knorreck's avatar
Daniel Knorreck committed
41
#include <TMLSendCommand.h>
Daniel Knorreck's avatar
Daniel Knorreck committed
42
//#include <TMLEventChannel.h>
43 44 45 46
#include <TMLTask.h>
#include <TMLTransaction.h>
#include <Bus.h>

47
TMLSendCommand::TMLSendCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFunc(iParamFunc)/*, _statParam(iStatParam)*/ {
Daniel Knorreck's avatar
Daniel Knorreck committed
48
	_type=SND;
49 50
}

Daniel Knorreck's avatar
Daniel Knorreck committed
51
void TMLSendCommand::execute(){
Daniel Knorreck's avatar
Daniel Knorreck committed
52
	//std::cout << "TMLSendCommand::execute()\n";
Daniel Knorreck's avatar
Daniel Knorreck committed
53
	_channel->write();
Daniel Knorreck's avatar
Daniel Knorreck committed
54
	//std::cout << "TMLSendCommand::execute() after write: " << _currTransaction << "\n";
Daniel Knorreck's avatar
Daniel Knorreck committed
55
	//std::cout << "Dependent Task: " << _channel->getBlockedReadTask()->toString() << std::endl;
56
	_progress+=_currTransaction->getVirtualLength();
57
	//_task->setEndLastTransaction(_currTransaction->getEndTime());
Daniel Knorreck's avatar
Daniel Knorreck committed
58
	//std::cout << "TMLSendCommand::execute() before add\n";
59
	_task->addTransaction(_currTransaction);
Daniel Knorreck's avatar
Daniel Knorreck committed
60
	//std::cout << "TMLSendCommand::execute() after add\n";
61
	prepare(false);
62
	//if (aNextCommand==0) _currTransaction->setTerminatedFlag();
63
	//if (_progress==0 && aNextCommand!=this) _currTransaction=0;
64 65
}

Daniel Knorreck's avatar
Daniel Knorreck committed
66
TMLCommand* TMLSendCommand::prepareNextTransaction(){
Daniel Knorreck's avatar
Daniel Knorreck committed
67 68
	//_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel);
	_currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel);
Daniel Knorreck's avatar
Daniel Knorreck committed
69
	_channel->testWrite(_currTransaction);
70
	return this;
71 72
}

Daniel Knorreck's avatar
Daniel Knorreck committed
73
std::string TMLSendCommand::toString() const{
74
	std::ostringstream outp;
75
	outp << "Send in " << TMLCommand::toString() << " " << _channel->toString() << " params=" << lastParams;
76 77 78
	return outp.str();
}

Daniel Knorreck's avatar
Daniel Knorreck committed
79
std::string TMLSendCommand::toShortString() const{
80
  //  std::cout << "TMLSendCommand::short string params:" << lastParams.str() << "\n";
81
	std::ostringstream outp;
82
	outp << _task->toString() << ": Send " << _channel->toString() << " params:" << lastParams;
83 84 85
	return outp.str();
}