##// END OF EJS Templates
Ready for packaging.
Ready for packaging.

File last commit:

r82:f085b545eb20 socexplorer-plugins-0.7-2 default
r95:24cce5555942 socexplorer-plugins-0.7-6 default
Show More
abstractspwbridge.h
110 lines | 3.4 KiB | text/x-c | CLexer
/*------------------------------------------------------------------------------
-- This file is a part of the SocExplorer Software
-- Copyright (C) 2014, Plasma Physics Laboratory - CNRS
--
-- 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 3 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
-------------------------------------------------------------------------------*/
/*-- Author : Alexis Jeandet
-- Mail : alexis.jeandet@member.fsf.org
----------------------------------------------------------------------------*/
#ifndef ABSTRACTSPWBRIDGE_H
#define ABSTRACTSPWBRIDGE_H
#include <QObject>
#include <QThread>
#include <QMutex>
#include <QSemaphore>
#include <socexplorerplugin.h>
#define RMAP_MAX_XFER_SIZE 4000 //slightly less than 16kBytes
#include <spw.h>
class RMAP_Answer
{
public:
RMAP_Answer(int ID,char* data,int len)
{
transactionID = ID;
this->data = data;
this->len = len;
}
int transactionID;
char* data;
int len;
};
class abstractSpwBridge : public QObject
{
Q_OBJECT
public:
explicit abstractSpwBridge(socexplorerplugin *parent);
~abstractSpwBridge();
QWidget *getGUI();
public slots:
virtual bool connectBridge();
virtual bool disconnectBridge();
virtual unsigned int Write(unsigned int *Value,unsigned int count, unsigned int address=0)=0;
virtual unsigned int Read(unsigned int *Value,unsigned int count, unsigned int address=0)=0;
virtual int pushRMAPPacket(char* packet,int size)=0;
signals:
void setConnected(bool connected);
void pushPacketOverTCP(char* packet,int size);
protected:
socexplorerplugin* plugin;
QWidget* p_GUI;
private:
};
class abstractSpwManager: public QThread
{
Q_OBJECT
public:
explicit abstractSpwManager(socexplorerplugin *plugin = 0,QObject* parent=0);
~abstractSpwManager();
virtual void run(){};
virtual bool connectBridge()=0;
virtual bool disconnectBridge()=0;
int getRMAPtransactionID();
int getRMAPanswer(int transactionID,char** buffer);
virtual bool sendPacket(char* packet,int size)=0;
int RMAPtimeout;
int linkNumber;
int sourceLogicalAddress;
int destinationLogicalAddress;
int destinationKey;
signals:
void emitPacket(char* packet,int size);
void bytesReceivedFromSpw( unsigned int );
void bytesTransmittedToSpw( unsigned int);
void ccsdsPacketTransmittedToSpw( void );
public slots:
int getLinkNumber();
protected:
QList<RMAP_Answer*> RMAP_Answers;
QList<int> RMAP_pending_transaction_IDs;
QMutex *handleMutex,*RMAP_AnswersMtx,*RMAP_pending_transaction_IDsMtx;
QSemaphore* RMAP_AnswersSem;
socexplorerplugin* plugin;
bool connected;
void pushRmapPacket(char* packet,int len);
};
#endif // ABSTRACTSPWBRIDGE_H