1 /*
2     SPDX-FileCopyrightText: 2012 Jasem Mutlaq <mutlaqja@ikarustech.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "driverinfo.h"
8 
9 #include "deviceinfo.h"
10 #include "servermanager.h"
11 
12 #include <basedevice.h>
13 
14 #include <QDebug>
15 
DriverInfo(const QString & inName)16 DriverInfo::DriverInfo(const QString &inName)
17 {
18     uniqueLabel.clear();
19     name = inName;
20 
21     m_Manufacturer = "Others";
22     hostname = "localhost";
23     port     = "-1";
24     userPort = "-1";
25 }
26 
DriverInfo(DriverInfo * di)27 DriverInfo::DriverInfo(DriverInfo *di)
28 {
29     name          = di->getName();
30     label         = di->getLabel();
31     uniqueLabel   = di->getUniqueLabel();
32     exec          = di->getExecutable();
33     version       = di->getVersion();
34     m_Manufacturer = di->manufacturer();
35     userPort      = di->getUserPort();
36     skelFile      = di->getSkeletonFile();
37     port          = di->getPort();
38     hostname      = di->getHost();
39     remotePort    = di->getRemotePort();
40     remoteHostname = di->getRemoteHost();
41     type          = di->getType();
42     serverState   = di->getServerState();
43     clientState   = di->getClientState();
44     driverSource  = di->getDriverSource();
45     serverManager = di->getServerManager();
46     clientManager = di->getClientManager();
47     auxInfo       = di->getAuxInfo();
48     devices       = di->getDevices();
49 }
50 
clone(bool resetClone)51 DriverInfo *DriverInfo::clone(bool resetClone)
52 {
53     DriverInfo * clone = new DriverInfo(this);
54     if (resetClone)
55     {
56         clone->reset();
57         clone->resetDevices();
58     }
59     return clone;
60 }
61 
~DriverInfo()62 DriverInfo::~DriverInfo()
63 {
64     qDeleteAll(devices);
65 }
66 
reset()67 void DriverInfo::reset()
68 {
69     serverState   = false;
70     clientState   = false;
71     serverManager = nullptr;
72     clientManager = nullptr;
73 }
74 
getServerBuffer() const75 QString DriverInfo::getServerBuffer() const
76 {
77     if (serverManager != nullptr)
78         return serverManager->getLogBuffer();
79 
80     return QString();
81 }
82 
setServerState(bool inState)83 void DriverInfo::setServerState(bool inState)
84 {
85     if (inState == serverState)
86         return;
87 
88     serverState = inState;
89 
90     if (serverState == false)
91         serverManager = nullptr;
92 
93     emit deviceStateChanged(this);
94 }
95 
setClientState(bool inState)96 void DriverInfo::setClientState(bool inState)
97 {
98     //qDebug() << "Request to change " << name << " client status to " << (inState ? "True" : "False") << endl;
99 
100     if (inState == clientState)
101         return;
102 
103     clientState = inState;
104 
105     if (clientState == false)
106         clientManager = nullptr;
107 
108     //qDebug() << "Client state for this device changed, calling device state changed signal " << endl;
109 
110     emit deviceStateChanged(this);
111 }
112 
setUserPort(const QString & inUserPort)113 void DriverInfo::setUserPort(const QString &inUserPort)
114 {
115     if (inUserPort.isEmpty() == false)
116         userPort = inUserPort;
117     else
118         userPort = "-1";
119 }
120 
addDevice(DeviceInfo * idv)121 void DriverInfo::addDevice(DeviceInfo *idv)
122 {
123     devices.append(idv);
124 }
125 
removeDevice(DeviceInfo * idv)126 void DriverInfo::removeDevice(DeviceInfo *idv)
127 {
128     devices.removeOne(idv);
129     delete (idv);
130 }
131 
getDevice(const QString & deviceName) const132 DeviceInfo *DriverInfo::getDevice(const QString &deviceName) const
133 {
134     foreach (DeviceInfo *idv, devices)
135     {
136         if (idv->getDeviceName() == deviceName)
137             return idv;
138     }
139 
140     return nullptr;
141 }
getAuxInfo() const142 QVariantMap DriverInfo::getAuxInfo() const
143 {
144     return auxInfo;
145 }
146 
setAuxInfo(const QVariantMap & value)147 void DriverInfo::setAuxInfo(const QVariantMap &value)
148 {
149     auxInfo = value;
150 }
151 
addAuxInfo(const QString & key,const QVariant & value)152 void DriverInfo::addAuxInfo(const QString &key, const QVariant &value)
153 {
154     auxInfo[key] = value;
155 }
156 
manufacturer() const157 QString DriverInfo::manufacturer() const
158 {
159     return m_Manufacturer;
160 }
161 
setManufacturer(const QString & Manufacturer)162 void DriverInfo::setManufacturer(const QString &Manufacturer)
163 {
164     m_Manufacturer = Manufacturer;
165 }
166 
setUniqueLabel(const QString & inUniqueLabel)167 void DriverInfo::setUniqueLabel(const QString &inUniqueLabel)
168 {
169     // N.B. We NEVER set unique label for multiple devices per driver "driver"
170     if (auxInfo.value("mdpd", false).toBool() == true || driverSource >= HOST_SOURCE)
171         return;
172 
173     uniqueLabel = inUniqueLabel;
174 }
175