Changeset 110 in pacpusframework for branches/2.0-beta1/include/Pacpus/kernel/inputOutputInterface.h
- Timestamp:
- 06/13/13 13:43:39 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.0-beta1/include/Pacpus/kernel/inputOutputInterface.h
r102 r110 4 4 #include <Pacpus/kernel/Log.h> 5 5 #include <Pacpus/kernel/inputOutputBase.h> 6 #include <QApplication> 7 #include <typeinfo> 6 8 7 #include <typeinfo>8 9 #include <QDebug> 9 #include <Q Application>10 #include <QThread> 10 11 11 12 #include <QByteArray> … … 13 14 #define ADD_INPUT(name,ComponentType, DataType, functionName) input.insert(name,new InputInterface<DataType,ComponentType> (name,this,&ComponentType::functionName)) 14 15 #define ADD_OUTPUT(name,ComponentType, DataType) output.insert(name,new OutputInterface<DataType,ComponentType> (name,this)) 16 15 17 #define GET_OUTPUT(name,ComponentType, DataType) dynamic_cast<OutputInterface<DataType,ComponentType> *> (output.value(name)) 18 #define GET_INPUT(name,ComponentType, DataType) dynamic_cast<InputInterface<DataType,ComponentType> *> (input.value(name)) 16 19 17 20 namespace pacpus { … … 26 29 QString getDataType() {return QString(typeid(T).name());} 27 30 28 protected: 29 int boundingTime_; 31 protected: 30 32 31 33 public: 32 34 33 PacpusEvent getEventTemplate() {returnPacpusTypedEvent<T>(TYPED_EVENT); }35 PacpusEvent* getEventTemplate() {return new PacpusTypedEvent<T>(TYPED_EVENT); } 34 36 35 37 void customEvent(QEvent* event) { … … 37 39 switch (event->type()) { 38 40 39 // from Component to Component (T->T) 40 case TYPED_EVENT: { 41 PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event); 42 //qDebug() << "E1 "; 43 //qDebug() << "recived 2 thread " << QThread::currentThread(); 44 if(typedEvent->tr_ == 0 && readingMode_ == TimeBounded) { 45 //LOG_WARN("Incorrect TimeRange (0), switch to NeverSkip"); 46 readingMode_ = NeverSkip;} 41 // from Component to Component (T->T) 42 case TYPED_EVENT: { 43 PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event); 47 44 48 switch (readingMode_){ 49 case TimeBounded: 50 qDebug() << "Input " << this->getSignature() << " Time bournded "<< road_time()- typedEvent->t_ << " " << typedEvent->tr_; 51 if(road_time() - typedEvent->t_> typedEvent->tr_) 52 { qDebug() << "Data skip " << this->getSignature(); 53 break;} 54 (dynamic_cast<C*>(_component)->*method)(typedEvent->_data); 55 break; 56 case GetLast: 57 qDebug() << "Input " << this->getSignature() << "GetLast "<< road_time() - typedEvent->t_ << " " << typedEvent->tr_; 58 (dynamic_cast<C*>(_component)->*method)(typedEvent->_data); 59 QCoreApplication::removePostedEvents(this,TYPED_EVENT); // delete all remining events 60 break; 61 case NeverSkip: 62 qDebug() << "Input " << this->getSignature() << "NeverSkip "<< road_time() - typedEvent->t_ << " " << typedEvent->tr_; 63 default: 64 (dynamic_cast<C*>(_component)->*method)(typedEvent->_data); 65 } 45 qDebug() << "Revever " << getSignature() << " thread " << QThread::currentThread() << " Data & " << & typedEvent->data_; 46 47 if(typedEvent->tr_ < 500 && readingMode_ == TimeBounded) { 48 //LOG_WARN("Incorrect TimeRange (0), switch to NeverSkip"); 49 qDebug() << "Incorrect TimeRange (0), switch to NeverSkip"; 50 readingMode_ = NeverSkip;} 51 52 switch (readingMode_){ 53 case TimeBounded: 54 qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("Time bournded").leftJustified(15) << road_time()- typedEvent->t_ << "\t" << typedEvent->tr_; 55 56 if(road_time() - typedEvent->t_> typedEvent->tr_) 57 {qDebug() << "Data skip " << this->getSignature(); break;} 58 59 (dynamic_cast<C*>(_component)->*method)(typedEvent->data_); 66 60 break; 61 62 case GetLast: 63 qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("GetLast").leftJustified(15) << road_time() - typedEvent->t_ << "\t" << typedEvent->tr_; 64 65 (dynamic_cast<C*>(_component)->*method)(typedEvent->data_); 66 QCoreApplication::removePostedEvents(this,TYPED_EVENT); // delete all remining events 67 break; 68 69 case NeverSkip: 70 qDebug() << "Input " << this->getSignature().leftJustified(20) << QString("NeverSkip").leftJustified(15) << road_time() - typedEvent->t_ << "\t" << typedEvent->tr_; 71 72 default: 73 (dynamic_cast<C*>(_component)->*method)(typedEvent->data_); 67 74 } 75 break; 76 } 68 77 69 70 /* case GENERIC_EVENT2: {78 // from Connection interface to Component (G->T) 79 /* case GENERIC_EVENT2: { 71 80 PacpusTypedEvent<QByteArray> * genericEvent = dynamic_cast<PacpusTypedEvent<QByteArray> *> (event); 72 81 T data; 73 QByteArray& buf = (QByteArray&) genericEvent-> _data;82 QByteArray& buf = (QByteArray&) genericEvent->data_; 74 83 QDataStream in(&buf,QIODevice::ReadOnly); 75 84 … … 81 90 case GENERIC_EVENT3: { 82 91 PacpusTypedEvent<T> * typedEvent = dynamic_cast<PacpusTypedEvent<T> *> (event); 83 (dynamic_cast<C*>(_component)->*method)(typedEvent-> _data); // copy 3 X92 (dynamic_cast<C*>(_component)->*method)(typedEvent->data_); // copy 3 X 84 93 85 94 break; 86 95 }*/ 87 96 88 97 default: 89 98 90 99 qDebug() << "Unknown event ID " << event->type(); 91 100 break; 92 101 } 102 event->accept(); 103 } 93 104 105 T& getData() { 106 T data; 107 // TODO ask output data; 94 108 109 //LOG4CXX_INFO(getLogger(), "Hello, World"); 110 111 return data; 95 112 } 96 113 97 114 protected: 98 115 void (C::*method)(const T&); 116 117 /* log4cxx::LoggerPtr& getLogger() { 118 static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger( LOG4CXX_LOCATION.getClassName())); 119 return logger; 120 }*/ 99 121 100 122 }; … … 109 131 // Used by Components to send data througth typed output 110 132 void send(const T & data, road_time_t t = road_time(), road_timerange_t tr = 0) { 133 134 //QSharedPointer<T> sharedPointer = new T(data); 135 136 for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it){ 137 QApplication::postEvent(it->getInterface(),new PacpusTypedEvent<T>(TYPED_EVENT,data,t,tr),it->getPriority()); // Event is delete by the event loop handler 138 qDebug() << "sender " << it->getInterface()->getSignature() << " thread " << QThread::currentThread() << " Data & " << &data << " "; 139 // TODO DAta SHAred 140 } 141 } 142 143 /* void send(const T & data, road_time_t t = road_time(), road_timerange_t tr = 0) { 111 144 for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it){ 112 145 113 //if(it->getInterface()->getDataType() != QString(typeid(QByteArray).name()))146 if(it->getInterface()->getDataType() != QString(typeid(QByteArray).name())) 114 147 QApplication::postEvent(it->getInterface(),new PacpusTypedEvent<T>(TYPED_EVENT,data,t,tr),it->getPriority()); 115 /*else {148 else { 116 149 QByteArray buf; 117 150 QDataStream out(&buf,QIODevice::ReadWrite); 118 151 PacpusTypedEvent<QByteArray> * ev =new PacpusTypedEvent<QByteArray>(GENERIC_EVENT3,buf); 119 152 QApplication::postEvent(it->getInterface(),ev,it->getPriority()); // Copy 2 (ctor) 120 } */153 } 121 154 } 122 155 } 123 156 124 157 // Used by Connection Interfaces only to pose generic event 125 /*void sendGenericData(char * data, size_t size) {158 void sendGenericData(char * data, size_t size) { 126 159 QByteArray buf(data,size); // copy 5 127 160 for(QList<ConnectionBase>::iterator it = _connection.begin(); it!=_connection.end(); ++it)
Note:
See TracChangeset
for help on using the changeset viewer.