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 KbManagerkbManager ()
 
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: