PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : monitor-1.8.1 Aufzeichnung über FMS-Status starten



nepomuck
09.01.2010, 18:50
Hallo zusammen,

Ich suche eine Möglichkeit, unter Monitor 1.8.1 aufgrund eines FMS-Status eine Aufnahme zu starten?

Was leider nicht funktioniert ist:


ACTFMS 6*******31** [@rec]
Fehler: "@rec, Programm nicht gefunden"
Auch das Aufzeichnen über ein externes Programm geht nicht, da monitor selbst das /dev/dsp belegt.

Wie groß wäre der Aufwand, den Quellcode dahingehend zu ändern, dass "@rec" auch mit der ACTFMS-Anweisung funktioniert?

So wie ich das verstehe, ist die Aufzeichnungsfunktion in unixinout.c festgelegt und könnte theroteisch auch vom fms-Modul gestartet werden.

viele Grüße,
Andreas

Keen
09.01.2010, 19:31
Hi,

hast du SOX installiert?

Edit:
Laut der Manpage (http://monitor.08k.de/index.php/Manpage) ist dies für ZVEI möglich. Bei FMS kann ich es dir nicht sagen.

Unter welchem OS hast du Monitor laufen?

nepomuck
10.01.2010, 23:46
hast du SOX installiert?
Klar. Ohne sox geht @rec gar nicht. Aber diese Funktion ist momentan eben nur für ZVEI implementiert.

Unter welchem OS hast du Monitor laufen?
Die 1.8.1 läuft nur unter 32-Bit-Linux.

Andreas

Keen
11.01.2010, 11:41
Klar. Ohne sox geht @rec gar nicht. Aber diese Funktion ist momentan eben nur für ZVEI implementiert.

Du könntest dir selbst den Befehl von SOX zusammenbauen und als Aktion bei Monitor starten. Die zweite Möglichkeit wäre es im Quelltext zu ändern. Als Programmierer kein Problem ;)


Die 1.8.1 läuft nur unter 32-Bit-Linux.

Das ist mir klar. Darum dachte ich eher an Ubuntu, Suse, Knoppix, etc... ;) Aber ist nicht ausschlaggebend.

nepomuck
11.01.2010, 16:41
Du könntest dir selbst den Befehl von SOX zusammenbauen und als Aktion bei Monitor starten.
Schon probiert: Geht nicht. Grund: /dev/dsp ist vom monitor selbst besetzt und sox kann dann nicht aufnehmen.

Die zweite Möglichkeit wäre es im Quelltext zu ändern. Als Programmierer kein Problem ;)
Genau darauf will ich hinaus:
Die eigentliche @rec-Funktion ist in unixinout.c festgelegt und theoretisch aus jedem Decoder-Modul heraus startbar. Bislang ist das Schlüsselwort "@rec" aber nur dem Zvei-Dekoder bekannt. Jetzt bräuchte man einen C-Programmierer -- am besten einer, der sich mit dem Quellcode der 1.8.1 noch auskennt -- der das @rec-Feature als Funktion des "ACTFMS"-Befehls in die fms.c einbaut.

Dafür reichen meine C-Kentnisse leider nicht aus.
Wer kann hier Helfen???

viele Grüße,
Andreas

Keen
11.01.2010, 17:16
Stimmt, die Quelle ist mit Monitor besetzt. Ich hab mir den Quellcode mal durchgesehen. Aber ich bin ehrlich: Dafür reicht es leider nicht. Ich meine die ganze Record-Geschichte hängt stark mit ZVEI zusammen, man könnte höchstens ACTFMS nutzen um @rec zu starten und ihm ZVEI "vorgaukeln".

C++ ist bei mir Jahre her ....

nepomuck
11.01.2010, 20:25
Ich hab mir den Quellcode mal durchgesehen.

Ich glaube, dass ist die wesentliche Stelle (demod_zvei.c)


void zvei_action(void) {
/* Aktion für ZVEI
* system ruft die auszufuehrende
* Datei mit Pfad auf */
...


while (1) {
if(strcmp(act->string, "(@rec)&")) {
time(&tp);

/* falls nicht bereits innerhalb der letzten 30 Sec. */
if (tp - act->value > 1) {//30
act->value = tp;
system(act->string);
}
}
else
record_start(al->code.zvei);
....

Die Funktion "record_start" findet sich in der unixinout.c.

In der demod_fms.c gibt es folgenden Abschitt:


case 2: /* ACTFMS */
if (*ss == '[') ss++;
actact = (*form)->action;
if (actact == NULL) {
actact = (Line *) malloc (sizeof(Line));
}
else {
actroot = actact;
while (actact->next != NULL) actact->next = actact->next->next;
actact->next = (Line *) malloc (sizeof(Line));
actact = actact->next;
}
memset(actact, 0, sizeof(Line));
strncat(actact->string, &c[2], 1);
while (*ss && *ss != ']') {
strncat(actact->string, ss, 1);
ss++;
}
if (strlen(actact->string) == 1) {
char zero[] = "ls > /dev/null";
strcat(actact->string, zero);
}
strncat(actact->string, c, 2);
if (actroot == NULL) (*form)->action = actact;
else
break;

und da müßte irgendwo eine Abfrage rein, ob das Schlüsselwort "@rec" in der Parameterzeile von ACTFMS steht, gefolgt vom Aufruf der Funktion "record_start".

Soweit die Theorie.
Aber wie gesagt: Meine C-Kentnisse reichen nicht aus, um die erforderlichen Änderungen sauber in die fms.c reinzuprogrammieren.

Welcher gewiefte C-Guru in diesem Forum kann helfen?

viele Grüße,
Andreas