mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 08:08:42 +00:00
abstract Device to support multiple device types
This commit is contained in:
43
src/Device.cpp
Normal file
43
src/Device.cpp
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2008 Sean C. Rhea (srhea@srhea.net)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
||||
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "Device.h"
|
||||
|
||||
static QMap<QString,Device*> devices;
|
||||
|
||||
QList<QString>
|
||||
Device::deviceTypes()
|
||||
{
|
||||
return devices.keys();
|
||||
}
|
||||
|
||||
Device &
|
||||
Device::device(const QString &deviceType)
|
||||
{
|
||||
assert(devices.contains(deviceType));
|
||||
return *devices.value(deviceType);
|
||||
}
|
||||
|
||||
bool
|
||||
Device::addDevice(const QString &deviceType, Device *device)
|
||||
{
|
||||
assert(!devices.contains(deviceType));
|
||||
devices.insert(deviceType, device);
|
||||
return true;
|
||||
}
|
||||
|
||||
41
src/Device.h
Normal file
41
src/Device.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2008 Sean C. Rhea (srhea@srhea.net)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 51
|
||||
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _GC_Device_h
|
||||
#define _GC_Device_h 1
|
||||
|
||||
#include "CommPort.h"
|
||||
#include <boost/function.hpp>
|
||||
|
||||
struct Device
|
||||
{
|
||||
virtual ~Device() {}
|
||||
|
||||
typedef boost::function<bool (const QString &statusText)> StatusCallback;
|
||||
|
||||
virtual bool download(CommPortPtr dev, const QDir &tmpdir,
|
||||
QString &tmpname, QString &filename,
|
||||
StatusCallback statusCallback, QString &err) = 0;
|
||||
|
||||
static QList<QString> deviceTypes();
|
||||
static Device &device(const QString &deviceType);
|
||||
static bool addDevice(const QString &deviceType, Device *device);
|
||||
};
|
||||
|
||||
#endif // _GC_Device_h
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
*/
|
||||
|
||||
#include "DownloadRideDialog.h"
|
||||
#include "Device.h"
|
||||
#include "MainWindow.h"
|
||||
#include "PowerTapDevice.h"
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <QtGui>
|
||||
@@ -139,7 +139,8 @@ DownloadRideDialog::downloadClicked()
|
||||
assert(dev);
|
||||
QString err;
|
||||
QString tmpname, filename;
|
||||
if (!PowerTapDevice::download(
|
||||
Device &device = Device::device("PowerTap");
|
||||
if (!device.download(
|
||||
dev, home, tmpname, filename,
|
||||
boost::bind(&DownloadRideDialog::statusCallback, this, _1), err))
|
||||
{
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
#define PT_DEBUG false
|
||||
|
||||
static bool powerTapRegistered =
|
||||
Device::addDevice("PowerTap", new PowerTapDevice());
|
||||
|
||||
static bool
|
||||
hasNewline(const char *buf, int len)
|
||||
{
|
||||
|
||||
@@ -20,15 +20,13 @@
|
||||
#define _GC_PowerTapDevice_h 1
|
||||
|
||||
#include "CommPort.h"
|
||||
#include <boost/function.hpp>
|
||||
#include "Device.h"
|
||||
|
||||
struct PowerTapDevice
|
||||
struct PowerTapDevice : public Device
|
||||
{
|
||||
typedef boost::function<bool (const QString &statusText)> StatusCallback;
|
||||
|
||||
static bool download(CommPortPtr dev, const QDir &tmpdir,
|
||||
QString &tmpname, QString &filename,
|
||||
StatusCallback statusCallback, QString &err);
|
||||
virtual bool download(CommPortPtr dev, const QDir &tmpdir,
|
||||
QString &tmpname, QString &filename,
|
||||
StatusCallback statusCallback, QString &err);
|
||||
};
|
||||
|
||||
#endif // _GC_PowerTapDevice_h
|
||||
|
||||
@@ -30,6 +30,7 @@ HEADERS += \
|
||||
CpintPlot.h \
|
||||
CsvRideFile.h \
|
||||
DBAccess.h \
|
||||
Device.h \
|
||||
DownloadRideDialog.h \
|
||||
MainWindow.h \
|
||||
PfPvPlot.h \
|
||||
@@ -73,6 +74,7 @@ SOURCES += \
|
||||
CpintPlot.cpp \
|
||||
CsvRideFile.cpp \
|
||||
DBAccess.cpp \
|
||||
Device.cpp \
|
||||
DownloadRideDialog.cpp \
|
||||
MainWindow.cpp \
|
||||
PfPvPlot.cpp \
|
||||
|
||||
Reference in New Issue
Block a user