5,6 → 5,9 |
char names[MAX_BT_DEVICES][248]; |
char addrs[MAX_BT_DEVICES][19]; |
|
char BtHostRxBuffer[150]; |
|
|
int scan_bt() |
{ |
inquiry_info *ii = NULL; |
48,3 → 51,130 |
close( sock ); |
return 1; |
} |
|
struct timeval timeout; |
fd_set readfds, writefds; |
int s; |
struct sockaddr_rc loc_addr = { 0 }, rem_addr = { 0 }; |
char buf[1024] = { 0 }; |
int client, bytes_read, status; |
unsigned int opt = sizeof(rem_addr); |
|
int maxfd, sock_flags; |
|
|
|
int bt_host_init() |
{ |
|
// allocate socket |
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); |
|
// bind socket to port 1 of the first available bluetooth adapter |
loc_addr.rc_family = AF_BLUETOOTH; |
loc_addr.rc_bdaddr = *BDADDR_ANY; |
loc_addr.rc_channel = 1; |
bind(s, (struct sockaddr *)&loc_addr, sizeof(loc_addr)); |
|
// put server socket into listening mode |
listen(s, 1); |
|
// put server socket into nonblocking mode |
sock_flags = fcntl( s, F_GETFL, 0 ); |
fcntl( s, F_SETFL, sock_flags | O_NONBLOCK ); |
|
return 1; |
} |
|
|
int bt_host_connected=0; |
|
int bt_host_send(char RxBuffer[150],int len) |
{ |
if (bt_host_connected) |
{ |
send(client,"\r",1,0); |
send(client,RxBuffer,len,0); |
send(client,"\r",1,0); |
} |
return 1; |
} |
|
int bt_host_tick(int mk_fd) |
{ |
|
// try to accept connection if none yet |
if (!bt_host_connected) |
{ |
timeout.tv_sec = 0; |
timeout.tv_usec = 100; |
FD_ZERO(&readfds); |
FD_ZERO(&writefds); |
FD_SET(s, &readfds); |
maxfd = s; |
|
printf("waiting for connection\n"); |
status = select(maxfd + 1, &readfds, &writefds, 0, &timeout); |
if( status > 0 && FD_ISSET( s, &readfds ) ) { |
// incoming connection |
client = accept( s, (struct sockaddr*)&rem_addr, &opt ); |
if( client >= 0 ) |
{ |
bt_host_connected=1; |
|
// close the server socket, leaving only the client socket open |
// close(s); |
|
|
ba2str( &rem_addr.rc_bdaddr, buf ); |
fprintf(stderr, "accepted connection from %s!!!!!!!\n", buf); |
memset(buf, 0, sizeof(buf)); |
|
// put client socket into nonblocking mode |
sock_flags = fcntl( client, F_GETFL, 0 ); |
fcntl( client, F_SETFL, sock_flags | O_NONBLOCK ); |
} |
|
} |
|
} |
else |
{ |
printf("reading from bt_host"); |
char in_char='#'; |
int count=0; |
int r=0; |
|
timeout.tv_sec = 0; |
timeout.tv_usec = 100; |
FD_ZERO(&readfds); |
FD_ZERO(&writefds); |
FD_SET(client, &readfds); |
maxfd = client; |
|
printf("waiting for connection\n"); |
status = select(maxfd + 1, &readfds, 0, 0, &timeout); |
if( status >0 ) |
{ |
send(mk_fd,"\r",1,0); |
while(in_char!='\r') |
{ |
|
count=read(client,&in_char,1); |
if (count==-1) |
{ |
bt_host_connected=0; |
return 0; |
} |
printf("count: %d in %d chr %c\n",count,in_char,in_char); |
send(mk_fd,&in_char,1,0); |
BtHostRxBuffer[r]=in_char; |
} |
send(mk_fd,"\r",1,0); |
} |
else |
return 0; |
} |
|
return 1; |
} |