Deutsch > Sundtek DAB/DAB+/FM/FM HD

Fragen zur Programmierung FM DAB App

<< < (2/10) > >>

Vitalic:
Danke für die Info, gerade für die Raspberry Gemeinde ist euer Stick interessant, wenn es darum geht, ihn in ein CarProject wie das von Bluewave einzubinden.

Leider will den Stick keiner kaufen, da es an der GUI Bedienbarkeit fehlt.

Deshalb versuche ich mich gerade durch die offene Treiberschnittstelle zu arbeiten. Das arbeiten mit dem mediaclient geht, ist aber sehr aufwändig.

Zum Testen versuche ich einfach mal die Mute on/off Funktion umzusetzen, jedoch renne ich hier bereits in Fehler.

Ich habe mir die aktuellese sundtek_netinst.sh geladen und mit -service installiert. Die mediaclient.h musste ich bereits anpassen, da der compiler Warnungen auswirft (char ist nicht mehr richtig unter C++ ISO 11, mit const char sind die Warnungen weg).

Das größere Problem bereitet mir aber gerade


--- Code: ---int net_ioctl(int fd, unsigned int command, parameter);

--- Ende Code ---

Wenn ich parameter mit void initialisere, meldet Qt sofort, das dies nicht möglich ist. Mit was muss hier parameter initialisert werden?

mainwindow.h


--- Code: ---#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sstream>
//#include <video.h>

#include "/opt/include/mediaclient.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    int mute(int fd, const char *arg);

private slots:

    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;

public:
    int fd = net_open("/dev/radio0", O_RDWR); // open device node
    int net_ioctl(int fd, unsigned int command, void parameter);
    //net_close(fd);
};

#endif // MAINWINDOW_H

--- Ende Code ---

mainwindow.cpp


--- Code: ---#include "mainwindow.h"
#include "ui_mainwindow.h"
//#include <iostream>

//#include <iostream>
//#include <unistd.h>
//#include <fcntl.h>
//#include <sstream>

//#include "/opt/include/mediaclient.h"
//#include "/opt/include/mediacmds.h"

using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
/*
    int fd = net_open("/dev/radio0", O_RDWR); // open device node
    //net_ioctl(fd, command, parameter);
    net_close(fd);
*/
}

MainWindow::~MainWindow()
{
    delete ui;
}


int MainWindow::mute(int fd, const char *arg)
{
    //int set_mute(int fd, char *arg) {
            int type = 0;
            struct v4l2_control control;
            if (strcmp(arg, "off") == 0) {
                    control.id = V4L2_CID_AUDIO_MUTE;
                    control.value = 0;
                    fprintf(stdout, "Enabling audiostream\n");
                    net_ioctl(fd, VIDIOC_S_CTRL, &control);
            } else if (strcmp(arg, "on") == 0) {
                    fprintf(stdout, "Disabling audiostream\n");
                    control.id = V4L2_CID_AUDIO_MUTE;
                    control.value = 1;
                    net_ioctl(fd, VIDIOC_S_CTRL, &control);
            } else
                    fprintf(stdout, "Wrong argument [%s] choose between on|off\n", arg);

            return 0;
    //}


}

void MainWindow::on_pushButton_clicked()
{
    //fd = net_open("/dev/radio0", O_RDWR); // open device node
    mute(0, "on");
}

--- Ende Code ---

Sundtek:
fd ist der Filedeskriptor, wenn Du hier 0 nimmst ist das STDIN und das wird nicht funktionieren. fd ist eine Referenz zur jeweiligen Verbindung mit dem Treiber.


--- Code: ---fd = net_open("/dev/radio0", O_RDWR);
oder
fd = net_open("/dev/dab0", O_RDWR);

int set_mute(int fd, char *arg) {
        int type = 0;
        struct v4l2_control control;
        if (strcmp(arg, "off") == 0) {
                control.id = V4L2_CID_AUDIO_MUTE;
                control.value = 0;
                fprintf(stdout, "Enabling audiostream\n");
                net_ioctl(fd, VIDIOC_S_CTRL, &control);
        } else if (strcmp(arg, "on") == 0) {
                fprintf(stdout, "Disabling audiostream\n");
                control.id = V4L2_CID_AUDIO_MUTE;
                control.value = 1;
                net_ioctl(fd, VIDIOC_S_CTRL, &control);
        } else
                fprintf(stdout, "Wrong argument [%s] choose between on|off\n", arg);

        return 0;
}

net_close(fd);

--- Ende Code ---

http://sundtek.de/wiki/index.php?title=DAB/DAB%2B

Vitalic:
diese funktion aus dem wiki habe ich in die cpp kopiert:


--- Code: ---int set_mute(int fd, const char *arg) {
            //int type = 0;
            struct v4l2_control control;
            if (strcmp(arg, "off") == 0) {
                    control.id = V4L2_CID_AUDIO_MUTE;
                    control.value = 0;
                    fprintf(stdout, "Enabling audiostream\n");
                    net_ioctl(fd, VIDIOC_S_CTRL, &control);
            } else if (strcmp(arg, "on") == 0) {
                    fprintf(stdout, "Disabling audiostream\n");
                    control.id = V4L2_CID_AUDIO_MUTE;
                    control.value = 1;
                    net_ioctl(fd, VIDIOC_S_CTRL, &control);
            } else
                    fprintf(stdout, "Wrong argument [%s] choose between on|off\n", arg);

            return 0;
    }

--- Ende Code ---

die mediaclient.h ist eingebunden, aber trotzdem bekomme ich sofort kompilierungsfehler


--- Code: ---/home/ubuntu/progs/qt/sundtek_api/sundtek_api/mainwindow.cpp:99: Fehler: undefined reference to `net_ioctl'

--- Ende Code ---

Vitalic:
So langsam verstehe ich es und bekomme auch keinen Kompilierungsfehler mehr, aber wie sieht das innerer der Funktionen net_ioctl, net_open und net_ close aus?

Dazu steht nichts im wiki.

Ohne den Inhalt dieser 3 Funktionen ist das doch alles nicht wert?

Sundtek:
verlinke gegen /opt/lib/libmcsimple.so

Das innere der Funktion befindet sich in der Bibliothek und verbindet sich mit dem mediasrv Prozess und der steuert den Tuner.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln