Forum: Mikrocontroller und Digitale Elektronik uC und Bluetooth HID Protokoll


von DerPaul (Gast)


Lesenswert?

Hallo Leute,

Ich würde gerne mal etwas ausprobieren, aber kann nicht ausreichend 
Informationen dazu finden...

Und zwar würde ich gern einen uC mit einem Bluetooth Modul verbinden 
welches das HID Protokoll unterstützt. Könnt euch schon denken, uC soll 
PC über Bluetooth steuern...

Jetzt zu meinem Problem! Habe schon die Offizielle Doku von 
Bluetooth.org überflogen (>100Seiten) und auch schon mehrere Stunden 
gegoogelt, aber ich verstehe immer noch nicht mit welchen Daten ich das 
BT-Modul füttern muss, damit die Maus sich z.B. nach oben bewegt! Habe 
nirgendwo irgendeinen Befehl oder Register gefunden wo ich die 
Mausbewegung rein schreiben kann!
Oder verstehe ich da etwas grundsätzlich falsch?

Grüße und danke für eure Hilfe!!!

DerPaul

von Frank K. (fchk)


Lesenswert?

Mit Registern und so ist da nicht viel. Die Bluetooth-Module können 
meist nur den untersten Teil des Protokolls, nämlich HCI selber. Die 
darüber liegenden Schichten musst Du selber implementieren.

Das ganze stellt sich dann als ein Austausch von Nachrichten 
(=strukturierte Datenblöcke) zwischen den verschiedenen Schichten dar. 
Du musst eben die passenden Nachrichten erzeugen und verarbeiten.

Und ja: das ganze ist komplex.

fchk

von Jay (Gast)


Lesenswert?

Hallo,

es gibt z.B. von Bluegiga einige Module, welche einen Bluetoothstack 
enthalten. Damit ist es relativ einfach möglich ein HID Device zu 
erzeugen.

CU,
Jay

von DerPaul (Gast)


Lesenswert?

Frank K. schrieb:
> Mit Registern und so ist da nicht viel. Die Bluetooth-Module
> können
> meist nur den untersten Teil des Protokolls, nämlich HCI selber. Die
> darüber liegenden Schichten musst Du selber implementieren.
>
> Das ganze stellt sich dann als ein Austausch von Nachrichten
> (=strukturierte Datenblöcke) zwischen den verschiedenen Schichten dar.
> Du musst eben die passenden Nachrichten erzeugen und verarbeiten.
>
> Und ja: das ganze ist komplex.
>
> fchk

also wenn ich das jetzt richtig verstanden habe heißt das, dass man bei 
"einfachen" BT-Modulen Die Funktionen bei der Host Seite und auf der 
Device Seite selber schreiben muss? Da muss man dann  wahrscheinlich mit 
der API des jeweiligen OSs rum kämpfen... oder?

Jay schrieb:
> Hallo,
>
> es gibt z.B. von Bluegiga einige Module, welche einen Bluetoothstack
> enthalten. Damit ist es relativ einfach möglich ein HID Device zu
> erzeugen.
>
> CU,
> Jay
Okay das heißt dir müssten die nötigen Register oder Befehle kennen?
werde mit dann mal die Doku von Bluegiga rein ziehen müssen...

von Maxx (Gast)


Lesenswert?

Ich werfe mal das RN-42 HID in den Raum. Kann zwischen SPP und HID 
wechseln. Sowohl custom Reports als auch die üblichen Profile (Keyboard, 
Mouse) werden unterstützt.

von DerPaul (Gast)


Lesenswert?

Okay, noch zum Überprüfen ob ich das vestanden habe,...

Beide, der RN-42 und die von Bluegiga verfügen über die Bluetoothstacks.

Befehle senden tue ich vom µC über UART auf das Bluetooth Modul...

Kann man den vom PC aus auf ein als HID erkanntes Device Daten senden? 
Oder kann ein HID keine Daten empfangen? Ich meine z.B. kann ich den 
RN-42 durch einen Befehl vom PC von HID in den SPP Mode bringen?

von A. F. (frankalicious)


Lesenswert?

Wie sieht's hier mit aus?
http://www.adafruit.com/products/1535

von DerPaul (Gast)


Lesenswert?

A. F. schrieb:
> Wie sieht's hier mit aus?
> http://www.adafruit.com/products/1535

Sieht sehr interessant aus, allerdings steht da nur was von Seriell 
input! Kann der dann kein SPP? Habe nichts dazu gefunden!

von Maxx (Gast)


Lesenswert?

DerPaul schrieb:
> Ich meine z.B. kann ich den
> RN-42 durch einen Befehl vom PC von HID in den SPP Mode bringen?

Das funktioniert auf der UART Seite. D.h. wenn du auf dem uC ein eigenen 
Report auswertest und das Modul danach umstellst (\0 + "S~,1\r") sollte 
das durchaus gehen, sobald du den Report vom PC aus an das HID Device 
sendest.

von DerPaul (Gast)


Lesenswert?

Maxx schrieb:
> DerPaul schrieb:
>> Ich meine z.B. kann ich den
>> RN-42 durch einen Befehl vom PC von HID in den SPP Mode bringen?
>
> Das funktioniert auf der UART Seite. D.h. wenn du auf dem uC ein eigenen
> Report auswertest und das Modul danach umstellst (\0 + "S~,1\r") sollte
> das durchaus gehen, sobald du den Report vom PC aus an das HID Device
> sendest.

Das heißt also, dass ich diese Stringfolge nicht per Bluetooth vom PC 
senden kann um auf SPP umzuschalten?
Kann also ein als HID konfiguriertes BT-Modul keine Befehle empfangen?

von Maxx (Gast)


Lesenswert?

DerPaul schrieb:
> Das heißt also, dass ich diese Stringfolge nicht per Bluetooth vom PC
> senden kann um auf SPP umzuschalten?

Wenn es sich schon im HID Modus befindet, kann er ja kein Text-Kommando 
zum HID Device senden.

Allerdings gibts da eine Ausnahme: Beim Startup ist das Modul immer erst 
für einen Konfigurierten Zeitraum (änderbar!) als SPP zu sehen und nimmt 
in der Zeit Befehle an.

> Kann also ein als HID konfiguriertes BT-Modul keine Befehle empfangen?

Doch klar. Nur nicht die, die du hier bräuchtest.
Du kannst jedes HID Kommando (sprich Report) senden, was du möchtest.

Oder du schaltest eben in den SPP Modus und dann gehts wieder.

von DerPaul (Gast)


Lesenswert?

Maxx schrieb:
> DerPaul schrieb:
>> Das heißt also, dass ich diese Stringfolge nicht per Bluetooth vom PC
>> senden kann um auf SPP umzuschalten?
>
> Wenn es sich schon im HID Modus befindet, kann er ja kein Text-Kommando
> zum HID Device senden.
>
> Allerdings gibts da eine Ausnahme: Beim Startup ist das Modul immer erst
> für einen Konfigurierten Zeitraum (änderbar!) als SPP zu sehen und nimmt
> in der Zeit Befehle an.
>
>> Kann also ein als HID konfiguriertes BT-Modul keine Befehle empfangen?
>
> Doch klar. Nur nicht die, die du hier bräuchtest.
> Du kannst jedes HID Kommando (sprich Report) senden, was du möchtest.
>
> Oder du schaltest eben in den SPP Modus und dann gehts wieder.

Vielen dank schon mal allen für eure Hilfe!!!

Noch ein paar Sachen die ich nicht so ganz verstehe... z.B. was für 
Reports soll ich vom Host ans HID device senden, wenn der in eh nicht 
darauf reagieren kann...
Wie lang ist denn der Zeitraum wo das device im SPP-Modus ist? Wenn der 
nur kurz ist wird das ja ganz schön schwierig mit dem PC rechtzeitig die 
nötigen Daten zu schicken...
Zum umschalten von HID auf SPP müsste ich dann vom uC über UART die o.g. 
stringfolge schicken, damit ich vom PC aus Daten aufs Devise schicken 
kann...

von Maxx (Gast)


Lesenswert?

DerPaul schrieb:
> Noch ein paar Sachen die ich nicht so ganz verstehe... z.B. was für
> Reports soll ich vom Host ans HID device senden, wenn der in eh nicht
> darauf reagieren kann...

Du hast "auf der anderen Seite" ja einen uC, den du selbst 
programmierst. Der wird die Reports auf dem UART Empfangen und kann dann 
darauf reagieren. Ausserdem reagiert der Stick je nachdem bereits auf 
bekannte Reports (z.B. das Status-Byte für HID Tastaturen. Beinhaltet 
z.B. CAPS-Lock, Num-Lock und Rollen und wird vom Host auf der Tastatur 
gesetzt. Teste das mal: Schliesse mal 2 USB Tastaturen an den PC und 
drücke NUM-Lock und du siehst die NUM-Lock LED auf allen Tastaturen 
aufleuchten.

> Wie lang ist denn der Zeitraum wo das device im SPP-Modus ist? Wenn der
> nur kurz ist wird das ja ganz schön schwierig mit dem PC rechtzeitig die
> nötigen Daten zu schicken...

Da musst du ins Datenblatt schauen was die Standardeinstellung dazu ist 
und gegebenenfalls eine andere Einstellung treffen.

> Zum umschalten von HID auf SPP müsste ich dann vom uC über UART die o.g.
> stringfolge schicken, damit ich vom PC aus Daten aufs Devise schicken
> kann...

Nein. Die ist dafür da in den SPP Modus zu wechseln. Daten kannst du 
immer hin und herschicken. Nur die Art und Weise ädert sich in SPP (=> 
serieller Port) und HID (=> Eingabegerät)

Du kannst auch auf HID Basis einen Datenaustausch realisieren. Im SPP 
Modus ist das lediglich viel intuitiver, weil bekannt aus anderen 
seriellen Ports.

Ich selbst nutze das z.B. (kombiniert mit USB-HID) HID-Set-Feature 
Report um das Format einer Tastaturausgabe zu setzen oder auszulesen.

von DerPaul (Gast)


Lesenswert?

Maxx vielen dank für deine Hilfe...

nur stehe ich grad irgendwie auf dem Schlauch!!!
Wenn das Modul im HID mode ist, kann ich vom Host über BT den Befehl zum 
Wechseln in SPP senden?
Tut mir leid wenn ich immer wieder die selbe Frage stelle...

wenn das Modul nach reboot 60s im SPP modus ist... kann ich es den 
während dieser Zeit als Maus oder Tastatur benutzen? wäre ja doof, wenn 
ich jedes mal 1 min warten muss...

Okay vielleicht etwas genauer was ich so ähnlich vorhabe (etwas 
vereinfacht)

Nehmen wir an BT-Modul ist als Keyboard konfiguriert...
UC erzeugt strings und schickt die per UART an das Modul. Ich will dann 
irgendwie Vom Host dem UC andere Befehle geben, z.B. ändern des 
strings... dann soll er wieder die strings an den host senden!

von Maxx (Gast)


Lesenswert?

DerPaul schrieb:
> Nehmen wir an BT-Modul ist als Keyboard konfiguriert...
> UC erzeugt strings und schickt die per UART an das Modul. Ich will dann
> irgendwie Vom Host dem UC andere Befehle geben, z.B. ändern des
> strings... dann soll er wieder die strings an den host senden!

Dafür musst du nicht in den SPP Modus.
Auch HID bietet Kommunikation in 2 Wegen. Du kannst also Daten vom Host 
zu HID Device senden. Überlegen wie du diese Daten dann formatierst und 
auswertest musst dann du.

Schau dir einfach mal die Windows API für HID Geräte an, dann bekommst 
du evtl einen besseren Eindruck wie HID Geräte arbeiten und wie Daten in 
beide Richtungen gesendet werden können: 
http://msdn.microsoft.com/en-us/library/windows/hardware/ff538865%28v=vs.85%29.aspx

von DerPaul (Gast)


Lesenswert?

ich glaube so langsam verstehe ich ein bisschen...

Du sagst du machst es mit Set feature, also wahrscheinlich dieses hier: 
HidD_SetFeature! In der Doku des BT Moduls finde ich aber nur etwas 
darüber, das man den Output report auf den UART ausgeben kann, wenn man 
möchte!
Wie kann ich denn mit dem BT Modul den Feature report verarbeiten (in 
der Doku finde ich übrigens den feature report gar nicht, nur RAW, 
Output und Custom. welches startbyte hat denn das feature report?)?

zum senden brauche ich ja noch das HidDeviceObject, welches ist das?

Wieder fragen über fragen...

von DerPaul (Gast)


Lesenswert?

Vielleicht jemand noch eine Anmerkung zum letzten Post? Dann müsste ich 
eigentlich alles wissen  ich brauche...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.