int main(int argc, char *argv[]) { int opt; int bitstream = 0; int modulation = MOD_BT_BASIC_RATE; char ubertooth_device = -1; ubertooth_t* ut = NULL; int r; while ((opt=getopt(argc,argv,"bhclU:d:")) != EOF) { switch(opt) { case 'b': bitstream = 1; break; case 'c': modulation = MOD_BT_BASIC_RATE; break; case 'l': modulation = MOD_BT_LOW_ENERGY; break; case 'U': ubertooth_device = atoi(optarg); break; case 'd': dumpfile = fopen(optarg, "w"); if (dumpfile == NULL) { perror(optarg); return 1; } break; case 'h': default: usage(); return 1; } } ut = ubertooth_start(ubertooth_device); if (ut == NULL) { usage(); return 1; } r = ubertooth_check_api(ut); if (r < 0) return 1; /* Clean up on exit. */ register_cleanup_handler(ut, 1); cmd_set_modulation(ut->devh, modulation); rx_dump(ut, bitstream); ubertooth_stop(ut); return 0; }
int main(int argc, char *argv[]) { int opt; int bitstream = 0; int modulation = MOD_BT_BASIC_RATE; char ubertooth_device = -1; struct libusb_device_handle *devh = NULL; while ((opt=getopt(argc,argv,"bhclU:d:")) != EOF) { switch(opt) { case 'b': bitstream = 1; break; case 'c': modulation = MOD_BT_BASIC_RATE; break; case 'l': modulation = MOD_BT_LOW_ENERGY; break; case 'U': ubertooth_device = atoi(optarg); break; case 'd': dumpfile = fopen(optarg, "w"); if (dumpfile == NULL) { perror(optarg); return 1; } break; case 'h': default: usage(); return 1; } } devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } cmd_set_modulation(devh, modulation); rx_dump(devh, bitstream); ubertooth_stop(devh); return 0; }
int main(int argc, char *argv[]) { int opt; struct libusb_device_handle *devh = NULL; FILE* infile = NULL; while ((opt=getopt(argc,argv,"hi:U:")) != EOF) { switch(opt) { case 'i': infile = fopen(optarg, "r"); if (infile == NULL) { printf("Could not open file %s\n", optarg); usage(); return 1; } break; case 'U': Ubertooth_Device= atoi(optarg); break; case 'h': default: usage(); return 1; } } if (infile == NULL) { devh = ubertooth_start(); if (devh == NULL) { usage(); return 1; } cmd_set_modulation(devh, MOD_BT_LOW_ENERGY); rx_btle(devh); ubertooth_stop(devh); } else { rx_btle_file(infile); fclose(infile); } return 0; }
int main(int argc, char *argv[]) { int opt, have_lap = 0, have_uap = 0; int timeout = 0; int reset_scan = 0; char *end; char ubertooth_device = -1; btbb_piconet *pn = NULL; uint32_t lap = 0; uint8_t uap = 0; while ((opt=getopt(argc,argv,"hVi:l:u:U:d:e:r:sq:t:")) != EOF) { switch(opt) { case 'i': infile = fopen(optarg, "r"); if (infile == NULL) { printf("Could not open file %s\n", optarg); usage(); return 1; } break; case 'l': lap = strtol(optarg, &end, 16); have_lap++; break; case 'u': uap = strtol(optarg, &end, 16); have_uap++; break; case 'U': ubertooth_device = atoi(optarg); break; case 'r': if (!h_pcapng_bredr) { if (btbb_pcapng_create_file( optarg, "Ubertooth", &h_pcapng_bredr )) { err(1, "create_bredr_capture_file: "); } } else { printf("Ignoring extra capture file: %s\n", optarg); } break; #ifdef ENABLE_PCAP case 'q': if (!h_pcap_bredr) { if (btbb_pcap_create_file(optarg, &h_pcap_bredr)) { err(1, "btbb_pcap_create_file: "); } } else { printf("Ignoring extra capture file: %s\n", optarg); } break; #endif case 'd': dumpfile = fopen(optarg, "w"); if (dumpfile == NULL) { perror(optarg); return 1; } break; case 'e': max_ac_errors = atoi(optarg); break; case 's': ++reset_scan; break; case 't': timeout = atoi(optarg); break; case 'V': print_version(); return 0; case 'h': default: usage(); return 1; } } if (have_lap) { pn = btbb_piconet_new(); btbb_init_piconet(pn, lap); if (have_uap) btbb_piconet_set_uap(pn, uap); if (h_pcapng_bredr) { btbb_pcapng_record_bdaddr(h_pcapng_bredr, (((uint32_t)uap)<<24)|lap, have_uap ? 0xff : 0x00, 0); } } else if (have_uap) { printf("Error: UAP but no LAP specified\n"); usage(); return 1; } if (infile == NULL) { devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } /* Scan all frequencies. Same effect as * ubertooth-utils -c9999. This is necessary after * following a piconet. */ if (reset_scan) { cmd_set_channel(devh, 9999); } /* Clean up on exit. */ register_cleanup_handler(devh); rx_live(devh, pn, timeout); // Print AFH map from piconet if we have one if (pn) btbb_print_afh_map(pn); ubertooth_stop(devh); } else { rx_file(infile, pn); fclose(infile); } return 0; }
int main(int argc, char *argv[]) { inquiry_info *ii = NULL; int i, opt, dev_id, dev_handle, len, flags, max_rsp, num_rsp, lap, timeout = 20; uint8_t uap, extended = 0; uint8_t scan = 0; char ubertooth_device = -1; char *bt_dev = "hci0"; char addr[19] = { 0 }; ubertooth_t* ut = NULL; btbb_piconet* pn; bdaddr_t bdaddr; while ((opt=getopt(argc,argv,"hU:t:e:xsb:")) != EOF) { switch(opt) { case 'U': ubertooth_device = atoi(optarg); break; case 'b': bt_dev = optarg; if (bt_dev == NULL) { perror(optarg); return 1; } break; case 't': timeout = atoi(optarg); break; case 'e': max_ac_errors = atoi(optarg); break; case 'x': extended = 1; break; case 's': scan = 1; break; case 'h': default: usage(); return 1; } } dev_id = hci_devid(bt_dev); if (dev_id < 0) { printf("error: Unable to find %s (%d)\n", bt_dev, dev_id); return 1; } dev_handle = hci_open_dev( dev_id ); if (dev_handle < 0) { perror("HCI device open failed"); return 1; } ut = ubertooth_start(ubertooth_device); if (ut == NULL) { usage(); return 1; } /* Set sweep mode - otherwise AFH map is useless */ cmd_set_channel(ut->devh, 9999); if (scan) { /* Equivalent to "hcitool scan" */ printf("HCI scan\n"); len = 8; max_rsp = 255; flags = IREQ_CACHE_FLUSH; ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); if( num_rsp < 0 ) perror("hci_inquiry"); for (i = 0; i < num_rsp; i++) { ba2str(&(ii+i)->bdaddr, addr); print_name_and_class(dev_handle, dev_id, &(ii+i)->bdaddr, addr, extended); } free(ii); } /* Now find hidden piconets with Ubertooth */ printf("\nUbertooth scan\n"); btbb_init_survey(); rx_live(ut, NULL, timeout); ubertooth_stop(ut); while((pn=btbb_next_survey_result()) != NULL) { lap = btbb_piconet_get_lap(pn); if (btbb_piconet_get_flag(pn, BTBB_UAP_VALID)) { uap = btbb_piconet_get_uap(pn); sprintf(addr, "00:00:%02X:%02X:%02X:%02X", uap, (lap >> 16) & 0xFF, (lap >> 8) & 0xFF, lap & 0xFF); str2ba(addr, &bdaddr); /* Printable version showing that the NAP is unknown */ sprintf(addr, "??:??:%02X:%02X:%02X:%02X", uap, (lap >> 16) & 0xFF, (lap >> 8) & 0xFF, lap & 0xFF); print_name_and_class(dev_handle, dev_id, &bdaddr, addr, extended); } else printf("??:??:??:%02X:%02X:%02X\n", (lap >> 16) & 0xFF, (lap >> 8) & 0xFF, lap & 0xFF); btbb_print_afh_map(pn); }
int main(int argc, char *argv[]) { inquiry_info *ii = NULL; int i, opt, dev_id, sock, len, flags, max_rsp, num_rsp, lap, timeout = 20; uint8_t extended = 0; uint8_t scan = 0; char ubertooth_device = -1; char *bt_dev = "hci0"; char addr[19] = { 0 }; char name[248] = { 0 }; struct libusb_device_handle *devh = NULL; btbb_piconet *pn; bdaddr_t bdaddr; while ((opt=getopt(argc,argv,"ht:xsb:")) != EOF) { switch(opt) { case 'b': bt_dev = optarg; if (bt_dev == NULL) { perror(optarg); return 1; } break; case 't': timeout = atoi(optarg); break; case 'x': extended = 1; break; case 's': scan = 1; break; case 'h': default: usage(); return 1; } } dev_id = hci_devid(bt_dev); sock = hci_open_dev( dev_id ); if (dev_id < 0 || sock < 0) { perror("opening socket"); return 1; } devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } /* Set sweep mode - otherwise AFH map is useless */ cmd_set_channel(devh, 9999); if (scan) { len = 8; max_rsp = 255; flags = IREQ_CACHE_FLUSH; ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); if( num_rsp < 0 ) perror("hci_inquiry"); /* Equivalent to "hcitool scan" */ printf("HCI scan\n"); for (i = 0; i < num_rsp; i++) { ba2str(&(ii+i)->bdaddr, addr); memset(name, 0, sizeof(name)); if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), name, 0) < 0) strcpy(name, "[unknown]"); printf("%s %s\n", addr, name); } free(ii); } /* Now find hidden piconets with Ubertooth */ printf("\nUbertooth scan\n"); btbb_init_survey(); rx_live(devh, NULL, timeout); ubertooth_stop(devh); while((pn=btbb_next_survey_result()) != NULL) { lap = btbb_piconet_get_lap(pn); if (btbb_piconet_get_flag(pn, BTBB_UAP_VALID)) { lap = btbb_piconet_get_lap(pn); sprintf(addr, "00:00:%02X:%02X:%02X:%02X", btbb_piconet_get_uap(pn), (lap >> 16) & 0xFF, (lap >> 8) & 0xFF, lap & 0xFF); str2ba(addr, &bdaddr); memset(name, 0, sizeof(name)); if (hci_read_remote_name(sock, &bdaddr, sizeof(name), name, 0) < 0) strcpy(name, "[unknown]"); printf("%s %s\n", addr, name); if (extended) extra_info(sock, dev_id, &bdaddr); } else printf("00:00:00:%02X:%02X:%02X\n", (lap >> 16) & 0xFF, (lap >> 8) & 0xFF, lap & 0xFF); btbb_print_afh_map(pn); }
int main(int argc, char *argv[]) { int opt; int do_follow, do_file, do_promisc; int do_get_aa, do_set_aa; int do_crc; int do_adv_index; int do_slave_mode; int do_target; char ubertooth_device = -1; btle_options cb_opts = { .allowed_access_address_errors = 32 }; int r; u32 access_address; uint8_t mac_address[6] = { 0, }; do_follow = do_file = 0, do_promisc = 0; do_get_aa = do_set_aa = 0; do_crc = -1; // 0 and 1 mean set, 2 means get do_adv_index = 37; do_slave_mode = do_target = 0; while ((opt=getopt(argc,argv,"a::r:d:hfpi:U:v::A:s:t:x:c:q:")) != EOF) { switch(opt) { case 'a': if (optarg == NULL) { do_get_aa = 1; } else { do_set_aa = 1; sscanf(optarg, "%08x", &access_address); } break; case 'f': do_follow = 1; break; case 'p': do_promisc = 1; break; case 'i': do_file = 1; infile = fopen(optarg, "r"); if (infile == NULL) { printf("Could not open file %s\n", optarg); usage(); return 1; } break; case 'U': ubertooth_device = atoi(optarg); break; case 'r': if (!h_pcapng_le) { if (lell_pcapng_create_file(optarg, "Ubertooth", &h_pcapng_le)) { err(1, "lell_pcapng_create_file: "); } } else { printf("Ignoring extra capture file: %s\n", optarg); } break; #ifdef ENABLE_PCAP case 'q': if (!h_pcap_le) { if (lell_pcap_create_file(optarg, &h_pcap_le)) { err(1, "lell_pcap_create_file: "); } } else { printf("Ignoring extra capture file: %s\n", optarg); } break; case 'c': if (!h_pcap_le) { if (lell_pcap_ppi_create_file(optarg, 0, &h_pcap_le)) { err(1, "lell_pcap_ppi_create_file: "); } } else { printf("Ignoring extra capture file: %s\n", optarg); } break; #endif case 'd': dumpfile = fopen(optarg, "w"); if (dumpfile == NULL) { perror(optarg); return 1; } break; case 'v': if (optarg) do_crc = atoi(optarg) ? 1 : 0; else do_crc = 2; // get break; case 'A': do_adv_index = atoi(optarg); if (do_adv_index < 37 || do_adv_index > 39) { printf("Error: advertising index must be 37, 38, or 39\n"); usage(); return 1; } break; case 's': do_slave_mode = 1; r = convert_mac_address(optarg, mac_address); if (!r) { usage(); return 1; } break; case 't': do_target = 1; r = convert_mac_address(optarg, mac_address); if (!r) { usage(); return 1; } break; case 'x': cb_opts.allowed_access_address_errors = (unsigned) atoi(optarg); if (cb_opts.allowed_access_address_errors > 32) { printf("Error: can tolerate 0-32 access address bit errors\n"); usage(); return 1; } break; case 'h': default: usage(); return 1; } } if (do_file) { rx_btle_file(infile); fclose(infile); return 0; // do file is the only command that doesn't open ubertooth } devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } /* Clean up on exit. */ signal(SIGINT, cleanup); signal(SIGQUIT, cleanup); signal(SIGTERM, cleanup); if (do_follow || do_promisc) { usb_pkt_rx pkt; cmd_set_modulation(devh, MOD_BT_LOW_ENERGY); if (do_follow) { u16 channel; if (do_adv_index == 37) channel = 2402; else if (do_adv_index == 38) channel = 2426; else channel = 2480; cmd_set_channel(devh, channel); cmd_btle_sniffing(devh, 2); } else { cmd_btle_promisc(devh); } while (1) { int r = cmd_poll(devh, &pkt); if (r < 0) { printf("USB error\n"); break; } if (r == sizeof(usb_pkt_rx)) cb_btle(&cb_opts, &pkt, 0); usleep(500); } ubertooth_stop(devh); } if (do_get_aa) { access_address = cmd_get_access_address(devh); printf("Access address: %08x\n", access_address); return 0; } if (do_set_aa) { cmd_set_access_address(devh, access_address); printf("access address set to: %08x\n", access_address); } if (do_crc >= 0) { int r; if (do_crc == 2) { r = cmd_get_crc_verify(devh); } else { cmd_set_crc_verify(devh, do_crc); r = do_crc; } printf("CRC: %sverify\n", r ? "" : "DO NOT "); } if (do_slave_mode) { u16 channel; if (do_adv_index == 37) channel = 2402; else if (do_adv_index == 38) channel = 2426; else channel = 2480; cmd_set_channel(devh, channel); cmd_btle_slave(devh, mac_address); } if (do_target) { r = cmd_btle_set_target(devh, mac_address); if (r == 0) { int i; printf("target set to: "); for (i = 0; i < 5; ++i) printf("%02x:", mac_address[i]); printf("%02x\n", mac_address[5]); } } return 0; }
int main(int argc, char *argv[]) { int opt; int r = 0; ubertooth_t* ut = NULL; rangetest_result rr; int do_stop, do_flash, do_isp, do_leds, do_part, do_reset; int do_serial, do_tx, do_palevel, do_channel, do_led_specan; int do_range_test, do_repeater, do_firmware, do_board_id; int do_range_result, do_all_leds, do_identify; int do_set_squelch, do_get_squelch, squelch_level; int do_something, do_compile_info; char ubertooth_device = -1; /* set command states to negative as a starter * setting to 0 means 'do it' * setting to positive is value of specified argument */ do_stop= do_flash= do_isp= do_leds= do_part= do_reset= -1; do_serial= do_tx= do_palevel= do_channel= do_led_specan= -1; do_range_test= do_repeater= do_firmware= do_board_id= -1; do_range_result= do_all_leds= do_identify= -1; do_set_squelch= -1, do_get_squelch= -1; squelch_level= 0; do_something= 0; do_compile_info= -1; while ((opt=getopt(argc,argv,"U:hnmefiIprsStvbl::a::C::c::d::q::z::9V")) != EOF) { switch(opt) { case 'U': ubertooth_device = atoi(optarg); break; case 'f': fprintf(stderr, "ubertooth-util -f is no longer required - use ubertooth-dfu instead\n"); do_flash= 0; break; case 'i': do_isp= 0; break; case 'I': do_identify= 0; break; case 'l': if (optarg) do_leds= atoi(optarg); else do_leds= 2; /* can't use 0 as it's a valid option */ break; case 'd': if (optarg) do_all_leds= atoi(optarg); else do_all_leds= 2; /* can't use 0 as it's a valid option */ break; case 'p': do_part= 0; break; case 'r': do_reset= 0; break; case 's': do_serial= 0; break; case 'S': do_stop= 0; break; case 't': do_tx= 0; break; case 'a': if (optarg) do_palevel= atoi(optarg); else do_palevel= 0; break; case 'C': if (optarg) do_channel= atoi(optarg) +2402; else do_channel= 0; break; case 'c': if (optarg) do_channel= atoi(optarg); else do_channel= 0; break; case 'q': if (optarg) do_led_specan= atoi(optarg); else do_led_specan= 0; break; case 'n': do_range_test= 0; break; case 'm': do_range_result= 0; break; case 'e': do_repeater= 0; break; case 'v': do_firmware= 0; break; case 'b': do_board_id= 0; break; case 'z': if (optarg) { squelch_level = atoi(optarg); do_set_squelch = 1; } else { do_get_squelch = 1; } break; case '9': do_something= 1; break; case 'V': do_compile_info = 0; break; case 'h': default: usage(); return 1; } } /* initialise device */ ut = ubertooth_start(ubertooth_device); if (ut == NULL) { usage(); return 1; } if(do_reset == 0) { printf("Resetting ubertooth device number %d\n", (ubertooth_device >= 0) ? ubertooth_device : 0); r = cmd_reset(ut->devh); sleep(2); ut = ubertooth_start(ubertooth_device); } if(do_stop == 0) { printf("Stopping ubertooth device number %d\n", (ubertooth_device >= 0) ? ubertooth_device : 0); r = cmd_stop(ut->devh); } /* device configuration actions */ if(do_all_leds == 0 || do_all_leds == 1) { cmd_set_usrled(ut->devh, do_all_leds); cmd_set_rxled(ut->devh, do_all_leds); r= cmd_set_txled(ut->devh, do_all_leds); r = (r >= 0) ? 0 : r; } if(do_channel > 0) r= cmd_set_channel(ut->devh, do_channel); if(do_leds == 0 || do_leds == 1) r= cmd_set_usrled(ut->devh, do_leds); if(do_palevel > 0) r= cmd_set_palevel(ut->devh, do_palevel); /* reporting actions */ if(do_all_leds == 2) { printf("USR LED status: %d\n", cmd_get_usrled(ut->devh)); printf("RX LED status : %d\n", cmd_get_rxled(ut->devh)); printf("TX LED status : %d\n", r= cmd_get_txled(ut->devh)); r = (r >= 0) ? 0 : r; } if(do_board_id == 0) { r= cmd_get_board_id(ut->devh); printf("Board ID Number: %d (%s)\n", r, board_names[r]); } if(do_channel == 0) { r= cmd_get_channel(ut->devh); printf("Current frequency: %d MHz (Bluetooth channel %d)\n", r, r - 2402); } if(do_firmware == 0) { char version[255]; cmd_get_rev_num(ut->devh, version, (u8)sizeof(version)); printf("Firmware revision: %s\n", version); } if(do_compile_info == 0) { char compile_info[255]; cmd_get_compile_info(ut->devh, compile_info, (u8)sizeof(compile_info)); puts(compile_info); } if(do_leds == 2) printf("USR LED status: %d\n", r= cmd_get_usrled(ut->devh)); if(do_palevel == 0) printf("PA Level: %d\n", r= cmd_get_palevel(ut->devh)); if(do_part == 0) { printf("Part ID: %X\n", r = cmd_get_partnum(ut->devh)); r = (r >= 0) ? 0 : r; } if(do_range_result == 0) { r = cmd_get_rangeresult(ut->devh, &rr); if (r == 0) { if (rr.valid==1) { printf("request PA level : %d\n", rr.request_pa); printf("request number : %d\n", rr.request_num); printf("reply PA level : %d\n", rr.reply_pa); printf("reply number : %d\n", rr.reply_num); } else if (rr.valid>1) { printf("Invalid range test: mismatch on byte %d\n", rr.valid-2); } else { printf("invalid range test result\n"); } } } if(do_serial == 0) { u8 serial[17]; r= cmd_get_serial(ut->devh, serial); if(r==0) { print_serial(serial, NULL); } // FIXME: Why do we do this to non-zero results? r = (r >= 0) ? 0 : r; } /* final actions */ if(do_flash == 0) { printf("Entering flash programming (DFU) mode\n"); return cmd_flash(ut->devh); } if(do_identify == 0) { printf("Flashing LEDs on ubertooth device number %d\n", (ubertooth_device >= 0) ? ubertooth_device : 0); while(42) { do_identify= !do_identify; cmd_set_usrled(ut->devh, do_identify); cmd_set_rxled(ut->devh, do_identify); cmd_set_txled(ut->devh, do_identify); sleep(1); } } if(do_isp == 0) { printf("Entering flash programming (ISP) mode\n"); return cmd_set_isp(ut->devh); } if(do_led_specan >= 0) { do_led_specan= do_led_specan ? do_led_specan : 225; printf("Entering LED specan mode (RSSI %d)\n", do_led_specan); return cmd_led_specan(ut->devh, do_led_specan); } if(do_range_test == 0) { printf("Starting range test\n"); return cmd_range_test(ut->devh); } if(do_repeater == 0) { printf("Starting repeater\n"); return cmd_repeater(ut->devh); } if(do_tx == 0) { printf("Starting TX test\n"); return cmd_tx_test(ut->devh); } if(do_set_squelch > 0) { printf("Setting squelch to %d\n", squelch_level); cmd_set_squelch(ut->devh, squelch_level); } if(do_get_squelch > 0) { r = cmd_get_squelch(ut->devh); printf("Squelch set to %d\n", (int8_t)r); } if(do_something) { unsigned char buf[4] = { 0x55, 0x55, 0x55, 0x55 }; cmd_do_something(ut->devh, NULL, 0); cmd_do_something_reply(ut->devh, buf, 4); printf("%02x %02x %02x %02x\n", buf[0], buf[1], buf[2], buf[3]); return 0; } return r; }
int main(int argc, char *argv[]) { int opt; int r = 0; struct libusb_device_handle *devh= NULL; rangetest_result rr; int do_stop, do_flash, do_isp, do_leds, do_part, do_reset; int do_serial, do_tx, do_palevel, do_channel, do_led_specan; int do_range_test, do_repeater, do_firmware, do_board_id; int do_range_result, do_all_leds, do_identify; int do_set_squelch, do_get_squelch, squelch_level; /* set command states to negative as a starter * setting to 0 means 'do it' * setting to positive is value of specified argument */ do_stop= do_flash= do_isp= do_leds= do_part= do_reset= -1; do_serial= do_tx= do_palevel= do_channel= do_led_specan= -1; do_range_test= do_repeater= do_firmware= do_board_id= -1; do_range_result= do_all_leds= do_identify= -1; do_set_squelch= -1, do_get_squelch= -1; squelch_level= 0; while ((opt=getopt(argc,argv,"U:hnmefiIprsStvbl::a::C::c::d::q::z::")) != EOF) { switch(opt) { case 'U': Ubertooth_Device= atoi(optarg); break; case 'f': do_flash= 0; break; case 'i': do_isp= 0; break; case 'I': do_identify= 0; break; case 'l': if (optarg) do_leds= atoi(optarg); else do_leds= 2; /* can't use 0 as it's a valid option */ break; case 'd': if (optarg) do_all_leds= atoi(optarg); else do_all_leds= 2; /* can't use 0 as it's a valid option */ break; case 'p': do_part= 0; break; case 'r': do_reset= 0; break; case 's': do_serial= 0; break; case 'S': do_stop= 0; break; case 't': do_tx= 0; break; case 'a': if (optarg) do_palevel= atoi(optarg); else do_palevel= 0; break; case 'C': if (optarg) do_channel= atoi(optarg) +2402; else do_channel= 0; break; case 'c': if (optarg) do_channel= atoi(optarg); else do_channel= 0; break; case 'q': if (optarg) do_led_specan= atoi(optarg); else do_led_specan= 0; break; case 'n': do_range_test= 0; break; case 'm': do_range_result= 0; break; case 'e': do_repeater= 0; break; case 'v': do_firmware= 0; break; case 'b': do_board_id= 0; break; case 'z': if (optarg) { squelch_level = atoi(optarg); do_set_squelch = 1; } else { do_get_squelch = 1; } break; case 'h': default: usage(); return 1; } } /* initialise device */ devh = ubertooth_start(); if (devh == NULL) { usage(); return 1; } if(do_reset == 0) { printf("Resetting ubertooth device number %d\n", (Ubertooth_Device >= 0) ? Ubertooth_Device : 0); r= cmd_reset(devh); sleep(2); devh = ubertooth_start(); } if(do_stop == 0) { printf("Stopping ubertooth device number %d\n", (Ubertooth_Device >= 0) ? Ubertooth_Device : 0); r= cmd_stop(devh); } /* device configuration actions */ if(do_all_leds == 0 || do_all_leds == 1) { cmd_set_usrled(devh, do_all_leds); cmd_set_rxled(devh, do_all_leds); r= cmd_set_txled(devh, do_all_leds); r = (r >= 0) ? 0 : r; } if(do_channel > 0) r= cmd_set_channel(devh, do_channel); if(do_leds == 0 || do_leds == 1) r= cmd_set_usrled(devh, do_leds); if(do_palevel > 0) r= cmd_set_palevel(devh, do_palevel); /* reporting actions */ if(do_all_leds == 2) { printf("USR LED status: %d\n", cmd_get_usrled(devh)); printf("RX LED status : %d\n", cmd_get_rxled(devh)); printf("TX LED status : %d\n", r= cmd_get_txled(devh)); r = (r >= 0) ? 0 : r; } if(do_board_id == 0) { r= cmd_get_board_id(devh); printf("Board ID Number: %d (%s)\n", r, board_names[r]); } if(do_channel == 0) { r= cmd_get_channel(devh); printf("Current frequency: %d MHz (Bluetooth channel %d)\n", r, r - 2402); } if(do_firmware == 0) printf("Firmare revision: %d\n", r= cmd_get_rev_num(devh)); if(do_leds == 2) printf("USR LED status: %d\n", r= cmd_get_usrled(devh)); if(do_palevel == 0) printf("PA Level: %d\n", r= cmd_get_palevel(devh)); if(do_part == 0) { printf("Part ID: %X\n", r = cmd_get_partnum(devh)); r = (r >= 0) ? 0 : r; } if(do_range_result == 0) { r = cmd_get_rangeresult(devh, &rr); if (r == 0) { if (rr.valid) { printf("request PA level : %d\n", rr.request_pa); printf("request number : %d\n", rr.request_num); printf("reply PA level : %d\n", rr.reply_pa); printf("reply number : %d\n", rr.reply_num); } else { printf("invalid range test result\n"); } } } if(do_serial == 0) { printf("Serial No: "); r= cmd_get_serial(devh); r = (r >= 0) ? 0 : r; } /* final actions */ if(do_flash == 0) { printf("Entering flash programming (DFU) mode\n"); return cmd_flash(devh); } if(do_identify == 0) { printf("Flashing LEDs on ubertooth device number %d\n", (Ubertooth_Device >= 0) ? Ubertooth_Device : 0); while(42) { do_identify= !do_identify; cmd_set_usrled(devh, do_identify); cmd_set_rxled(devh, do_identify); cmd_set_txled(devh, do_identify); sleep(1); } } if(do_isp == 0) { printf("Entering flash programming (ISP) mode\n"); return cmd_set_isp(devh); } if(do_led_specan >= 0) { do_led_specan= do_led_specan ? do_led_specan : 225; printf("Entering LED specan mode (RSSI %d)\n", do_led_specan); return cmd_led_specan(devh, do_led_specan); } if(do_range_test == 0) { printf("Starting range test\n"); return cmd_range_test(devh); } if(do_repeater == 0) { printf("Starting repeater\n"); return cmd_repeater(devh); } if(do_tx == 0) { printf("Starting TX test\n"); return cmd_tx_test(devh); } if(do_set_squelch > 0) { printf("Setting squelch to %d\n", squelch_level); cmd_set_squelch(devh, squelch_level); } if(do_get_squelch > 0) { r = cmd_get_squelch(devh); printf("Squelch set to %d\n", (int8_t)r); } return r; }
int main(int argc, char *argv[]) { int opt, have_lap = 0, have_uap = 0; int reset_scan = 0; char *end; char ubertooth_device = -1; btbb_piconet *pn = NULL; uint32_t lap; uint8_t uap; while ((opt=getopt(argc,argv,"hi:l:u:U:d:e:sc:")) != EOF) { switch(opt) { case 'i': infile = fopen(optarg, "r"); if (infile == NULL) { printf("Could not open file %s\n", optarg); usage(); return 1; } break; case 'l': lap = strtol(optarg, &end, 16); have_lap++; break; case 'u': uap = strtol(optarg, &end, 16); have_uap++; break; case 'U': ubertooth_device = atoi(optarg); break; case 'c': #ifdef USE_PCAP pcap_dumpfile = pcap_open_dead(DLT_PPI, 128); if (pcap_dumpfile == NULL) err(1, "pcap_open_dead: "); dumper = pcap_dump_open(pcap_dumpfile, optarg); pcap_dump_flush(dumper); if (dumper == NULL) { warn("pcap_dump_open"); pcap_close(pcap_dumpfile); exit(1); } #else printf("Not compiled with 'USE_PCAP', -c ignored\n"); #endif // USE_PCAP break; case 'd': dumpfile = fopen(optarg, "w"); if (dumpfile == NULL) { perror(optarg); return 1; } break; case 'e': max_ac_errors = atoi(optarg); break; case 's': ++reset_scan; break; case 'h': default: usage(); return 1; } } if (have_lap) { pn = btbb_piconet_new(); btbb_init_piconet(pn, lap); if (have_uap) btbb_piconet_set_uap(pn, uap); } else if (have_uap) { printf("Error: UAP but no LAP specified\n"); usage(); return 1; } if (infile == NULL) { devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } /* Scan all frequencies. Same effect as * ubertooth-utils -c9999. This is necessary after * following a piconet. */ if (reset_scan) { cmd_set_channel(devh, 9999); } /* Clean up on exit. */ signal(SIGINT,cleanup); signal(SIGQUIT,cleanup); signal(SIGTERM,cleanup); rx_live(devh, pn, 0); // Print AFH map from piconet if we have one if (pn) btbb_print_afh_map(pn); ubertooth_stop(devh); } else { rx_file(infile, pn); fclose(infile); } return 0; }
int main(int argc, char *argv[]) { int opt; int r = 0; int verbose = 1; struct libusb_device_handle *devh = NULL; int do_read_register; char ubertooth_device = -1; int *regList = NULL; int regListN = 0; int i; /* set command states to negative as a starter * setting to positive is value of specified argument */ do_read_register = -1; while ((opt = getopt(argc, argv, "hU:r:v:")) != EOF) { switch (opt) { case 'h': usage(); return 0; case 'U': ubertooth_device = atoi(optarg); break; case 'v': verbose = atoi(optarg); if (verbose < 0 || verbose > 2) { fprintf(stderr, "ERROR: verbosity out of range\n"); return 1; } break; case 'r': regList = listOfInts(optarg, ®ListN, token_to_int); if (regListN > 0) { do_read_register = 0; for (i = 0; i < regListN; i++) if (regList[i] < 0 || regList[i] > 0xff) do_read_register = -1; } if (do_read_register < 0 || do_read_register > 0xff || regListN == -1) { fprintf(stderr, "ERROR: register address must be > 0x00 and < 0xff\n"); return 1; } break; default: usage(); return 1; } } /* initialise device */ devh = ubertooth_start(ubertooth_device); if (devh == NULL) { usage(); return 1; } if (do_read_register >= 0) { for (i = 0; i < regListN; i++) { r = cmd_read_register(devh, regList[i]); if (r >= 0) cc2400_decode(stdout, regList[i], r, verbose); } } return r; }
int main(int argc, char *argv[]) { int opt; int do_mode = -1; int do_channel = 2418; char ubertooth_device = -1; int r; while ((opt=getopt(argc,argv,"frijc:U:h")) != EOF) { switch(opt) { case 'f': do_mode = 0; break; case 'r': do_mode = 1; break; case 'i': case 'j': do_mode = 2; // TODO take care of these magic numbers break; case 'c': do_channel = atoi(optarg); break; case 'U': ubertooth_device = atoi(optarg); break; case 'h': default: usage(); return 1; } } ut = ubertooth_start(ubertooth_device); if (ut == NULL) { usage(); return 1; } /* Clean up on exit. */ register_cleanup_handler(ut); if (do_mode >= 0) { usb_pkt_rx rx; if (do_mode == 1) // FIXME magic number! cmd_set_channel(ut->devh, do_channel); r = cmd_ego(ut->devh, do_mode); if (r < 0) { if (do_mode == 0 || do_mode == 1) printf("Error: E-GO not supported by this firmware\n"); else printf("Error: E-GO not supported by this firmware (or TX not enabled)\n"); return 1; } while (1) { int r = cmd_poll(ut->devh, &rx); if (r < 0) { printf("USB error\n"); break; } if (r == sizeof(usb_pkt_rx)) { ringbuffer_add(ut->packets, &rx); cb_ego(ut, NULL); } usleep(500); } ubertooth_stop(ut); } return 0; }