Skip to content

Commit

Permalink
core/scopymainwindow_api: Implemented new API's
Browse files Browse the repository at this point in the history
Signed-off-by: Alexandru Lie <[email protected]>
  • Loading branch information
liealex committed Aug 12, 2024
1 parent a574686 commit 2996106
Show file tree
Hide file tree
Showing 4 changed files with 193 additions and 2 deletions.
4 changes: 3 additions & 1 deletion core/include/core/devicemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ class SCOPY_CORE_EXPORT DeviceManager : public QObject
public Q_SLOTS:

void addDevice(Device *d);
QString createDevice(QString category, QString param, bool async = true);
QString createDevice(QString category, QString param, bool async = true,
QList<QString> plugins = QList<QString>());
void removeDevice(QString category, QString id);

void removeDeviceById(QString id);
Expand Down Expand Up @@ -62,6 +63,7 @@ private Q_SLOTS:
bool exclusive = false;
QStringList scannedDev;
QStringList connectedDev;
QList<QString> m_plugins;
QMap<QString, Device *> map;
PluginManager *pm;

Expand Down
14 changes: 14 additions & 0 deletions core/include/core/scopymainwindow_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "scopy-core_export.h"
#include "scopymainwindow.h"
#include "scanbuttoncontroller.h"
#include <QFile>

namespace scopy {
Expand All @@ -15,6 +16,10 @@ class SCOPY_CORE_EXPORT ScopyMainWindow_API : public ApiObject

Q_INVOKABLE void acceptLicense();
Q_INVOKABLE QString addDevice(QString cat, QString uri);
Q_INVOKABLE QString addDevice(QString cat, QString uri, QList<QString> plugins);
Q_INVOKABLE void removeDevice(QString cat, QString uri);
Q_INVOKABLE void startScan(bool scan);
Q_INVOKABLE void printDevices();
Q_INVOKABLE bool connectDevice(int idx);
Q_INVOKABLE bool connectDevice(QString devID);
Q_INVOKABLE bool disconnectDevice(QString devID);
Expand All @@ -23,6 +28,15 @@ class SCOPY_CORE_EXPORT ScopyMainWindow_API : public ApiObject
Q_INVOKABLE void switchTool(QString toolName);
Q_INVOKABLE void runScript(QString scriptPath, bool exitApp = true);
Q_INVOKABLE void runScriptList(QStringList scriptPathList, bool exitApp = true);
Q_INVOKABLE void exit();
Q_INVOKABLE QStringList getTools();
Q_INVOKABLE QStringList getToolsPlugin(QString plugin);
Q_INVOKABLE void getPreference(QString prfName = NULL);
Q_INVOKABLE void setPreference(QString preName, QVariant value);
Q_INVOKABLE void aboutPage();
Q_INVOKABLE QStringList getPlugins(int idx);
Q_INVOKABLE QStringList getPlugins(QString param, QString cat = "iio");
Q_INVOKABLE QStringList availablePlugins(QString param, QString cat, int idx, Device *dev);

private:
static bool sortByUUID(const QString &k1, const QString &k2);
Expand Down
11 changes: 10 additions & 1 deletion core/src/devicemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,25 @@ void DeviceManager::addDevice(Device *d)
QString id = d->id();
map[id] = d;
di->setParent(this);
QList<Plugin *> availablePlugins = di->plugins();
if(!m_plugins.isEmpty()) {
for(Plugin *p : qAsConst(availablePlugins)) {
if(!m_plugins.contains(p->name())) {
p->setEnabled(false);
}
}
}
di->loadPlugins();
connectDeviceToManager(di);
Q_EMIT deviceAdded(id, d);
}

QString DeviceManager::createDevice(QString category, QString param, bool async)
QString DeviceManager::createDevice(QString category, QString param, bool async, QList<QString> plugins)
{
qInfo(CAT_DEVICEMANAGER) << category << "device with params" << param << "added";
Q_EMIT deviceAddStarted(param);

m_plugins = plugins;
DeviceImpl *d = DeviceFactory::build(param, pm, category);
DeviceLoader *dl = new DeviceLoader(d, this);

Expand Down
166 changes: 166 additions & 0 deletions core/src/scopymainwindow_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,38 @@ QString ScopyMainWindow_API::addDevice(QString cat, QString uri)
return devID;
}

QString ScopyMainWindow_API::addDevice(QString cat, QString uri, QList<QString> plugins)
{
Q_ASSERT(m_w->dm != nullptr);
QString devID = "";
devID = m_w->dm->createDevice(cat, uri, false, plugins);
qInfo(CAT_SCOPY_API) << "Device with id " << devID << " has been created!";
return devID;
}

void ScopyMainWindow_API::removeDevice(QString cat, QString uri)
{
Q_ASSERT(m_w->dm != nullptr);
m_w->dm->removeDevice(cat, uri);
qInfo(CAT_SCOPY_API) << "Device " << uri << " has been removed";
}

void ScopyMainWindow_API::startScan(bool scan)
{
ScanButtonController *sbc = new ScanButtonController(m_w->scanCycle, m_w->hp->scanControlBtn(), this);
sbc->enableScan(scan);
}

void ScopyMainWindow_API::printDevices()
{
Q_ASSERT(m_w->dm != nullptr);
QList mapKeys = m_w->dm->map.keys();
qInfo() << "Available devices: ";
for(int i = 0; i < mapKeys.size(); i++) {
qInfo(CAT_SCOPY_API) << m_w->dm->map[mapKeys[i]]->displayParam();
}
}

bool ScopyMainWindow_API::connectDevice(int idx)
{
Q_ASSERT(m_w->dm != nullptr);
Expand Down Expand Up @@ -196,4 +228,138 @@ bool ScopyMainWindow_API::sortByUUID(const QString &k1, const QString &k2)
return k1.split("_").last() < k2.split("_").last();
}

void ScopyMainWindow_API::exit() { qApp->exit(); }

QStringList ScopyMainWindow_API::getTools()
{
Q_ASSERT(m_w->dm != nullptr);
QString devID = "";
QStringList resultList;
if(!m_w->dm->connectedDev.isEmpty()) {
devID = m_w->dm->connectedDev.back();
}
Device *dev = m_w->dm->getDevice(devID);
if(dev) {
QList<ToolMenuEntry *> toolList = dev->toolList();
qInfo(CAT_SCOPY_API) << "Available tools: ";
for(int i = 0; i < toolList.size(); i++) {
qInfo(CAT_SCOPY_API) << toolList[i]->name();
resultList.append(toolList[i]->name());
}
} else {
qWarning(CAT_SCOPY_API) << "Device with id " << devID << " is not available!";
}
return resultList;
}

QStringList ScopyMainWindow_API::getToolsPlugin(QString plugin)
{
Q_ASSERT(m_w->dm != nullptr);
QString devID = "";
QStringList resultList;
if(!m_w->dm->connectedDev.isEmpty()) {
devID = m_w->dm->connectedDev.back();
}
Device *dev = m_w->dm->getDevice(devID);
if(dev) {
QList<ToolMenuEntry *> toolList = dev->toolList();
for(int i = 0; i < toolList.size(); i++) {
if(toolList[i]->pluginName() == plugin){
resultList.append(toolList[i]->name());
}
}
} else {
qWarning(CAT_SCOPY_API) << "Device with id " << devID << " is not available!";
}
return resultList;
}

void ScopyMainWindow_API::getPreference(QString prefName)
{
Preferences *p = Preferences::GetInstance();
QMap<QString, QVariant> prefMap = p->getPreferences();
if(prefName != NULL) {
qInfo(CAT_SCOPY_API) << prefName << " " << prefMap[prefName];
} else {
qInfo(CAT_SCOPY_API) << "Preferences: ";
for(auto it = prefMap.keyValueBegin(); it != prefMap.keyValueEnd(); it++) {
qInfo(CAT_SCOPY_API) << it->first << " " << it->second;
}
}
}

void ScopyMainWindow_API::setPreference(QString prefName, QVariant value)
{
Preferences *p = Preferences::GetInstance();
p->set(prefName, value);
if(prefName == "general_use_opengl") {
qWarning(CAT_SCOPY_API) << "Restart is required for the change to take place";

} else if(prefName == "general_theme") {
qWarning(CAT_SCOPY_API) << "Restart is required for the change to take place";

} else if(prefName == "general_language") {
qWarning(CAT_SCOPY_API) << "Restart is required for the change to take place";
}
}

void ScopyMainWindow_API::aboutPage()
{
QString path = ":/about.html";
QFile file(path);

if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning(CAT_SCOPY_API) << "Could not open the file:" << path;
}

QTextStream in(&file);

while(!in.atEnd()) {
QString line = in.readLine();
qInfo(CAT_SCOPY_API) << line;
}

file.close();
}

QStringList ScopyMainWindow_API::getPlugins(int idx)
{
Q_ASSERT(m_w->dm != nullptr);
Device *dev = nullptr;
QList mapKeys = m_w->dm->map.keys();
std::sort(mapKeys.begin(), mapKeys.end(), sortByUUID);
if(idx < mapKeys.size()) {
dev = m_w->dm->map[mapKeys[idx]];
}
QStringList pluginList = availablePlugins("", "", idx, dev);
return pluginList;
}

QStringList ScopyMainWindow_API::getPlugins(QString param, QString cat)
{
QStringList pluginList = availablePlugins(param, cat, -1, nullptr);
return pluginList;
}

QStringList ScopyMainWindow_API::availablePlugins(QString param, QString cat, int idx, Device *dev)
{
PluginRepository *pr = new PluginRepository(this);
m_w->loadPluginsFromRepository(pr);
PluginManager *pm = pr->getPluginManager();
QList<Plugin *> compatiblePlugins;
if(!param.isEmpty()){
compatiblePlugins = pm->getCompatiblePlugins(param, cat);
qInfo(CAT_SCOPY_API) << "Available plugins for" << param << ":";
} else {
compatiblePlugins = pm->getCompatiblePlugins(dev->param(), dev->category());
qInfo(CAT_SCOPY_API) << "Available plugins for" << dev->param() << ":";
}

QStringList resultList;
for(int i = 0; i < compatiblePlugins.size(); i++) {
qInfo(CAT_SCOPY_API) << compatiblePlugins[i]->name();
resultList.append(compatiblePlugins[i]->name());
}
return resultList;
}
#include "moc_scopymainwindow_api.cpp"

0 comments on commit 2996106

Please sign in to comment.