summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt26
-rw-r--r--ftnoir_csv/csv.cpp181
-rw-r--r--ftnoir_csv/csv.h (renamed from ftnoir_protocol_ft/csv.h)15
-rw-r--r--ftnoir_protocol_ft/csv.cpp99
4 files changed, 208 insertions, 113 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 385b6c92..c7dea5d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -239,6 +239,8 @@ if(NOT SDK_FACEAPI_ONLY)
QT4_WRAP_UI(ftnoir-tracker-faceapi-uih ${ftnoir-tracker-faceapi-ui})
QT4_ADD_RESOURCES(ftnoir-tracker-faceapi-rcc ${ftnoir-tracker-faceapi-rc})
+ file(GLOB ftnoir-csv-c "ftnoir_csv/*.cpp")
+
# compat lib for POSIX/win32
file(GLOB ftnoir-compat-c "compat/*.cpp")
@@ -248,7 +250,7 @@ if(NOT SDK_FACEAPI_ONLY)
# freetrack
- file(GLOB ftnoir-freetrack-c "freetrackclient/*.cpp")
+ file(GLOB ftnoir-freetrack-c "freetrackclient/*.cpp")
if(SDK_XPLANE)
# probably librt already included
@@ -282,12 +284,15 @@ endif()
target_link_libraries(ftnoir-compat rt)
endif()
-
IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
SET(MY_QT_LIBS ${QT_QTCORE_LIBRARY_DEBUG} ${QT_QTGUI_LIBRARY_DEBUG} ${QT_QTNETWORK_LIBRARY_DEBUG} ${QT_QTXML_LIBRARY_DEBUG} ${QT_QTOPENGL_LIBRARY_DEBUG})
ELSE()
SET(MY_QT_LIBS ${QT_QTCORE_LIBRARY_RELEASE} ${QT_QTGUI_LIBRARY_RELEASE} ${QT_QTNETWORK_LIBRARY_RELEASE} ${QT_QTXML_LIBRARY_RELEASE} ${QT_QTOPENGL_LIBRARY_RELEASE})
ENDIF()
+
+ add_library(ftnoir-csv SHARED ${ftnoir-csv-c})
+ target_link_libraries(ftnoir-csv ${MY_QT_LIBS})
+
add_library(ftnoir-pose-widget SHARED ${ftnoir-pose-widget-c} ${ftnoir-pose-widget-moc} ${ftnoir-pose-widget-rcc})
target_link_libraries(ftnoir-pose-widget ${MY_QT_LIBS} ${OPENGL_gl_LIBRARY})
add_library(ftnoir-spline-widget SHARED ${ftnoir-spline-widget-c} ${ftnoir-spline-widget-moc} ${MY_QT_LIBS})
@@ -333,7 +338,7 @@ endif()
endif()
add_library(ftnoir-proto-freetrack SHARED ${ftnoir-proto-freetrack-c} ${ftnoir-proto-freetrack-moc} ${ftnoir-proto-freetrack-uih} ${ftnoir-proto-freetrack-rcc})
- target_link_libraries(ftnoir-proto-freetrack ${MY_QT_LIBS})
+ target_link_libraries(ftnoir-proto-freetrack ftnoir-csv ${MY_QT_LIBS})
add_library(ftnoir-proto-win32-mouse SHARED ${ftnoir-proto-win32-mouse-c} ${ftnoir-proto-win32-mouse-moc} ${ftnoir-proto-win32-mouse-uih} ${ftnoir-proto-win32-mouse-rcc})
target_link_libraries(ftnoir-proto-win32-mouse ${MY_QT_LIBS})
@@ -349,7 +354,7 @@ endif()
if(NOT WIN32 AND SDK_WINE_PREFIX)
add_library(ftnoir-proto-wine SHARED ${ftnoir-proto-wine-c} ${ftnoir-proto-wine-moc} ${ftnoir-proto-wine-uih} ${ftnoir-proto-wine-rcc})
- target_link_libraries(ftnoir-proto-wine ${MY_QT_LIBS} ftnoir-compat)
+ target_link_libraries(ftnoir-proto-wine ${MY_QT_LIBS} ftnoir-compat ftnoir-csv)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
SET_TARGET_PROPERTIES(ftnoir-proto-wine
PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/facetracknoir/posix-version-script.txt")
@@ -385,11 +390,11 @@ endif()
"${CMAKE_SOURCE_DIR}/dinput/strmiids.lib")
endif()
- if(OpenCV_FOUND)
- include_directories(${OpenCV_INCLUDE_DIRS})
- include_directories(${OpenCV_DIR}/include)
- include_directories(${OpenCV_CONFIG_PATH}/include)
- endif()
+ if(OpenCV_FOUND)
+ include_directories(${OpenCV_INCLUDE_DIRS})
+ include_directories(${OpenCV_DIR}/include)
+ include_directories(${OpenCV_CONFIG_PATH}/include)
+ endif()
if(OpenCV_FOUND)
add_library(ftnoir-tracker-pt SHARED ${ftnoir-tracker-pt-c} ${ftnoir-tracker-pt-moc} ${ftnoir-tracker-pt-uih} ${ftnoir-tracker-pt-rcc})
@@ -462,11 +467,12 @@ if(NOT SDK_FACEAPI_ONLY)
endif()
if(OpenCV_FOUND)
- install(TARGETS ftnoir-tracker-pt RUNTIME DESTINATION .)
+ install(TARGETS ftnoir-tracker-pt RUNTIME DESTINATION . LIBRARY DESTINATION .)
endif()
install(TARGETS
ftnoir-compat
+ ftnoir-csv
ftnoir-pose-widget
ftnoir-spline-widget
ftnoir-filter-accela
diff --git a/ftnoir_csv/csv.cpp b/ftnoir_csv/csv.cpp
new file mode 100644
index 00000000..f20c0203
--- /dev/null
+++ b/ftnoir_csv/csv.cpp
@@ -0,0 +1,181 @@
+/********************************************************************************
+* FaceTrackNoIR This program is a private project of the some enthusiastic *
+* gamers from Holland, who don't like to pay much for *
+* head-tracking. *
+* *
+* Copyright (C) 2013 Wim Vriend (Developing) *
+* Ron Hendriks (Researching and Testing) *
+* *
+* Homepage *
+* *
+* 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 3 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, see <http://www.gnu.org/licenses/>. *
+* *
+********************************************************************************/
+#define INSIDE_CSV
+#include "csv.h"
+#include <QTextDecoder>
+#include <QDebug>
+#include <QFile>
+#include <QCoreApplication>
+
+CSV::CSV(QIODevice * device)
+{
+ m_device = device;
+ m_codec = QTextCodec::codecForLocale();
+ m_pos = 0;
+ m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");
+}
+CSV::CSV(QString &string){
+ m_device = NULL;
+ m_codec = QTextCodec::codecForLocale();
+ m_string = string;
+ m_pos = 0;
+ m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");
+}
+
+CSV::~CSV()
+{
+ //delete m_codec;
+}
+
+
+void CSV::setCodec(const char* codecName){
+ //delete m_codec;
+ m_codec = QTextCodec::codecForName(codecName);
+}
+
+QString CSV::readLine(){
+ QString line;
+
+ if(m_string.isNull()){
+ //READ DATA FROM DEVICE
+ if(m_device && m_device->isReadable()){
+ QTextDecoder dec(m_codec);
+ m_string = dec.toUnicode(m_device->readAll());
+ }else{
+ return QString();
+ }
+ }
+
+ //PARSE
+ if((m_pos = m_rx.indexIn(m_string,m_pos)) != -1) {
+ line = m_rx.cap(1);
+ m_pos += m_rx.matchedLength();
+ }
+ return line;
+
+}
+QStringList CSV::parseLine(){
+ return parseLine(readLine());
+}
+QStringList CSV::parseLine(QString line){
+ QStringList list;
+ int pos2 = 0;
+ QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^;]*);?)");
+ if(line.size()<1){
+ list << "";
+ }else while (line.size()>pos2 && (pos2 = rx2.indexIn(line, pos2)) != -1) {
+ QString col;
+ if(rx2.cap(1).size()>0)
+ col = rx2.cap(1);
+ else if(rx2.cap(2).size()>0)
+ col = rx2.cap(2);
+
+ list << col;
+
+ if(col.size())
+ pos2 += rx2.matchedLength();
+ else
+ pos2++;
+ }
+ return list;
+}
+
+void CSV::getGameData( const QString& gameID, bool& tirviews, bool& dummy, unsigned char* table, QString& gamename)
+{
+ /* zero table first, in case unknown game is connecting */
+ memset(table, 0, 8);
+ QStringList gameLine;
+ qDebug() << "getGameData, ID = " << gameID;
+
+ //
+ // Open the supported games list, to get the Name.
+ //
+ QFile file(QCoreApplication::applicationDirPath() + "/settings/facetracknoir supported games.csv");
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
+ return;
+ }
+ CSV csv(&file);
+ gameLine = csv.parseLine();
+
+ while (gameLine.count() > 2) {
+ //qDebug() << "Column 0: " << gameLine.at(0); // No.
+ //qDebug() << "Column 1: " << gameLine.at(1); // Game Name
+ //qDebug() << "Column 2: " << gameLine.at(2); // Game Protocol
+ //qDebug() << "Column 3: " << gameLine.at(3); // Supported since version
+ //qDebug() << "Column 4: " << gameLine.at(4); // Verified
+ //qDebug() << "Column 5: " << gameLine.at(5); // By
+ //qDebug() << "Column 6: " << gameLine.at(6); // International ID
+ //qDebug() << "Column 7: " << gameLine.at(7); // FaceTrackNoIR ID
+
+ //
+ // If the gameID was found, fill the shared memory
+ //
+ if (gameLine.count() > 6) {
+ if (gameLine.at(6).compare( gameID, Qt::CaseInsensitive ) == 0) {
+ QByteArray id = gameLine.at(7).toAscii();
+ int tmp[8];
+ int fuzz[3];
+ if (gameLine.at(3) == QString("V160"))
+ {
+ qDebug() << "no table";
+ }
+ else if (sscanf(id.constData(),
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ fuzz + 2,
+ fuzz + 0,
+ tmp + 3,
+ tmp + 2,
+ tmp + 1,
+ tmp + 0,
+ tmp + 7,
+ tmp + 6,
+ tmp + 5,
+ tmp + 4,
+ fuzz + 1) != 11 || ((fuzz[2] << 8) | fuzz[0]) != gameLine.at(0).toInt())
+ {
+ qDebug() << "scanf failed" << fuzz[0] << fuzz[1] << fuzz[2];
+ memset(table, 0, 8);
+ }
+ else
+ for (int i = 0; i < 8; i++)
+ table[i] = tmp[i];
+ qDebug() << gameID << "game-id" << gameLine.at(7);
+ gamename = gameLine.at(1);
+ dummy = fuzz[1] & 0xf;
+ tirviews = fuzz[1] & 0xf0;
+ file.close();
+ return;
+ }
+ }
+
+ gameLine = csv.parseLine();
+ }
+
+ //
+ // If the gameID was NOT found, fill only the name "Unknown game connected"
+ //
+ qDebug() << "Unknown game connected" << gameID;
+ file.close();
+} \ No newline at end of file
diff --git a/ftnoir_protocol_ft/csv.h b/ftnoir_csv/csv.h
index 13231293..af62ffbb 100644
--- a/ftnoir_protocol_ft/csv.h
+++ b/ftnoir_csv/csv.h
@@ -11,14 +11,19 @@
#include <QIODevice>
#include <QTextCodec>
#include <QRegExp>
+#include <QtGlobal>
-class /*MYCLASS_API*/ CSV /*: public QObject*/
+#if defined(INSIDE_CSV)
+# define CSV_API Q_DECL_EXPORT
+#else
+# define CSV_API Q_DECL_IMPORT
+#endif
+
+class CSV_API CSV
{
/*Q_OBJECT*/
public:
- CSV(QIODevice * device);
- CSV(QString &string);
~CSV();
QString readLine();
@@ -26,13 +31,15 @@ public:
static QStringList parseLine(QString line);
void setCodec(const char* codecName);
+ static void getGameData( const QString& gameID, bool& tirviews, bool& dummy, unsigned char* table, QString& gamename);
private:
QIODevice *m_device;
QTextCodec *m_codec;
QString m_string;
int m_pos;
QRegExp m_rx;
-
+ CSV(QIODevice * device);
+ CSV(QString &string);
};
#endif // CSV_H
diff --git a/ftnoir_protocol_ft/csv.cpp b/ftnoir_protocol_ft/csv.cpp
deleted file mode 100644
index 22852f89..00000000
--- a/ftnoir_protocol_ft/csv.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/********************************************************************************
-* FaceTrackNoIR This program is a private project of the some enthusiastic *
-* gamers from Holland, who don't like to pay much for *
-* head-tracking. *
-* *
-* Copyright (C) 2013 Wim Vriend (Developing) *
-* Ron Hendriks (Researching and Testing) *
-* *
-* Homepage *
-* *
-* 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 3 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, see <http://www.gnu.org/licenses/>. *
-* *
-********************************************************************************/
-#include "csv.h"
-#include <QTextDecoder>
-
-CSV::CSV(QIODevice * device)
-{
- m_device = device;
- m_codec = QTextCodec::codecForLocale();
- m_pos = 0;
- m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");
-}
-CSV::CSV(QString &string){
- m_device = NULL;
- m_codec = QTextCodec::codecForLocale();
- m_string = string;
- m_pos = 0;
- m_rx = QRegExp("((?:(?:[^;\\n]*;?)|(?:\"[^\"]*\";?))*)\\n");
-}
-
-CSV::~CSV()
-{
- //delete m_codec;
-}
-
-
-void CSV::setCodec(const char* codecName){
- //delete m_codec;
- m_codec = QTextCodec::codecForName(codecName);
-}
-
-QString CSV::readLine(){
- QString line;
-
- if(m_string.isNull()){
- //READ DATA FROM DEVICE
- if(m_device && m_device->isReadable()){
- QTextDecoder dec(m_codec);
- m_string = dec.toUnicode(m_device->readAll());
- }else{
- return QString();
- }
- }
-
- //PARSE
- if((m_pos = m_rx.indexIn(m_string,m_pos)) != -1) {
- line = m_rx.cap(1);
- m_pos += m_rx.matchedLength();
- }
- return line;
-
-}
-QStringList CSV::parseLine(){
- return parseLine(readLine());
-}
-QStringList CSV::parseLine(QString line){
- QStringList list;
- int pos2 = 0;
- QRegExp rx2("(?:\"([^\"]*)\";?)|(?:([^;]*);?)");
- if(line.size()<1){
- list << "";
- }else while (line.size()>pos2 && (pos2 = rx2.indexIn(line, pos2)) != -1) {
- QString col;
- if(rx2.cap(1).size()>0)
- col = rx2.cap(1);
- else if(rx2.cap(2).size()>0)
- col = rx2.cap(2);
-
- list << col;
-
- if(col.size())
- pos2 += rx2.matchedLength();
- else
- pos2++;
- }
- return list;
-} \ No newline at end of file