Auto Multimedia System

  • Ah okay ich hab das Problem glaub gefunden:

    Aktuell kommt noch

    Code
    Setting KD_GRAPHICS failed

    Ich weiß nicht warum, aber ich bekomme die Konsole nicht disabled. Beim offiziellen Display fällt das aber nicht so wirklich auf, da ich relativ schnell über die Konsole zeichne.
    Dein Display ist aber größer und weil du die Auflösung runter gesetzt hast, hast du schwarze Ränder (Sieht man oben auf dem Screenshot).
    Deswegen wird der Teil mit der Konsole nicht überzeichnet und ist (etwas unschön) zu sehen

  • swoopo
    Ja :) Während der Entwicklung und vor allem auch während dem Einsatz im Auto sind mir viele neue Ideen gekommen, die sich mit der ersten Version nicht umsetzen ließen.
    Deswegen hab ich mich an eine neue Version gesetzt und versuche, da ein wenig mehr Flexibilität und Funktion rein zu bringen.

    Ein paar Punkte:
    - Animationen sollten möglichst gering gehalten werden, um Ablenkung zu vermeiden. Trotzdem kam mir die GUI zu starr vor. Leider war das selbst geschriebene Grafiksystem für dynamischen Content nicht ausgelegt

    - Wenn ein Teil der Software abgestürzt ist, dann ist das ganze System abgestürzt. Auch konnte man ohne erneutes Kompilieren die Funktionalität nicht anpassen. Was ich mich gewünscht habe, waren Apps

    - Die Lautstärke in den Optionen ändern zu können ist ganz nett. Aber mir kam die Idee für systemweite Multitouch-Gesten, die sich unabhängig von der Anzeige aktivieren lassen können.

  • Aktuell ist noch nicht viel sinnvoll es zu sehen :) Man kann das System starten und bekommt die installierten Apps angezeigt. Relativ neu ist, dass man diese Apps schon starten kann, aber man kommt momentan nicht mehr zurück.

    Ich hatte am Anfang geplant, dass alles in C++ geschrieben wird. Der Einfachheit halber würde ich aber gerne die Apps in C# schreiben, da sitz ich momentan dran. Das System an sich wird weiterhin in C++ laufen. Da das neue System allerdings ein gutes Stück größer und umfangreicher ist, braucht alles seine Zeit und es sind 10 Baustellen gleichzeitig offen :D

    Hardwaretechnisch habe ich immer noch keine Lösung gefunden, die Auto Antenne anzuschließen, da sollte wohl auch mal noch nachgeforscht werden.

    Edit: Weil ich gerade gesehen, hab dass du ein Display hattest, das eine andere Auflösung hat als das offizielle TouchDisplay, das ich nutze: Auch dem hab ich mich angenommen und das System kann sich jetzt (zumindest beim Start) an verschiedene Größen anpassen (Danke SDL).

    Einmal editiert, zuletzt von Silveryard (25. November 2016 um 15:29)

  • So mal wieder n bischen Updates :)

    Nach mehreren Prototypen hat sich jetzt die aktuelle Version heraus kristallisiert. An sich habe ich jetzt ein Basissystem, das für verschiedene Verwendungszwecke genutzt werden kann. Quasi ein OS Grundbaukasten. Dieser deckt App, Rendering, Audio etc ab. Darüber kann man dann einen Launcher bzw eine grafische Representation und eigene Funktionen implementieren.
    Hier ein paar Features:

    • App System: Es können zur Laufzeit Apps installiert und deinstalliert werden. Wenn eine App abstürzt, läuft das restliche System weiter
    • Java Basiert: Aus verschiedenen Gründen ist das neue System Java basiert. Dadurch verringert sich die Entwicklungszeit von Apps erheblich
    • Schnell: Für alle, die bei dem Wort Java einen Schock bekommen haben :D Rendering basiert auf SDL und das ganze System ist auf möglichst wenig RAM und CPU Auslastung ausgelegt. Auch die Kommunikation zwischen Apps und dem System ist schnell. Ein paar Tests auf meinem Rechner haben eine Datentransferrate von bis zu 130MB/s ergeben. Tests auf dem Raspberry stehen noch aus.
    • Shared Memory: Das Basissystem verwaltet eine Liste an häufig verwendeten Fonts und Texturen sowie eine Collection an GUI Controls, die jede App nutzen kann. Die Grafiken und Fonts sind dabei nur ein einziges mal im Speicher
  • Naja ich hab seit ein paar Monaten morgens keine Musik im Auto. Das motiviert :D
    Ich hab die neue Version nicht im Repository auf Github. Aber sobald ich eine minimal lauffähige Version hab, die man raus geben kann, mach ichs öffentlich :) Gestern hab ich mit einem AppManager angefangen, mit dem man die Apps auf seinen Devices verwalten kann

  • Mir ist aufgefallen, ich hab noch gar kein Bild von der neuen GUI gezeigt :D Deswegen hier:

    y4mCJ6S6n_N-A7t65fFQj9q2v9Kcve8jLbCP2pXiHC28aLOkFUyCHsJtjEJlE3BtXw8yN37s4tmAaM_f2kdRU4JqVA7eksxgNKX5xYuxWRYcrl6jn6VbdNACr_M7UZ-rDgFJQAZ3O8H8DbOTqKFr4m4RJUQpLZDoyL1Zc02tWCoeDnPWs5yurM0K5WwyEQyz9BIocHDPTC7Crs4Si2F5JKNdw?width=802&height=507&cropmode=none

    Ich habe mich für einen "App Drawer" bze "App Launcher" entschieden, da es das flexibelste Layout ist und das neue Grundsystem gut wiederspiegelt.

    Nachdem ich auch immer wieder Nachrichten bekomme, ob man denn helfen kann, bin ich aktuell fleißig am Dokumentation schreiben und Repositories aufräumen. Ich hoffe, alles nächste Woche öffentlich machen zu können. Dann kann man den aktuellen Entwicklungsstand besser verfolgen, selbst rum probieren und seinen Senf dazu geben :D

    Das Projekt ist in den letzten Monaten wirklich stark gewachsen und ich hoffe, dass es für einige hier interessant ist :)

  • So habe die zwei Repositories mal auf Github geladen:

    https://github.com/Silveryard/CarLauncher
    https://github.com/Silveryard/BaseSystem

    Alles noch WIP :) Dokumentation findet sich aktuell im Base System Repository und ich versuche, auch mal einen generellen Überblick über die einzelnen Teilsysteme zu schreiben. Genauso wie ich versuchen will, die TODO Liste aktuell zu halten :D
    https://github.com/Silveryard/BaseSystem/projects/1

  • Ich hab letztens eine Debug App geschrieben, mit der ich mir Systeminformationen anzeigen lassen kann.

    y4mL3C-svMpGTh-S-AwE5dIhLQqzcU9duaASdFbvIMvhkjWjQ_KguCueaNykjTEw0kNK0Dhl-HnYfg9DkTkorgdSjC8FvGM-FfZzn_6cvYxo8_2Z81Q2t9is4gnVVPDxGAu_pGAbTuIKEoc77-3am5qeThWLd8fhhxUw64abJL8gu0Sq41heCytk4HUyWozxrzG2rZYyfHlaSKVeOFqkByERQ?width=1229&height=662&cropmode=none

    Dabei hat mich z.B. interessiert, wie lange es dauert, einen Systemcall zu erstellen, ihn an das System zu schicken und dann die Antwort wieder auszulesen. Systemcalls sind die aktuelle Methode, mit der eine App mit dem Hauptsystem kommunizieren kann. Das beinhaltet unter anderem auch Gui und Sound (die beide vom Hauptsystem verwaltet werden).
    Die Antwort war: 11ms
    Das war ein wenig zu viel, deswegen hab ich mal optimiert.

    y4mkKirg_eYsnSOC8ZPbF0l7mNsTQJeoIOshjMMe4fZ6C5XWdnU1i2sJ2OY8pgt5sxeL1cggEmuc5SpXaCFZqrmuAtFo4TKD1MxXpKQ-0CcNz_mIa7KOADatDzHkfQI4RC-T287HgPprJqSEq3FE7lAyvYaOWvxSTQJUsl8ZSuarB77Q4zcq5x1IYBZKM71pss0KhIrOGIKycxSeheR1pQF4g?width=1234&height=659&cropmode=none

    0.8 Millisekunden. Schon besser. Ich hoffe, das in Zukunft noch weiter verbessern zu können.

  • LogViewer

    y4m2blX-UwaPxixI6KkufDuQaDp-pR3XJkk-0XYfsEWXMR3kWRS5lYhNQ0J1SqCliBlvAKKbac4ICmSmhFfZt1_bvcwULee6A84I5wfYkgjl3xz9GSprGjlCR9i9hGbiZ15o0y7kb0X96pYZ6tAMTVKV9OACUOYd-xxQUSAiG5VW_F6eNm4siycOphQQ84Ktx7ZDPOXVmUjaJv0nmvDkXDN6w?width=1366&height=728&cropmode=none

    Ich hab mir ein paar Gedanken über Logging gemacht. Als erstes hatte ich ein logging Framework oder ähnliches im sinn. Habe mich am ende aber dafür entschieden, dass jeder einfach System.out.println machen können sollte und das System soll den Rest handeln. Mit dem LogViewer kann man sich jetzt zu einem laufenden System (localhost oder remote) connecten. Der LogViewer macht einen Tab für das Hauptsystem und einen Tab pro App, die mindestens eine Logausgabe gemacht haben.
    Auch in der Konsole werden die Logausgaben jetzt mit dem Prefix des Loggers ausgegeben. Sollte für etwas mehr übersicht sorgen (hoff ich).

    Code Reference

    Die Code Reference baue ich aktuell mit Doxygen. Die allerdings immer aktuell zu halten war A) mühselig (und hab ich oft vergessen oder war zu faul) und B) hat die Reference inzwischen über 1.200 Dateien und es würde die Commits immer ziemlich aufblähen. Deswegen wird die Reference jetzt als Teil der buildAll.bat generiert. Aktueller gehts quasi nicht :D

    SystemVolume

    Als Audio Subsystem verwende ich Fmod. Damit habe ich gute Erfahrungen gemacht und wollte es auch weiter verwenden. Nachdem es keine Java Bindings für FMOD gibt, schreibe ich sie selbst. Viel Boilerplate Code aber er erfüllt seinen Zweck (bisher). Leider lässt sich mit Fmod nicht die System Volume einstellen. Deswegen habe ich das SystemVolume Subsystem geschrieben: Es liefert informationen über die verfügbaren Inputs und Outputs des Host Operating Systems und bietet auch die Möglichkeit, diese Informationen zu verändern. WIP

    y4mvs7N4MryImNA-NPuZy53gCsGBluUP5YZ0h8zq7QKmG0NUlXJnLmoTPlItRfXJOgXW9elVG9wupBB2ElpRbfodtkUIjXb4N-DJ_f2oAJzKtGZRuDuxdIiIDmcGuGo0Yawu5g50P67PPLtCTK0zjpiboP3-FTYD1SledlsZ3irCg_OBu5LNZTiw4y2YdLb4RbQvdqpn-TJOenJSWRL_rRaug?width=1421&height=582&cropmode=none

    Documentation

    As always. Ich schreibe immer mal wieder ein wenig Dokumentation. Das neueste ist eine (noch nicht vollständige) Dokumentation der GUI Bibliothek.

    Raspberry Pi Build Status

    Funktioniert aktuell meines Wissens nicht. Aktuell teste ich nur unter Windows. Wenn ich SystemVolume fertig habe, kümmere ich mich mal darum.

  • bei Pollin gibts Audioendstufen 6x40W für 10,-€ (ohne DSP) -> einfach 6x Audio in für 6 Lautsprecher (die mit DSP kosten 14,-€ deswegen schwieriger anzusteuern)
    Der PI mit 5.1 USB Decoder sollte gut passen, ggffs. noch einen 6-Kanal I2C Volumesteller.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • den 6-Kanal steller habe ich hier schon mal probehalber angesteuert

    jar
    25. April 2017 um 14:33

    nur noch nicht mit Sound IN & Sound aus

    das eingekreiste Teil
    https://www.forum-raspberrypi.de/attachment.php?aid=13049

    dazu noch einen oder mehrere schicke(n) Drehencoder oder Menüführung, druck -> nächste Volumeeinstellung,Balance -> Left/Right, Front/Back, Center, ggffs. noch EQ

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • y4mskfLOQOHRBhZTamXRPiKmfDqd7HStLlZfy4FtdG2QorArtUZ_EJzNRTAvEcQ7bkSePwM6_8EIXELVMQB1HvK3-w14RnYbNELMAS-CqCdN9ZjHX_-WymEr6Rj1JFEQl_7RJPf6mfL0SAX9vfPU4YWE1I7NRB6EoUUd4oAHDX6JETQMeJzRTCANyH_PHWaE1X-bov1Nus-1Vp_ns7Vozf8ow?width=800&height=514&cropmode=none

    Ich hab mich dieses Wochenende mal mit Bluetooth und der Bluez DBus API beschäftigt. Hab es jetzt hin bekommen, Geräte in der Umgebung zu finden. Als nächstes kommt das Pairing und dann möchte ich per A2DP Audio übertragen und das verbundene Device mit AVRCP fernsteuern (Wie man es von Autoradios normalerweise so kennt).
    Die Bluez Dokumentation ist eher spärlich aber mit d-feet (sehr nützliches Tool zur Visualisierung von DBus Bussen) und ein wenig Geduld erweist sich die API dann doch als ganz brauchbar :D

    Nachdem windows leider das A2DP-SNK (sink) Profil nicht unterstützt, macht es wenig Sinn, das gleiche auch für Windows zu implementieren.

  • Bluetooth funktioniert jetzt soweit, dass man sich mit Geräten pairen und connecten kann. Das Raspb erscheint dann als Medien-Gerät (A2DP-SINK) und kann Audio wiedergeben. Per AVRCP werden Informationen über den aktuellen Titel sowie Steuerungsfunktionen (Play/Pause, Nächstes Lied, Shuffle und Repeat verändern etc) bereitgestellt.
    Für die Verwaltung der Bluetooth Geräte ist die Settings App zuständig, für die Audiowiedergabe gibt es einen Bluetooth Player:

    y4mZHt4wOik2R6CCCfQzuHNIPUgKYNVmEnC7T3w0eXm5wSpxMi-9N7wW5oiPSWKQF6YCj5ascsQnK4XuW_jl29k2UVzSYOcAPVxq2Wi3mosG8-pmxyqRRC0ArjK2_tsEjzlta7CI7-z-B24yx_EF-dvbdDXadY4WiusE26AhHW3PeOt8U9kxICaF1b6Bhz65DgrgT5wnDMzNXn-Mino0ahNug?width=800&height=514&cropmode=none

    Allerdings scheinen nicht immer alle Bluez Funktionen verfügbar zu sein. Gerade bei Shuffle und Repeat wird mir des öfteren angezeigt, dass das Interface diese Variablen besitzt, aber wenn man sie abrufen oder setzen will kommt eine Fehlermeldung, dass sie nicht vorhanden sind. Auch über d-feet lässt sich ihr wert nicht auslesen :(

    y4mZRlJ5_qyV0MkWAUHQGc8ucqdQpmgYWzOsbJkKRdpSySvgrnkmWTP-OFqpd19kXptB1naPhni6zt6wugG3yde_Wpo2z2Ug3XbrzDdh6-UZwn0N6E2E5gGL2yRoxcI98HHl6Xaj4s4z_QPJ-9faVOWiyHY3RxLYZA4y2vC8d9STBJ3FMeakWsapGdaLDoZ91vpDhGcpXfroF7KUVgJvt6nhQ?width=1024&height=576&cropmode=none

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!