Projects
home:wkazubski
qt-dab
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 7
View file
qt-dab.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Fri Nov 30 20:12:07 UTC 2018 - wk@ire.pw.edu.pl + +- updated to git 20181129 + +------------------------------------------------------------------- Thu Nov 1 22:53:30 UTC 2018 - wk@ire.pw.edu.pl - updated to git 20181030
View file
qt-dab.spec
Changed
@@ -18,7 +18,7 @@ #norootforbuild Name: qt-dab -Version: 2.0git20181030 +Version: 2.0git20181129 Release: 0 License: GPL-2.0-or-later Summary: Simple DAB/DAB+ receiver
View file
qt-dab-2.0git20181030.tar.gz/src/backend/audio/newconverter.cpp
Deleted
@@ -1,85 +0,0 @@ -# -/* - * Copyright (C) 2011, 2012, 2013 - * Jan van Katwijk (J.vanKatwijk@gmail.com) - * Lazy Chair Computing - * - * This file is part of Qt-DAB - * - * Qt-DAB 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. - * - * Qt-DAB 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 Qt-DAB; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "newconverter.h" - - newConverter::newConverter (int32_t inRate, int32_t outRate, - int32_t inSize) { -int err; - this -> inRate = inRate; - this -> outRate = outRate; - inputLimit = inSize; - ratio = double(outRate) / inRate; - fprintf (stderr, "ratio = %f\n", ratio); - outputLimit = inSize * ratio; -// converter = src_new (SRC_SINC_BEST_QUALITY, 2, &err); -// converter = src_new (SRC_LINEAR, 2, &err); - converter = src_new (SRC_SINC_MEDIUM_QUALITY, 2, &err); - src_data = new SRC_DATA; - inBuffer = new float [2 * inputLimit + 20]; - outBuffer = new float [2 * outputLimit + 20]; - src_data-> data_in = inBuffer; - src_data-> data_out = outBuffer; - src_data-> src_ratio = ratio; - src_data-> end_of_input = 0; - inp = 0; -} - - newConverter::~newConverter (void) { - src_delete (converter); - delete [] inBuffer; - delete [] outBuffer; - delete src_data; -} - -bool newConverter::convert (DSPCOMPLEX v, - DSPCOMPLEX *out, int32_t *amount) { -int32_t i; -int32_t framesOut; -int res; - - inBuffer [2 * inp] = real (v); - inBuffer [2 * inp + 1] = imag (v); - inp ++; - if (inp < inputLimit) - return false; - - src_data -> input_frames = inp; - src_data -> output_frames = outputLimit + 10; - res = src_process (converter, src_data); - if (res != 0) { - fprintf (stderr, "error %s\n", src_strerror (res)); - return false; - } - inp = 0; - framesOut = src_data -> output_frames_gen; - for (i = 0; i < framesOut; i ++) - out [i] = DSPCOMPLEX (outBuffer [2 * i], outBuffer [2 * i + 1]); - *amount = framesOut; - return true; -} - -int32_t newConverter::getOutputsize (void) { - return outputLimit; -} -
View file
qt-dab-2.0git20181030.tar.gz/README.md -> qt-dab-2.0git20181129.tar.gz/README.md
Changed
@@ -51,7 +51,8 @@ * TPEG: when configured, TPEG messages are being sent to a TCP port; sources for a simple client are part of the source distribution. * EPG: when configured, the EPG decoding will generate so called EHB files. - * Journaline (an untested Journaline implementation is part of the sources) + * Journaline (an untested Journaline implementation is part of the sources). + * ip output: when configured the ip data - if selected - is sent to a specificied ip address (default: 127.0.0.1:8888). * Other bands than used for terrestrial broadcasting in Europe (like DAB over cable) ------------------------------------------------------------------ @@ -62,24 +63,22 @@ **Qt-DAB-2.0** is an implementation of a DAB decoder for use on Linux and Windows based PC's, including some ARM based boards, such as the Raspberry PI, both 2 and 3. -Beside to Qt-DAB, there exists a "light" version, **dabradio**, and a command-line based version. Both, the Qt-DAB version and the dabradio version, are implemented in C++, using the Qt framework for the implementation of the GUI. The command-line version is implemented using C++, but does not depend on Qt. +Beside to Qt-DAB, there exists a "light" version, **dabradio**, an SDRPlay-specific version **sdrplayDab** and a command-line based version. All three versions with a GUI are implemented in C++, using the Qt framework for the implementation of the GUI. The command-line version is implemented using C++, and does not depend on Qt. -dabradio and the Qt-free version, the "command-line only" version have their own repository on Github. +**dabradio**, **sdrplayDab** and the Qt-free version, **dab-cmdline** the "command-line only", version have their own repository on Github. -The Qt-DAB and the dab-cmdline version both support decoding of terrestrial DAB and DAB+ reception from either an AIRSPY, an SDRplay, the HACK RF, or a dabstick (rtl_sdr). +The Qt-DAB and the dab-cmdline version both support decoding of terrestrial DAB and DAB+ reception from either an AIRSPY, an SDRplay, the HACK RF, or a dabstick (rtl_sdr). The sdrplayDab version is tightly couples to the SDRplay device. -Beside to these C++ based versions, a version in Java is being developed, it has its own repository on Github. +Beside to these C++ based versions, (slightly limited) versions are implemented in Java and Ada, both with their own repository on Github. The Qt-DAB version also supports input from an rtl-tcp server (see osmocom software) and pre-recorded files (`*.sdr`, `*.iq` and `*.raw`). Obviously there is a provision for dumping the input into an (\*.sdr)-file. Note that if the rtl_tcp server is used as input device, the connection needs to support the inputrate, i.e. 2,048,000 I/Q samples (i.e. 2 * 2,048,000 bytes/second). -Since the Qt-DAB version has to run on a headless RPI 2, using the home WiFi, the resulting PCM output can be sent - if so configured - to a TCP port (Sources for a small client are part of the source distribution). +Since the Qt-DAB version has to run on a headless RPI 2/3, using the home WiFi, the resulting PCM output can be sent - if so configured - to a TCP port (Sources for a small client are part of the source distribution). For further information please visit http://www.sdr-j.tk -An (outdated) manual in PDF format can be found at http://www.sdr-j.tk/sdr-j-dab-manual-0.99.pdf (is valid for qt-dab as well) - Some settings are preserved between program invocations, they are stored in a file `.qt-dab.ini`, to be found in the home directory. See [Comment on some settings](#comment-on-some-settings) for more details. ------------------------------------------------------------------
View file
qt-dab-2.0git20181030.tar.gz/forms/dabradio.ui -> qt-dab-2.0git20181129.tar.gz/forms/dabradio.ui
Changed
@@ -1,646 +1,780 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>dabradio</class> - <widget class="QMainWindow" name="dabradio"> + <widget class="QWidget" name="dabradio"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>513</width> - <height>363</height> + <width>598</width> + <height>394</height> </rect> </property> <property name="windowTitle"> - <string>Qt-DAB</string> + <string>qt-dab</string> </property> - <widget class="QWidget" name="centralwidget"> - <widget class="QComboBox" name="streamoutSelector"> - <property name="geometry"> - <rect> - <x>8</x> - <y>180</y> - <width>211</width> - <height>29</height> - </rect> - </property> - <property name="toolTip"> - <string><html><head/><body><p>Select a device (channel) for the audio output. On program start up a default is chosen.</p></body></html></string> - </property> - <item> - <property name="text"> - <string>Select audio device</string> - </property> - </item> - </widget> - <widget class="QComboBox" name="bandSelector"> - <property name="geometry"> - <rect> - <x>10</x> - <y>240</y> - <width>131</width> - <height>29</height> - </rect> - </property> - <property name="toolTip"> - <string><html><head/><body><p>Select a DAB band.</p><p>The default is VHF Band III (174–230 MHz).</p><p>Alternatively, the L Band may be selected (1452 bis 1492 MHz, but only used in very few countries like Czech Republic).</p></body></html></string> - </property> - <item> - <property name="text"> - <string>VHF Band III</string> - </property> - </item> - <item> - <property name="text"> - <string>L Band</string> - </property> - </item> - </widget> - <widget class="QPushButton" name="audioDumpButton"> - <property name="geometry"> - <rect> - <x>8</x> - <y>150</y> - <width>91</width> - <height>31</height> - </rect> - </property> - <property name="toolTip"> - <string><html><head/><body><p>Push this button to save audio output into a file. First push will show a menu for file selection. </p><p>Push again to stop recording.</p></body></html></string> - </property> - <property name="text"> - <string>Save audio</string> - </property> - </widget> - <widget class="QPushButton" name="dumpButton"> - <property name="geometry"> - <rect> - <x>98</x> - <y>150</y> - <width>121</width> - <height>31</height> - </rect> - </property> - <property name="font"> - <font> - <pointsize>11</pointsize> - </font> - </property> - <property name="toolTip"> - <string><html><head/><body><p>Push this button to save the raw input. Pushing will cause a menu to appear where a filename can be selected. Please note the big filesizes!</p><p>Push again to stop recording. You can reload it by using the file input (*.sdr) option. </p></body></html></string> - </property> + <widget class="QPushButton" name="showProgramData"> + <property name="geometry"> + <rect> + <x>500</x> + <y>10</y> + <width>81</width> + <height>34</height> + </rect> + </property> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>10</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Push this button for further technical information about the selected program</p><p>Push again for closing the pop-up-window.</p></body></html></string> + </property> + <property name="text"> + <string>Detail</string> + </property> + </widget> + <widget class="QPushButton" name="audioDumpButton"> + <property name="geometry"> + <rect> + <x>490</x> + <y>280</y> + <width>88</width> + <height>35</height> + </rect> + </property> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>10</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Push this button to save audio output into a file. First push will show a menu for file selection. Push again to stop recording.</p></body></html></string> + </property> + <property name="text"> + <string>REC</string> + </property> + </widget> + <widget class="QPushButton" name="show_irButton"> + <property name="geometry"> + <rect> + <x>407</x> + <y>310</y> + <width>81</width> + <height>35</height> + </rect> + </property> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>10</pointsize> + </font> + </property> + <property name="text"> + <string>IR</string> + </property> + </widget> + <widget class="QPushButton" name="dumpButton"> + <property name="geometry"> + <rect> + <x>490</x> + <y>310</y> + <width>88</width> + <height>35</height> + </rect> + </property> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>10</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Push this button to save the raw input. Pushing will cause a menu to appear where a filename can be selected. Please note the big filesizes!</p><p>Push again to stop recording. You can reload it by using the file input (*.sdr) option. </p></body></html></string> + </property> + <property name="text"> + <string>Raw</string> + </property> + </widget> + <widget class="QListView" name="ensembleDisplay"> + <property name="geometry"> + <rect> + <x>20</x> + <y>90</y> + <width>181</width> + <height>281</height> + </rect> + </property> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>10</pointsize> + </font> + </property> + </widget> + <widget class="QComboBox" name="streamoutSelector"> + <property name="geometry"> + <rect> + <x>210</x>
View file
qt-dab-2.0git20181129.tar.gz/forms/dabradio.ui-1
Added
@@ -0,0 +1,815 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>dabradio</class> + <widget class="QMainWindow" name="dabradio"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>640</width> + <height>460</height> + </rect> + </property> + <property name="minimumSize"> + <size> + <width>640</width> + <height>460</height> + </size> + </property> + <property name="sizeIncrement"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="windowTitle"> + <string>Qt-DAB</string> + </property> + <widget class="QWidget" name="centralwidget"> + <widget class="QListView" name="ensembleDisplay"> + <property name="geometry"> + <rect> + <x>10</x> + <y>90</y> + <width>231</width> + <height>331</height> + </rect> + </property> + <property name="font"> + <font> + <pointsize>14</pointsize> + </font> + </property> + </widget> + <widget class="QLabel" name="versionName"> + <property name="geometry"> + <rect> + <x>10</x> + <y>10</y> + <width>231</width> + <height>31</height> + </rect> + </property> + <property name="font"> + <font> + <pointsize>16</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Copyright (C) 2016, 2017 Jan van Katwijk (J.vanKatwijk@gmail.com), Lazy Chair Programming</p><p>Qt-DAB 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.</p></body></html></string> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QLabel" name="label"> + <property name="geometry"> + <rect> + <x>210</x> + <y>10</y> + <width>21</width> + <height>21</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Qt-DAB copyright:</p><p>J van Katwijk, Lazy Chair Computing. J.vanKatwijk@gmail.com</p><p>Copyright of the Qt toolkit used: the Qt Company</p><p>Copyright of the libraries used for SDRplay, rtl-sdr based sticks, AIRspy, portaudio, libsndfile and libsamplerate to their developers</p><p>Copyright of the MP2 library used Martin J Fiedler</p><p>Copyright of the firecode checker: Gnu Radio</p><p>Copyright of the viterbi decoder kernel: the Spiral project</p><p>Copyright of the Reed Solomon Decoder software: Phil Karns</p><p>All copyrights gratefully acknowledged</p><p><br/></p><p>Qt-DAB (an SDR-J 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.<br/></p></body></html></string> + </property> + <property name="text"> + <string>©</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QLabel" name="timeDisplay"> + <property name="geometry"> + <rect> + <x>10</x> + <y>70</y> + <width>231</width> + <height>20</height> + </rect> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + <widget class="QWidget" name="layoutWidget"> + <property name="geometry"> + <rect> + <x>250</x> + <y>110</y> + <width>381</width> + <height>211</height> + </rect> + </property> + <property name="font"> + <font> + <pointsize>12</pointsize> + </font> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>2</number> + </property> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>2</number> + </property> + <item> + <widget class="QLabel" name="ensembleName"> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>14</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Ensemble name</p></body></html></string> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignHCenter|Qt::AlignTop</set> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="serviceLabel"> + <property name="font"> + <font> + <family>DejaVu Sans</family> + <pointsize>20</pointsize> + </font> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QLabel" name="dynamicLabel"> + <property name="font"> + <font> + <pointsize>12</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Dynamic label (DLS)</p><p>The selected program may carry some textual information, that information is displayed here.</p></body></html></string> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> + </property>
View file
qt-dab-2.0git20181129.tar.gz/forms/dabradio.ui-old
Added
@@ -0,0 +1,647 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>dabradio</class> + <widget class="QMainWindow" name="dabradio"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>513</width> + <height>363</height> + </rect> + </property> + <property name="windowTitle"> + <string>Qt-DAB</string> + </property> + <widget class="QWidget" name="centralwidget"> + <widget class="QComboBox" name="streamoutSelector"> + <property name="geometry"> + <rect> + <x>8</x> + <y>180</y> + <width>211</width> + <height>29</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Select a device (channel) for the audio output. On program start up a default is chosen.</p></body></html></string> + </property> + <item> + <property name="text"> + <string>Select audio device</string> + </property> + </item> + </widget> + <widget class="QComboBox" name="bandSelector"> + <property name="geometry"> + <rect> + <x>10</x> + <y>240</y> + <width>131</width> + <height>29</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Select a DAB band.</p><p>The default is VHF Band III (174–230 MHz).</p><p>Alternatively, the L Band may be selected (1452 bis 1492 MHz, but only used in very few countries like Czech Republic).</p></body></html></string> + </property> + <item> + <property name="text"> + <string>VHF Band III</string> + </property> + </item> + <item> + <property name="text"> + <string>L Band</string> + </property> + </item> + </widget> + <widget class="QPushButton" name="audioDumpButton"> + <property name="geometry"> + <rect> + <x>8</x> + <y>150</y> + <width>91</width> + <height>31</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Push this button to save audio output into a file. First push will show a menu for file selection. </p><p>Push again to stop recording.</p></body></html></string> + </property> + <property name="text"> + <string>Save audio</string> + </property> + </widget> + <widget class="QPushButton" name="dumpButton"> + <property name="geometry"> + <rect> + <x>98</x> + <y>150</y> + <width>121</width> + <height>31</height> + </rect> + </property> + <property name="font"> + <font> + <pointsize>11</pointsize> + </font> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Push this button to save the raw input. Pushing will cause a menu to appear where a filename can be selected. Please note the big filesizes!</p><p>Push again to stop recording. You can reload it by using the file input (*.sdr) option. </p></body></html></string> + </property> + <property name="text"> + <string>Write sdr file</string> + </property> + </widget> + <widget class="QComboBox" name="deviceSelector"> + <property name="geometry"> + <rect> + <x>10</x> + <y>210</y> + <width>211</width> + <height>29</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Select the input device. The devices shown are configured. </p></body></html></string> + </property> + <item> + <property name="text"> + <string>Select device</string> + </property> + </item> + <item> + <property name="text"> + <string>file input (.raw)</string> + </property> + </item> + <item> + <property name="text"> + <string>file input (.iq)</string> + </property> + </item> + <item> + <property name="text"> + <string>file input (.sdr)</string> + </property> + </item> + </widget> + <widget class="QComboBox" name="channelSelector"> + <property name="geometry"> + <rect> + <x>140</x> + <y>240</y> + <width>81</width> + <height>29</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Select the DAB channel.</p><p>This depends on the band chosen.</p></body></html></string> + </property> + </widget> + <widget class="QLabel" name="timeDisplay"> + <property name="geometry"> + <rect> + <x>220</x> + <y>90</y> + <width>181</width> + <height>21</height> + </rect> + </property> + <property name="text"> + <string/> + </property> + </widget> + <widget class="QLCDNumber" name="correctorDisplay"> + <property name="geometry"> + <rect> + <x>120</x> + <y>120</y> + <width>91</width> + <height>21</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Coarse offset, indicates - in Hz - the frequency offset. Coarse offset is in large steps, where a step is the distance - in Hz - between two subsequent carriers in the ofdm signal.</p></body></html></string> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="digitCount"> + <number>6</number> + </property> + <property name="segmentStyle"> + <enum>QLCDNumber::Flat</enum> + </property> + </widget> + <widget class="QLabel" name="dynamicLabel"> + <property name="geometry"> + <rect> + <x>0</x> + <y>300</y> + <width>491</width> + <height>41</height> + </rect> + </property> + <property name="toolTip"> + <string><html><head/><body><p>Dynamic label (DLS)</p><p>The selected program may carry some textual information, that information is displayed here.</p></body></html></string> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> + </property>
View file
qt-dab-2.0git20181030.tar.gz/radio.cpp -> qt-dab-2.0git20181129.tar.gz/radio.cpp
Changed
@@ -568,9 +568,10 @@ return; (void)v; - ensembleId -> display (id); - ensembleLabel = v; - ensembleName -> setText (v); + ensembleId -> display (id); + ensembleLabel = v; + ensembleName -> setAlignment(Qt::AlignCenter); + ensembleName -> setText (v); my_dabProcessor -> coarseCorrectorOff (); Yes_Signal_Found (); } @@ -1265,6 +1266,7 @@ show_techData (ensembleLabel, s, inputDevice -> getVFOFrequency () / 1000000.0, &d); + serviceLabel -> setAlignment(Qt::AlignCenter); serviceLabel -> setText (s); my_dabProcessor -> set_audioChannel (&d, audioBuffer); for (int i = 1; i < 10; i ++) {
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.