Avatar billede driis Nybegynder
25. oktober 2004 - 22:04 Der er 1 løsning

Windows sockets WSAAddressToString og Bluetooth

Jeg er ved at skrive et program der skal arbejde med Bluetooth vha. den indbyggede support i Windows Sockets, som MS indførte i Windows XP SP1.

Jeg har lavet support for at finde de Bluetooth devices der er i nærheden og ønsker nu at enumerere de services der findes på en specifik device. Jævnfør
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bluetooth/bluetooth/bluetooth_and_wsalookupservicebegin_for_device_inquiry.asp
kan det gøres med WSALookupServiceBegin. Jeg er dog her nødt til at oversætte adressen på min device til en streng, hvilket skal gøres med WSAAddressToString. Det prøver jeg at gøre sådan her, hvor address er en BTH_ADDR indeholdende adressen, som jeg tidligere har fundet:
    char szAddress[WSA_ADDRESS_STRING_SIZE] = {0};   
    DWORD dwSize = WSA_ADDRESS_STRING_SIZE;
    sockaddr sa;
    WSAPROTOCOL_INFO pi = {0};   
    pi.iAddressFamily = AF_BTH;       
    memset(&sa,0,sizeof(sockaddr));
    sa.sa_family = AF_BTH;
    memcpy(&(sa.sa_data),&address,6);
    if ( WSAAddressToString(&sa,6,&pi,szAddress,&dwSize) != 0 )
        return WSAGetLastError();

Det giver dog fejlkoden WSAEINVAL som betyder at et af argumenterne  er invalid. Jeg er ikke helt sikker på om
WSAPROTOCOL_INFO pi = {0};   
pi.iAddressFamily = AF_BTH;   
er rigtigt, jeg ved jo ikke hvilken protokol jeg skal kommunikere over før jeg ved hvilke services der er på min bluetooth device. Derfor har jeg også prøvet at kalde WSAAddressToString med NULL som tredje parameter, hvilket dog også giver fejl.

Hvordan får jeg det til at virke ? Og kan jeg evt. få adressestrengen på en anden måde end at kalde WSAAdressToString ?

Jeg sidder fast og al hjælp påskønnes. Et link til et kodeeksempel eller lignende vil også være en hjælp.
Avatar billede driis Nybegynder
26. oktober 2004 - 17:21 #1
Har selv fundet ud af det. Det viser sig at jeg erklærer sa som en SOCKADDR_BTH og typecaster pointeren virker det:

// Setup query data - create socket address string
    char szAddress[WSA_ADDRESS_STRING_SIZE] = {0};   
    DWORD dwSize = WSA_ADDRESS_STRING_SIZE;
    SOCKADDR_BTH btsa = {0};
    btsa.addressFamily = AF_BTH;
    btsa.btAddr = address;
    btsa.port = 0;
    btsa.serviceClassId = g_guidServiceClass;
    if ( WSAAddressToString((sockaddr *)&btsa,sizeof(SOCKADDR_BTH),NULL,szAddress,&dwSize) != 0 )
        return WSAGetLastError();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester