Bluetooth socket verbindung ohne adapter context?



  • Hallo,
    Ich versuch mich gerade an diesem bluetooth tutorial:
    https://people.csail.mit.edu/albert/bluez-intro/x502.html

    Im ersten beispiel wurde hci_get_route() benuzt um eine art filedescriptor zu generieren welcher auf mein bluetooth gerät, welches an meinem computer angeschloßen ist, zeigt.
    Im folgenden beispiel werden auf einmal sockets verwendet und ich frage mich woher das programm wissen soll wo sich mein bluetooth adapter befindet.
    Es wurde doch ledeglich die mac Adresse vom targed device hardgecodet oder?

    Example 4-3. rfcomm-client.c

    struct sockaddr_rc addr = { 0 };
    int s, status;
    char dest[18] = "01:23:45:67:89:AB";
    
    // 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);
    }
    

  • Mod

    Was dir fehlt ist der zweite Teil von dem Beispiel in 4.1 (Alles ab der Zeile mit dem hci_inquiry). Dort wird gezeigt, wie du vom lokalen Bluetoothadapter eine Liste mit allen Devices, die er "sehen" kann, bekommst. Eines davon ist der Server, mit dem du dich verbinden möchtest.



  • @SeppJ
    Erstmal danke für die antwort

    Mit der inquiry funktion werden externe geräte angezeigt, ich will aber wissen wie im 2ten beispiel der socket wissen kann welchen localen adapter bzw welches hardwaremäßig angeschlossene bluetooth gerät er benutzen soll um z.b externe geräte abzufragen.



  • @BeefSupreme Das interessiert den Socket genausowenig wie es ihn interessiert welche Netzwerkkarte wenn Du eine Verbindung über IP willst.



  • @BeefSupreme
    Es reicht ja wenn das OS/der Netzwerk-Stack/der Bluetooth-Stack das weiss. Und wenn es möglich ist die Liste aller "sichtbaren" BT Geräte abzufragen, dann sollte auch klar sein dass das OS/der Stack weiss über welchen Adapter er ein Gerät sehen kann.

    Wie das im Detail funktioniert weiss ich auch nicht, muss man aber denke ich auch nicht wissen. Ich würde mal schätzen dass ein BT Gerät wenn es "discoverable" ist auf bestimmte Broadcasts reagiert, und ein BT Gerät das andere Geräte auflisten möchte dann entsprechende "wer ist alles da?" Broadcasts schickt. Und sich dann eine Zeit lang merkt welche Antworten es über welche BT Adapter empfangen hat.


Log in to reply