int main(int argc ,char *argv[]) { struct sigaction sa; int opt, sk, mode = RECV; while ((opt=getopt(argc,argv,"rdscmnb:p:")) != EOF) { switch(opt) { case 'r': mode = RECV; break; case 's': mode = SEND; break; case 'd': mode = DUMP; break; case 'c': mode = RECONNECT; break; case 'm': mode = MULTY; break; case 'n': mode = CONNECT; break; case 'b': data_size = atoi(optarg); break; case 'p': if (sscanf(optarg, "0x%4hx", &pkt_type) != 1) { usage(); exit(1); } break; default: usage(); exit(1); } } if (!(argc - optind) && (mode != RECV && mode != DUMP)) { usage(); exit(1); } if (!(buf = malloc(data_size))) { perror("Can't allocate data buffer"); exit(1); } memset(&sa, 0, sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_flags = SA_NOCLDSTOP; sigaction(SIGCHLD, &sa, NULL); openlog("scotest", LOG_PERROR | LOG_PID, LOG_LOCAL0); switch( mode ){ case RECV: do_listen(recv_mode); break; case DUMP: do_listen(dump_mode); break; case SEND: send_mode(argv[optind]); break; case RECONNECT: reconnect_mode(argv[optind]); break; case MULTY: multy_connect_mode(argv[optind]); break; case CONNECT: sk = do_connect(argv[optind]); if (sk < 0) exit(1); dump_mode(sk); break; } syslog(LOG_INFO, "Exit"); closelog(); return 0; }
int main(int argc, char *argv[]) { struct sigaction sa; int opt, sk, mode = RECV, need_addr = 0; bacpy(&bdaddr, BDADDR_ANY); bacpy(&auto_bdaddr, BDADDR_ANY); while ((opt=getopt(argc,argv,"rdscuwmna:b:i:P:U:B:O:N:MAESL:W:C:D:Y:T")) != EOF) { switch (opt) { case 'r': mode = RECV; break; case 's': mode = SEND; need_addr = 1; break; case 'w': mode = LSEND; break; case 'u': mode = CRECV; need_addr = 1; break; case 'd': mode = DUMP; break; case 'c': mode = RECONNECT; need_addr = 1; break; case 'n': mode = CONNECT; need_addr = 1; break; case 'm': mode = MULTY; 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; case 'i': if (!strncasecmp(optarg, "hci", 3)) hci_devba(atoi(optarg + 3), &bdaddr); else str2ba(optarg, &bdaddr); break; case 'P': channel = atoi(optarg); break; case 'U': if (!strcasecmp(optarg, "spp")) uuid = SERIAL_PORT_SVCLASS_ID; else if (!strncasecmp(optarg, "0x", 2)) uuid = strtoul(optarg + 2, NULL, 16); else uuid = atoi(optarg); break; case 'M': master = 1; break; case 'A': auth = 1; break; case 'E': encr = 1; break; case 'S': secure = 1; break; case 'L': linger = atoi(optarg); break; case 'W': defer_setup = atoi(optarg); break; case 'B': filename = strdup(optarg); break; case 'O': savefile = strdup(optarg); break; case 'N': num_frames = atoi(optarg); break; case 'C': count = atoi(optarg); break; case 'D': delay = atoi(optarg) * 1000; break; case 'Y': priority = atoi(optarg); break; case 'T': timestamp = 1; break; default: usage(); exit(1); } } if (need_addr && !(argc - optind)) { usage(); exit(1); } if (!(buf = malloc(data_size))) { perror("Can't allocate data buffer"); exit(1); } memset(&sa, 0, sizeof(sa)); if (mode == AUTO) sa.sa_handler = sig_child_exit; else sa.sa_handler = SIG_IGN; sa.sa_flags = SA_NOCLDSTOP; sigaction(SIGCHLD, &sa, NULL); openlog("rctest", LOG_PERROR | LOG_PID, LOG_LOCAL0); switch (mode) { case RECV: do_listen(recv_mode); break; case CRECV: sk = do_connect(argv[optind]); if (sk < 0) exit(1); recv_mode(sk); break; case DUMP: do_listen(dump_mode); break; case SEND: sk = do_connect(argv[optind]); if (sk < 0) exit(1); send_mode(sk); break; case LSEND: do_listen(send_mode); break; case RECONNECT: reconnect_mode(argv[optind]); break; case MULTY: multi_connect_mode(argc - optind, argv + optind); break; case CONNECT: sk = do_connect(argv[optind]); if (sk < 0) exit(1); dump_mode(sk); break; case AUTO: automated_send_recv(); break; } syslog(LOG_INFO, "Exit"); closelog(); return 0; }