Tastatursimulation zum Steuern von Linphone

Dieses Thema im Forum "C/C++" wurde erstellt von Gorion, 15.04.2008.

  1. Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Hallo Gemeinde :D,
    ich sitze vor einem für mich grösseren Problem fest. Ich suche jetzt schon seit letzter Woche eine Möglichkeit, wie ich eine Tastatureingabe simulieren kann, hab auch verschiedene Ansätze schon ausprobiert aber keines will so richtig funktionieren.
    Das Problem:
    Linphone läuft auf einem Microcontroller unter uClinux (also linphonec) und wird per Tastatureingabe gesteuert, mit Kommandos wie "call 123" kann ich mein anderes IP-Phone zum Test anrufen.
    Ich möchte jetzt diesen Befehl "call 123" ersetzen durch eine von einem Programm geschickte "Tastatursimulation".
    Wenn ich hingehe und im uClinux mit mkfifo <fifodatei> eine Pipe erzeuge und linphonec mit tail -f <fifodatei> ./linphonec starte, kann ich auf einem anderen terminal Tastatureingaben über echo "call 123" > <fifodatei> an linphone schicken. Linphonec führt die Kommandos auch richtig aus.
    Wenn ich aber hingehe und in einem C-Programm einen printf("call 123\n"); auf die Konsole ausgebe, führt linphonec das Kommando nicht aus.
    Wie kann ich also die Eingabe über ein C-Programm machen?
    Oder wie kann ich bash-shells in einem C-Programm aufrufen?
    *ratlosbin*
    Vielen Dank für eure Antworten
    Michael
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Mahltid,
    Code:
    man 3 popen
    könnte helfen.
    Etwas schmuddelig, aber Du kannst den Ansatz mit dem echo auf deine pipe auch gleich verwursten...

    Ist nur ein bisserl Arbeit den Shellstring zu formatieren.
    MfG
     
  4. Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Du meinst also den Shell-String direkt erzeugen und in meine Pipe schicken. Das iss natürlich ein Ansatz.
    Danke ich halt euch auf dem laufenden.
    :D
     
  5. Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Also ich habs jetzt auch mal probiert über system() so ein Kommando auszuführen, das klappt eigentlich recht gut, nur mein Problem ist dann folgendes:
    Ich krieg im Linphone-Terminal Fenster ne Meldung
    #tail: broken pipe
    Ich denke, dass meine Kommandos meines C-Programms nicht oder nur teilweise von tail gelesen werden.
    Weiss da jmnd weiter?
     
  6. #5 x0r, 16.04.2008
    Zuletzt bearbeitet: 17.04.2008
    x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Moin moin,

    ja, ungepuffert in pipes streamen macht man aber auch nicht ;)

    Code:
    [color=red]Edit: So das sollte eigentlich gehen...[/color]
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
            FILE *fp;
    
            if ( argc != 3 ) {
                    printf("USAGE: %s [PATH] [command]\n", argv[0]);
                    exit(1);
            }
    
            if((fp = fopen(argv[1], "w")) == NULL) {
                    perror("fopen");
                    exit(1);
            }
    
            if(! (strlen(argv[2])>255))
                    fputs(argv[2], fp);
            else
                    printf("\nWARNING: linebuffer exceeding limits ... QUIT\n");
    
            fclose(fp);
            return(0);
    }
    
    
    
    Das Ganze via:

    Code:
    gcc -Wall -o pipesnd ./quelltex.c
    
    und dann mit:

    Code:
    #: ./pipesnd /dev/deinfifo "ls -al /"
    

    Sry, das es so lange gedauert hat, mußte noch ein paar andere Dinge klären, und hatte erst heute morgen Zeit. *peinlich*
    MfG
     
  7. Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Danke für deine Bemühungen :D
    Werd ich gleich ma ausprobieren! Kann dann nur hoffen, dass meine Crosstoolchain mit der -Wall option kklar kommt ;)
     
  8. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Die kannste weglassen, die setzt ja nur den Warning-Level hoeher.
     
  9. #8 Gorion, 21.04.2008
    Zuletzt bearbeitet: 21.04.2008
    Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Habs gemerkt. Iss eigentlich überflüssig aber der Crosscompiler schluckts :)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Also mein Code sieht momentan so aus
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
       FILE *fp;
       printf("start...\n");
       if ( argc != 3 ) 
       {
          printf("USAGE: %s [PATH] [command]\n", argv[0]);
          exit(1);
       }
       printf("Opening file...\n");
       if((fp = fopen(argv[1], "w")) == NULL) 
       {
          printf("can't open file\n");
          printf("%s\n",argv[1]);
          perror("fopen");
          exit(1);
       }
       printf("before executing\n");
       if(! (strlen(argv[2])>255))
       {
          printf("Executing Command\t--->%s\n",argv[2]);
          fputs(argv[2], fp);
       }
       else
          printf("\nWARNING: linebuffer exceeding limits ... QUIT\n");
      
       fclose(fp);
    
       return 0;
    
    }
    
    mein Problem iss jetzt noch folgendes, ich kreig die Kommandos nicht in linphone rein, bzw linphone reagiert gar nicht drauf.
    Ich definier ja meine test_fifo über
    Code:
    mkfifo test_fifo
    Das liefert mir ja eine Named Pipe zurück.
    Der Programmaufruf von linphone erfolgt so
    Code:
    tail -f /flash/bwwprog/test_fifo | ./linphonec -c .linphonec
    Meine Vermutung ist jetzt, dass pipesnd gar nicht in meine FIFO schreibt oder dass tail die Kommandos gar nicht richtig ausliest.
    Dazu noch zu sagen ist, dass ich mit
    Code:
    echo "command" > /flash/myprog
    linphone fernsteuern kann. Was macht also dieses > was mein proggi nicht macht.
    Irgendwer ne Idee?
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. Gorion

    Gorion Jungspund

    Dabei seit:
    15.04.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Ort:
    Hohentengen
    Also ich hab die Lösung jetzt. Das Problem war, dass der fopen nicht mit der Option "w" gemacht werden kann. Ich hab die fifo-Datei jetzt mit "a" für appending geöffnet und siehe da, die Zauberei hat begonnen :)
    Nochmals vielen Dank für eure Tips hat mir echt geholfen
     
  12. x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    jaaaa ^^dieses kung-fu ist sehr stark :)
    Mfg
     
Thema:

Tastatursimulation zum Steuern von Linphone

Die Seite wird geladen...

Tastatursimulation zum Steuern von Linphone - Ähnliche Themen

  1. Artikel: Synergy - Mehrere PCs mit einer Maus steuern

    Artikel: Synergy - Mehrere PCs mit einer Maus steuern: Auf dem Schreibtisch steht oft mehr als ein Monitor, und oft gesellt sich dazu noch ein Notebook. Mit der Client-Server-Anwendung Synergy lassen...
  2. Musik-Box entfernt aufstellen und versorgen, steuern

    Musik-Box entfernt aufstellen und versorgen, steuern: Moin Gemeinde, ich suche eine passende Hardware Komponente die : - MP3 Musik über Klinke ausgibt, kein besonderer Anspruch - keine Boxen....
  3. Kann man bei Ubuntu mit der Tastatur den Cursor steuern?

    Kann man bei Ubuntu mit der Tastatur den Cursor steuern?: Habe kürzlich Ubuntu ausprobiert und finde es sehr nett. NUR: Wie kann man mit der Tastatur den Cursor steuern? tschüß minipig
  4. Amarok in Kicker steuern

    Amarok in Kicker steuern: Moin zusammen, gibt es eine Möglichkeit Play Stop usw. in den Kicker zu holen? Bei Kirocker fehlt mir die Funktion die Playlist zu öffnen und...
  5. grub remote steuern

    grub remote steuern: Ich habe ein Workstation im DualBoot mit WinXP und Ubuntu 8.10. Die ist ziemlich laut und deshalb würde ich sie gerne in unseren Serverraum...