ckb-next  beta-v0.2.8 at branch testing
ckb-next driver for corsair devices
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
KbManager Class Reference

#include <src/ckb/kbmanager.h>

+ Inheritance diagram for KbManager:
+ Collaboration diagram for KbManager:

Signals

void kbConnected (Kb *device)
 
void kbDisconnected (Kb *device)
 
void versionUpdated ()
 

Static Public Member Functions

static void init (QString guiVersion)
 
static void stop ()
 
static KbManager * kbManager ()
 
static QString ckbGuiVersion ()
 
static QString ckbDaemonVersion ()
 
static float parseVersionString (QString version)
 
static float ckbGuiVersionF ()
 
static float ckbDaemonVersionF ()
 
static const QSet< Kb * > devices ()
 
static QTimer * eventTimer ()
 
static void fps (int framerate)
 
static QTimer * scanTimer ()
 

Private Slots

void scanKeyboards ()
 

Private Member Functions

 KbManager (QObject *parent=0)
 

Private Attributes

QSet< Kb * > _devices
 
QTimer * _eventTimer
 
QTimer * _scanTimer
 

Static Private Attributes

static KbManager * _kbManager = 0
 
static QString _guiVersion
 
static QString _daemonVersion = "<unavailable>"
 

Detailed Description

Definition at line 14 of file kbmanager.h.

Constructor & Destructor Documentation

KbManager::KbManager ( QObject *  parent = 0)
explicitprivate

Definition at line 26 of file kbmanager.cpp.

References _eventTimer, _scanTimer, and scanKeyboards().

Referenced by init().

26  : QObject(parent){
27  // Set up the timers
28  _eventTimer = new QTimer(this);
29  _eventTimer->setTimerType(Qt::PreciseTimer);
30  _scanTimer = new QTimer(this);
31  _scanTimer->start(100);
32  connect(_scanTimer, SIGNAL(timeout()), this, SLOT(scanKeyboards()));
33 }
QTimer * _eventTimer
Definition: kbmanager.h:64
QTimer * _scanTimer
Definition: kbmanager.h:64
void scanKeyboards()
Definition: kbmanager.cpp:59

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Member Function Documentation

static QString KbManager::ckbDaemonVersion ( )
inlinestatic

Definition at line 27 of file kbmanager.h.

References _daemonVersion.

Referenced by MainWindow::updateVersion().

27 { return _daemonVersion; }
static QString _daemonVersion
Definition: kbmanager.h:59

+ Here is the caller graph for this function:

static float KbManager::ckbDaemonVersionF ( )
inlinestatic

Definition at line 31 of file kbmanager.h.

References _daemonVersion, DAEMON_UNAVAILABLE_STR, and parseVersionString().

Referenced by KbFirmware::_latestForBoard(), and MainWindow::updateVersion().

static QString _daemonVersion
Definition: kbmanager.h:59
static float parseVersionString(QString version)
Definition: kbmanager.cpp:45
#define DAEMON_UNAVAILABLE_STR
Definition: kbmanager.h:12

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static QString KbManager::ckbGuiVersion ( )
inlinestatic

Definition at line 26 of file kbmanager.h.

References _guiVersion.

26 { return _guiVersion; }
static QString _guiVersion
Definition: kbmanager.h:59
static float KbManager::ckbGuiVersionF ( )
inlinestatic

Definition at line 30 of file kbmanager.h.

References _guiVersion, and parseVersionString().

Referenced by KbFirmware::_latestForBoard(), and MainWindow::updateVersion().

static float parseVersionString(QString version)
Definition: kbmanager.cpp:45
static QString _guiVersion
Definition: kbmanager.h:59

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static const QSet<Kb*> KbManager::devices ( )
inlinestatic

Definition at line 34 of file kbmanager.h.

References _devices, and _kbManager.

34 { return _kbManager ? _kbManager->_devices : QSet<Kb*>(); }
QSet< Kb * > _devices
Definition: kbmanager.h:63
static KbManager * _kbManager
Definition: kbmanager.h:58
static QTimer* KbManager::eventTimer ( )
inlinestatic

Definition at line 38 of file kbmanager.h.

References _eventTimer, and _kbManager.

Referenced by fps().

38 { return _kbManager ? _kbManager->_eventTimer : 0; }
QTimer * _eventTimer
Definition: kbmanager.h:64
static KbManager * _kbManager
Definition: kbmanager.h:58

+ Here is the caller graph for this function:

void KbManager::fps ( int  framerate)
static

Definition at line 35 of file kbmanager.cpp.

References eventTimer().

Referenced by Kb::frameRate().

35  {
36  QTimer* timer = eventTimer();
37  if(!timer)
38  return;
39  if(timer->isActive())
40  timer->setInterval(1000 / framerate);
41  else
42  timer->start(1000 / framerate);
43 }
static QTimer * eventTimer()
Definition: kbmanager.h:38

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void KbManager::init ( QString  guiVersion)
static

Definition at line 12 of file kbmanager.cpp.

References _guiVersion, _kbManager, and KbManager().

Referenced by MainWindow::MainWindow().

12  {
13  _guiVersion = guiVersion;
14  if(_kbManager)
15  return;
16  _kbManager = new KbManager();
17 }
KbManager(QObject *parent=0)
Definition: kbmanager.cpp:26
static QString _guiVersion
Definition: kbmanager.h:59
static KbManager * _kbManager
Definition: kbmanager.h:58

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void KbManager::kbConnected ( Kb *  device)
signal

Definition at line 174 of file moc_kbmanager.cpp.

Referenced by scanKeyboards().

175 {
176  void *_a[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
177  QMetaObject::activate(this, &staticMetaObject, 0, _a);
178 }

+ Here is the caller graph for this function:

void KbManager::kbDisconnected ( Kb *  device)
signal

Definition at line 181 of file moc_kbmanager.cpp.

Referenced by scanKeyboards().

182 {
183  void *_a[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
184  QMetaObject::activate(this, &staticMetaObject, 1, _a);
185 }

+ Here is the caller graph for this function:

static KbManager* KbManager::kbManager ( )
inlinestatic

Definition at line 23 of file kbmanager.h.

References _kbManager.

Referenced by MainWindow::MainWindow().

23 { return _kbManager; }
static KbManager * _kbManager
Definition: kbmanager.h:58

+ Here is the caller graph for this function:

float KbManager::parseVersionString ( QString  version)
static

Definition at line 45 of file kbmanager.cpp.

Referenced by ckbDaemonVersionF(), ckbGuiVersionF(), and KbFirmware::processDownload().

45  {
46  // Remove extraneous info (anything after a +, anything non-numeric)
47  QStringList dots = version.replace(QRegExp("\\+.+"), "").replace(QRegExp("[^\\d\\.]"), "").split(".");
48  float base = 1.f;
49  float res = 0.f;
50  // A number like "1.2.3" will result in 1.0203
51  // NB: will fail if a point version goes over 99 or if using more than two dots. floats can only reliably encode 7 decimal digits.
52  foreach(const QString& dot, dots){
53  res += dot.toFloat() * base;
54  base /= 100.f;
55  }
56  return res;
57 }

+ Here is the caller graph for this function:

void KbManager::scanKeyboards ( )
privateslot

Definition at line 59 of file kbmanager.cpp.

References _daemonVersion, _devices, _eventTimer, _scanTimer, DAEMON_UNAVAILABLE_STR, devpath, Kb::isOpen(), kbConnected(), kbDisconnected(), Kb::load(), Kb::matches(), Kb::save(), and versionUpdated().

Referenced by KbManager().

59  {
60  QString rootdev = devpath.arg(0);
61  QFile connected(rootdev + "/connected");
62  if(!connected.open(QIODevice::ReadOnly)){
63  // No root controller - remove all keyboards
64  foreach(Kb* kb, _devices){
65  emit kbDisconnected(kb);
66  kb->save();
67  delete kb;
68  }
69  _devices.clear();
72  emit versionUpdated();
73  }
74  return;
75  }
76  // Check daemon version
77  QFile version(rootdev + "/version");
78  QString vString;
79  if(version.open(QIODevice::ReadOnly)){
80  vString = QString::fromUtf8(version.readLine()).trimmed();
81  version.close();
82  } else
83  vString = DAEMON_UNAVAILABLE_STR;
84  if(_daemonVersion != vString){
85  _daemonVersion = vString;
86  emit versionUpdated();
87  }
88 
89  // Scan connected devices
90  QList<QStringList> lines;
91  while(1){
92  QString line = connected.readLine().trimmed();
93  if(line.isEmpty())
94  break;
95  QStringList components = line.split(" ");
96  if(components.length() < 2) // "<path> <serial> <name>" (we're only interested in the first two)
97  continue;
98  lines.append(components);
99  }
100  connected.close();
101 
102  // Remove any active devices not in the list
103  QMutableSetIterator<Kb*> i(_devices);
104  while(i.hasNext()){
105  Kb* kb = i.next();
106  bool matched = false;
107  foreach(const QStringList& line, lines){
108  if(kb->matches(line[0], line[1])){
109  matched = true;
110  break;
111  }
112  }
113  if(matched)
114  continue;
115  // Device not found, remove
116  i.remove();
117  emit kbDisconnected(kb);
118  kb->save();
119  delete kb;
120  }
121 
122  // Add any new devices found in the list
123  foreach(const QStringList& line, lines){
124  bool matched = false;
125  foreach(Kb* kb, _devices){
126  if(kb->matches(line[0], line[1])){
127  matched = true;
128  break;
129  }
130  }
131  if(matched)
132  continue;
133  // Device not found, create new
134  Kb* kb = new Kb(this, line[0]);
135  if(!kb->isOpen()){
136  delete kb;
137  continue;
138  }
139  _devices.insert(kb);
140  // Load preferences and send signal
141  emit kbConnected(kb);
142  kb->load();
143  connect(_eventTimer, SIGNAL(timeout()), kb, SLOT(frameUpdate()));
144  connect(_scanTimer, SIGNAL(timeout()), kb, SLOT(autoSave()));
145  }
146 }
bool matches(const QString &path, const QString &serial)
Definition: kb.h:157
void load()
Definition: kb.cpp:241
static QString _daemonVersion
Definition: kbmanager.h:59
void versionUpdated()
QTimer * _eventTimer
Definition: kbmanager.h:64
QString devpath
Definition: kbmanager.cpp:4
QTimer * _scanTimer
Definition: kbmanager.h:64
void kbDisconnected(Kb *device)
QSet< Kb * > _devices
Definition: kbmanager.h:63
void kbConnected(Kb *device)
Definition: kb.h:11
#define DAEMON_UNAVAILABLE_STR
Definition: kbmanager.h:12
bool isOpen() const
Definition: kb.h:147
void save()
Definition: kb.cpp:273

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static QTimer* KbManager::scanTimer ( )
inlinestatic

Definition at line 43 of file kbmanager.h.

References _kbManager, and _scanTimer.

Referenced by MainWindow::MainWindow().

43 { return _kbManager ? _kbManager->_scanTimer : 0; }
QTimer * _scanTimer
Definition: kbmanager.h:64
static KbManager * _kbManager
Definition: kbmanager.h:58

+ Here is the caller graph for this function:

void KbManager::stop ( )
static

Definition at line 19 of file kbmanager.cpp.

References _kbManager.

Referenced by MainWindow::cleanup().

19  {
20  if(!_kbManager)
21  return;
22  delete _kbManager;
23  _kbManager = 0;
24 }
static KbManager * _kbManager
Definition: kbmanager.h:58

+ Here is the caller graph for this function:

void KbManager::versionUpdated ( )
signal

Definition at line 188 of file moc_kbmanager.cpp.

Referenced by scanKeyboards().

189 {
190  QMetaObject::activate(this, &staticMetaObject, 2, Q_NULLPTR);
191 }

+ Here is the caller graph for this function:

Field Documentation

QString KbManager::_daemonVersion = "<unavailable>"
staticprivate

Definition at line 59 of file kbmanager.h.

Referenced by ckbDaemonVersion(), ckbDaemonVersionF(), and scanKeyboards().

QSet<Kb*> KbManager::_devices
private

Definition at line 63 of file kbmanager.h.

Referenced by devices(), and scanKeyboards().

QTimer* KbManager::_eventTimer
private

Definition at line 64 of file kbmanager.h.

Referenced by eventTimer(), KbManager(), and scanKeyboards().

QString KbManager::_guiVersion
staticprivate

Definition at line 59 of file kbmanager.h.

Referenced by ckbGuiVersion(), ckbGuiVersionF(), and init().

KbManager * KbManager::_kbManager = 0
staticprivate

Definition at line 58 of file kbmanager.h.

Referenced by devices(), eventTimer(), init(), kbManager(), scanTimer(), and stop().

QTimer * KbManager::_scanTimer
private

Definition at line 64 of file kbmanager.h.

Referenced by KbManager(), scanKeyboards(), and scanTimer().


The documentation for this class was generated from the following files: