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
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
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
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...
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.
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?
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!
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.
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?
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.
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...
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.
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!
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
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...