Index: /trunk/libffado/src/rme/rme_avdevice.h
===================================================================
--- /trunk/libffado/src/rme/rme_avdevice.h (revision 2037)
+++ /trunk/libffado/src/rme/rme_avdevice.h (revision 2038)
@@ -190,5 +190,7 @@
signed int get_hardware_status(unsigned int *stat0, unsigned int *stat1);
signed int get_hardware_streaming_status(unsigned int *stat, unsigned int n);
+public:
signed int get_hardware_state(FF_state_t *state);
+private:
signed int set_hardware_params(FF_software_settings_t *use_settings = NULL);
Index: /trunk/libffado/src/rme/fireface_settings_ctrls.h
===================================================================
--- /trunk/libffado/src/rme/fireface_settings_ctrls.h (revision 2033)
+++ /trunk/libffado/src/rme/fireface_settings_ctrls.h (revision 2038)
@@ -54,4 +54,10 @@
#define RME_CTRL_INFO_MODEL 0x0100
#define RME_CTRL_INFO_TCO_PRESENT 0x0200
+#define RME_CTRL_INFO_SYSCLOCK_MODE 0x0300
+#define RME_CTRL_INFO_SYSCLOCK_FREQ 0x0301
+#define RME_CTRL_INFO_AUTOSYNC_FREQ 0x0310
+#define RME_CTRL_INFO_AUTOSYNC_SRC 0x0311
+#define RME_CTRL_INFO_SYNC_STATUS 0x0312
+#define RME_CTRL_INFO_SPDIF_FREQ 0x0313
/* Control types for an RmeSettingsMatrixCtrl object */
Index: /trunk/libffado/src/rme/rme_avdevice.cpp
===================================================================
--- /trunk/libffado/src/rme/rme_avdevice.cpp (revision 2037)
+++ /trunk/libffado/src/rme/rme_avdevice.cpp (revision 2038)
@@ -150,4 +150,22 @@
new RmeSettingsCtrl(*this, RME_CTRL_INFO_TCO_PRESENT, 0,
"TCO_present", "TCO is present", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_SYSCLOCK_MODE, 0,
+ "sysclock_mode", "System clock mode", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_SYSCLOCK_FREQ, 0,
+ "sysclock_freq", "System clock frequency", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_AUTOSYNC_FREQ, 0,
+ "autosync_freq", "Autosync frequency", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_AUTOSYNC_SRC, 0,
+ "autosync_src", "Autosync source", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_SYNC_STATUS, 0,
+ "sync_status", "Sync status", ""));
+ result &= m_ControlContainer->addElement(
+ new RmeSettingsCtrl(*this, RME_CTRL_INFO_SPDIF_FREQ, 0,
+ "spdif_freq", "SPDIF frequency", ""));
result &= m_ControlContainer->addElement(
Index: /trunk/libffado/src/rme/fireface_settings_ctrls.cpp
===================================================================
--- /trunk/libffado/src/rme/fireface_settings_ctrls.cpp (revision 2037)
+++ /trunk/libffado/src/rme/fireface_settings_ctrls.cpp (revision 2038)
@@ -156,4 +156,9 @@
case RME_CTRL_INFO_MODEL:
case RME_CTRL_INFO_TCO_PRESENT:
+ case RME_CTRL_INFO_SYSCLOCK_FREQ:
+ case RME_CTRL_INFO_AUTOSYNC_FREQ:
+ case RME_CTRL_INFO_AUTOSYNC_SRC:
+ case RME_CTRL_INFO_SYNC_STATUS:
+ case RME_CTRL_INFO_SPDIF_FREQ:
debugOutput(DEBUG_LEVEL_ERROR, "Attempt to set readonly info control 0x%08x\n", m_type);
err = 1;
@@ -173,4 +178,5 @@
signed int i;
signed int val = 0;
+FF_state_t ff_state;
switch (m_type) {
@@ -225,4 +231,31 @@
case RME_CTRL_INFO_TCO_PRESENT:
return m_parent.getTcoPresent();
+
+ case RME_CTRL_INFO_SYSCLOCK_MODE:
+ if (m_parent.get_hardware_state(&ff_state) == 0)
+ return ff_state.clock_mode;
+ break;
+ case RME_CTRL_INFO_SYSCLOCK_FREQ:
+ return m_parent.getSamplingFrequency();
+ case RME_CTRL_INFO_AUTOSYNC_FREQ:
+ if (m_parent.get_hardware_state(&ff_state) == 0)
+ return ff_state.autosync_freq;
+ break;
+ case RME_CTRL_INFO_AUTOSYNC_SRC:
+ if (m_parent.get_hardware_state(&ff_state) == 0)
+ return ff_state.autosync_source;
+ break;
+ case RME_CTRL_INFO_SYNC_STATUS:
+ if (m_parent.get_hardware_state(&ff_state) == 0)
+ return (ff_state.adat1_sync_status) |
+ (ff_state.adat2_sync_status << 2) |
+ (ff_state.spdif_sync_status << 4) |
+ (ff_state.wclk_sync_status << 6) |
+ (ff_state.tco_sync_status << 8);
+ break;
+ case RME_CTRL_INFO_SPDIF_FREQ:
+ if (m_parent.get_hardware_state(&ff_state) == 0)
+ return ff_state.spdif_freq;
+ break;
default:
Index: /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui
===================================================================
--- /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui (revision 2037)
+++ /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui (revision 2038)
@@ -763,5 +763,5 @@
-
-
+
No lock
@@ -777,5 +777,5 @@
-
-
+
No lock
@@ -805,5 +805,5 @@
-
-
+
No lock
@@ -812,4 +812,18 @@
-
+
+
+ TCO
+
+
+
+ -
+
+
+ No lock
+
+
+
+ -
@@ -841,5 +855,5 @@
-
-
+
[unset]
@@ -855,5 +869,5 @@
-
-
+
[unset]
@@ -908,5 +922,5 @@
-
-
+
48 kHz
@@ -991,5 +1005,5 @@
-
-
+
Slave
@@ -1005,5 +1019,5 @@
-
-
+
44100 kHz
Index: /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py
===================================================================
--- /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py (revision 2037)
+++ /trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py (revision 2038)
@@ -23,5 +23,5 @@
from PyQt4 import QtGui
-from PyQt4.QtCore import SIGNAL, SLOT, QObject, Qt
+from PyQt4.QtCore import SIGNAL, SLOT, QObject, Qt, QTimer
from PyQt4.QtGui import QWidget, QApplication
from ffado.config import *
@@ -127,4 +127,26 @@
log.debug("gain %s[%d] set to %d" % (self.Gains[sender][0], self.Gains[sender][1], a0))
self.hw.setMatrixMixerValue(self.Gains[sender][0], 0, self.Gains[sender][1], a0)
+
+ def status_update(self):
+ # log.debug("timer event")
+ clk_mode = ['Master', 'Slave']
+ src_str = ['None', 'ADAT 1', 'ADAT 2', 'SPDIF', 'Wordclock', 'TCO']
+ sync_stat = ['No lock', 'Locked', 'Synced']
+ sysclock_mode = self.hw.getDiscrete('/Control/sysclock_mode')
+ sysclock_freq = self.hw.getDiscrete('/Control/sysclock_freq')
+ autosync_freq = self.hw.getDiscrete('/Control/autosync_freq')
+ autosync_src = self.hw.getDiscrete('/Control/autosync_src')
+ sync_status = self.hw.getDiscrete('/Control/sync_status')
+ spdif_freq = self.hw.getDiscrete('/Control/spdif_freq')
+ self.sysclock_freq.setText("%d Hz" % (sysclock_freq))
+ self.sysclock_mode.setText(clk_mode[sysclock_mode])
+ self.autosync_freq.setText("%d Hz" % (autosync_freq))
+ self.autosync_src.setText(src_str[autosync_src])
+ self.sync_check_adat1_status.setText(sync_stat[sync_status & 0x03])
+ self.sync_check_adat2_status.setText(sync_stat[(sync_status >> 2) & 0x03])
+ self.sync_check_spdif_status.setText(sync_stat[(sync_status >> 4) & 0x03])
+ self.sync_check_wclk_status.setText(sync_stat[(sync_status >> 6) & 0x03])
+ self.sync_check_tco_status.setText(sync_stat[(sync_status >> 8) & 0x03])
+ self.spdif_freq.setText("%d Hz" % (spdif_freq))
# Hide and disable a control
@@ -193,4 +215,8 @@
self.sync_check_adat2_label.setEnabled(False)
self.sync_check_adat2_status.setEnabled(False)
+
+ if (not(self.tco_present)):
+ self.sync_check_tco_label.setEnabled(False)
+ self.sync_check_tco_status.setEnabled(False)
# Only the FF400 has specific channel 3/4 options, input gain
@@ -250,3 +276,7 @@
QObject.connect(ctrl, SIGNAL('valueChanged(int)'), self.updateGain)
+ self.update_timer = QTimer(self)
+ QObject.connect(self.update_timer, SIGNAL('timeout()'), self.status_update)
+ self.update_timer.start(1000)
+
# vim: et