##// END OF EJS Templates
Plugin modified to allow the launch of interactiv tests from the python interpreter...
Plugin modified to allow the launch of interactiv tests from the python interpreter the signal processPacketStoreNowSig is sent by the SLOT processPacketStoreLater(unsigned int delay) the SLOT WriteSPWDelay(QList<int> dataList, unsigned int delay) allows the storage of a TC for a sending after "delay" ms

File last commit:

r11:0c9852fa341b default
r11:0c9852fa341b default
Show More
rmappluginpythonwrapper.cpp
174 lines | 4.6 KiB | text/x-c | CppLexer
/ rmapplugin / rmappluginpythonwrapper.cpp
#include "rmappluginpythonwrapper.h"
#include <math.h>
#include <QApplication>
rmappluginPythonWrapper::rmappluginPythonWrapper(QObject *parent) :
genericPySysdriver(parent)
{
timer = new QTimer;
timer->setSingleShot(true);
connect(timer, SIGNAL(timeout()), this, SLOT(sendTC()));
connect(this, SIGNAL(activateTCLoopSig()), this, SLOT(sendTCLoop()));
}
QList<QVariant> rmappluginPythonWrapper::getData()
{
QList<QVariant> data;
for (int i = 0; i<1024; i++)
{
QVariant t(1000*cos(0.1*i));
data.append(t);
}
return data;
}
QList<QVariant> rmappluginPythonWrapper::ReadSPW(unsigned int size)
{
QList<QVariant> result;
ccsdsPacketToProcess_t ccsdsPacket;
if (!ccsdsPacketStore->isEmpty())
{
ccsdsPacket = ccsdsPacketStore->takeFirst();
for(unsigned int i = 0;i<size;i++)
{
result.append((QVariant)ccsdsPacket.data[i]);
}
}
return result;
}
void rmappluginPythonWrapper::WriteSPW(QList<int> dataList)
{
char targetLogicalAddress;
char userApplication;
unsigned int count;
char *Value;
unsigned char data[dataList.count()];
for(int i = 0; i<dataList.count(); i++) // get the data as unsigned char
{
data[i] = (unsigned char)dataList.at(i);
}
// read the first bytes of the data to get the targetLogicalAddress and the userApplication parameters
targetLogicalAddress = data[0];
userApplication = data[3];
count = dataList.count() - 4; // the CCSDS header (4 bytes) is added by LPPMON
Value = (char*) &data[4];
emit WriteSPWSig(Value, count, targetLogicalAddress, userApplication);
}
void rmappluginPythonWrapper::WriteSPWDelay(QList<int> dataList, unsigned int delay)
{
char targetLogicalAddress;
char userApplication;
unsigned int count;
char *Value;
TCPacketToSend *packet;
unsigned char data[dataList.count()];
for(int i = 0; i<dataList.count(); i++) // get the data as unsigned char
{
data[i] = (unsigned char)dataList.at(i);
}
// read the first bytes of the data to get the targetLogicalAddress and the userApplication parameters
targetLogicalAddress = data[0];
userApplication = data[3];
count = dataList.count() - 4; // the CCSDS header (4 bytes) is added by LPPMON
Value = (char*) &data[4];
packet = new TCPacketToSend(Value, count, targetLogicalAddress, userApplication, delay);
TCPacketStore.append(packet);
emit(activateTCLoopSig());
}
void rmappluginPythonWrapper::processPacketStoreLater(unsigned int delay)
{
emit sendMessage(
"*** process packet store in " + QString::number(delay) + " ms"
);
QTimer::singleShot(delay, this, SLOT(sendProcessPacketStoreNowSig()));
}
void rmappluginPythonWrapper::sendTCLoop()
{
unsigned int delay;
if (!timer->isActive())
{
if (!TCPacketStore.isEmpty())
{
delay = TCPacketStore.at(0)->delay;
timer->setInterval(delay);
timer->start();
}
}
}
void rmappluginPythonWrapper::sendTC()
{
TCPacketToSend *packet;
unsigned int delay;
packet = TCPacketStore.takeFirst();
// the signal is connected with the option Qt::DirectConnection, thus it is processed immediately
emit(WriteSPWSig(packet->Value, packet->count,packet->targetLogicalAddress, packet->userApplication));
delete(packet);
if (!TCPacketStore.isEmpty())
{
delay = TCPacketStore.at(0)->delay;
timer->setInterval(delay);
timer->start();
}
}
unsigned int rmappluginPythonWrapper::storeCCSDSPacket(unsigned char *ccsdsPacket, unsigned int size)
{
unsigned int i;
ccsdsPacketToProcess_t ccsdsPacketToStore;
ccsdsPacketToStore.size = size;
for(i=0; i<size; i++)
{
//ccsdsPacket0[i] = ccsdsPacket[i];
ccsdsPacketToStore.data[i] = ccsdsPacket[i];
}
ccsdsPacketStore->append(ccsdsPacketToStore);
emit ccsdsPacketIsAvailable(size);
return 1;
}
void rmappluginPythonWrapper::processPacketStore()
{
while (!ccsdsPacketStore->isEmpty())
{
emit ccsdsPacketIsAvailable(ccsdsPacketStore->at(0).size);
ProcessPendingEvents();
}
}
void rmappluginPythonWrapper::setTargetAddressValue(unsigned int address)
{
unsigned char newAddress;
newAddress = (unsigned char) address;
emit updateTargetAddress(newAddress);
}
void rmappluginPythonWrapper::setSourceAddressValue(unsigned int address)
{
unsigned char newAddress;
newAddress = (unsigned char) address;
emit updateSourceAddress(newAddress);
}
void rmappluginPythonWrapper::ProcessPendingEvents()
{
QCoreApplication::processEvents();
}