diff --git a/test/rctest.c b/test/rctest.c
index 2dd54de..d19e096 100644
--- a/test/rctest.c
+++ b/test/rctest.c
DUMP,
CONNECT,
CRECV,
- LSEND
+ LSEND,
+ AUTO,
};
static unsigned char *buf;
/* Default addr and channel */
static bdaddr_t bdaddr;
+static bdaddr_t auto_bdaddr;
static uint16_t uuid = 0x0000;
static uint8_t channel = 10;
/* Bind to local address */
memset(&addr, 0, sizeof(addr));
addr.rc_family = AF_BLUETOOTH;
- bacpy(&addr.rc_bdaddr, &bdaddr);
+
+ if (bacmp(&auto_bdaddr, BDADDR_ANY))
+ bacpy(&addr.rc_bdaddr, &auto_bdaddr);
+ else
+ bacpy(&addr.rc_bdaddr, &bdaddr);
if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
syslog(LOG_ERR, "Can't bind socket: %s (%d)",
}
}
+static void automated_send_recv()
+{
+ int sk;
+ char device[18];
+
+ if (fork()) {
+ do_listen(recv_mode);
+ } else {
+ ba2str(&bdaddr, device);
+
+ sk = do_connect(device);
+ if (sk < 0)
+ exit(1);
+ send_mode(sk);
+ }
+}
+
static void usage(void)
{
printf("rctest - RFCOMM testing\n"
"\t-u connect and receive\n"
"\t-n connect and be silent\n"
"\t-c connect, disconnect, connect, ...\n"
- "\t-m multiple connects\n");
+ "\t-m multiple connects\n"
+ "\t-a automated test (receive hcix as parameter)\n");
printf("Options:\n"
"\t[-b bytes] [-i device] [-P channel] [-U uuid]\n"
int opt, sk, mode = RECV, need_addr = 0;
bacpy(&bdaddr, BDADDR_ANY);
+ bacpy(&auto_bdaddr, BDADDR_ANY);
- while ((opt=getopt(argc,argv,"rdscuwmnb:i:P:U:B:N:MAESL:W:C:D:Y:T")) != EOF) {
+ while ((opt=getopt(argc,argv,"rdscuwmna:b:i:P:U:B:N:MAESL:W:C:D:Y:T")) != EOF) {
switch (opt) {
case 'r':
mode = RECV;
need_addr = 1;
break;
+ case 'a':
+ mode = AUTO;
+
+ if (!strncasecmp(optarg, "hci", 3))
+ hci_devba(atoi(optarg + 3), &auto_bdaddr);
+ else
+ str2ba(optarg, &auto_bdaddr);
+ break;
+
case 'b':
data_size = atoi(optarg);
break;
exit(1);
dump_mode(sk);
break;
+
+ case AUTO:
+ automated_send_recv();
+ break;
}
syslog(LOG_INFO, "Exit");