#ifdef HAVE_CONFIG_H
#include
#endif
#define DEBUG
#include
#include
#include
#include
#include
#include
#include
#include /* File control definitions */
#include /* Error number definitions */
#include /* POSIX terminal control definitions */
#include /* Mluti-programming definitions*/
#include "bluetooth/bluetooth.h"
#include "bluetooth/hci.h"
#include "bluetooth/hci_lib.h"
#include "bluetooth/l2cap.h"
#include "bluetooth/sdp.h"
#include "bluetooth/sdp_lib.h"
#include "bluetooth/sco.h"
#include "bluetooth/tcs.h"
#define MAX_LEN 32
/********* for debug***********************************/
#ifdef DEBUG
void debug(char * str)
{
printf(str);
}
#else
#define debug(str)
#endif
#define BUFFER_SIZE 512
void baswap(bdaddr_t *dst, const bdaddr_t *src)
{
register unsigned char *d = (unsigned char *) dst;
register const unsigned char *s = (const unsigned char *) src;
register int i;
for (i = 0; i < 6; i++)
d[i] = s[5-i];
}
int ba2str(const bdaddr_t *ba, char *str)
{
uint8_t b[6];
baswap((bdaddr_t *) b, ba);
return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
b[0], b[1], b[2], b[3], b[4], b[5]);
}
/*****************GLOBAL VARIABLE***********************************/
//unsigned char option;
struct sockaddr_l2 loc_addr={0}, rem_addr = {0}; // for l2cap
int s;
int result;
int client;
int bytes_read;
char buf[30];
int opt = sizeof(rem_addr);
char addr[18];
int fd;
/*==============================================================================* * EXPORT FUNCITON DEFINATION (FOR GATEWAY) * *==============================================================================*/
void tcs_init(void)
{
//unsigned char* addr;
debug("\n||========== get tcs initialized =============||\n");
debug("(1) tcs init: opening l2cap socket...\n");
//allocate socket
s = socket(PF_BLUETOOTH,SOCK_SEQPACKET,BTPROTO_L2CAP);
if(s < 0)
{
printf("create socket in gateway failed...\n");
exit(1);
}
else
{
debug(" open socket success!\n");
}
//bind socket to port 0x1001 of the first available bluetooth adaptor
loc_addr.l2_family = AF_BLUETOOTH;
loc_addr.l2_psm = htobs(0x1001);
loc_addr.l2_bdaddr = *BDADDR_ANY;
//ba2str(&loc_addr.l2_bdaddr,addr);
ba2str(&(*BDADDR_ANY),addr);
printf("local address is %s\n",addr);
debug("(2) binding socket...\n");
result = bind(s,(struct sockaddr*)&loc_addr, sizeof(loc_addr));
if(result < 0)
{
printf("bind socket error...\n");
close(s);
exit(1);
}
else
{
debug(" binding socket success!\n");
}
printf("(3) listening..\n");
result = listen(s,1);
if(result < 0)
{
debug("listening error...\n");
exit(1);
}
else
{
debug(" requested!\n");
}
debug("||==========initialize end ================||\n\n");
// gw_add_sco();
}
int gw_process()
{
char c;
// debuggateway proceeding...\n\n");
printf("1)accepting...\n");
client = accept(s,(struct sockaddr*)&rem_addr,&opt);
if(client < 0)
{
printf("accept error\n");
exit(1);
}
else
{
printf("accept succes!\n\n");
}
ba2str(&rem_addr.l2_bdaddr,buf);
printf("remote address is %s \n",buf);
memset(buf,0,sizeof(buf));
/* while(1) { bytes_read = read(client,buf,sizeof(buf)); if(bytes_read > 0) { printf("buffer_received :%s\n",buf); memset(buf,0,sizeof(buf) ); } } */
memset(buf,0,sizeof(buf));
int length = 0;
int len = 0;
char bufm[20];
char file_name[20];
len = recv(client,bufm ,sizeof(bufm),0);
if(len < 0)
printf("receive file_name error");
strncpy(file_name,bufm,len);
printf("%s",file_name);
FILE *fp;
if((fp = fopen(file_name,"w++"))== NULL)
{
printf("error");
return -1;
}
sleep(1);
while(length = recv(client, buf, sizeof(buf), 0))
{
if (length < 0)
{
printf("Recieve Data From Server Failed!\n");
break;
}
int write_length = fwrite(buf, sizeof(buf), length, fp);
if (write_length < length)
{
printf("File:\t Write Failed!\n");
break;
}
memset(buf,0,sizeof(buf));
}
close(client);
close(s);
return 0;
}
int main()
{
debug("begining..now.\n");
fd=open_port(fd,3);
set_opt(fd,115200, 8, 'N', 1);
tcs_init();
gw_process();
return 0;
}