Ich versuche, eine Bluetooth-Verbindung von einem Raspberry Pi 3B (Debian Linux) auf einen Android-App zu erstellen. Mein Problem ist, dass das Android-Framework (AFAIK) die Verwendung einer UUID erfordert, z. createRfcommSocketToServiceRecord (UUID). Code-Auszug:Wie von Linux auf Android Bluetooth-Buchse verbinden
// CREATE SPP SOCKET
mSock = device.createRfcommSocketToServiceRecord(uuid);
if(mSock == null) {
return(-1);
}
// TRY TO CONNECT
mSock.connect();
Der obige Code funktioniert gut Android-zu-Android.
Linux auf der anderen Seite erfordern nur eine „RC-Kanalnummer“ (eine ganze Zahl). Das Folgende ist ein Beispielcode von MIT:
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
int main(int argc, char **argv)
{
struct sockaddr_rc addr = { 0 };
int s, status;
char dest[18] = "XX:XX:XX:XX:XX:XX"; // android address here
// allocate a socket
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
// set the connection parameters (who to connect to)
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = (uint8_t) 1;
str2ba(dest, &addr.rc_bdaddr);
// connect to server
status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
// send a message
if(status == 0) {
status = write(s, "hello!", 6);
}
if(status < 0) perror("uh oh");
close(s);
return 0;
}
Ich kann nicht herausfinden, wie diese zwei Welten zu überbrücken.
Hilfe!
ich versucht, die Antwort Hälfte herausgefunden zu jeder Kanalnummer 1 bis 31 zu verbinden. Ich habe eine erfolgreiche Verbindung auf den Kanälen 3, 4, 5, 6. Meine Android App-Verbindung So für 6 angegeben (scheinbar) jede UUID für einen aktiven Android Server auf eine Kanalnummer zugeordnet wird. Die Frage ist natürlich, wie man die entsprechende Kanalnummer ermittelt. Ich glaube, die Antwort ist die Verwendung des "Service Discovery Protocol" (SDP). Ich habe nicht recht herausgefunden, wie das geht, aber am Ende des Tunnels ist Licht. Ich werde eine vollständige Antwort veröffentlichen, sobald ich (hoffentlich) es herausgefunden habe. – DontPanic