summaryrefslogtreecommitdiffhomepage
path: root/tracker-hatire
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2016-05-09 16:25:31 +0200
committerStanislaw Halik <sthalik@misaki.pl>2016-05-09 16:25:31 +0200
commitacec691b5d6d6373e8f8f41f288d5fb6e2f84215 (patch)
tree1f1b7f6b98ddea8e4f9b750fff452337864e254f /tracker-hatire
parentfd0ad89c7c6f61aa14d6e908e9217121f4afa5c6 (diff)
tracker/hatire: add serial 100% cpu usage workaround
Issue: #327
Diffstat (limited to 'tracker-hatire')
-rwxr-xr-x[-rw-r--r--]tracker-hatire/ftnoir_hatcontrols.ui304
-rwxr-xr-xtracker-hatire/ftnoir_tracker_hat_dialog.cpp2
-rwxr-xr-xtracker-hatire/ftnoir_tracker_hat_settings.h3
-rwxr-xr-xtracker-hatire/thread.cpp13
4 files changed, 142 insertions, 180 deletions
diff --git a/tracker-hatire/ftnoir_hatcontrols.ui b/tracker-hatire/ftnoir_hatcontrols.ui
index 2d347f08..3ff54618 100644..100755
--- a/tracker-hatire/ftnoir_hatcontrols.ui
+++ b/tracker-hatire/ftnoir_hatcontrols.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>370</width>
- <height>740</height>
+ <width>341</width>
+ <height>525</height>
</rect>
</property>
<property name="minimumSize">
@@ -42,60 +42,16 @@
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_7">
- <item row="1" column="2">
- <widget class="QPushButton" name="btnCancel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="text">
- <string>Cancel</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QPushButton" name="btnOK">
+ <item row="0" column="0" colspan="2">
+ <widget class="QTabWidget" name="tabWidget">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="text">
- <string>OK</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0" colspan="3">
- <widget class="QTabWidget" name="tabWidget">
- <property name="minimumSize">
- <size>
<width>0</width>
<height>0</height>
</size>
@@ -114,6 +70,15 @@
<string>General</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <property name="leftMargin">
+ <number>4</number>
+ </property>
+ <property name="rightMargin">
+ <number>4</number>
+ </property>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
@@ -126,6 +91,31 @@
<property name="spacing">
<number>4</number>
</property>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="cbSerialPort">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>65535</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+ </property>
+ <property name="modelColumn">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
@@ -145,28 +135,29 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QComboBox" name="cbSerialPort">
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="serial_bug_workaround">
+ <property name="text">
+ <string>Buggy serial port uses too much CPU</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_6">
<property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
- <width>65535</width>
+ <width>65536</width>
<height>16777215</height>
</size>
</property>
- <property name="editable">
- <bool>false</bool>
- </property>
- <property name="sizeAdjustPolicy">
- <enum>QComboBox::AdjustToMinimumContentsLength</enum>
- </property>
- <property name="modelColumn">
- <number>0</number>
+ <property name="text">
+ <string>Workaround</string>
</property>
</widget>
</item>
@@ -190,22 +181,6 @@
</widget>
</item>
<item>
- <widget class="QPushButton" name="btnCenter">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>20</height>
- </size>
- </property>
- <property name="text">
- <string>Center</string>
- </property>
- </widget>
- </item>
- <item>
<widget class="QPushButton" name="btnReset">
<property name="enabled">
<bool>false</bool>
@@ -852,13 +827,6 @@
<string>Arduino Commands</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="1">
- <widget class="QLabel" name="lab_cmd_init_2">
- <property name="text">
- <string>Delay Init</string>
- </property>
- </widget>
- </item>
<item row="1" column="0">
<widget class="QLabel" name="lab_cmd_init">
<property name="text">
@@ -866,20 +834,6 @@
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="le_cmd_init">
- <property name="toolTip">
- <string>Command for Initialising Arduino</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="lab_cmd_init_3">
- <property name="text">
- <string>Delay Start</string>
- </property>
- </widget>
- </item>
<item row="3" column="0">
<widget class="QLabel" name="lab_cmd_start">
<property name="text">
@@ -894,27 +848,24 @@
</property>
</widget>
</item>
- <item row="4" column="1">
- <widget class="QLabel" name="lab_cmd_init_4">
- <property name="text">
- <string>Delay Sequence</string>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="le_cmd_init">
+ <property name="toolTip">
+ <string>Command for Initialising Arduino</string>
</property>
</widget>
</item>
- <item row="4" column="2">
- <widget class="QSpinBox" name="spb_AfterStart">
+ <item row="5" column="1">
+ <widget class="QLineEdit" name="le_cmd_stop">
<property name="toolTip">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Delay after Start Command in ms&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- <property name="maximum">
- <number>5000</number>
+ <string>Command for Stop send sequence</string>
</property>
- <property name="singleStep">
- <number>50</number>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="lab_cmd_center">
+ <property name="text">
+ <string>Center:</string>
</property>
</widget>
</item>
@@ -925,17 +876,10 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
- <item row="5" column="1">
- <widget class="QLineEdit" name="le_cmd_stop">
- <property name="toolTip">
- <string>Command for Stop send sequence</string>
- </property>
- </widget>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="lab_cmd_center">
+ <item row="8" column="0">
+ <widget class="QLabel" name="lab_cmd_reset">
<property name="text">
- <string>Center:</string>
+ <string>Reset:</string>
</property>
</widget>
</item>
@@ -946,6 +890,13 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
+ <item row="8" column="1">
+ <widget class="QLineEdit" name="le_cmd_reset">
+ <property name="toolTip">
+ <string>Command for Reset Arduino</string>
+ </property>
+ </widget>
+ </item>
<item row="7" column="0">
<widget class="QLabel" name="lab_cmd_zero">
<property name="text">
@@ -960,20 +911,6 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
- <item row="8" column="0">
- <widget class="QLabel" name="lab_cmd_reset">
- <property name="text">
- <string>Reset:</string>
- </property>
- </widget>
- </item>
- <item row="8" column="1">
- <widget class="QLineEdit" name="le_cmd_reset">
- <property name="toolTip">
- <string>Command for Reset Arduino</string>
- </property>
- </widget>
- </item>
<item row="8" column="2">
<widget class="QCheckBox" name="cb_Endian">
<property name="toolTip">
@@ -989,7 +926,26 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
- <item row="0" column="2">
+ <item row="7" column="2">
+ <widget class="QSpinBox" name="spb_Fps">
+ <property name="maximumSize">
+ <size>
+ <width>51</width>
+ <height>19</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indicate at OpenTrack speed sketch FPS to adjust CPU &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="minimum">
+ <number>10</number>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
<widget class="QSpinBox" name="spb_BeforeInit">
<property name="maximumSize">
<size>
@@ -1012,7 +968,7 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
- <item row="2" column="2">
+ <item row="3" column="2">
<widget class="QSpinBox" name="spb_BeforeStart">
<property name="toolTip">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
@@ -1029,22 +985,40 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
- <item row="7" column="2">
- <widget class="QSpinBox" name="spb_Fps">
- <property name="maximumSize">
- <size>
- <width>51</width>
- <height>19</height>
- </size>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="toolTip">
- <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indicate at OpenTrack speed sketch FPS to adjust CPU &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ <property name="text">
+ <string>Delay</string>
</property>
- <property name="minimum">
- <number>10</number>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QSpinBox" name="spb_AfterStart">
+ <property name="toolTip">
+ <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Delay after Start Command in ms&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="maximum">
- <number>200</number>
+ <number>5000</number>
+ </property>
+ <property name="singleStep">
+ <number>50</number>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="lab_cmd_init_4">
+ <property name="text">
+ <string>Delay after startup</string>
</property>
</widget>
</item>
@@ -1172,34 +1146,18 @@ p, li { white-space: pre-wrap; }
</widget>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QPushButton" name="btnSave">
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>80</width>
- <height>25</height>
- </size>
- </property>
- <property name="text">
- <string>Save</string>
+ <item row="1" column="0">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
- <tabstop>btnOK</tabstop>
- <tabstop>btnSave</tabstop>
- <tabstop>btnCancel</tabstop>
<tabstop>cbSerialPort</tabstop>
<tabstop>btnZero</tabstop>
- <tabstop>btnCenter</tabstop>
<tabstop>btnReset</tabstop>
<tabstop>chkEnableYaw</tabstop>
<tabstop>cb_yaw</tabstop>
@@ -1219,9 +1177,7 @@ p, li { white-space: pre-wrap; }
<tabstop>chkEnableZ</tabstop>
<tabstop>cb_z</tabstop>
<tabstop>chkInvertZ</tabstop>
- <tabstop>spb_BeforeInit</tabstop>
<tabstop>le_cmd_init</tabstop>
- <tabstop>spb_BeforeStart</tabstop>
<tabstop>le_cmd_start</tabstop>
<tabstop>spb_AfterStart</tabstop>
<tabstop>le_cmd_stop</tabstop>
diff --git a/tracker-hatire/ftnoir_tracker_hat_dialog.cpp b/tracker-hatire/ftnoir_tracker_hat_dialog.cpp
index 60ddd14a..734619c9 100755
--- a/tracker-hatire/ftnoir_tracker_hat_dialog.cpp
+++ b/tracker-hatire/ftnoir_tracker_hat_dialog.cpp
@@ -98,6 +98,8 @@ TrackerControls::TrackerControls() : theTracker(nullptr), timer(this)
tie_setting(s.pParity, ui.QCB_Serial_parity);
tie_setting(s.pStopBits, ui.QCB_Serial_stopBits);
+ tie_setting(s.serial_bug_workaround, ui.serial_bug_workaround);
+
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));
diff --git a/tracker-hatire/ftnoir_tracker_hat_settings.h b/tracker-hatire/ftnoir_tracker_hat_settings.h
index 92dacd42..53ab8870 100755
--- a/tracker-hatire/ftnoir_tracker_hat_settings.h
+++ b/tracker-hatire/ftnoir_tracker_hat_settings.h
@@ -22,7 +22,7 @@ struct TrackerSettings : opts
value<int> DelayInit, DelayStart, DelaySeq;
- value<bool> BigEndian, EnableLogging;
+ value<bool> BigEndian, EnableLogging, serial_bug_workaround;
value<QString> QSerialPortName;
@@ -63,6 +63,7 @@ struct TrackerSettings : opts
DelaySeq(b, "after-start-delay", 0),
BigEndian(b, "is-big-endian", false),
EnableLogging(b, "enable-logging", false),
+ serial_bug_workaround(b, "serial-bug-workaround", false),
QSerialPortName(b, "serial-port-name", ""),
pBaudRate(b, "baud-rate", QSerialPort::Baud115200),
pDataBits(b, "data-bits", QSerialPort::Data8),
diff --git a/tracker-hatire/thread.cpp b/tracker-hatire/thread.cpp
index 238c5fdd..d512e463 100755
--- a/tracker-hatire/thread.cpp
+++ b/tracker-hatire/thread.cpp
@@ -309,11 +309,14 @@ void hatire_thread::on_serial_read()
qDebug() << "stat:" << "avg" << stat.avg() << "stddev" << stat.stddev();
}
- // qt can fire QSerialPort::readyRead() needlessly, causing a busy loop.
- // see https://github.com/opentrack/opentrack/issues/327#issuecomment-207941003
- constexpr int hz = 90;
- constexpr int ms = 1000/hz;
- portable::sleep(ms);
+ if (s.serial_bug_workaround)
+ {
+ // qt can fire QSerialPort::readyRead() needlessly, causing a busy loop.
+ // see https://github.com/opentrack/opentrack/issues/327#issuecomment-207941003
+ constexpr int hz = 90;
+ constexpr int ms = 1000/hz;
+ portable::sleep(ms);
+ }
}
QByteArray& hatire_thread::send_data_read_nolock()