Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions Controllers/ArcticController/ArcticControllerDetect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,34 @@
#include "Detector.h"
#include "ArcticController.h"
#include "RGBController_Arctic.h"
#include "find_usb_serial_port.h"
#include "SettingsManager.h"

#define CH341_VID 0x1A86
#define CH341_PID 0x7523

void DetectArcticControllers()
{
std::vector<std::string *> ports = find_usb_serial_port(CH341_VID, CH341_PID);
json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("ArcticDevices");

for(unsigned int device = 0; device < ports.size(); device++)
if(settings.contains("devices"))
{
ArcticController *controller = new ArcticController(*ports[device]);

if(controller->IsPresent())
{
RGBController_Arctic *rgb_controller = new RGBController_Arctic(controller);
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
else
for(unsigned int device_idx = 0; device_idx < settings["devices"].size(); device_idx++)
{
delete controller;
}
if(settings["devices"][device_idx].contains("port"))
{
ArcticController *controller = new ArcticController(settings["devices"][device_idx]["port"]);

delete ports[device];
if(controller->IsPresent())
{
RGBController_Arctic *rgb_controller = new RGBController_Arctic(controller);
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
else
{
delete controller;
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/*-------------------------------------------------------------*\
| ArcticSettingsEntry.cpp |
| |
| User interface for OpenRGB Arctic controller settings entry |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*-------------------------------------------------------------*/

#include "ArcticSettingsEntry.h"
#include "ui_ArcticSettingsEntry.h"

#include "serial_port.h"
#include <QStandardItemModel>

ArcticSettingsEntry::ArcticSettingsEntry(QWidget *parent) :
BaseManualDeviceEntry(parent),
ui(new Ui::ArcticSettingsEntry)
{
ui->setupUi(this);

std::vector<std::string> serialPorts = serial_port::getSerialPorts();
for(size_t i = 0; i < serialPorts.size(); ++i)
{
ui->PortComboBox->addItem(QString::fromStdString(serialPorts[i]));
}
if(serialPorts.empty())
{
/*---------------------------------------------------*\
| When no ports were found, add an unselectable entry |
| denoting this fact istead |
\*---------------------------------------------------*/
QStandardItemModel* comboBoxModel = qobject_cast<QStandardItemModel *>(ui->PortComboBox->model());
if(comboBoxModel != nullptr)
{
ui->PortComboBox->addItem(tr("No serial ports found"));
QStandardItem *item = comboBoxModel->item(0);
item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
}
}
ui->PortComboBox->clearEditText();
}

ArcticSettingsEntry::~ArcticSettingsEntry()
{
delete ui;
}

void ArcticSettingsEntry::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
}
}

void ArcticSettingsEntry::loadFromSettings(const json& data)
{
if(data.contains("port"))
{
ui->PortComboBox->setCurrentText(QString::fromStdString(data["port"]));
}
}

json ArcticSettingsEntry::saveSettings()
{
json result;

result["port"] = ui->PortComboBox->currentText().toStdString();

return result;
}

bool ArcticSettingsEntry::isDataValid()
{
// stub
return true;
}

static BaseManualDeviceEntry* SpawnArcticEntry(const json& data)
{
ArcticSettingsEntry* entry = new ArcticSettingsEntry;
entry->loadFromSettings(data);
return entry;
}

REGISTER_MANUAL_DEVICE_TYPE("Arctic", "ArcticDevices", SpawnArcticEntry);
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*-------------------------------------------------------------*\
| ArcticSettingsEntry.h |
| |
| User interface for OpenRGB Arctic controller settings entry |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*-------------------------------------------------------------*/

#pragma once

#include "BaseManualDeviceEntry.h"

namespace Ui
{
class ArcticSettingsEntry;
}

class ArcticSettingsEntry : public BaseManualDeviceEntry
{
Q_OBJECT

public:
explicit ArcticSettingsEntry(QWidget *parent = nullptr);
~ArcticSettingsEntry();
void loadFromSettings(const json& data);
json saveSettings() override;
bool isDataValid() override;

private:
Ui::ArcticSettingsEntry *ui;

private slots:
void changeEvent(QEvent *event) override;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ArcticSettingsEntry</class>
<widget class="QWidget" name="ArcticSettingsEntry">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>531</width>
<height>206</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string notr="true">Arctic Controller Settings Entry</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Arctic Controller Device</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QLabel" name="PortLabel">
<property name="text">
<string>Port:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="PortComboBox">
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
Loading