From 1ed6b9eed5713d80675a3059ddbb8ea8d2851714 Mon Sep 17 00:00:00 2001 From: Louis-Joseph Fournier Date: Sun, 27 Dec 2015 10:57:37 +0100 Subject: [PATCH] Sailfish: build integration, display frequencie --- harbour-sailtuner.desktop | 11 ++++++ harbour-sailtuner.png | Bin 0 -> 8827 bytes harbour-sailtuner.pro | 20 +++++++++++ qml/Sailfish.qml | 55 ++++++++++++++++++++++++++++ qml/sailfish.qrc | 5 +++ rpm/Makefile | 72 +++++++++++++++++++++++++++++++++++++ rpm/harbour-sailtuner.spec | 70 ++++++++++++++++++++++++++++++++++++ src/Tuner.cpp | 2 ++ src/audio/ZeroCross.cpp | 4 +-- src/sailfish.cpp | 33 +++++++++++++++++ 10 files changed, 270 insertions(+), 2 deletions(-) create mode 100644 harbour-sailtuner.desktop create mode 100644 harbour-sailtuner.png create mode 100644 harbour-sailtuner.pro create mode 100644 qml/Sailfish.qml create mode 100644 qml/sailfish.qrc create mode 100644 rpm/Makefile create mode 100644 rpm/harbour-sailtuner.spec create mode 100644 src/sailfish.cpp diff --git a/harbour-sailtuner.desktop b/harbour-sailtuner.desktop new file mode 100644 index 0000000..3afc908 --- /dev/null +++ b/harbour-sailtuner.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Application +Icon=harbour-sailtuner +Exec=harbour-sailtuner +X-Nemo-Application-Type=silica-qt5 +Name=SailTuner +# translation example: +# your app name in German locale (de) +# +# Remember to comment out the following line, if you do not want to use +# a different app name in German locale (de). diff --git a/harbour-sailtuner.png b/harbour-sailtuner.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed80df2fb2faabfe7ef01c0ca2441ff59613e1f GIT binary patch literal 8827 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 + +Sailfish.qml + + diff --git a/rpm/Makefile b/rpm/Makefile new file mode 100644 index 0000000..722ee0d --- /dev/null +++ b/rpm/Makefile @@ -0,0 +1,72 @@ +# helper to build for Sailfish with sdk engine + +SAILFISHOS_DIR = $(HOME)/SailfishOS + +SSH_KEYS_DIR = $(SAILFISHOS_DIR)/vmshare/ssh/private_keys +SSH_KEY_ENGINE = $(SSH_KEYS_DIR)/engine/mersdk +SSH_KEY_EMULATOR = $(SSH_KEYS_DIR)/SailfishOS_Emulator/nemo + +SSH_LOGIN_ENGINE = mersdk@localhost +SSH_LOGIN_EMULATOR = nemo@localhost +SSH_LOGIN_JOLLA = nemo@jolla + +HOME_ENGINE = /home/mersdk/share + +BUILD_DIR_LOCAL = $(HOME)/merBuild/sailtuner +BUILD_DIR_ENGINE = $(HOME_ENGINE)/merBuild/sailtuner + +SOURCE_DIR_LOCAL = $(PWD)/.. +#SOURCE_DIR_ENGINE = $(subst $(HOME),$(HOME_ENGINE),$(SOURCE_DIR_LOCAL)) +SOURCE_DIR_ENGINE = /home/src1/SailTuner + +PRO_FILE = harbour-sailtuner.pro + +I486_TARGET = SailfishOS-i486 +JOLLA_TARGET = SailfishOS-armv7hl + +ENGINE_PORT = 2222 +EMULATOR_PORT = 2223 + +BUILD_DIR_LOCAL_I486 = $(BUILD_DIR_LOCAL)/$(I486_TARGET) +BUILD_DIR_LOCAL_JOLLA = $(BUILD_DIR_LOCAL)/$(JOLLA_TARGET) + +BUILD_DIR_ENGINE_I486 = $(BUILD_DIR_ENGINE)/$(I486_TARGET) +BUILD_DIR_ENGINE_JOLLA = $(BUILD_DIR_ENGINE)/$(JOLLA_TARGET) + +SSH_ENGINE = ssh -p 2222 -i $(SSH_KEY_ENGINE) $(SSH_LOGIN_ENGINE) +SSH_EMULATOR = ssh -p 2223 -i $(SSH_KEY_EMULATOR) $(SSH_LOGIN_EMULATOR) + +SCP_EMULATOR = scp -P 2223 -i $(SSH_KEY_EMULATOR) + +RPM_I486 = harbour-sailtuner-0.1-1.i486.rpm +RPM_JOLLA = harbour-sailtuner-0.1-1.armv7hl.rpm + +MB2 = mb2 -p $(SOURCE_DIR_ENGINE) + +all: $(BUILD_DIR_LOCAL_I486)/Makefile + +$(BUILD_DIR_LOCAL_I486): + mkdir -p $@ + +$(BUILD_DIR_LOCAL_I486)/Makefile: $(BUILD_DIR_LOCAL_I486) + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_I486) && $(MB2) qmake $(SOURCE_DIR_ENGINE)/$(PRO_FILE)" + +rpm-i486: $(BUILD_DIR_LOCAL_I486)/Makefile + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_I486) && $(MB2) rpm" + +install-i486: rpm-i486 + $(SCP_EMULATOR) $(BUILD_DIR_LOCAL_I486)/RPMS/$(RPM_I486) $(SSH_LOGIN_EMULATOR): + $(SSH_EMULATOR) "sudo rpm -i $(RPM_I486) --force" + +$(BUILD_DIR_LOCAL_JOLLA): + mkdir -p $@ + +$(BUILD_DIR_LOCAL_JOLLA)/Makefile: $(BUILD_DIR_LOCAL_JOLLA) + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_JOLLA) && $(MB2) -t $(JOLLA_TARGET) qmake $(SOURCE_DIR_ENGINE)/$(PRO_FILE)" + +rpm-jolla: $(BUILD_DIR_LOCAL_JOLLA)/Makefile + $(SSH_ENGINE) "cd $(BUILD_DIR_ENGINE_JOLLA) && $(MB2) -t $(JOLLA_TARGET) rpm" + +install-jolla: rpm-jolla + scp $(BUILD_DIR_LOCAL_JOLLA)/RPMS/$(RPM_JOLLA) $(SSH_LOGIN_JOLLA): + ssh $(SSH_LOGIN_JOLLA) "devel-su rpm -i $(RPM_JOLLA) --force" diff --git a/rpm/harbour-sailtuner.spec b/rpm/harbour-sailtuner.spec new file mode 100644 index 0000000..735a66b --- /dev/null +++ b/rpm/harbour-sailtuner.spec @@ -0,0 +1,70 @@ +# +# Do NOT Edit the Auto-generated Part! +# Generated by: spectacle version 0.27 +# + +Name: harbour-sailtuner + +# >> macros +# << macros + +%{!?qtc_qmake:%define qtc_qmake %qmake} +%{!?qtc_qmake5:%define qtc_qmake5 %qmake5} +%{!?qtc_make:%define qtc_make make} +%{?qtc_builddir:%define _builddir %qtc_builddir} +Summary: Chromatic tuner +Version: 0.1 +Release: 1 +Group: Qt/Qt +License: GPL +URL: http://legolas.vefblog.net/ +Source0: %{name}-%{version}.tar.bz2 +#Source100: harbour-saildbmeter.yaml +Requires: sailfishsilica-qt5 >= 0.10.9 +BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 +BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Qml) +BuildRequires: pkgconfig(Qt5Quick) +BuildRequires: desktop-file-utils + +%description +Instrumental multi-temperament chromatic tuner + +%prep +%setup -q -n %{name}-%{version} + +# >> setup +# << setup + +%build +# >> build pre +# << build pre + +%qtc_qmake5 + +%qtc_make %{?_smp_mflags} + +# >> build post +# << build post + +%install +rm -rf %{buildroot} +# >> install pre +# << install pre +%qmake5_install + +# >> install post +# << install post + +desktop-file-install --delete-original \ + --dir %{buildroot}%{_datadir}/applications \ + %{buildroot}%{_datadir}/applications/*.desktop + +%files +%defattr(-,root,root,-) +%{_bindir} +%{_datadir}/%{name} +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/86x86/apps/%{name}.png +# >> files +# << files diff --git a/src/Tuner.cpp b/src/Tuner.cpp index 05298b1..b6398f1 100644 --- a/src/Tuner.cpp +++ b/src/Tuner.cpp @@ -46,6 +46,7 @@ Tuner::~Tuner() void Tuner::Start() { + cerr << __func__ << endl; high_filter->Clear(); cross->Clear(); recorder->record(); @@ -55,6 +56,7 @@ void Tuner::Start() void Tuner::Stop() { + cerr << __func__ << endl; running = false; recorder->stop(); runningChanged(); diff --git a/src/audio/ZeroCross.cpp b/src/audio/ZeroCross.cpp index a20fcc1..75d7cac 100644 --- a/src/audio/ZeroCross.cpp +++ b/src/audio/ZeroCross.cpp @@ -9,7 +9,7 @@ using namespace std; /// Maximum rest of division to be a multiple of #define EPS_DIVISOR 0.1 /// Consider it is a correct pattern to avoid multiples of -#define CORRECT_DEVIATION 0.05 +#define CORRECT_DEVIATION 1 // local functions @@ -69,8 +69,8 @@ pair FindPattern(const vector &values, double pattern_min best = res; } } + cerr << " -> " << best.first << " " << best.second << endl; if (best.second > CORRECT_DEVIATION) return pair(0,0); - cout << " -> " << best.first << " " << best.second << " "; return best; } diff --git a/src/sailfish.cpp b/src/sailfish.cpp new file mode 100644 index 0000000..1fa1702 --- /dev/null +++ b/src/sailfish.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include "Tuner.hpp" + +class Main { + private: + QGuiApplication *app; + QQuickView *view; + + public: + Main(int &argc, char* argv[]) { + app = SailfishApp::application(argc, argv); + view = SailfishApp::createView(); + view->setSource(QUrl("qrc:///qml/Sailfish.qml")); + QObject::connect(view->engine(), SIGNAL(quit()), app, SLOT(quit())); + } + Main() {} + ~Main() {} + + int Launch() { + view->show(); + return app->exec(); + } +}; + +Q_DECL_EXPORT int main(int argc, char* argv[]) +{ + qmlRegisterType("harbour.sailtuner.tuner", 1, 0, "Tuner"); + Main *appli = new Main(argc, argv); + return appli->Launch(); +}