7 #include <bluetooth/bluetooth.h>
8 #include <bluetooth/l2cap.h>
9 #include <bluetooth/hci.h>
10 #include <bluetooth/hci_lib.h>
12 #define MY_PSM 0x1001 /* Protocol/Service Multiplexor */
14 static bdaddr_t bdaddr; /* Adresa lokalniho BT zarizeni */
17 void komunikuj(int sk)
24 p[0].fd = fileno(stdin);
30 ret = poll(p, 2, 1000);
34 if (p[0].revents & POLLIN) {
35 if (fgets(buf, 99, stdin) != NULL)
36 send(sk, buf, strlen(buf), 0); /* posli data */
37 else end = 1; /* konec (Ctrl-D) */
39 if (p[1].revents & POLLIN) {
40 ret = recv(sk, buf, 99, 0);
41 if (ret >= 0) buf[ret] = '\0';
52 static void klient(char *dest)
54 struct sockaddr_l2 addr;
58 sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
60 perror("Can't create socket");
64 /* Bind to local address */
65 memset(&addr, 0, sizeof(addr));
66 bacpy(&addr.l2_bdaddr, &bdaddr);
67 addr.l2_family = AF_BLUETOOTH;
69 if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
70 perror("Can't bind socket");
75 /* Connect to remote device */
76 memset(&addr, 0, sizeof(addr));
77 addr.l2_family = AF_BLUETOOTH;
78 str2ba(dest, &addr.l2_bdaddr);
79 addr.l2_psm = htobs(MY_PSM);
81 if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
82 perror("Can't connect");
86 printf("Spojeno (Ctrl-D konec)\n");
98 struct sockaddr_l2 addr, client_addr;
103 sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
105 perror("Can't create socket");
109 /* Bind to local address */
110 memset(&addr, 0, sizeof(addr));
111 addr.l2_family = AF_BLUETOOTH;
112 bacpy(&addr.l2_bdaddr, &bdaddr);
113 addr.l2_psm = htobs(MY_PSM); /* Protocol/Service Multiplexor */
115 if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
116 perror("Can't bind socket");
121 /* Pockej az se pripoji klient */
122 if (listen(sk, 1) < 0) {
129 printf("Cekam na spojeni...\n");
130 addr_len = sizeof(client_addr);
131 sk2 = accept(sk, (struct sockaddr*)&client_addr, &addr_len);
132 printf("Spojeno (Ctrl-D konec)\n");
143 static void usage(void)
145 printf("l2captest - L2CAP test\n");
147 printf("\tl2captest [-i device] [<server bdaddr>]\n");
150 int main(int argc, char *argv[])
154 /* Default options */
155 bacpy(&bdaddr, BDADDR_ANY);
157 while ((opt=getopt(argc,argv,"i:")) != EOF) {
159 case 'i': /* likalni BT zarizeni (hciX nebo BD addresa) */
160 if (!strncasecmp(optarg, "hci", 3))
161 hci_devba(atoi(optarg + 3), &bdaddr);
163 str2ba(optarg, &bdaddr);
172 if (!(argc - optind)) {
173 server(); /* ceka na pripojeni libovolneho klienta */
175 klient(argv[optind]);