Jump to content

Bluetooth Remote Control


Recommended Posts

Bluetooth Remote Control

Fernsteuerung durch das Mobiltelefon

 

Bluetooth Remote Control ist ein von mir entwickeltes Client/Server-System zur Steuerung von PC-Anwendungen mit Bluetoothfähigen mobilen Geräten (e.g. Pocket PC, Mobiltelefon oder PDA).

In der mittlerweile zweiten Version dieses Systems wurde darauf Wert gelegt, dass es möglichst einfach handzuhaben und gut dokumentiert ist.

 

Es folgt nun ein relativ langer Post, der das System erläutert, dessen Konzepte, Teile, Funktionsweise sowie die Handhabung in der Form eines Manuals. Ich empfehle jedem, sich einen kurzen Überblick zu verschaffen (es sind auch viele Bilder dabei) und falls dann Interesse besteht, sich genauer in die Materie, die hier mehr oder weniger vollständig zur Verfügung steht, einzulesen.

 

News- und Downloads:

BTRemoteMapper.zip

BTRemoteControl.jar (diese kann so wie sie ist auf das mobile Gerät übertragen werden)

 

commands.xml (für Nokia E65, sollte allerdings mit allen Nokia Mobiltelefonen funktionieren, Belegung könnt ihr den ersten beiden Screenshots im folgenden Posting entnehmen, dieses File muss in das BTRemoteMapper\plugins Verzeichnis kopiert werden)

 

ACHTUNG! Nicht vergessen auf dem mobilen Gerät Bluetooth zu aktivieren. Aktuell wird kein Fehler angezeigt, wenn das nicht der Fall ist. Ausnahmebehandlung ist in der aktuellen Fassung des Systems noch nicht sehr fortgeschritten...

Edited by CiNcH
Link to comment

1. System-Überblick

 

Client-Anwendung: BTRemoteControl

 

Die in Java entwickelte Anwendung BTRemoteControl übernimmt die Rolle die Client-Rolle im Bluetooth Remote Control System und wird auf dem mobilen Gerät installiert, welches dann als Fernsteuerung verwendet werden kann. Hauptgrund für den Einsatz von Java (bzw. J2ME = Java2 Mobile Edition) ist die Verbreitung, sprich die Tatsache, dass auf sehr vielen Geräten eine Java Virtual Machine läuft, die um die Möglichkeit auf den Bluetooth-Stack zuzugreifen (über JSR-82 API) erweitert wurde.

 

Server-Anwendung: BTRemoteMapper

 

Der BTRemoteMapper übernimmt die Server-Rolle, wird also auf einem PC mit Bluetooth-Dongle installiert und wartet nach dem Start auf eingehende Client-Verbindungen. War die Verbindung mit einem mobilen Gerät (also Client) erfolgreich, wartet BTRemoteMapper auf Kommandos (Protokoll wird später erläutert) und mappt diese dann auf entsprechende Aktionen bzw. führt diese dann aus (z.B. 'Channel Up' im DVBViewer).

Auch beim BTRemoteMapper kommt Java (hier natürlich die für PC übliche Standard Edition) zum Einsatz. Hauptgrund hier war die Verfügbarkeit eines vollständigen und einfach handzuhabenden API-Implementierung (JSR-82) für den Zugriff auf den Bluetooth Protokoll-Stack in der Form von BlueCove. Außerdem bietet die hochintegrierte Sprache Java eine riesige Klassenbibliothek mit der man oft sehr schnell zum Ziel gelangt.

 

Designziele und Konzepte

 

Ein wichtiges Ziel war, dass Client-Anwendung und die zu steuernde Applikation komplett entkoppelt sind und dass von Beginn an möglichst viele Applikationen mit dem Bluetooth Remote Control System steuerbar sind, sprich, dass man nicht für jede Applikation eine eigene Lösung finden bzw. entwickeln muss.

Die Lösung für die Entkopplung sieht so aus, dass BTRemoteControl keine serialisierten Java-Objekte oder dergleichen überträgt, sondern lediglich Kommandos als Bytefolgen in der Form von Tasten-ID's des mobilen Gerätes (vereinfacht dargestellt, zum Protokoll später mehr), welche vom BTRemoteMapper dann auf die entsprechenden Aktionen gemappt werden (ID/Aktion-Mapping ist natürlich anlernbar, dazu später mehr).

Damit nun möglichst viele Applikationen damit gesteuert werden können, mappt BTRemoteMapper die eingehenden Kommandos auf Standard Eingabe-API's verschiedener Betriebssysteme (Kommandozeilenaufrufe, Tastatur-Shortcuts, Win32 SendMessage-API). Zu dem wurde das Mapping auf Plugins ausgelagert. Es existiert also ein einfach API, damit die Fähigkeiten des BTRemoteMappers erweitert werden können (dieses API werde ich ebenfalls zu einem späteren Zeitpunkt vorstellen).

 

Ein weiteres wichtiges Konzept ist das von mir benannte Kontextkonzept. Es wurde oft der Wunsch geäußert, dass der DVBViewer eine Taste auf der Fernbedienung mehreren Aktionen zuweisen kann und je nachdem, wo sich der DVBViewer gerade befindet bzw. was angezeigt wird (z.B. ein bestimmtes OSD), wird beim Tastendruck die dafür vorgesehene Aktion ausgeführt. Diese Logik habe ich nun auf die Fernbedienung ausgelagert. BTRemoteControl unterstützt dazu 3 Kontexte, die man wechseln kann. Jeder Taste können also 3 Aktionen zugewiesen werden und je nach Kontext wird eben die gewünschte Aktion ausgeführt. Gerade bei Mobiltelefonen mit wenig Tasten ist das von großem Vorteil.

Hier ein Beispiel, wie ich mein Nokia E65 belegt habe:

 

Context A:

E65_A.jpg

 

Context B:E65_B.jpg

 

In einer zukünftigen Version soll es möglich sein, dass sich der Kontext anhand von DVBViewer COM-Events dynamisch ändert. Sich also die Tastatur anders verhält, wenn man sich in einem OSD befindet oder dergleichen.

 

Voraussetzungen

 

Wie bereits erwähnt setzt BTRemoteControl eine Java Virtual Machine (welche CLDC 1.1/MIDP 2.0 unterstützt) sowie das Vorhandensein einer JSR-82 (Bluetooth API/btapi) Implementierung voraus (was allerdings mein mittlerweile in die Jahre gekommenes Nokia 6230 schon alles unterstützt hat).

Zur Verifizierung der Eigenschaften eures mobilen Gerätes könnt ihr ja das Internet oder den Hersteller direkt konsultieren. Auf J2ME Polish findet ihr zum Beispiel eine detaillierte Auflistung gängiger mobiler Geräte mit deren Eigenschaften. Bevor man die Gerätedatenbank aber einsehen kann, muss man sich registrieren.

 

PC-seitig wird ein einfacher Bluetooth-Dongle benötigt. Unter Windows XP gibt es dafür 2 verschiedene Treiber bzw. Stacks, den Windows XP SP2 Stack sowie den WIDCOMM-Stack. Prinzipiell sind beide geeignet. Das eingesetzte BlueCove-API unterstützt ab 2.0 neuerdings auch den MS-Stack.

Da die Server-Anwendung auf Java basiert, wird eine entsprechende virtuelle Maschine benötigt, sprich ein installiertes Java Runtime Environment (JRE). Benötigt wird eine Version > 5: Java Download-Page

 

Vorteile der Bluetooh-Kommunikation

 

Bluetooth ist als Luftschnittstelle für ein Fernsteuerungssystem aus mehreren Gründen sehr gut geeignet:

  • kein Sichtkontakt zwischen kommunizierenden Geräten nötig
  • mehr als ausreichende Distanz zwischen kommunizierenden Geräten
  • bidirektionale Kommunikation
  • genaue Spezifikation für Modulation der Signale bis hin zum Datenaustausch (im Gegensatz zur Infrarot-Technik, wie sie in der Unterhaltungselektronik zu finden ist)
  • Stack-Architektur für Interoperabilität

Die Kommunikation erfolgt über die Bluetooth RFCOMM-Schicht (bzw. eigentlich bereits Anwendung). Typischerweise setzen Bluetooth-Anwendungen auf der tiefer liegenden L2CAP-Schicht auf. Da der MS BT-Stack für den Zugriff auf L2CAP kein API bereitstellt und somit die Ergänzung um weitere Bluetooth-Profile durch Dritte verhindert wird, viel die Wahl auf RFCOMM.

Die Logik für L2CAP habe ich allerdings bereits implementiert. Wer also einen guten Grund sieht, das auch zu unterstützen, soll sich melden. Ich sehe allerdings keinen, da RFCOMM sowohl vom MS- also auch vom WIDCOMM-Stack unterstützt wird. Auf mobilen Geräten, wo JSR-82 umgesetzt, ist RFCOMM ebenfalls Pflicht.

 

Protokoll

Wie bereits erwähnt werden keine serialisierten Java-Objekte oder dergleichen zwischen Client und Server ausgetauscht, sondern Bytefolgen, die als ASCII-Zeichenketten zu interpretieren sind. Somit können Client und Server komplett unabhängig voneinander entwickelt werden (Plattform und Programmiersprache spielen keine Rolle), wenn das Protokoll, d.h. die Entitäten bzw. Nachrichten, die ausgetauscht warden, bekannt sind.

Nachrichten liegen im XML-Format vor. Jetzt werden sich vielleicht viele denken, dass XML auf Grund des großen Overheads und Komplexität bei der Verarbeitung nicht unbedingt für ein leistungsschwaches und speicherarmes mobiles Gerät geeignet zu sein scheint. Fakt ist, dass sich dadurch bis jetzt keine Nachteile ergeben haben. Für J2ME existieren Parser, welche auf dem Nokia 6230 problemlos laufen. Neben dem Vorhandensein von Parsern für sehr viele Plattformen und Programmiersprachen ist ein weiterer Vorteil die Tatsache, dass Nachrichten stets in Klartext vorliegen, also durch den Menschen leicht lesbar sind, und das System damit einfach zu debuggen ist. Dennoch wurde auch darauf Wert gelegt, dass die Nachrichten möglichst einfach sind, sodass relativ schnell minimale Parser entwickelt werden können, falls für eine Plattform keine XML-Bibliothek zur Verfügung steht (das habe ich bereits für ein kleines eingebettetest System in der Sprache C gemacht).

Auf das Protokoll werde ich zu einem späteren Zeitpunkt noch genauer eingehen, allerdings nicht mit dem Hintergedanken, dass sich da dann sehr viele interoperable Client- und Server-Anwendungen ergeben werden, sondern um die genaue Funktionsweise zu demonstrieren.

 

 

2. Features in der aktuellen Version

  • Mapping der Tasten des mobilen Gerätes auf Win32-SendMessage (wird vom DVBViewer unterstützt)
  • Lernfunktion für einfaches Anlernen der Tasten bzw. Zuweisen von DVBViewer-Aktionen

 

3. Handbuch

 

3.0 Installation von BTRemoteControl (bzw. von mobilen Java/J2ME-Anwendungen)

 

Die Installation einer Anwendung auf einem mobilen Gerät hört sich zwar schwer an, ist aber sehr einfach. Die Hersteller mobiler Geräte stellen meist einen Installer zur verfügung, welcher sich mit dem mobilen Gerät verwendit und eine entsprechende Anwendung mit wenigen Klicken installiert. So zum Beispiel Nokia mit der PC Suite und der 'Application Installer' Anwendung:

 

app_installer.png

 

Die Nokia PC Suite kann sich über USB-Kabel, Bluetooth oder Infrarot mit dem PC verbinden.

Da die Installation mobiler Anwendung für jeden Hersteller anders sein wird, die Schritte aber meist selbsterklären sind (wie obiges Beispiel zeigt), werde ich nicht näher darauf eingehen.

Danach muss die installierte Anwendung auf dem Dateisystem des mobilen Gerätes noch gefunden werden, damit sie ausgeführt werden kann (auf dem Nokia E65 befinden sich installierte Anwendungen unter 'Menu' – 'Installations').

 

3.1 Starten der Server-Anwendung BTRemoteMapper

 

Nachdem das BTRemoteMapper-Archiv entpackt worden ist (z.B. nach C:\BTRemoteMapper), kann die Anwendung bereits gestartet werden. Sind JAR-Dateien mit der Java Virtual Machine assoziert, kann das über einen Doppelklick auf die BTRemoteMapper.jar erfolgen. Ist das nicht der Fall kann man die Anwendung alternativ über einen Doppelklick auf die run.bat starten, welche die Kommandozeile 'java –jar BTRemoteMapper.jar' ausführt. Wenn eine aktuelle Java-Version (JRE) korrekt ins System eingebunden ist, funktioniert das.

Nach dem Start wird die Plugin-Selektion erscheinen. Hier kann im Moment nur das SendMessage-Plugin gewählt werden -> GO.

 

plugin_selection.png

 

Ebenfalls auf dem Bild zu sehen ist die Konsole, welche deteilliert über die ausgetauschten Nachrichten, Fehler usw. Auskunft geben soll.

Ist das Plugin gewählt, passiert folgendes:

Zunächst initialisiert sich das Plugin und lädt die bereits gespeicherten Kommandos (plugins\commands.xml). Die commands.xml ist "ab Werk" leer und es müssen zuerst Kommandos angelernt werden. Diese Datei ist deshalb leer, weil die Tasten ID's von Hersteller zu Hersteller variieren können bzw. auch von Modell zu Modell. Tasten ID's sind zwar durch ITU-T standardisiert, ob sich die Hersteller daran halten, ist aber die andere Frage. Nokia tut es jedenfalls nur teilweise und deshalb die Entscheidung auf ein zunächst leeres File. Dennoch werde ich hier die commands.xml für mein Nokia E65 anhängen.

Außerdem wird nun der Bluetooth-Dongle initialisiert und der Bluetooth Server-Thread sowie der Bluetooth Remote Service (mit der UUID 0000113200001000800000805f9b34fb) gestartet, der auf eingehende Verbindungen wartet. Über Erfolg oder Scheitern dieses Vorgangs informiert die Konsole.

 

Man sieht also, dass das Starten der Server-Anwendung sehr einfach ist. Wie Kommandos angelernt Werden können folgt im übernächsten Kapitel.

 

3.2 Starten der Client-Anwendung BTRemoteControl

 

BTRemoteControl müsste sich ja bereits auf dem mobilen Gerät befinden und dort lokalisiert werden können. Nachdem der Server nun läuft, kann auch der Client,sprich BTRemoteControl, gestartet werden. Direkt nach dem Start versucht BTRemoteControl den Bluetooth Remote Service zu finden und zu diesem zu verbinden. Je nach mobilem Gerät wird man nun noch gefragt, ob der Datentransfer erlaubt ist. Bestätigt man diese Abfrage mit ja, wird die Verbindung initialisiert. Danach erscheint auf dem mobilen Gerät das Hauptmenü:

 

main.jpg

 

Im folgenden Kapitel werden nun die Funktionen erläutert.

 

3.2.1 BTRemoteControl - Main Menu

 

Remote Control:

Remote Control ist der Hauptanwendungsfall, wenn bereits Kommandos angelert bzw. Aktionen den Tasten zugewiesen sind.

 

Learn Key:

Über Learn Key kann eine Taste auf dem mobilen Gerät angelernt und auf dem PC eine Aktion zugewiesen werden.

 

Check Keycodes:

Check Keycodes ermöglicht es, schnell sämtliche Keycodes, die den Tasten des mobilen Geräts zugewiesen sind, herauszufinden. Mit dieser Information kann man dann auf dem PC Aktionen im Batch sozusagen zuweisen (anstatt jede Taste über 'Learn Key' einzeln anzulernen, beide Methoden des Anlernens werden in den folgenden Kapiteln erläutert).

 

3.2.2 Anlernen einer Taste über 'Learn Key'

 

Setzt man das Bluetooth Remote Control System zum ersten mal ein, hat man wahrscheinlich eine leere commands.xml Datei im plugins-Pfad, was heißt, dass noch keine Tasten angelernt sind. Über 'Learn Key' kann man das nun erledigen. Auf dem mobilen Gerät ist das sehr einfach. Man muss lediglich 'Learn Key' ausführen, es erscheint folgender Bildschirm:

 

j2me_learn.png

 

Über die Context-Taste kann man den dem Tastendruck zugewiesenen Kontext wecheln. Es gibt die Kontexte A, B und C. Es ist also möglich, eine Taste drei Mal anzulernen, z.B. wie bei der Vorstellung des Kontext-Konzepts die Taste '2' einmal mit der Aktion 'Fav2' und einmal mit der Aktion 'OSD-Red'. Den Kontext kann man dann beim steuern ebenfalls wechseln und somit das Verhalten der Tasten steuern.

 

Nachdem der Kontext gewählt ist, drückt man nun die anzulernende Taste. Anschließend werden der Keycode der Taste sowie der Kontext mit dem Kommando 'learn' an den BTRemoteMapper geschickt, welcher dann das Anlernfenster aufspringen lässt:

 

learn.jpg

 

Hier kann man nun eine Aktion zuweisen. Für den DVBViewer existiert bereits ein Template. Die für SendMessage üblichen Parameter sind für den Nutzer so nicht mehr von Interesse. Man muss also lediglich die Aktion wählen.

Nach der Bestätigung druch OK, wird das angelernte Mapping in die commands.xml geschrieben und steht nun zur Verfügung.

 

Win32 SendMessage-API

Class Name und Message sind für eine bestimmte Applikation immer gleich ('TfrmMain' und 45762 im Falle des DVBViewers, für Winamp wären diese Werte 'Winamp v1.x' und 273).

LParam und WParam sind die Werte die man an das über Class Name und Message identifierte Fenster geben. Dieses kann die Werte entsprechend interpretieren und eine Aktion auslösen (z.B. DVBViewer WParam 2069 und LParam 100 löst die Aktion 'Pause' aus).

All diese Werte muss man halt für eine entsprechende Applikation herausfinden. Ist zwar etwas abstrakt, aber man gewöhnt sich an alles…

 

3.2.3 Zuweisung der Aktionen zu Keycodes über die commands.xml Datei

 

Wenn einem der 'Learn Key' Weg zu langwierig ist kann man über die Funktion 'Check Keycodes' schnell alle Keycodes, die den Tasten zugewiesen sind, herausfinden. Einfach Taste drücken und Keycode notieren.

Anschließend kann man das Mapping für alle Keycodes in der commands.xml selber vornehmen. Ein Kommando in der commands.xml hat die folgende Struktur:

 

	<cmd id="FavUp">
	<class>TfrmMain</class>
	<message>45762</message>
	<wparam>2069</wparam>
	<lparam>120</lparam>
	<key>-1</key>
	<context>A</context>
</cmd>

 

Die Werte bzw. deren Bedeutungen sollten mittlerweile klar sein. Ansonsten hochscrollen…

 

4. Eingesetzte Technologien

  • JNA: Biobliothek zur Abbildung von Win32-Funktionsaufrufen auf die Sprache Java und Ausführen derselben über JNI (Java Native Interface)
  • kNanoXML: schlanker XML-Parser zum Einsatz in mobilen Java-Anwendungen (J2ME)
  • Zukünftig: COM4J (Zugriff auf COM aus Java-Anwendungen heraus)

5. Zukunftsaussichten

  • Plugins für Kommandozeilen- sowie Shortcut-Mapping
  • Parallele Nutzung mehrerer Plugins und somit Vermischung der Steuerungs-API's, z.B. für parallele Steuerung mehrer Applikationen (z.B. DVBViewer für DVB/HTPC und PowerDVD für Blu-Ray Wiedergabe) oder zum Starten des DVBViewers über Kommandozeile und Steuerung über SendMessage usw.
  • Austausch bzw. neu laden der Konfigfiles (Mappings usw.) zur Laufzeit
  • UI-Optimierungen (sowohl für Client- als auch Server-Anwendung, Icons usw.)
  • Automatischer Konzextwechsel durch DVBViewer COM-Events
  • Eigener Web-Server basierend auf Linux (HTTP/FTP/SVN/WebDAV/JSP/PHP/SQL usw.) bzw. Internet-Präsenz mit weiteren Infos und Datenbank für Konfigfiles (Mappings für verschiedene Applikationen und mobile Geräte)

Edited by CiNcH
Link to comment

Schicke Sache !

 

Ist das jetzt nur ein Pflichtenheft oder gibt's die Software schon ? :)

 

EDIT: Ah, ok. Ein Posting weiter oben steht die Antwort.

Edited by dgdg
Link to comment

Ja, die Software steht soweit, bis auf die Zukunftsaussichten halt. Ich will das allerdings nochmal kräftig durchtesten heute Abend. Wie gesagt, die Woche werden die Binaries noch online gehen.

Edited by CiNcH
Link to comment

So, die Packete sind nun im ersten Posting zum Download bereit.

 

Hier noch die Keycodes für Nokia Telefone (könnt ihr aber auch selber über 'Check Keycodes' herausfinden):

 

Numpad 0-9: 48-57 (entspricht ITU-T Standard)

*: 42 (entspricht ITU-T Standard)

#: 35 (entspricht ITU-T Standard)

Navi Up: -1

Navi Down:-2

Navi Left: -3

Navi Right: -4

Navi Return: -5

 

Das sind mal die wichtigsten...

 

Und hier noch ein Screenshot:

 

btrc.jpg

Link to comment

Hi Cinch

 

du erwähnst ja die bidirektionale Kommunikation. Wird das schon genutzt? Denkbar wäre beispielsweise die Anzeige aller Informationen die der DVBViewer zur aktuell laufenden Sendung bietet. Oder die Möglichkeit, durch den EPG zu blättern ohne andere Personen zu stören, die gerade fernsehen. Bei Musikdateien könnte das Cover angezeigt werden oder die Playlist usw. usw.

 

Oder ist das schon alles implementiert? Ich werde leider erst am Wochenende dazu kommen, deine Software auszuprobieren. Auf jeden Fall schon mal ein dickes Danke schön dafür!

Btw.: Kennst Du schon Salling Clicker?

 

Viele Grüße

Thorsten

Link to comment
du erwähnst ja die bidirektionale Kommunikation. Wird das schon genutzt? Denkbar wäre beispielsweise die Anzeige aller Informationen die der DVBViewer zur aktuell laufenden Sendung bietet. Oder die Möglichkeit, durch den EPG zu blättern ohne andere Personen zu stören, die gerade fernsehen. Bei Musikdateien könnte das Cover angezeigt werden oder die Playlist usw. usw.

 

Viel sendet der Server noch nicht an den Client, jedenfalls nichts nützliches (nur Handshaking). Version 1 des Systems hat da mehr gemacht. Da wurden alle Kommandonamen, die der Server kannte (also irgendwann mal angelernt wurden) beim Verbindungsaufbau an den Client geschickt, damit dieser diese visualisieren konnte (also ein Menü daraus aufbauen). Das ist nun nicht mehr der Fall. Die Steuerung erfolgt nun nur noch über das Keypad.

Über solche Sachen habe ich aber schon nachgedacht, interaktive Dienste usw. Da brauch ich allerdings noch wirklich sinnvolle Ideen, also nicht nur, dass die bidirektionale Kommunikation ausgenutzt wird, sondern dass das wirklich Hand und Fuß hat. Möglich ist allerdings noch vieles, auch GUI mäßig auf der Seite des mobilen Gerätes.

 

Btw.: Kennst Du schon Salling Clicker?

 

Nein. Scheint ja eine Windows CE Applikation zu sein!? Mein Nokia E65 basiert auf Symbian...

 

 

Ich bin auch gerade an COM dran, werde darüber also bald sämtliche Infos abgreifen können und was die COM-Schnittstelle des DVBViewers noch so bietet. Aber wie gesagt, es muss halt einen echten Nutzen haben und nicht nur schick sein.

Edited by CiNcH
Link to comment
Scheint ja eine Windows CE Applikation zu sein!?

Der Client fürs Handy ist ebenfalls eine J2ME jar-Datei.

Aber wie gesagt, es muss halt einen echten Nutzen haben und nicht nur schick sein.

Im EPG blättern fände ich einen echten Nutzen. Auch das anzeigen der Playlist usw. bei MP3s und Shoutcast-Streams fände ich sehr sinnvoll, da kann der Monitor bzw. Fernseher komplett ausgeschaltet bleiben zum Musik hören. Coveranzeige ist natürlich eher im Bereich "nice to have" angesiedelt ;-) Ferner könnte der aktuelle Kontext der Farbtasten im Display angezeigt werden.

 

cheers,

Thorsten

Link to comment
Der Client fürs Handy ist ebenfalls eine J2ME jar-Datei.

 

Ah, ok. Ich bin da nur zu Beginn über das "for Windows 3.5" gestolpert. Dachte, es wäre für Windows CE 3.5 (gibt aber glaub eh nur 3.0), dabei bezieht sich das 3.5 auf die Version der eigenen Anwendung...

 

 

Status:

Ich hab mich nun in COM bzw. COM4J eingearbeitet und sollte nun vollständig auf das DVBViewer COM-API zugreifen und Events empfangen können. Der voll automatische 'Kontext-Change-Mechanismus' wird also nicht mehr lange auf sich warten lassen. Konkret bedeutet das, dass sich das Keypad des mobilen Geräts dann anders verhält, je nachdem was der DVBViewer anzeigt (im Falle eines OSD's wird dann das Navigationskreuz eben zu up, down, left, right anstatt ch+, ch-, vol+, vol- usw., das wird dann eben durch den User 'customizable' sein, wie sich das Keypad wann verhalten soll...). Durch diesen Mechanismus kann ein Mobiltelefon mit wenig Tasten zur vollwertigen Fernbedienung werden. Mal schauen, was wir noch für Vorteile herausholen können, damit das ganze noch attraktiver wird.

 

Ich werde heute Abend meinen Java-DVBViewer-COM-Sample-Code mit dem DVBViewer testen und bei Erfolg alles hochladen, was man zum Entwickeln von DVBViewer-Plugins mit Java benötigt inkl. Sample-Code.

Edited by CiNcH
Link to comment
  • 2 weeks later...

Wohl kaum. Die Fernbedienungsanwendung ist eine Java-Anwendung (genau Java Mobile Edition) und läuft daher auf Java-fähigen mobilen Geräten, was ich bei der PS3 Fernbedienung bezweifle.

Link to comment

Soweit ich mich erinner musste man die PS3 FB einfach nur mit dem PC paaren und dann die Tasten im DVBViewer anlernen. Dazu gab's hier auch mal einen Post, versuch's mal mit der Suche (am besten das Google-Suchfeld).

Link to comment

Ich habe gerade mal versucht, das Ganze zu installieren.

 

Wenn ich das Java-Programm auf dem Handy starte, meldet es "Connecting..." und zwar endlos. Mit wem will das Programm connecten? Woher weiss es, welcher Bluetooth-Rechner ferngesteuert werden soll?

 

Wenn ich den BTRemoteMapper auf dem PC starte (mit RUN.BAT) bekomme ich: "Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file".

 

Nicht dass mich das wirklich wundert. Mit Java gibt es eigentlich immer Versionsprobleme (von wegen plattformübergreifend, wenn es nicht mal versionsübergreifend funktioniert).

 

Ich hätte es aber schon ganz gerne mal ausprobiert.

Link to comment

So, ich bin jetzt zu hause und habe Java auf dem PC auf den aktuellen Stand gebracht. Im Büro darf ich das nicht, weil dann irgendwelche Firmensoftware nicht mehr läuft. Die braucht irgendeine alte Java-Version.

 

Warum ist eigentlich Java jedesmal veraltet, wenn ich irgend eine Java-Applikation ausprobieren will? Das ging mir beim letzten mal auch so. Das ist ja beinahe so, als müsste man jedesmal seine Windows aktualisieren, wenn man ein neue Software aufspielen will - ihr merkt schon, ich mag den Java-Kram nicht besondern. :)

 

Jedenfalls startet jetzt die Console des BTRemoteMapper. Wenn ich dann auf dem Handy das BTRemoteControl starte. meldet der Mapper folgendes:

 

RemoteMapper started... selecting plugin
BlueCove version 2.0.2 on bluesoleil
waiting for RFCOMM connection...
java.io.IOException: Can't query remote device
at com.intel.bluetooth.RemoteDeviceHelper.getFriendlyName(RemoteDeviceHelper.java:215)
at javax.bluetooth.RemoteDevice.getFriendlyName(RemoteDevice.java:131)
at app.bluetooth.RFCOMMServer.run(RFCOMMServer.java:46)
at java.lang.Thread.run(Unknown Source)
connecting RFCOMM client...

Auf dem Handy steht immer "Connecting..."

 

Das Handy ist ein Nokia 9500. Kann sein, dass das die notwendige Bluetooth/Java-Unterstützung nicht mitbringt. Aber wenn man so gar keinen Hinweis von der Software bekommt, ist das etwas schwierig.

Edited by dgdg
Link to comment

Der Bluetooth Remote Service ist ein spezieller Service mit einer eindeutigen ID. Die J2ME-Anwendung auf dem mobilen Gerät versucht diesen zu finden und zu diesem zu connecten, die PC-Anwendung muss also laufen... Wenn die Server-Anwendung nach etwa 10 Sekunden nicht gefunden wurde, kann man die J2ME-Anwendung wieder schließen. Das muss ich noch abfangen...

 

BlueCove version 2.0.2 on bluesoleil

 

Mit BlueSoleil hab ich gar keine Erfahrung, nur mit WIDCOMM und MS Stack.

 

connecting RFCOMM client...

 

Bluetooth am mobilen Gerät scheint zu funktionieren. Der Verbindungsaufbau kommt zustande bzw. nur teilweise, weil der Server dann eine Exception schmeißt und den Verbindungsaufbau abbricht. Bei der Methode getFriendlyName kackt er ab. Eigentlich wird die nicht benötigt und dient nur dazu den Namen des Bluetooth-Geräts (sprich des Mobiltelefons) anzuzeigen. Vielleicht ist da was im BlueSoleil-Stack bzw. in der Java-Adaptierung fehlerhaft implementiert!? Ich werd den Methodenaufruf bei Gelegenheit einmal rausnehmen, mal sehen, ob der Verbindungsaufbau dann durchläuft.

 

Hab noch einige andere Änderungen geplant, da ich die Woche noch mein Blu-Ray Laufwerk bekommen werde, und zwar multiple Plugins parallel, bzw. ein Shortcut-Plugin zur parallelen Steuerung von PowerDVD und der automatische Kontextwechsel über DVBViewer COM-Events (die Events erhalte ich bereits).

Edited by CiNcH
Link to comment

Ich benutze den Bluetooth-Stick mit BlueSoleil eigentlich relativ häufig, z.B. zum Datenabgleich mit dem Handy oder um über einen Motorola Bluetooth-Kopfhörer am PC Musik zu hören. Ich hatte auch schon testweise einige RFCOMM-Geräte dran, z.B. eine GPS-Mouse. Bisher gab's keine Probleme.

 

Allerdings ist das schon ein ziemliches Billigteil, 12 Euro oder so bei ebay. Aber wie gesagt, bisher keine Probleme.

 

Ich wusste gar nicht, dass BlueSoleil ein eigener Stack ist. Ich dachte, das wäre der Hersteller des Sticks. :)

Edited by dgdg
Link to comment

Schau mal, ob es da aktuellere BlueSoleil-Treiber für gibt, als die, die du im Einsatz hast. Ich weiß leider nicht wie gut der BlueSoleil-Stack in BlueCove adaptiert ist...

Link to comment
Schau mal, ob es da aktuellere BlueSoleil-Treiber für gibt, als die, die du im Einsatz hast. Ich weiß leider nicht wie gut der BlueSoleil-Stack in BlueCove adaptiert ist...

 

Ich habe gerade versucht ein Update drüber zu bügeln ... und habe ganz ganz schnell die Windows Systemwiederherstellung bemühen müssen - völliges Chaos. Wenn ich mal viel Zeit habe, versuche ich das vielleicht nochmal auf einem sauberen, neuinstallieren System. :)

 

Also dann bleibe ich bei der alten BlueSoleil-Version von 2004 und freue mich dass alles funktioniert - nur halt Java wieder nicht. Aber daran ist Java mit seinem Versionschaos sicherlich auch nicht ganz unschuldig.

 

Auf dem Handy habe ich im Prinzip das gleiche Problem. Die Symbian-Applikationen arbeiten alle wunderbar mit Bluetooth. Nur die Java-Programme zicken ständig rum. Deswegen hatte ich mich schon gewundert, dass BTRemoteControl überhaupt lief.

 

 

Schade, dabei war die Java-Idee eigentlich ganz gut.

 

 

EDIT: Ich lese gerade auf der BlueCove-Seite:

 

BlueSoleil version 1.6.0, 2.3 or 3.2.2.8. BlueSoleil version 5.0.5 not supported.

Also die 5.0.5, die ich gerade versucht habe zu installieren, hätte sowieso nicht funktioniert. Aber auch bei den anderen Stacks lese ich überall "Limitations...". Irgendwie scheint mir das keine gute Idee zu sein, Bluetooth über Java zu programmieren. Außer unter Java funktioniert der Kram nach meiner Erfahrung völlig problemlos. Auch auf meinen beiden Laptops (Firma und privat) nie ein Problem mit Bluetooth und irgendwelchen Stack-Limitations - anscheinend solange man kein Java benutzt. :D

Edited by dgdg
Link to comment
Die Symbian-Applikationen arbeiten alle wunderbar mit Bluetooth.

 

Könnte ich auch mal reinschauen. C++ Programme unter Symbian sind mir auch nicht fremd...

 

Aber hier sieht es mir doch eher nach einem Problem mit dem Dongle bzw. BlueSoleil aus.

Edited by CiNcH
Link to comment

Wie gesagt, WIDCOMM und MS funktionieren bei mir. Vielleicht kannst du ja mal versuchen, den MS-Stack zu installieren. Dank HCI-Schnittstelle sollten diese ja interoperabel sein. Mein Belkin-Dongle wird zum Beispiel mit WIDCOMM-Stack geliefert. Nach dem ich den Device-String in die MS-Stack inf geschrieben habe, konnte ich diesen auch für den Belkin-Dongle installieren und das hat auch funktioniert (bth.inf für MS-Stack ist unter C:\WINDOWS\inf zu finden). So schlecht ist das mit Java gar nicht. Immerhin ist BlueCove frei und wrappt doch die wichtigsten Stacks. Unter C# habe ich sowas noch nicht gefunden, bzw. ist es da kostenpflichtig. Unter C++ könnte man direkt das WIDCOMM-API verwenden, dann funktionieren die anderen Stacks halt wieder nicht. Die Standard-Profile bzw. Anwendungen scheinen ja allen Stacks beizuliegen und funktionieren auch wunderbar. Will man aber selber etwas machen, ist die Stack-Situation nicht mehr ganz so einfach.

Link to comment

Ich denke wenn ich weiter mit dem BTRemote weiterspielen möchte, dann hole ich mir lieber einen neuen Dongle mit einem anderen Stack. An meinem Arbeitsrechner möchte ich nicht soviel herumschrauben, denn die Synchronisation mit dem Handy sollte weiterhin funktionieren.

 

Im Moment fehlt mir aber dafür die Zeit.

 

Klar, für den Programmierer ist Java sicher eine feine Sache. Dafür verlagert man den Stress auf den Anwender. Der muss halt schauen, dass er auf seinen Plattformen immer die aktuellste Virtual Machine und alle notwendigen Add-Ons am Laufen hat. Wobei dann noch einige Programme unbedingt eine alte und andere eine neue VM haben wollen (weil sich's die Programmierer manchmal besonders einfach machen) und dann laufen diese Programme nicht zusammen auf einem Rechner.

DOT.NET z. B. ist deutlich geschmeidiger. Habe 1.1, 2.0 und 3.? gleichzeitig auf dem Rechner und jedes Programm nimmt sich, was es braucht.

Edited by dgdg
Link to comment
Wenn ich den BTRemoteMapper auf dem PC starte (mit RUN.BAT) bekomme ich: "Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file".

 

Nochmal hierzu... Ich glaub ich sollte nicht mit Java 6 kompilieren (bzw. Byte-Code generieren lassen). Dann scheint es nur mit VM's >= 6 zu laufen. Weiter als Java 5 kann ich aber nicht zurück, da ich Generics einsetze (obwohl ich darauf auch verzichten könnte). Dann sollte es mit VM's >= 5 laufen (also derzeit 5 und 6). Hmmm, mal schauen.

 

So, ich bin jetzt zu hause und habe Java auf dem PC auf den aktuellen Stand gebracht. Im Büro darf ich das nicht, weil dann irgendwelche Firmensoftware nicht mehr läuft. Die braucht irgendeine alte Java-Version.

 

Der umgekehrte Fall sollte ja gelten, sprich dass mit älteren Versionen "kompilierte" Programme auch mit neueren VM's laufen sollten. Aber für eine Firma steht halt viel auf dem Spiel und drum geht man das Risiko besser nicht ein.

Edited by CiNcH
Link to comment

Hier mal ein Screenshot vom kommenden BTRemoteMapper:

 

btrm.jpg

 

Es wird also möglich sein, Plugins zu konfigurieren, falls nötig. Es gibt nun ein spezielles DVBViewer-Plugin, welches den Kontext auf Grund von DVBViewer COM-Events automatisch ändern kann. In obigem Beispiel gibt es eben den Kontext 'OSD' (A, B und C wird es nicht mehr geben, es kann nun beliebig viele und mit beliebigem Namen geben) und dieser wird gesetzt, wenn der DVBViewer ein OSD anzeigt. Dann konfiguriert sich die Tastatur des mobilen Geräts automatisch um und löst die im Kontext 'OSD' definierten Aktionen aus. Dieser Kontext wird auch automatisch verlassen, sobald das OSD ausgeblendet ist/wird. Dann wird der zuvor gesetzte Kontext reaktiviert (z.B. kann es einen 'General'-Kontext für Kanalzapping oder wie auch immer geben), bzw. wird es da noch Regeln geben müssen, wenn mehrere Plugins hier die Pfoten mit im Spiel haben (ein PowerDVD-Plugin für Blu-Ray Navigation entsteht auch bereits). Außerdem wird es möglich sein OSD's von diesem Auto-Switching zu exkludieren. Für die OSD-Uhr macht es zum Beispiel keinen Sinn, die OSD-Navigation bzw. halt den 'OSD'-Kontext zu aktivieren.

 

Würde mich über Meinungen und Verbesserungs- bzw. Vereinfachungsvorschläge sehr freuen.

 

Vielleicht eine Reprogrammierung bzw. automatische Änderung des Kontexts, wenn sich der DVBViewer in einem speziellen OSD befindet (z.B. Timer)?

Weiters plane ich einen automatischen Kontextwechsel, wenn sich das Fordergrundfenster ändert (z.B. DVBViewer <-> PowerDVD).

Edited by CiNcH
Link to comment

Ein weiteres Plugin wird das Fordergrundwindow switchen können (z.B. von PowerDVD auf DVBViewer usw.) und es wird dann dementsprechend auch der Kontext gewechselt bzw. fangen meine PowerDVD und DVBViewer Plugins die "Foreground window changed" Events von Windows ab und wechseln dann den Kontext, falls sie es sind, die im Fordergrund sind.

 

Außerdem wird der PCRemoteMapper ins Tray minimiert werden können. Das ist ein neues Feature von Java6. Es wird also künftig Java6 vorausgesetzt...

Edited by CiNcH
Link to comment
Das Teil unterstützt wahrscheinlich das HID-Profil, sieht also für das System und den DVBViewer wie eine Tastatur aus.

 

Ja - also in der Systemsteuerung im "Bluetooth-Geräte"-Fenster wird neben Maus und Tastatur auch die Fernbedienung als "BD Remote Control" (Verbindung hergestellt) angezeigt. Unter "Eigenschaften" wird dann als Dienst "Treiber für Maus, Tastatur, usw. (HID)" angezeigt.

Leider reagiert aber der DVBViewer nicht wenn ich mit der Fernbedienung Befehle einlernen will.

Muss ich da sonst noch etwas einstellen oder installieren?

Link to comment
  • 1 month later...

Wirklich klasse Idee! Genau nach so einer Software habe ich gesucht. Leider steckt das Projekt noch in den Kinderschuhen. Wenn das alles mal so komfortabel wie bei bemused funktioniert spendier ich Dir n Kasten.

Bei mir funktioniert der Verbindungsaufbau über ein Dell Bluetooth Modul für BT Tastatur und BT Maus tadellos. Ich bekomme nur manchmal einen Error beim Drücken von Tasten angezeigt.

Link to comment
  • 2 weeks later...

Ja das is ja mal echt ne feine Sache :original: habe sowas Ähnliches in meinem Sony Ericson gehabt...konnte ich MP etc. steuern bzw. einfach die maus wenn ich wollte...war auch ne sehr feine sache...Hab jetzt nen N95...damit sollte das wohl auch gehen...habe leider zur Zeit kein Dongle, sonst könnte ich das auch mal testen, da die normale FB ziemlicher Schrott ist...langfristig suche ich dann aber doch ne "richtige" universal FB für Reciever, PC und den ganzen Kram...kann das handy in der nächsten version dann auch schon richtiges EPG und ne Art On Screen Menü anzeigen?? Das wär mal richtig fein :bye: So alla Logitech One :(

 

Ist es eigentlich nicht generell Möglich mit dem Handy alle geräte über IR und Bluetooth zu Stuern?? Also auch meinen HK Reciever zum Beispiel oder den Beamer zumindest einschalten und Source wählen?? Das wär mal wirklich mehr wie Fett...könnte endlich der Haufen FBs raus ;) und Handy hat man ja eh immer bei sich...aber denke das geht eher in die Richtung Zukunftsmusik und wird mit deiner Software eher nicht möglich sein oder?? Gibt es sowas überhaupt schon oder fehlen hierfür technische Grundlagen bei den Geräten??

 

Greezes

Link to comment

Erstma Hallo an die Gemeinde :original:

 

Beim starten des Servers mit der Auswahl SendMessage -> GO wird bei mir folgenden Exception geworfen:

javax.bluetooth.BluetoothStateException: BluetoothStack not detected
at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:334)
at com.intel.bluetooth.BlueCoveImpl.access$100(BlueCoveImpl.java:64)
at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:502)
at java.security.AccessController.doPrivileged(Native Method)
at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:500)
at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:489)
at javax.bluetooth.LocalDevice.<init>(LocalDevice.java:64)
at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:71)
at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:86)
at app.bluetooth.RFCOMMServer.run(RFCOMMServer.java:34)
at java.lang.Thread.run(Unknown Source)

 

Ich Habe mit heut erst ein BT Dongle gekauft um die Anwendung zu testen. Laut Informationsdialog wird der BT Stack for Windows by Toshiba in der Version v5.10.14 verwendet.

 

Kennt jemand die Exception bzw. eine Lösung?

 

 

Ach und den Entwickler - gibt es Source Codes? Wenn ja wo?

 

 

Greetz

Link to comment

OK nu gehts wohl :) lag an dem Toshiba Treiber, also keine fremden Treiber benutzen!

 

Bleibt von die Frage ob der Source Code irgendwo einseh bar ist?

Link to comment
Bleibt von die Frage ob der Source Code irgendwo einseh bar ist?

 

Im Prinzip kann man das JAR entpacken und die Byte-Code-Files (*.class-Files) mit JAD "dekompilieren" (da sind die Identifiers usw. erhalten..). Wollte aber eigentlich eh das SVN auf meinem Server online über Web-Browser zugänglich machen. Im Moment fehlt mir aber so etwas die Zeit. Zu viele Themen, die mich momentan interessieren :) .

Edited by CiNcH
Link to comment
  • 1 month later...

ich wollte das programm gerade starten, aber egal ob ich run.bat, oder BTRemoteMapper.jar anklicke, blinkt nur kurz ein fenster auf und dann tut sich nichts weiter.

 

kann es daran liegen, dass ich vista 64bit verwende?

Link to comment
  • 1 month later...

Hi. Ich find den Ansatz ganz brauchbar, hab auch am Handy/HTCP die Software prinzipiell zum laufen gebracht (ging ganz einfach) - allerdings läßt sich damit DVBViewer anscheinend nicht (mehr) steueren...

Gibts hierfür ein Update? Auch die angesprochenen Kontext-Erkennung wäre nett...

 

Danke

Link to comment
  • 1 month later...

hi! finde ich toll, dass du so ein programm geschrieben hast, hätte es verwendung dafür! :radscorpion:

 

leider hänge ich jedoch bei dem schritt, wo sich das mobile zu dem server am rechner verbinden sollte. am mobile steht nach wie vor "connecting..." und in der server application wird angezeigt:

 

RemoteMapper started... selecting plugin
BlueCove version 2.0.2 on widcomm
waiting for RFCOMM connection...

 

weiters passiert hier nichts.

 

an sich funktioniert die BT verbindung mit dem rechner (dateien austauschen, rufnummern synchronisieren, ...).

an SW diesbezüglich habe ich installiert:

 

- java RE 1.6.0_03

- nokia pc suite 6.82.22

- Bluetooth stacks:

WIDCOMM Bluetooth stack

Version 3.0.1

Build 905

 

Microsoft Bluetooth stack

Version 5.1.2600

Build 5512

- BT modul eines HP nx7000 notebooks (mit neuestem BT treiber)

 

 

folgendes habe ich schon probiert:

 

- neuen BT treiber installieren

- firewall ausschalten

- div. kombinationen von zuerst server, dann client starten

 

muss ich vielleicht irgendwelche BT dienste noch starten oder eine bestimmten COM port einstellen?

 

danke für die hilfe!

Link to comment
  • 3 weeks later...

Guten Tag,

 

habe eine frage bezüglich ihrer Software,

ist es mit dieser Software auch möglich eine Präsentation in Open Office zu steuern (im Prinzip doch schon wenn man die Tasten anlernen kann ? Es wird hier eigentlich nur ein links-klick mit der Maus benötigt).

 

Damit hätte ich dann endlich eine lösung für mein Kommunikationsproblem zwischen Nokia 6120C und Rechner....

 

 

mfg

 

Sebastian

Link to comment
ist es mit dieser Software auch möglich eine Präsentation in Open Office zu steuern

Das wäre ganz easy zu realisieren. Aber im Moment bin ich da nicht mehr wirklich dran, weil ich es selber nicht einmal nutze und auch sonst nicht viele. Suche mir im Moment eine sinnvollere Beschäftigung ;) .

Link to comment
Das wäre ganz easy zu realisieren. Aber im Moment bin ich da nicht mehr wirklich dran, weil ich es selber nicht einmal nutze und auch sonst nicht viele. Suche mir im Moment eine sinnvollere Beschäftigung :bye: .

 

 

 

hallöchen, also die verbindung klappt bei mir, die konsole zeigt auch an was das handy sendet, aber im DVBViewer passiert nichts. muss ich dan noch etwas einstellen? oder ihm sagen der er noch ein plugin oder ähnliches benötigt?

 

ich habe einfach den ordner entpackt, die datei auf dem handy installiert. mehr nicht, die verbindung klappt auch. mache ich was falsch? habe ich was vergessen?

Link to comment
  • 5 weeks later...

das prog würde mich auch sehr intressieren, allerdings bekomme ich das java prog net aufm handy zulaufen, habe ein touch diamond von t-mobile also mda compact IV mit winmobile 6.1......

 

 

wenn ich das prog mit jblend installier und danach starten will, bleibt einfach alles weiß......

 

 

ach ja als usb stick hab ich ein von msi

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...