RFCO服务端
void rfc_svr(void)
{
struct sockaddr_rc loc_addr;
struct sockaddr_rc rem_addr;
int client;
int sock;
int ret;
int opt;
char buf[1024];
opt = sizeof(rem_addr);
sock = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
if(sock < 0)
{
printf("\n[%s] create socket error\n", __func__);
return ;
}
printf("\n[%s] create socket successful\n", __func__);
loc_addr.rc_family = AF_BLUETOOTH;
loc_addr.rc_bdaddr = *BDADDR_ANY;
loc_addr.rc_channel = (u8_t)1;
ret = bind(sock, (struct sockaddr *)&loc_addr, sizeof(loc_addr));
if(ret < 0)
{
printf("\n[%s] bind socket error\n", __func__);
return ;
}
printf("\n[%s] bind socket successful\n", __func__);
ret = listen(sock, 5);
if(ret < 0)
{
printf("\n[%s] listen error\n", __func__);
return ;
}
printf("\n[%s] listen successful\n", __func__);
client = accept(sock, (struct sockaddr *)&rem_addr, &opt);
if(client < 0)
{
printf("\n[%s] accept error\n", __func__);
return ;
}
ba2str(&rem_addr.rc_bdaddr, buf);
printf("\n[%s] accepted connection from %s \n", __func__, buf);
memset(buf, 0, sizeof(buf));
while(1)
{
ret = read(client, buf, sizeof(buf));
if(ret == 0)
{
continue;
}
if(ret < 0)
{
break;
}
printf("\n[%s] received:%s\n", __func__, buf);
memset(buf, 0, ret);
}
close(client);
close(sock);
return;
}
说明
RFCOM客户端
void rfc_client(void)
{
struct sockaddr_rc addr;
int sock;
int status;
int len;
char dest[18] = "FE:A2:D2:5D:65:CC";
char buf[256];
len = 0;
sock = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
if(sock < 0)
{
printf("\n[%s] failed to create the sock!\n", __func__);
return 0;
}
printf("\n[%s] Successful to create sock!\n", __func__);
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = (uint8_t) 1;
str2ba( dest, &addr.rc_bdaddr );
status = connect(sock, (struct sockaddr *)&addr, sizeof(addr));
if(status)
{
printf("\n[%s] failed to connect the device!\n", __func__);
return -1;
}
printf("\n[%s] Successful to connect the device!\n", __func__);
do
{
len = read(sock, buf, sizeof buf);
if(len == 0)
{
continue;
}
if(len < 0)
{
break;
}
buf[len] = 0;
printf("\n[%s] %s\n", __func__, buf);
write(sock, buf, strlen(buf));
}
while(len > 0);
close(sock);
return;
}