Update l2cap client testcase

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37473 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Ruiz Dorantes
2010-07-11 17:15:58 +00:00
parent ef36d96496
commit aa5fca06bf
@@ -1,3 +1,8 @@
/*
* Copyright 2010 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
* All rights reserved. Distributed under the terms of the MIT License.
*
*/
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@@ -9,36 +14,33 @@
#include <bluetooth/bdaddrUtils.h> #include <bluetooth/bdaddrUtils.h>
#include <bluetooth/L2CAP/btL2CAP.h> #include <bluetooth/L2CAP/btL2CAP.h>
struct sockaddr_l2cap l2sa;
int int
make_named_socket (const bdaddr_t* bdaddr) CreateL2capSocket(const bdaddr_t* bdaddr, struct sockaddr_l2cap& l2sa, uint16 psm)
{ {
int sock; int sock;
size_t size; size_t size;
status_t error; status_t error;
/* Create the socket. */ /* Create the socket. */
//printf("Creating socket for %s\n",pbatostr(bdaddr)); printf("Creating socket ...\n");
sock = socket (PF_BLUETOOTH, SOCK_STREAM, BLUETOOTH_PROTO_L2CAP); // BLUETOOTH_PROTO_L2CAP sock = socket(PF_BLUETOOTH, SOCK_STREAM, BLUETOOTH_PROTO_L2CAP);
if (sock < 0) if (sock < 0) {
{
perror ("socket"); perror ("socket");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
/* Bind a name to the socket. */ /* Bind a name to the socket. */
l2sa.l2cap_psm = 1; printf("Binding socket ...\n");
l2sa.l2cap_family = PF_BLUETOOTH;
memcpy(&l2sa.l2cap_bdaddr, bdaddr, sizeof(bdaddr_t));
size = sizeof(struct sockaddr_l2cap); size = sizeof(struct sockaddr_l2cap);
l2sa.l2cap_len = size;
if (bind (sock, (struct sockaddr *) &l2sa, size) < 0) l2sa.l2cap_family = PF_BLUETOOTH;
{ l2sa.l2cap_len = size;
memcpy(&l2sa.l2cap_bdaddr, bdaddr, sizeof(bdaddr_t));
l2sa.l2cap_psm = psm;
if (bind(sock, (struct sockaddr *)&l2sa, size) < 0) {
perror ("bind"); perror ("bind");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
@@ -48,6 +50,7 @@ make_named_socket (const bdaddr_t* bdaddr)
perror ("connect"); perror ("connect");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
printf("Return status of the connection is %ld \n", error ); printf("Return status of the connection is %ld \n", error );
return sock; return sock;
@@ -55,30 +58,43 @@ make_named_socket (const bdaddr_t* bdaddr)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int sock; struct sockaddr_l2cap l2sa;
char string[512]; char string[512];
size_t len; size_t len;
uint16 psm = 1;
if (argc != 2 ) { if (argc < 2 ) {
printf("i need a bdaddr! (%d)\n", argc); printf("I need a bdaddr!\nUsage:\n\t%s bluetooth_address [psm]\n",
argv[0]);
return 0; return 0;
} }
if (argc > 2) {
psm = atoi(argv[2]);
printf("PSM requested %d\n", psm);
}
if ((psm & 1) == 0)
printf("WARNING: PSM requested is not pair\n");
const bdaddr_t bdaddr = bdaddrUtils::FromString(argv[1]); const bdaddr_t bdaddr = bdaddrUtils::FromString(argv[1]);
sock = make_named_socket(&bdaddr); int sock = CreateL2capSocket(&bdaddr, l2sa, psm);
while (strcmp(string,"bye") != 0) { while (strcmp(string,"bye") != 0) {
fscanf(stdin, "%s", string); fscanf(stdin, "%s", string);
// len = send(sock, string, strlen(string), 0); len = sendto(sock, string, strlen(string) + 1 /*\0*/, 0,
len = sendto(sock, string, strlen(string) + 1 /*\0*/, 0, (struct sockaddr*) &l2sa, sizeof(struct sockaddr_l2cap) ); (struct sockaddr*) &l2sa, sizeof(struct sockaddr_l2cap));
printf("Sent %ld bytes\n", len); printf("Sent %ld bytes\n", len);
// len = send(sock, string + 1 /*\0*/, strlen(string), 0);
// recvfrom(sock, buff, 4096-1, 0, (struct sockaddr *) &l2, &len); // recvfrom(sock, buff, 4096-1, 0, (struct sockaddr *) &l2, &len);
} }
printf("Transmission done ...\n"); printf("Transmission done ... (press key to close socket)\n");
getchar(); getchar();
close(sock); close(sock);
} }