Toon posts:

BlueZ Broadcasting

Pagina: 1
Acties:

Verwijderd

Topicstarter
hallo,
ik krijg het maar niet voormekaar om een broadcast message te sturen naar verschillende slaves in een piconet. connecten lukt me wel, het sturen van datagram packets ook, alleen moet ik kunnen broadcasten. op internet heb ik niet veel over kunnen vinden, en ben er ruim 2 weken aan het uitvogelen.
natuurlijk zonder succes

ik heb 4 linux systemen waar de BlueZ stack op draait. de bedoeling is dat er een piconet vormt van 1 master en 3 slaves, en dat de master een bericht kan sturen naar alle slaves tegelijk (point to multipoint)

hopelijk kan iemand me hier snel bij helpen

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 14:31

Creepy

Tactical Espionage Splatterer

Zonde code wordt dat wat moeilijk denk ik ;) Hoe connect je, hoe probeer je die broadcast te versturen en hoe controleer je of er een response op de broadcast komt?

Als je Welkom in Programming - FAQ en Beleid eens wil bekijken (met name Programming Beleid) en je post kan aanvullen met relevante informatie dan graag :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
de server
C: server.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>

int main(int argc, char **argv)
{
    struct sockaddr_l2 loc_addr = { 0 }, rem_addr = { 0 };
    char buf[1024] = { 0 };
    int s, client, bytes_read;
    int opt = sizeof(rem_addr);

    // allocate socket
    s = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);

    // bind socket to port 0x1001 of the first available 
    // bluetooth adapter
    loc_addr.l2_family = AF_BLUETOOTH;
    loc_addr.l2_bdaddr = *BDADDR_ANY;
    loc_addr.l2_psm = htobs(0x1001);

    bind(s, (struct sockaddr *)&loc_addr, sizeof(loc_addr));

    // put socket into listening mode
    listen(s, 1);

while(1){
    // accept one connection
    client = accept(s, (struct sockaddr *)&rem_addr, &opt);

    ba2str( &rem_addr.l2_bdaddr, buf );
    fprintf(stderr, "accepted connection from %s\n", buf);

    memset(buf, 0, sizeof(buf));

    // read data from the client
    //bytes_read = read(client, buf, sizeof(buf));
    while( (bytes_read = read(client, buf, sizeof(buf))) > 0 ) {
        printf("received [%s]\n", buf);
    }
    close(client);
}
    // close connection
    
    close(s);
}


en de client
C: client.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>

int main(int argc, char **argv)
{
    struct sockaddr_l2 addr = { 0 };
    int s, status;
    char *message = "hello!";
    char dest[18] = "01:23:45:67:89:AB";

    if(argc < 2)
    {
        fprintf(stderr, "usage: %s <bt_addr>\n", argv[0]);
        exit(2);
    }

    strncpy(dest, argv[1], 18);

    // allocate a socket
    s = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);

    // set the connection parameters (who to connect to)
    addr.l2_family = AF_BLUETOOTH;
    addr.l2_psm = htobs(0x1001);
    str2ba( dest, &addr.l2_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);
}


met dit kan ik gewone berichten sturen naar elkaar. om een broadcast te zenden heb ik gelezen dat je de BC flag moet zetten, ook dit heb ik geprobeerd

C: example.c
1
2
int brcast=1;
setsockopt(sock,SOL_L2CAP,SO_BROADCAST, &brcast, sizeof(brcast)); 



ik krijg het maar niet voormekaar, heeft iemand misschien een voorbeeldcode? is het uberhaupt mogelijk met BlueZ of moet ik een andere stack als Affix gebruiken? :?

Verwijderd

Topicstarter
ik denk dat ik in de HCI layer moet zijn ipv L2CAP, maar hoe doe je dat?

Verwijderd

Topicstarter
heeft iemand een voorbeeld programma voor het sturen van berichten via HCI?

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 11-02 23:26

alienfruit

the alien you never expected

Waarom niet gewoon TCP/IP over BlueZ gebruiken? Volgens mij heet dat BNEP ofzo.

Verwijderd

Topicstarter
hmm, ik weet niet precies hoe dat met bluetooth gedaan moet worden, en volgens mij is dat best lastig om het te implementeren.

op de normale manier ben ik al wat verder, en weet nu dat je de "AM_ADDR" op 0 moet zetten om vervolgens naar alle slaves te kunnen zenden.
weet alleen niet hoe ik die waarde kan veranderen :s
Pagina: 1