我正在尝试在STM32蓝牙设备和连接在beaglebone black上的1类蓝牙适配器之间建立蓝牙通信链接。
设备正在被检测到,配对和一切!。
我们的想法是在STM模块和连接到beaglebone Black的蓝牙适配器之间使用SPP和Exchange数据。
这是我的代码,用于建立通信。
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
int main(int argc, char **argv)
{
struct sockaddr_rc addr = { 0 };
int s, status;
char dest[18] = "00:80:E1:B3:28:DE";
char buf[2048] = { 0 };
// allocate a socket
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
// set the connection parameters (who to connect to)
addr.rc_family = AF_BLUETOOTH;
addr.rc_channel = (uint8_t) 1;
str2ba( dest, &addr.rc_bdaddr );
// connect to server
status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
// send a message
if( status == 0 ) {
while(1){
status = recv(s, buf,1,0);
if( status > 0 ) {
printf("\n\nreceived [%s]\n", buf);
}
}
}
if( status < 0 ) perror("\n\nuh oh");
close(s);
return 0;
}
在传输40个字符(在模块上,而不是主机上)后,recv()不输出任何内容。代码必须停止(Ctrl + C)然后重新启动。
是否有一些缓冲区需要清除或每40个字符后重置一次?
我用HC-05 MOdule尝试了相同的代码,遇到了同样的问题。
任何对rfcomm和套接字代码有所了解的人?