Uni-Projekt :App in c++ mit der ndk bauen

  • Hallo zusammen,


    ich habe eine Frage bzw. eine Bitte an Euch. Ich studiere Angewandte Informatik und in diesem Semester haben wir ein Projekt was die Programmierung einer App in c++ (unter NDK) beinhaltet.
    Die App soll einen Fahrsimulator (den es in den amerikanischen Fahrschulen meistens gibt) steuern können. D.h. ich hab den Fahrsimulator und soll nun eine App dazu bauen, die den fahrsimulator sozusagen auf dem Handy dupliziert und ich ihn somit damit fernsteuern kann.


    Das Problem ist, dass ich absolute Anfängerin bzw. habe ich keinen Schimmer, wie ich sowas erstellen soll.


    Daher die Frage ob es hier jemanden gibt, der schon samples hat oder weiß, wie ich sowas programmieren kann unter C++.
    Gerne bezahle ich denjenigen auch, der mir Hilfestellung geben kann.


    Mein Pc ist soweit eingereichtet mit den nötigen Sachen. Den Fahrsimulator haben wir im Labor aber wie ich die Schnittstelle zwischen Fahrsimulator und mein Handy erstellen soll habe ich keinen schimmer von! :-X


    Wäre wirklich sehr nett, wenn ihr oder irgendjemand mir helfen könnte.! :-[


    Dankeschön


    Liebe Grüße :love:


    Mary

  • Welche Schnittstellen bietet denn der Simulator?
    Muss es C++ sein?
    Wie sind deine genauen Kenntnisse mit C++?

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Welche Schnittstellen bietet denn der Simulator?
    Muss es C++ sein?
    Wie sind deine genauen Kenntnisse mit C++?

    Hallo,


    Also Schnitstelle weiß ich nicht, müsste ich mal die Tage raussuchen (wo kann ich denn nachschauen?) Hier aber einige Informationen zum Fahrsimulator (Die Software/der Fahrsimulator ist gekauft):
    http://www.drfoerst.de/pkw-fahrsimulator.html?&L=0



    Hier findet man eine Doku: http://www.drfoerst.de/fileadmin/pdf/Katalog_pkw_DE_low.pdf


    Der sieht so aus:


    Laut Aufgabe muss das in c/ c++ sein. Meine Kenntnisse sind da seeeehr schlecht :( bis nicht vorhanden leider. Daher wäre ein Sample oder irgend ein Code-Beisopiel wodrauf ich aufbauen kann sehr gut für mich. Vielleicht auch in java erstmal. B-)

  • Auf jedenfall kannst du mal bei Google suchen oder http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/ hier gucken ;)
    Ich selbst habe damit noch nicht gearbeitet, von daher werde ich dir dahingehend nicht viel helfen können.
    Es ist wahrscheinlich nicht sehr schwierig, wenn es über TCP/IP geht.
    Müsst ihr auch einen Server dazu schreiben oder bekommt ihr einen gestellt? Also ein Programm das auf dem Simulator läuft.

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Auf jedenfall kannst du mal bei Google suchen oder Auf jedenfall kannst du mal bei Google suchen oder http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/ hier gucken ;)
    Ich selbst habe damit noch nicht gearbeitet, von daher werde ich dir dahingehend nicht viel helfen können.
    Es ist wahrscheinlich nicht sehr schwierig, wenn es über TCP/IP geht.
    Müsst ihr auch einen Server dazu schreiben oder bekommt ihr einen gestellt? Also ein Programm das auf dem Simulator läuft.


    Ne von einem Server wurde nichts gesagt bzw. bekommen wir den gestellt. Ok...schade, hoffe es können andere helfen:=)

  • Also wer angeordnet hat, das ganze müsse via C/C++ realisiert werden, hat von App-Entwicklung unter Android keine Ahnung.


    Aus eigener Erfahrung kann ich sagen: 'nativer' C/C++ Code wird auf dem Gerät arschlangsam laufen. Android und das zu Grunde liegende Dalvik (die virtuelle Maschine, auf dem das Android läuft) sind so dermaßen für Java optimiert, dass 'nativer' C/C++ Code auf den Geräten ewig lange braucht.


    Hinzu kommt, dass Du nicht einfach so C/C++ Code eintippen und loslegen kannst. Du musst zu jeder C/C++ Funktion eine Java-Methode erstellen und das Ganze dann brücken.
    Die (verlinkte) Dokumentation sagt dazu:

    Zitat

    Don’t assume you’ll increase your application’s performance just because you’re using native code. The Java<->Native C exchanges add some overhead, so it’s only really worthwhile if you’ve got some intensive processing to do.


    Das ist leider wirklich so. Ich hatte seinerzeit™ vor, ein bisschen CPU-hungrige GSP-Berechnungen in C auszulagern. Da ich Werte an den C-Code übergeben und die Ergebnisse an den Java-Bridgecode zurückgeben musste, dauerte das Ganze ungelogen 3x so lange wie mit Java.
    Es ist also auf keinen Fall empfehlenswert.


    Eventuell weiß der Auftraggeber das nicht. So etwas zu evaluieren gehört auch zu Deinen Aufgaben in der Angewandten Informatik. ;)
    Generell ist ein reibungsloses Einbinden von C/C++ Code weder in Android noch in Windows Phone möglich.
    Wie es bei Blackberry aussieht kann ich nicht beurteilen. Ubuntu Phone und iOS hingegen sind ausgesprochen offen für diese Dinge.


    Weiterhin klingt 'fernsteuern' so, als ob Du einerseits Aktionen definieren können musst als auch die Resultate ersichtlich sein sollen.
    Sprich: Du tippst auf das Gas und willst gleichzeitig sehen, wie die Umgebung schneller an Dir vorbei rauscht.
    Analoge Eingaben wie die Druckkraft auf das Gas stelle ich mir sehr schwer zu realisieren vor. Und die Echtzeitdarstellung via Stream dürfte auch alles Andere als einfach werden.


    Die erhaltenen Informationen in dem Beiblatt sind sehr dürftig. Es gibt zwar einen Bereich, der sich an Entwickler richtet, doch ist dieser ausschließlich für die Manipulation der Wegstrecken gedacht. Das alles hilft Dir in keinster Weise weiter.


    Befürchtung: das ganze System ist eine BlackBox, das heißt, alles läuft darin gekapselt von der Außenwelt ab. Du kannst also höchstens per mit Kabeln angeschlossener Peripherie (Gaspedal, Bremspedal, Lenkrad) den Simulator steuern und bekommst die Anzeige ausschließlich über Grafikausgänge wie DVI oder HDMI präsentiert.


    In dem Fall wird die App das kleinste Übel und es ist dann auch völlig egal, ob das in Ruby, Phython, Java oder ASM realisiert wird. In dem Fall brauchst Du nämlich eine Hardware mit Zugriffsmöglichkeit ((W)LAN oder Bluetooth z.B.), die je nach erhaltenem Signal die Informationen an den Simulator sendet.
    Diese Hardware muss dann eine API liefern, mit derer Hilfe sie den Simulator beeinflusst.


    Als allerersten Schritt solltest Du die Softwareentwicklung des Herstellers kontaktieren und in Erfahrung bringen, ob die Fernsteuerung des Simulators bereits in einem Modul implementiert wurde, dieses Modul und die Dokumentation anfordern und um die API dieser Dokumentation herum eine App basteln.


    Falls es die Fernsteuerung des Simulators nicht gibt, benötigst Du die API für die einzelnen Steuerelemente (Gas, Bremse, Lenkung, Blinker...) und musst Dir darum eine fest verdrahtete Hardware basteln, die dann per Netzwerk gemäß einer eigenen von Dir ausgedachten API gesteuert wird.


    Ersteres ist ja noch machbar, bei Zweiterem wird es ein Aufwand, mit dem Du Deiner Uni locker zehn Mitarbeiter für 6 Monate abluchsen kannst. Alleine in einem Semester mit Vorlesungen, Klausuren und all dem Schmiss wird das Projekt mit eigener Hardware mehr als sportlich. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

    Einmal editiert, zuletzt von Kogoro-Christopher () aus folgendem Grund: Bedankomat aktiviert :)

  • Hallo zusammen,


    danke erstmal für die ausführliche Anmerkung :)


    "Du kannst also höchstens per mit Kabeln angeschlossener Peripherie (Gaspedal, Bremspedal, Lenkrad) den Simulator steuern und bekommst die Anzeige ausschließlich über Grafikausgänge wie DVI oder HDMI präsentiert.


    In dem Fall wird die App das kleinste Übel und es ist dann auch völlig egal, ob das in Ruby, Phython, Java oder ASM realisiert wird. In dem Fall brauchst Du nämlich eine Hardware mit Zugriffsmöglichkeit ((W)LAN oder Bluetooth z.B.), die je nach erhaltenem Signal die Informationen an den Simulator sendet.
    Diese Hardware muss dann eine API liefern, mit derer Hilfe sie den Simulator beeinflusst."


    Also zu der Anmerkung kann ich sagen, dass ich den Simulator über ein Kabel bzw. über das Ethernet steuern kann/soll.


    Somit ist das schonmal gut, dass ich die App nicht in C++ unbedingt schreiben muss.


    Nun ist die Frage: Wie sieht es mit dieser Hardware aus, die die Info zum Simulator schickt=? Und wie gehe ich so eine Steuerungsapp an in Java zum Beispiel`?


    Als allerersten Schritt solltest Du die Softwareentwicklung des Herstellers kontaktieren und in Erfahrung bringen, ob die Fernsteuerung des Simulators bereits in einem Modul implementiert wurde, dieses Modul und die Dokumentation anfordern und um die API dieser Dokumentation herum eine App basteln.


    Ich habe eine Dokumentation erhalten und auch ein Modul bzw. einige C++ Codes die zum Simulator gehören. Wie soll ich da die App nun drumherumbasteln? Soll ich die Befehle da nutzen oder wie geh ich das an?



    Liebe Grüße


    Mary

  • Hallo Mary,


    wenn das Steuern via Ethernet möglich ist, dann ist das schon mal die halbe Miete. :)
    Der Zwischenschritt mit der Hardware und der eigenen API fällt damit schon einmal weg.


    Besagte Dokumentation und Module sollten Dir eigentlich alle notwendigen Informationen liefern.
    Du brauchst also zunächst etwas, das sich mit dem Netzwerk/dem Simulator verbindet.


    Ich will schon seit Ewigkeiten einen WLAN Controller für Android schreiben, der den ganzen Kommunikationskram managed...
    Aber man kommt ja bekanntlich zu nix. ^^


    Nachdem Deine App sich mit dem Simulator per WLAN verbunden hat, wird die Dokumentation schon sagen, was genau der Simulator erwartet.
    Vermutlich sind es Nachrichten als Bytefolgen, die einem bestimmten Muster entsprechen müssen.
    Irgendwas wie Headerstartbyte, Headerlänge, Nachrichtentyp, Headerendbyte, Nachrichtenstartbyte, Nachrichtenlänge, Nachricht, Nachrichtenendbyte.


    Diesen Rohbau musst Du dann abstrakt implementieren und je nach zu sendender Nachricht spezialisieren.
    Abstrakt zum Beispiel: AF 01 00 FE AC 01 00 DC
    (Headerstart, Länge 1, Nachrichttyp 0, Headerende, Nachrichtstart, Nachrichtlänge 1, Nachricht 0, Nachrichtende)
    Konkret zum Beispiel: AF 01 02 FE AC 05 48 61 6C 6C 6F DC
    (Headerstart, Länge 1, Nachrichttyp 2 (z.B. Radiodisplay), Headerende, Nachrichtstart, Nachrichtlänge 5, Zeichenkette "Hallo", Nachrichtende)


    Damit würde, wenn mein Nachrichtenmuster dem des Simulators entspricht (was es vermutlich nicht tut), auf dem Display des Radios die Nachricht 'Hallo' aufleuchten.


    Das Nachrichtenmuster findest Du wie gesagt in der Dokumentation und auch in den dazugehörigen C++ Codes, sofern Du diese lesen und verstehen kannst.
    Sollte der C++ Krams deine Kenntnisse übersteigen, kannst Du sicherlich einen Professor fragen. Sofern die Weitergabe der Quelldaten möglich ist, schau ich auch gern drüber. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!