/* -*-c++-*- */
/* SignalGenerator - SDK for Signal Generator ctrl
* Copyright 2020 cylpyy
* web:
*
* USBIOComm is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
#include "SignalGenerator.h"
#include "SignalGenerator_p.h"
#define agilent_4438
ViStatus _VI_FUNCH visaEventHandler(ViSession vi, ViEventType eventType,
ViEvent ctx, ViAddr userHdlr)
{
if (eventType == VI_EVENT_TCPIP_CONNECT)
{
ViChar address;
viGetAttribute(ctx, VI_ATTR_RECV_TCPIP_ADDR, &address);
return VI_SUCCESS;
}
return VI_SUCCESS;
}
SignalGenerator::SignalGenerator(QObject *parent)
: QObject(parent)
, d_ptr(new SignalGeneratorPrivate(this))
{
}
SignalGenerator::~SignalGenerator()
{
close();
}
bool SignalGenerator::open(const QString &address)
{
Q_D(SignalGenerator);
viOpenDefaultRM(&d->resourceManagerSession_);
ViStatus status = viOpen(d->resourceManagerSession_,
(ViRsrc)(address.toStdString().c_str()),
VI_NULL,
VI_NULL,
&d->ctrlSession_);
if (VI_SUCCESS != status)
{
return false;
}
ViPUInt32 ret = 0;
viWrite(d->resourceManagerSession_, (ViBuf)"*RST\n", 6, ret);
/* install the handler and enable it */
viInstallHandler(d->ctrlSession_, VI_EVENT_TCPIP_CONNECT, visaEventHandler, (ViAddr)10);
viEnableEvent(d->ctrlSession_, VI_EVENT_TCPIP_CONNECT, VI_HNDLR, VI_NULL);
emit onlineChanged(true);
return true;
}
bool SignalGenerator::close()
{
Q_D(SignalGenerator);
/* Close session */
viClose(d->ctrlSession_);
viClose(d->resourceManagerSession_);
emit onlineChanged(false);
return true;
}
bool SignalGenerator::setRF(quint32 rf)
{
Q_D(SignalGenerator);
QString cmd = QString(":FREQ %1MHz").arg(rf);
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
bool SignalGenerator::setPW(quint32 pw)
{
Q_D(SignalGenerator);
QString cmd = QString(":PULM:INTERNAL:PWIDTH %1ns").arg(pw);
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
bool SignalGenerator::setPRI(quint32 pri)
{
Q_D(SignalGenerator);
QString cmd = QString(":PULM:INTERNAL:PERIOD %1ns").arg(pri);
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
bool SignalGenerator::setPower(qint32 power)
{
Q_D(SignalGenerator);
QString cmd = QString(":POW %1dBm").arg(power);
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
bool SignalGenerator::setEmission(bool emission)
{
Q_D(SignalGenerator);
QString cmd = QString(":OUTP:STAT %1").arg((emission ? "ON" : "OFF"));
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
bool SignalGenerator::setWaveType(SignalGenerator::WaveType type)
{
Q_D(SignalGenerator);
QString modStat = type == SignalGenerator::WAVE_CW ? "OFF" : "ON";
//QString cmd = QString(":OUTP:MOD:STAT %1\n").arg(modStat);
QString cmd = QString(":PULM:STATE %1").arg(modStat);
//ViStatus status = viPrintf(d->ctrlSession_, (ViString)(cmd.toStdString().c_str()));
QByteArray ba = cmd.toStdString().c_str();
ViPUInt32 sentCount = 0;
ViStatus status = viWrite(d->ctrlSession_, (ViBuf)ba.data(), ba.size(), sentCount);
return VI_SUCCESS == status;
}
//bool SignalGenerator::getRF()
//{
//
//}
//
//bool SignalGenerator::getPW()
//{
//
//}
//
//bool SignalGenerator::getPRI()
//{
//
//}
//
//bool SignalGenerator::getPA()
//{
//
//}
//
//bool SignalGenerator::getPowerState()
//{
//
//}
//
//bool SignalGenerator::getEmissionState()
//{
//
//}
//
//bool SignalGenerator::getWaveType()
//{
//
//}
评论5