L2CAP服务端
void l2cap_svr(void)
{
struct sockaddr_l2 rem_addr;
struct sockaddr_l2 addr;
socklen_t len;
int client;
int sock;
int ret;
char dest[19] = "B8:27:EB:04:3C:E8";
char buf[1024];
sock = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
if(sock < 0)
{
printf("\n[%s] socket error\n", __func__);
return;
}
memset((void *)&addr, 0, sizeof(addr));
memset((void *)&rem_addr, 0, sizeof(rem_addr));
addr.l2_family = PF_BLUETOOTH;
addr.l2_psm = htobs(0x1001);
addr.l2_bdaddr = *BDADDR_ANY;
ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
if(ret < 0)
{
printf("\n[%s] bind error\n", __func__);
return;
}
listen(sock, 10);
while(1)
{
client = accept(sock, (struct sockaddr *)&rem_addr, &len);
if(client < 0)
{
printf("\n[%s] accept error\n", __func__);
return;
}
memset(buf, 0, sizeof(buf));
ret = write(client, dest, sizeof(dest));
if(ret < 0)
{
printf("\n[%s] write error\n", __func__);
return;
}
}
return;
}
L2CAP客户端
void l2cap_client(void)
{
struct sockaddr_l2 local_l2_addr;
struct sockaddr_l2 remote_l2_addr;
int newsock;
int sock;
int ret;
int i;
char *dest;
char bufc[256];
char buf[256];
sock = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_L2CAP);
if(sock < 0)
{
printf("\n[%s] socket error\n", __func__);
return;
}
printf("\n[%s] Socket success!\n", __func__);
dest = "CC:C9:5D:D2:A2:FE";
printf("\n[%s] dest %s\n", __func__, dest);
memset(&remote_l2_addr, 0, sizeof(struct sockaddr_l2));
remote_l2_addr.l2_family = PF_BLUETOOTH;
str2ba(dest, &remote_l2_addr.l2_bdaddr);
remote_l2_addr.l2_psm = htobs(0x1001);
ret = connect(sock, (struct sockaddr*)&remote_l2_addr,
sizeof(struct sockaddr_l2));
if(ret < 0)
{
printf("\n[%s] connect error\n", __func__);
return;
}
printf("\n[%s] connect success\n", __func__);
while(1)
{
memset(buf, 0, sizeof(buf));
ret = read(sock, buf, sizeof(buf));
if(ret < 0)
{
printf("\n[%s] read error\n", __func__);
return;
}
printf("\n[%s] recv: %s\n ", __func__, buf);
memset(bufc, 0, sizeof(bufc));
ret = write(sock, bufc, sizeof(buf));
if(ret < 0)
{
printf("\n[%s] write error\n", __func__);
return;
}
}
return;
}