From fed60c571c5bacedf4865436927c0925dd2eb6f9 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 13 Jan 2016 22:12:42 +0800 Subject: [PATCH 01/10] Update hackrf_transfer.c Intro: Some of the Hackrf board use a bad performance crystal, it will cause some program can't work---such as GNSS(GPS) simulation. Most GPS receiver can capture the satellite when the doppler within 10KHz, but 10ppm bias of the crystal will cause 15Khz doppler. And my hackrf board uses a 16ppm crystal :( normal Of course, I can replace the crystal or use a external clock. But for most people, add a ppm correct function to hackrf_transfer is useful. How to use: 1, measure your crystal's error You can use a precision counter to measure it. Connect the hackrf's "clock out" to the counter, get the frequency Fh, then , ppm = (Fh - 10000000)/10 You can use a standard clock source such as OCXO, TCXO, or Atom Clock, and a counter to measure the crystal error too. 2, add an argument "-C ppm " when you use hackrf_transfer. Eg. , your crystal error is -8ppm ( In other words , your clock is slower than the standard clock), then you should add "-C -8" follow the hackrf_transfer command. Hope you can understand my poor English:) -------------------------- Thanks to Michael Ossmann; Thanks to Jared Boone ; Thanks to Benjamin Vernoux ; Thanks to GPL. --- host/hackrf-tools/src/hackrf_transfer.c | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/host/hackrf-tools/src/hackrf_transfer.c b/host/hackrf-tools/src/hackrf_transfer.c index 9aac6a6e..c7d490f2 100644 --- a/host/hackrf-tools/src/hackrf_transfer.c +++ b/host/hackrf-tools/src/hackrf_transfer.c @@ -19,6 +19,9 @@ * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ +/* Modified by Peter Zhang, 2016/01/13. + * Added the Crystal error correction function.(ppm correction) +*/ #include @@ -332,6 +335,9 @@ uint32_t baseband_filter_bw_hz = 0; bool repeat = false; +bool crystal_correct = false; +uint32_t crystal_correct_ppm ; + int rx_callback(hackrf_transfer* transfer) { size_t bytes_to_write; int i; @@ -451,6 +457,9 @@ static void usage() { printf("\t[-c amplitude] # CW signal source mode, amplitude 0-127 (DC value to DAC).\n"); printf("\t[-R] # Repeat TX mode (default is off) \n"); printf("\t[-b baseband_filter_bw_hz] # Set baseband filter bandwidth in MHz.\n\tPossible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, default < sample_rate_hz.\n" ); + printf("\t[-C Crystal error in ppm] # Set Internal crystal clock error , in ppm. \n"); + + } static hackrf_device* device = NULL; @@ -492,7 +501,7 @@ int main(int argc, char** argv) { float time_diff; unsigned int lna_gain=8, vga_gain=20, txvga_gain=0; - while( (opt = getopt(argc, argv, "wr:t:f:i:o:m:a:p:s:n:b:l:g:x:c:d:R")) != EOF ) + while( (opt = getopt(argc, argv, "wr:t:f:i:o:m:a:p:s:n:b:l:g:x:c:d:C:R")) != EOF ) { result = HACKRF_SUCCESS; switch( opt ) @@ -582,6 +591,13 @@ int main(int argc, char** argv) { case 'R': repeat = true; break; + + case 'C': + crystal_correct = true; + result = parse_u32(optarg, &crystal_correct_ppm); + break; + + default: printf("unknown argument '-%c %s'\n", opt, optarg); @@ -789,6 +805,14 @@ int main(int argc, char** argv) { } } + // Change the freq and sample rate to correct the crystal clock error. + if( crystal_correct ) { + + sample_rate_hz = (uint)((double)sample_rate_hz * (1000000 - crystal_correct_ppm)/1000000+0.5); + freq_hz = freq_hz * (1000000 - crystal_correct_ppm)/1000000; + + } + result = hackrf_init(); if( result != HACKRF_SUCCESS ) { printf("hackrf_init() failed: %s (%d)\n", hackrf_error_name(result), result); From d41704a48eb049980b9e39e5c9b4fabe30cda403 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 13 Jan 2016 22:24:18 +0800 Subject: [PATCH 02/10] Update hackrf_transfer.c --- host/hackrf-tools/src/hackrf_transfer.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_transfer.c b/host/hackrf-tools/src/hackrf_transfer.c index c7d490f2..5b750318 100644 --- a/host/hackrf-tools/src/hackrf_transfer.c +++ b/host/hackrf-tools/src/hackrf_transfer.c @@ -19,9 +19,7 @@ * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ -/* Modified by Peter Zhang, 2016/01/13. - * Added the Crystal error correction function.(ppm correction) -*/ + #include From 51419b7efca7507ad4c497cc486debb3a12299a9 Mon Sep 17 00:00:00 2001 From: Radoslav Gerganov Date: Sun, 29 May 2016 13:39:51 +0300 Subject: [PATCH 03/10] Add support for transmitting/receiving from stdin/stdout When '-' is used for filename, write samples to stdout when receiving or read samples from stdin when transmitting. This allows using hackrf_transfer in shell pipes with tools like csdr. User info messages are written to stderr. --- host/hackrf-tools/src/hackrf_transfer.c | 130 +++++++++++++----------- 1 file changed, 69 insertions(+), 61 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_transfer.c b/host/hackrf-tools/src/hackrf_transfer.c index 1e22eb69..4aa716bc 100644 --- a/host/hackrf-tools/src/hackrf_transfer.c +++ b/host/hackrf-tools/src/hackrf_transfer.c @@ -426,8 +426,8 @@ int tx_callback(hackrf_transfer* transfer) { static void usage() { printf("Usage:\n"); printf("\t[-d serial_number] # Serial number of desired HackRF.\n"); - printf("\t-r # Receive data into file.\n"); - printf("\t-t # Transmit data from file.\n"); + printf("\t-r # Receive data into file (use '-' for stdout).\n"); + printf("\t-t # Transmit data from file (use '-' for stdin).\n"); printf("\t-w # Receive data into file with WAV header and automatic name.\n"); printf("\t # This is for SDR# compatibility and may not work with other software.\n"); printf("\t[-f freq_hz] # Frequency in Hz [%sMHz to %sMHz].\n", @@ -611,26 +611,26 @@ int main(int argc, char** argv) { break; default: - printf("unknown argument '-%c %s'\n", opt, optarg); + fprintf(stderr, "unknown argument '-%c %s'\n", opt, optarg); usage(); return EXIT_FAILURE; } if( result != HACKRF_SUCCESS ) { - printf("argument error: '-%c %s' %s (%d)\n", opt, optarg, hackrf_error_name(result), result); + fprintf(stderr, "argument error: '-%c %s' %s (%d)\n", opt, optarg, hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } } if (lna_gain % 8) - printf("warning: lna_gain (-l) must be a multiple of 8\n"); + fprintf(stderr, "warning: lna_gain (-l) must be a multiple of 8\n"); if (vga_gain % 2) - printf("warning: vga_gain (-g) must be a multiple of 2\n"); + fprintf(stderr, "warning: vga_gain (-g) must be a multiple of 2\n"); if (samples_to_xfer >= SAMPLES_TO_XFER_MAX) { - printf("argument error: num_samples must be less than %s/%sMio\n", + fprintf(stderr, "argument error: num_samples must be less than %s/%sMio\n", u64toa(SAMPLES_TO_XFER_MAX,&ascii_u64_data1), u64toa((SAMPLES_TO_XFER_MAX/FREQ_ONE_MHZ),&ascii_u64_data2)); usage(); @@ -640,41 +640,41 @@ int main(int argc, char** argv) { if (if_freq || lo_freq || image_reject) { /* explicit tuning selected */ if (!if_freq) { - printf("argument error: if_freq_hz must be specified for explicit tuning.\n"); + fprintf(stderr, "argument error: if_freq_hz must be specified for explicit tuning.\n"); usage(); return EXIT_FAILURE; } if (!image_reject) { - printf("argument error: image_reject must be specified for explicit tuning.\n"); + fprintf(stderr, "argument error: image_reject must be specified for explicit tuning.\n"); usage(); return EXIT_FAILURE; } if (!lo_freq && (image_reject_selection != RF_PATH_FILTER_BYPASS)) { - printf("argument error: lo_freq_hz must be specified for explicit tuning unless image_reject is set to bypass.\n"); + fprintf(stderr, "argument error: lo_freq_hz must be specified for explicit tuning unless image_reject is set to bypass.\n"); usage(); return EXIT_FAILURE; } if ((if_freq_hz > IF_MAX_HZ) || (if_freq_hz < IF_MIN_HZ)) { - printf("argument error: if_freq_hz shall be between %s and %s.\n", + fprintf(stderr, "argument error: if_freq_hz shall be between %s and %s.\n", u64toa(IF_MIN_HZ,&ascii_u64_data1), u64toa(IF_MAX_HZ,&ascii_u64_data2)); usage(); return EXIT_FAILURE; } if ((lo_freq_hz > LO_MAX_HZ) || (lo_freq_hz < LO_MIN_HZ)) { - printf("argument error: lo_freq_hz shall be between %s and %s.\n", + fprintf(stderr, "argument error: lo_freq_hz shall be between %s and %s.\n", u64toa(LO_MIN_HZ,&ascii_u64_data1), u64toa(LO_MAX_HZ,&ascii_u64_data2)); usage(); return EXIT_FAILURE; } if (image_reject_selection > 2) { - printf("argument error: image_reject must be 0, 1, or 2 .\n"); + fprintf(stderr, "argument error: image_reject must be 0, 1, or 2 .\n"); usage(); return EXIT_FAILURE; } if (automatic_tuning) { - printf("warning: freq_hz ignored by explicit tuning selection.\n"); + fprintf(stderr, "warning: freq_hz ignored by explicit tuning selection.\n"); automatic_tuning = false; } switch (image_reject_selection) { @@ -691,13 +691,13 @@ int main(int argc, char** argv) { freq_hz = DEFAULT_FREQ_HZ; break; } - printf("explicit tuning specified for %s Hz.\n", + fprintf(stderr, "explicit tuning specified for %s Hz.\n", u64toa(freq_hz,&ascii_u64_data1)); } else if (automatic_tuning) { if( (freq_hz > FREQ_MAX_HZ) || (freq_hz < FREQ_MIN_HZ) ) { - printf("argument error: freq_hz shall be between %s and %s.\n", + fprintf(stderr, "argument error: freq_hz shall be between %s and %s.\n", u64toa(FREQ_MIN_HZ,&ascii_u64_data1), u64toa(FREQ_MAX_HZ,&ascii_u64_data2)); usage(); @@ -712,7 +712,7 @@ int main(int argc, char** argv) { if( amp ) { if( amp_enable > 1 ) { - printf("argument error: amp_enable shall be 0 or 1.\n"); + fprintf(stderr, "argument error: amp_enable shall be 0 or 1.\n"); usage(); return EXIT_FAILURE; } @@ -720,7 +720,7 @@ int main(int argc, char** argv) { if (antenna) { if (antenna_enable > 1) { - printf("argument error: antenna_enable shall be 0 or 1.\n"); + fprintf(stderr, "argument error: antenna_enable shall be 0 or 1.\n"); usage(); return EXIT_FAILURE; } @@ -742,14 +742,14 @@ int main(int argc, char** argv) { } if (baseband_filter_bw_hz > BASEBAND_FILTER_BW_MAX) { - printf("argument error: baseband_filter_bw_hz must be less or equal to %u Hz/%.03f MHz\n", + fprintf(stderr, "argument error: baseband_filter_bw_hz must be less or equal to %u Hz/%.03f MHz\n", BASEBAND_FILTER_BW_MAX, (float)(BASEBAND_FILTER_BW_MAX/FREQ_ONE_MHZ)); usage(); return EXIT_FAILURE; } if (baseband_filter_bw_hz < BASEBAND_FILTER_BW_MIN) { - printf("argument error: baseband_filter_bw_hz must be greater or equal to %u Hz/%.03f MHz\n", + fprintf(stderr, "argument error: baseband_filter_bw_hz must be greater or equal to %u Hz/%.03f MHz\n", BASEBAND_FILTER_BW_MIN, (float)(BASEBAND_FILTER_BW_MIN/FREQ_ONE_MHZ)); usage(); return EXIT_FAILURE; @@ -757,7 +757,7 @@ int main(int argc, char** argv) { if( (transmit == false) && (receive == receive_wav) ) { - printf("receive -r and receive_wav -w options are mutually exclusive\n"); + fprintf(stderr, "receive -r and receive_wav -w options are mutually exclusive\n"); usage(); return EXIT_FAILURE; } @@ -768,10 +768,10 @@ int main(int argc, char** argv) { { if( transmit == true ) { - printf("receive -r and transmit -t options are mutually exclusive\n"); + fprintf(stderr, "receive -r and transmit -t options are mutually exclusive\n"); } else { - printf("specify either transmit -t or receive -r or receive_wav -w option\n"); + fprintf(stderr, "specify either transmit -t or receive -r or receive_wav -w option\n"); } usage(); return EXIT_FAILURE; @@ -789,7 +789,7 @@ int main(int argc, char** argv) { if (signalsource) { transceiver_mode = TRANSCEIVER_MODE_SS; if (amplitude >127) { - printf("argument error: amplitude shall be in between 0 and 128.\n"); + fprintf(stderr, "argument error: amplitude shall be in between 0 and 128.\n"); usage(); return EXIT_FAILURE; } @@ -804,13 +804,13 @@ int main(int argc, char** argv) { strftime(date_time, DATE_TIME_MAX_LEN, "%Y%m%d_%H%M%S", timeinfo); snprintf(path_file, PATH_FILE_MAX_LEN, "HackRF_%sZ_%ukHz_IQ.wav", date_time, (uint32_t)(freq_hz/(1000ull)) ); path = path_file; - printf("Receive wav file: %s\n", path); + fprintf(stderr, "Receive wav file: %s\n", path); } // In signal source mode, the PATH argument is neglected. if (transceiver_mode != TRANSCEIVER_MODE_SS) { if( path == NULL ) { - printf("specify a path to a file to transmit/receive\n"); + fprintf(stderr, "specify a path to a file to transmit/receive\n"); usage(); return EXIT_FAILURE; } @@ -818,14 +818,14 @@ int main(int argc, char** argv) { result = hackrf_init(); if( result != HACKRF_SUCCESS ) { - printf("hackrf_init() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_init() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } result = hackrf_open_by_serial(serial_number, &device); if( result != HACKRF_SUCCESS ) { - printf("hackrf_open() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_open() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } @@ -833,19 +833,27 @@ int main(int argc, char** argv) { if (transceiver_mode != TRANSCEIVER_MODE_SS) { if( transceiver_mode == TRANSCEIVER_MODE_RX ) { - fd = fopen(path, "wb"); + if (strcmp(path, "-") == 0) { + fd = stdout; + } else { + fd = fopen(path, "wb"); + } } else { - fd = fopen(path, "rb"); + if (strcmp(path, "-") == 0) { + fd = stdin; + } else { + fd = fopen(path, "rb"); + } } if( fd == NULL ) { - printf("Failed to open file: %s\n", path); + fprintf(stderr, "Failed to open file: %s\n", path); return EXIT_FAILURE; } /* Change fd buffer to have bigger one to store or read data on/to HDD */ result = setvbuf(fd , NULL , _IOFBF , FD_BUFFER_SIZE); if( result != 0 ) { - printf("setvbuf() failed: %d\n", result); + fprintf(stderr, "setvbuf() failed: %d\n", result); usage(); return EXIT_FAILURE; } @@ -867,19 +875,19 @@ int main(int argc, char** argv) { signal(SIGTERM, &sigint_callback_handler); signal(SIGABRT, &sigint_callback_handler); #endif - printf("call hackrf_sample_rate_set(%u Hz/%.03f MHz)\n", sample_rate_hz,((float)sample_rate_hz/(float)FREQ_ONE_MHZ)); + fprintf(stderr, "call hackrf_sample_rate_set(%u Hz/%.03f MHz)\n", sample_rate_hz,((float)sample_rate_hz/(float)FREQ_ONE_MHZ)); result = hackrf_set_sample_rate_manual(device, sample_rate_hz, 1); if( result != HACKRF_SUCCESS ) { - printf("hackrf_sample_rate_set() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_sample_rate_set() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } - printf("call hackrf_baseband_filter_bandwidth_set(%d Hz/%.03f MHz)\n", + fprintf(stderr, "call hackrf_baseband_filter_bandwidth_set(%d Hz/%.03f MHz)\n", baseband_filter_bw_hz, ((float)baseband_filter_bw_hz/(float)FREQ_ONE_MHZ)); result = hackrf_set_baseband_filter_bandwidth(device, baseband_filter_bw_hz); if( result != HACKRF_SUCCESS ) { - printf("hackrf_baseband_filter_bandwidth_set() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_baseband_filter_bandwidth_set() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } @@ -893,29 +901,29 @@ int main(int argc, char** argv) { result |= hackrf_start_tx(device, tx_callback, NULL); } if( result != HACKRF_SUCCESS ) { - printf("hackrf_start_?x() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_start_?x() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } if (automatic_tuning) { - printf("call hackrf_set_freq(%s Hz/%.03f MHz)\n", + fprintf(stderr, "call hackrf_set_freq(%s Hz/%.03f MHz)\n", u64toa(freq_hz, &ascii_u64_data1),((double)freq_hz/(double)FREQ_ONE_MHZ) ); result = hackrf_set_freq(device, freq_hz); if( result != HACKRF_SUCCESS ) { - printf("hackrf_set_freq() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_set_freq() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } } else { - printf("call hackrf_set_freq_explicit() with %s Hz IF, %s Hz LO, %s\n", + fprintf(stderr, "call hackrf_set_freq_explicit() with %s Hz IF, %s Hz LO, %s\n", u64toa(if_freq_hz,&ascii_u64_data1), u64toa(lo_freq_hz,&ascii_u64_data2), hackrf_filter_path_name(image_reject_selection)); result = hackrf_set_freq_explicit(device, if_freq_hz, lo_freq_hz, image_reject_selection); if (result != HACKRF_SUCCESS) { - printf("hackrf_set_freq_explicit() failed: %s (%d)\n", + fprintf(stderr, "hackrf_set_freq_explicit() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; @@ -923,27 +931,27 @@ int main(int argc, char** argv) { } if( amp ) { - printf("call hackrf_set_amp_enable(%u)\n", amp_enable); + fprintf(stderr, "call hackrf_set_amp_enable(%u)\n", amp_enable); result = hackrf_set_amp_enable(device, (uint8_t)amp_enable); if( result != HACKRF_SUCCESS ) { - printf("hackrf_set_amp_enable() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_set_amp_enable() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } } if (antenna) { - printf("call hackrf_set_antenna_enable(%u)\n", antenna_enable); + fprintf(stderr, "call hackrf_set_antenna_enable(%u)\n", antenna_enable); result = hackrf_set_antenna_enable(device, (uint8_t)antenna_enable); if (result != HACKRF_SUCCESS) { - printf("hackrf_set_antenna_enable() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_set_antenna_enable() failed: %s (%d)\n", hackrf_error_name(result), result); usage(); return EXIT_FAILURE; } } if( limit_num_samples ) { - printf("samples_to_xfer %s/%sMio\n", + fprintf(stderr, "samples_to_xfer %s/%sMio\n", u64toa(samples_to_xfer,&ascii_u64_data1), u64toa((samples_to_xfer/FREQ_ONE_MHZ),&ascii_u64_data2) ); } @@ -951,7 +959,7 @@ int main(int argc, char** argv) { gettimeofday(&t_start, NULL); gettimeofday(&time_start, NULL); - printf("Stop with Ctrl-C\n"); + fprintf(stderr, "Stop with Ctrl-C\n"); while( (hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false) ) { @@ -967,14 +975,14 @@ int main(int argc, char** argv) { time_difference = TimevalDiff(&time_now, &time_start); rate = (float)byte_count_now / time_difference; - printf("%4.1f MiB / %5.3f sec = %4.1f MiB/second\n", + fprintf(stderr, "%4.1f MiB / %5.3f sec = %4.1f MiB/second\n", (byte_count_now / 1e6f), time_difference, (rate / 1e6f) ); time_start = time_now; if (byte_count_now == 0) { exit_code = EXIT_FAILURE; - printf("\nCouldn't transfer any bytes for one second.\n"); + fprintf(stderr, "\nCouldn't transfer any bytes for one second.\n"); break; } } @@ -982,14 +990,14 @@ int main(int argc, char** argv) { result = hackrf_is_streaming(device); if (do_exit) { - printf("\nUser cancel, exiting...\n"); + fprintf(stderr, "\nUser cancel, exiting...\n"); } else { - printf("\nExiting... hackrf_is_streaming() result: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "\nExiting... hackrf_is_streaming() result: %s (%d)\n", hackrf_error_name(result), result); } gettimeofday(&t_end, NULL); time_diff = TimevalDiff(&t_end, &t_start); - printf("Total time: %5.5f s\n", time_diff); + fprintf(stderr, "Total time: %5.5f s\n", time_diff); if(device != NULL) { @@ -997,9 +1005,9 @@ int main(int argc, char** argv) { { result = hackrf_stop_rx(device); if( result != HACKRF_SUCCESS ) { - printf("hackrf_stop_rx() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_stop_rx() failed: %s (%d)\n", hackrf_error_name(result), result); }else { - printf("hackrf_stop_rx() done\n"); + fprintf(stderr, "hackrf_stop_rx() done\n"); } } @@ -1007,22 +1015,22 @@ int main(int argc, char** argv) { { result = hackrf_stop_tx(device); if( result != HACKRF_SUCCESS ) { - printf("hackrf_stop_tx() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_stop_tx() failed: %s (%d)\n", hackrf_error_name(result), result); }else { - printf("hackrf_stop_tx() done\n"); + fprintf(stderr, "hackrf_stop_tx() done\n"); } } result = hackrf_close(device); if( result != HACKRF_SUCCESS ) { - printf("hackrf_close() failed: %s (%d)\n", hackrf_error_name(result), result); + fprintf(stderr, "hackrf_close() failed: %s (%d)\n", hackrf_error_name(result), result); }else { - printf("hackrf_close() done\n"); + fprintf(stderr, "hackrf_close() done\n"); } hackrf_exit(); - printf("hackrf_exit() done\n"); + fprintf(stderr, "hackrf_exit() done\n"); } if(fd != NULL) @@ -1042,8 +1050,8 @@ int main(int argc, char** argv) { } fclose(fd); fd = NULL; - printf("fclose(fd) done\n"); + fprintf(stderr, "fclose(fd) done\n"); } - printf("exit\n"); + fprintf(stderr, "exit\n"); return exit_code; } From 92e015f4e53ae687ba1803253b941408db8b6c4a Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Thu, 7 Jul 2016 14:48:56 +0100 Subject: [PATCH 04/10] Re-generate BOM using mossmann's kicad-bom-scripts Fixes issues with quoting that were making GitHub unhappy Groups items by part for easier ordering Fixes #265 and #262 --- doc/hardware/hackrf-one-bom.csv | 481 +++++--------------------------- 1 file changed, 66 insertions(+), 415 deletions(-) diff --git a/doc/hardware/hackrf-one-bom.csv b/doc/hardware/hackrf-one-bom.csv index a3433fb3..a52faa74 100644 --- a/doc/hardware/hackrf-one-bom.csv +++ b/doc/hardware/hackrf-one-bom.csv @@ -1,415 +1,66 @@ -ref;value;Field1;Field2;Field3;Field4;Field5;Field6;Field7;Field8 -C1;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C2;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C3;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C4;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C5;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C6;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C7;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C8;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C9;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C10;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C11;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C12;330pF;Murata;GRM155R71H331KA01D;CAP CER 330PF 50V 10% X7R 0402;;;;; -C13;330pF;Murata;GRM155R71H331KA01D;CAP CER 330PF 50V 10% X7R 0402;;;;; -C14;8p2;Taiyo Yuden;UMK105CG8R2DV-F;CAP CER 8.2PF 50V NP0 0402;;;;; -C15;180pF;Murata;GRM1555C1H181JA01D;CAP CER 180PF 50V 5% NP0 0402;;;;; -C16;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C17;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C18;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C19;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C20;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C21;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C22;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C23;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C24;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C25;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C26;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;; -C27;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;; -C28;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C29;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C30;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C31;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C32;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C33;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C34;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C35;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C36;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C37;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C38;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C39;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C40;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C41;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C42;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C43;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C44;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C45;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C46;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C47;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C48;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C49;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C50;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C51;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C52;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C53;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;; -C54;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C55;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C56;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C57;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C58;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C59;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C60;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C61;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C62;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C63;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C64;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C65;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C66;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C67;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C68;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;; -C69;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;; -C70;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C71;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C72;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C73;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C74;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C75;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C76;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C77;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C78;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C79;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C80;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C81;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C82;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C83;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C84;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C85;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C86;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C87;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C88;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C89;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C90;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C91;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C92;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C93;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C94;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C95;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C96;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C97;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;; -C98;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;; -C99;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C100;330nF;Murata;GRM155R61A334KE15D;CAP CER 0.33UF 10V 10% X5R 0402;;;;; -C101;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C102;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;;;;; -C103;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C104;3pF;Murata;GRM1555C1H3R0CA01D;CAP CER 3PF 50V NP0 0402;;;;; -C105;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C106;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;; -C107;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C108;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C109;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C110;22pF;Murata;GRM1555C1H220JA01D;CAP CER 22PF 50V 5% NP0 0402;DNP;;;; -C111;3pF;Murata;GRM1555C1H3R0CA01D;CAP CER 3PF 50V NP0 0402;;;;; -C112;180pF;Murata;GRM1555C1H181JA01D;CAP CER 180PF 50V 5% NP0 0402;;;;; -C113;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C114;3.3nF;Murata;GRM155R71H332KA01D;CAP CER 3300PF 50V 10% X7R 0402;;;;; -C115;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C116;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;;;;; -C118;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;; -C119;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C120;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C121;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C122;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C123;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C124;2.2uF;Taiyo Yuden;LMK105BJ225MV-F;CAP CER 2.2UF 10V 20% X5R 0402;;;;; -C125;33pF;Murata;GRM1555C1H330JA01D;CAP CER 33PF 50V 5% NP0 0402;;;;; -C126;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C127;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C128;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C129;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C130;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C131;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C132;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C133;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C134;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C135;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C136;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C137;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C138;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C139;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C140;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C141;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C142;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C143;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C144;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C145;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C146;10uF;Murata;GRM21BR61A106KE19L;CAP CER 10UF 10V 10% X5R 0805;;;;; -C147;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C148;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C149;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C150;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C151;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C152;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C153;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C154;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C155;DNP;DNP;;;;;;; -C156;47pF;Murata;GRM1555C1H470JA01D;CAP CER 47PF 50V 5% NP0 0402;DNP;;;; -C157;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;; -C158;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;; -C159;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;; -C160;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;;;;; -C161;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;; -C162;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C163;10nF;Murata;GRM155R71C103KA01D;CAP CER 10000PF 16V 10% X7R 0402;;;;; -C164;18pF;Murata;GRM1555C1H180JA01D;CAP CER 18PF 50V 5% NP0 0402;;;;; -C165;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;; -C166;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C167;100nF;Murata;GRM155R61A104KA01D;CAP CER 0.1UF 10V 10% X5R 0402;;;;; -C168;100pF;Murata;GRM1555C1H101JA01D;CAP CER 100PF 50V 5% NP0 0402;DNP;;;; -C169;DNP;DNP;;;;;;; -C170;DNP;DNP;;;;;;; -C171;1uF;Taiyo Yuden;LMK105BJ105KV-F;CAP CER 1UF 10V 10% X5R 0402;;;;; -D1;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;; -D2;VAALED;Lite-On;LTST-S220KRKT;LED SUPR RED CLR RT ANG 0805;;;;; -D3;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;; -D4;USBLED;Lite-On;LTST-S220KGKT;LED GREEN CLEAR RT ANG 0805;;;;; -D5;RXLED;Lite-On;LTST-S220KSKT;LED YELLOW CLEAR RT ANG 0805;;;;; -D6;TXLED;Lite-On;LTST-S220KRKT;LED SUPR RED CLR RT ANG 0805;;;;; -D7;VCCLED;Lite-On;LTST-S220KGKT;LED GREEN CLEAR RT ANG 0805;;;;; -D8;1V8LED;Lite-On;LTST-S220KSKT;LED YELLOW CLEAR RT ANG 0805;;;;; -D9;GSG-DIODE-TVS-BI;Murata;LXES15AAA1-100;TVS DIODE ESD .05PF 15KV 0402;;;;; -FB1;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;; -FB2;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;; -FB3;FILTER;Murata;BLM21PG221SN1D;FERRITE CHIP 220 OHM 2000MA 0805;;;;; -J1;USB-MICRO-B;FCI;10103592-0001LF;CONN RCPT REV MICRO USB TYPE B;;;;; -J2;RF-SHIELD-FRAME;Laird;BMI-S-230-F-R;BOARD SHIELD 2INX1.5IN FRAME;DNP;;;; -J3;RF-SHIELD-COVER;Laird;BMI-S-230-C;BOARD SHIELD 2INX1.5IN COVER;DNP;;;; -J4;MOUNTING_HOLE;DNP;;;;;;; -J5;MOUNTING_HOLE;DNP;;;;;;; -J6;MOUNTING_HOLE;DNP;;;;;;; -J7;MOUNTING_HOLE;DNP;;;;;;; -J8;MOUNTING_HOLE;DNP;;;;;;; -J9;MOUNTING_HOLE;DNP;;;;;;; -J10;GND_CLIP;Harwin;S1751-46R;PC TEST POINT TIN SMD;DNP;;;; -L1;DNP;DNP;;;;;;; -L2;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;; -L3;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;; -L4;DNP;DNP;;;;;;; -L5;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;; -L6;DNP;DNP;;;;;;; -L7;6.2nH;Taiyo Yuden;HK10056N2S-T;INDUCTOR HIFREQ 6.2+/-0.3NH 0402;;;;; -L8;DNP;DNP;;;;;;; -L9;DNP;DNP;;;;;;; -L10;4u7;Taiyo Yuden;NRG4026T4R7M;INDUCTOR 4.7UH 1.6A 20% SMD;;;;; -L11;4u7;Taiyo Yuden;NRG4026T4R7M;INDUCTOR 4.7UH 1.6A 20% SMD;;;;; -L12;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;; -L13;10uH;Taiyo Yuden;BRL1608T100M;INDUCTR 10UH 220MA 20% 0603 SMD;;;;; -P1;1V8;DNP;;;;;;; -P2;CLKOUT;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;; -P3;GND;DNP;;;;;;; -P4;ANTENNA;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;; -P5;LEDS;DNP;;;;;;; -P6;GPO4;DNP;;;;;;; -P7;GPO2;DNP;;;;;;; -P8;VCC;DNP;;;;;;; -P9;BASEBAND;Sullins;PPPC082LFBN-RC;CONN HEADER FMAL 16PS.1" DL GOLD;;;;; -P13;GPO1;DNP;;;;;;; -P14;XCVR_CLKOUT;DNP;;;;;;; -P15;INTR;DNP;;;;;;; -P16;CLKIN;Molex;73251-2121;CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER;;;;; -P17;GPO6;DNP;;;;;;; -P18;OEB;DNP;;;;;;; -P19;GPO3;DNP;;;;;;; -P20;GPIO;Sullins;PPPC112LFBN-RC;CONN HEADER FMAL 22PS.1" DL GOLD;;;;; -P21;REF_IN;DNP;;;;;;; -P22;I2S;Sullins;PPPC132LFBN-RC;CONN HEADER FMAL 26PS.1" DL GOLD;;;;; -P23;DBGEN;DNP;;;;;;; -P24;TRST;DNP;;;;;;; -P25;LPC_ISP;DNP;;;;;;; -P26;LPC_JTAG;Sullins;GRPB052VWVN-RC;CONN HEADER .050" 10PS DL PCB AU;DNP;;;; -P27;MIXER_SDATA;DNP;;;;;;; -P28;SD;Sullins;PPPC112LFBN-RC;CONN HEADER FMAL 22PS.1" DL GOLD;;;;; -P29;CPLD_JTAG;DNP;;;;;;; -P30;BANK2_AUX;DNP;;;;;;; -P31;MIXER_SCLK;DNP;;;;;;; -P32;MIXER_ENX;DNP;;;;;;; -P33;MIXER_RESETX;DNP;;;;;;; -P34;MIX_BYPASS;DNP;;;;;;; -P35;!MIX_BYPASS;DNP;;;;;;; -P36;VAA;DNP;;;;;;; -P37;SCL;DNP;;;;;;; -P38;SDA;DNP;;;;;;; -P39;SSP1_SCK;DNP;;;;;;; -P40;SSP1_MOSI;DNP;;;;;;; -P41;SSP1_MISO;DNP;;;;;;; -P42;TX;DNP;;;;;;; -P43;RX;DNP;;;;;;; -P44;HP;DNP;;;;;;; -P45;LP;DNP;;;;;;; -P46;TX_MIX_BP;DNP;;;;;;; -P47;RX_MIX_BP;DNP;;;;;;; -P48;TX_AMP;DNP;;;;;;; -P49;RX_AMP;DNP;;;;;;; -P50;AMP_BYPASS;DNP;;;;;;; -P51;!TX_AMP_PWR;DNP;;;;;;; -P52;!RX_AMP_PWR;DNP;;;;;;; -P53;CS_XCVR;DNP;;;;;;; -P54;CS_AD;DNP;;;;;;; -P55;TXENABLE;DNP;;;;;;; -P56;RXENABLE;DNP;;;;;;; -P57;XTAL2;DNP;;;;;;; -P58;GCK1;DNP;;;;;;; -P59;GCK2;DNP;;;;;;; -P60;SGPIO_CLK;DNP;;;;;;; -P61;DA0;DNP;;;;;;; -P62;DA7;DNP;;;;;;; -P63;DD0;DNP;;;;;;; -P64;DD9;DNP;;;;;;; -P65;DA4;DNP;;;;;;; -P66;DD5;DNP;;;;;;; -P67;RSSI;DNP;;;;;;; -P68;SPIFI_CS;DNP;;;;;;; -P69;VREGMODE;DNP;;;;;;; -P70;EN_1V8;DNP;;;;;;; -P71;ID;DNP;;;;;;; -P72;GP_CLKIN;DNP;;;;;;; -P73;P1_2;DNP;;;;;;; -P74;P1_1;DNP;;;;;;; -P75;GP_CLKIN;DNP;;;;;;; -P76;GP_CLKIN;DNP;;;;;;; -P77;GP_CLKIN;DNP;;;;;;; -P78;GP_CLKIN;DNP;;;;;;; -P79;GP_CLKIN;DNP;;;;;;; -P80;SHIELD;DNP;;;;;;; -P81;SPIFI_SIO2;DNP;;;;;;; -P82;SPIFI_SIO3;DNP;;;;;;; -P83;GND;DNP;;;;;;; -P84;GND;DNP;;;;;;; -P85;GND;DNP;;;;;;; -P86;GND;DNP;;;;;;; -P87;GND;DNP;;;;;;; -P88;GND;DNP;;;;;;; -P89;GND;DNP;;;;;;; -P90;GND;DNP;;;;;;; -P91;GND;DNP;;;;;;; -P92;GND;DNP;;;;;;; -Q1;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;; -Q2;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;; -Q3;MOSFET_P;Diodes Inc.;DMP2305U-7;MOSFET P-CH 20V 4.2A SOT-23;;;;; -Q4;MOSFET_P;Fairchild;BSS84;MOSFET P-CH 50V 130MA SOT-23;;;;; -Q5;MOSFET_P;Alpha and Omega;AO3407A;MOSFET P-CH -30V -4.3A SOT23;;;;; -R1;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R2;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R3;22k;Panasonic;ERJ-2GEJ223X;RES 22K OHM 1/10W 5% 0402 SMD;;;;; -R4;51k;Stackpole;RMCF0402FT51K0;RES TF 51K OHM 1% 0.0625W 0402;;;;; -R5;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R6;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R7;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R8;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R9;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R10;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R11;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R12;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R13;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R14;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;; -R15;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;; -R16;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;; -R17;4k7;Stackpole;RMCF0402FT4K70;RES 4.7K OHM 1/16W 1% 0402;;;;; -R18;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;; -R19;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R20;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R21;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R22;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R23;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R24;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R25;475;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R26;475;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R27;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;; -R28;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;; -R29;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R30;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R31;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R32;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R33;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R34;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R35;DNP;DNP;;;;;;; -R36;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R37;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R41;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R46;162k;Stackpole;RMCF0402FT162K;RES TF 1/16W 162K OHM 1% 0402;;;;; -R47;330k;Stackpole;RMCF0402FT330K;RES TF 1/16W 330K OHM 1% 0402;;;;; -R48;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R49;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R51;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R52;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R54;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R55;162k;Stackpole;RMCF0402FT162K;RES TF 1/16W 162K OHM 1% 0402;;;;; -R56;715k;Stackpole;RMCF0402FT715K;RES TF 1/16W 715K OHM 1% 0402;;;;; -R57;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R58;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R59;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R62;0;Stackpole;RMCF0402ZT0R00;RES 0.0 OHM 1/16W 0402 SMD;;;;; -R63;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R64;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R65;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R66;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R67;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R68;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R69;12k;Rohm;MCR01MRTF1202;RES 12.0K OHM 1/16W 1% 0402 SMD;;;;; -R72;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R73;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R74;1k8;Stackpole;RMCF0402JT1K80;RES TF 1.8K OHM 5% 1/16W 0402;;;;; -R75;470;Stackpole;RMCF0402JT470R;RES TF 1/16W 470 OHM 5% 0402;;;;; -R76;1k;Stackpole;RMCF0402FT1K00;RES 1K OHM 1/16W 1% 0402;;;;; -R77;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R78;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R79;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R80;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R81;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R85;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R86;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R87;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R88;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R89;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R90;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R91;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R93;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R94;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R96;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R98;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R99;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R100;39;Stackpole;RMCF0402JT39R0;RES 39 OHM 1/16W 5% 0402 SMD;;;;; -R104;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -R105;10k;Stackpole;RMCF0402JT10K0;RES 10K OHM 1/16W 5% 0402 SMD;;;;; -SW1;DFU;TE Connectivity;FSMRA3JH;SWITCH TACTILE SPST-NO 0.05A 12V;;;;; -SW2;RESET;TE Connectivity;FSMRA3JH;SWITCH TACTILE SPST-NO 0.05A 12V;;;;; -T1;MIX_IN_BALUN;Anaren;B0310J50100AHF;Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced;;;;; -T2;MIX_OUT_BALUN;Anaren;B0310J50100AHF;Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced;;;;; -T3;RX_BALUN;Johanson Technology;2500BL14M100T;BALUN CERAMIC CHIP WIMAX 2.5GHZ;;;;; -T4;TX_BALUN;Johanson Technology;2500BL14M100T;BALUN CERAMIC CHIP WIMAX 2.5GHZ;;;;; -U1;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U2;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U3;RX_LOWPASS_FILTER;AVX;LP0603A1880ANTR;FILTER LOW PASS 1880MHZ 0603 SMD;;;;; -U4;RFFC5072;RFMD;RFFC5072TR7;WIDEBAND SYNTHESIZER/VCO WITH INTEGRATED 6GHz MIXER;;;;; -U5;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U6;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U7;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U8;RX_HIGHPASS_FILTER;TDK;DEA162400HT-8004B1;FILTER HIGHPASS WLAN&BLUETOOTH;;;;; -U9;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;; -U10;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U11;SKY13350;Skyworks;SKY13350-385LF;0.01-6.0 GHz GaAs SPDT Switch;;;;; -U12;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;; -U13;MGA-81563;Avago;MGA-81563-TR1G;0.1-6 GHz 3 V, 14 dBm Amplifier;;;;; -U14;SKY13317;Skyworks;SKY13317-373LF;20 MHz-6.0 GHz pHEMT GaAs SP3T Switch;;;;; -U15;LXES1TBCC2-004;Murata;LXES1TBCC2-004;ESD Suppressors 0.55pF 6V 2ch;;;;; -U17;MAX2837;Maxim;MAX2837ETM+;IC TXRX 2.3GHZ-2.7GHZ 48TQFN;;;;; -U18;MAX5864;Maxim;MAX5864ETM+;IC ANLG FRONT END 22MSPS 48-TQFN;;;;; -U19;SI5351C;Silicon Laboratories Inc;SI5351C-B-GM;IC CLK GENERATOR 160MHZ 20QFN;;;;; -U20;W25Q80BV;Winbond;W25Q80BVSSIG;IC FLASH 8MBIT 8SOIC;;;;; -U21;TPS62410;Texas Instruments;TPS62410DRCR;IC BUCK SYNC DUAL ADJ 0.8A 10SON;;;;; -U23;LPC4320FBD144;NXP;LPC4320FBD144,551;IC MCU 32BIT 144LQFP;;;;; -U24;GSG-XC2C64A-7VQG100C;Xilinx;XC2C64A-7VQG100C;IC CR-II CPLD 64MCELL 100-VQFP;;;;; -U25;MGA-81563;Avago;MGA-81563-TR1G;0.1-6 GHz 3 V, 14 dBm Amplifier;;;;; -X1;GSG-XTAL4PIN;AVX;CX3225GB25000D0HEQZ1;CRYSTAL 25.000MHZ 8PF SMD;;;;; -X2;MCU_XTAL;TXC;7V-12.000MAAE-T;CRYSTAL 12.000 MHZ 12PF SMD;;;;; -X3;RTC_XTAL;Abracon;AB26TRQ-32.768KHZ-T;CRYSTAL 32.768KHZ 12.5PF SMD;;;;; +Item,Qty,Reference(s),Value,LibPart,Footprint,Datasheet,Description,Manufacturer,Part Number +1,33,"C1, C3, C5, C7, C10, C11, C16, C19, C22, C24, C29, C30, C33, C34, C35, C36, C37, C38, C39, C40, C45, C47, C54, C55, C56, C57, C60, C63, C65, C66, C67, C115, C125",33pF,device:C,,,CAP CER 33PF 50V 5% NP0 0402,Murata,GRM1555C1H330JA01D +2,3,"C97, C98, C100",330nF,device:C,,,CAP CER 0.33UF 10V 10% X5R 0402,Murata,GRM155R61A334KE15D +3,12,"C8, C21, C32, C43, C48, C51, C84, C85, C86, C94, C99, C102",22pF,device:C,,,CAP CER 22PF 50V 5% NP0 0402,Murata,GRM1555C1H220JA01D +4,2,"C104, C111",3pF,device:C,,,CAP CER 3PF 50V NP0 0402,Murata,GRM1555C1H3R0CA01D +5,6,"C105, C126, C127, C143, C145, C146",10uF,device:C,,,CAP CER 10UF 10V 10% X5R 0805,Murata,GRM21BR61A106KE19L +6,4,"C53, C106, C161, C171",1uF,device:C,,,CAP CER 1UF 10V 10% X5R 0402,Taiyo Yuden,LMK105BJ105KV-F +7,2,"C15, C112",180pF,device:C,,,CAP CER 180PF 50V 5% NP0 0402,Murata,GRM1555C1H181JA01D +8,57,"C9, C17, C18, C20, C23, C25, C28, C31, C44, C46, C49, C50, C58, C59, C61, C62, C64, C71, C73, C75, C77, C79, C81, C83, C91, C113, C119, C120, C121, C122, C123, C128, C129, C130, C131, C132, C133, C134, C135, C136, C137, C138, C139, C140, C141, C142, C144, C147, C148, C149, C150, C151, C152, C153, C154, C166, C167",100nF,device:C,,,CAP CER 0.1UF 10V 10% X5R 0402,Murata,GRM155R61A104KA01D +9,1,C114,3.3nF,device:C,,,CAP CER 3300PF 50V 10% X7R 0402,Murata,GRM155R71H332KA01D +10,3,"C26, C27, C116",47pF,device:C,,,CAP CER 47PF 50V 5% NP0 0402,Murata,GRM1555C1H470JA01D +11,4,"C118, C157, C158, C164",18pF,device:C,,,CAP CER 18PF 50V 5% NP0 0402,Murata,GRM1555C1H180JA01D +12,2,"C12, C13",330pF,device:C,,,CAP CER 330PF 50V 10% X7R 0402,Murata,GRM155R71H331KA01D +13,7,"C72, C74, C76, C78, C80, C82, C124",2.2uF,device:C,,,CAP CER 2.2UF 10V 20% X5R 0402,Taiyo Yuden,LMK105BJ225MV-F +14,1,C14,8p2,device:C,,,CAP CER 8.2PF 50V NP0 0402,Taiyo Yuden,UMK105CG8R2DV-F +15,6,"C41, C42, C52, C70, C90, C160",100pF,device:C,,,CAP CER 100PF 50V 5% NP0 0402,Murata,GRM1555C1H101JA01D +16,10,"C2, C4, C6, C87, C88, C89, C92, C93, C162, C163",10nF,device:C,,,CAP CER 10000PF 16V 10% X7R 0402,Murata,GRM155R71C103KA01D +17,3,"D1, D3, D9",GSG-DIODE-TVS-BI,hackrf:GSG-DIODE-TVS-BI,,,TVS DIODE ESD .05PF 15KV 0402,Murata,LXES15AAA1-100 +18,2,"D2, D6",TXLED,device:LED,,,LED SUPR RED CLR RT ANG 0805,Lite-On,LTST-S220KRKT +19,2,"D4, D7",VCCLED,device:LED,,,LED GREEN CLEAR RT ANG 0805,Lite-On,LTST-S220KGKT +20,2,"D5, D8",1V8LED,device:LED,,,LED YELLOW CLEAR RT ANG 0805,Lite-On,LTST-S220KSKT +21,3,"FB1, FB2, FB3",FILTER,device:FILTER,,,FERRITE CHIP 220 OHM 2000MA 0805,Murata,BLM21PG221SN1D +22,1,J1,USB-MICRO-B,hackrf:GSG-USB-MICRO-B-SHIELDED,,,CONN RCPT REV MICRO USB TYPE B,FCI,10103592-0001LF +23,2,"L10, L11",4u7,device:INDUCTOR,,,INDUCTOR 4.7UH 1.6A 20% SMD,Taiyo Yuden,NRG4026T4R7M +24,5,"L2, L3, L5, L12, L13",10uH,device:INDUCTOR,,,INDUCTR 10UH 220MA 20% 0603 SMD,Taiyo Yuden,BRL1608T100M +25,1,L7,6.2nH,device:INDUCTOR,,,INDUCTOR HIFREQ 6.2+/-0.3NH 0402,Taiyo Yuden,HK10056N2S-T +26,3,"P2, P4, P16",ANTENNA,hackrf:GSG-RF-CONN,,,CONN SMA JACK 50 OHM EDGE MNT W/JAM NUT & LOCK WASHER,Molex,73251-2121 +27,2,"P20, P28",SD,hackrf:CONN_11X2,,,"CONN HEADER FMAL 22PS.1"" DL GOLD",Sullins,PPPC112LFBN-RC +28,1,P22,I2S,hackrf-one-cache:CONN_13X2,,,"CONN HEADER FMAL 26PS.1"" DL GOLD",Sullins,PPPC132LFBN-RC +29,1,P9,BASEBAND,hackrf-one-cache:CONN_8X2,,,"CONN HEADER FMAL 16PS.1"" DL GOLD",Sullins,PPPC082LFBN-RC +30,3,"Q1, Q2, Q4",MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH 50V 130MA SOT-23,Fairchild,BSS84 +31,1,Q3,MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH 20V 4.2A SOT-23,Diodes Inc.,DMP2305U-7 +32,1,Q5,MOSFET_P,hackrf-one-cache:MOSFET_P,,,MOSFET P-CH -30V -4.3A SOT23,Alpha and Omega,AO3407A +33,6,"R1, R2, R25, R26, R72, R75",470,device:R,,,RES TF 1/16W 470 OHM 5% 0402,Stackpole,RMCF0402JT470R +34,6,"R8, R9, R10, R13, R73, R76",1k,device:R,,,RES 1K OHM 1/16W 1% 0402,Stackpole,RMCF0402FT1K00 +35,22,"R19, R30, R31, R32, R33, R34, R77, R78, R79, R80, R81, R86, R87, R88, R89, R90, R91, R94, R96, R98, R99, R100",39,device:R,,,RES 39 OHM 1/16W 5% 0402 SMD,Stackpole,RMCF0402JT39R0 +36,26,"R5, R6, R7, R11, R12, R24, R29, R36, R37, R41, R48, R49, R51, R52, R54, R59, R63, R64, R65, R66, R67, R68, R85, R93, R104, R105",10k,device:R,,,RES 10K OHM 1/16W 5% 0402 SMD,Stackpole,RMCF0402JT10K0 +37,4,"R14, R15, R16, R17",4k7,device:R,,,RES 4.7K OHM 1/16W 1% 0402,Stackpole,RMCF0402FT4K70 +38,4,"R18, R27, R28, R74",1k8,device:R,,,RES TF 1.8K OHM 5% 1/16W 0402,Stackpole,RMCF0402JT1K80 +39,7,"R20, R21, R22, R23, R57, R58, R62",0,device:R,,,RES 0.0 OHM 1/16W 0402 SMD,Stackpole,RMCF0402ZT0R00 +40,1,R3,22k,device:R,,,RES 22K OHM 1/10W 5% 0402 SMD,Panasonic,ERJ-2GEJ223X +41,1,R4,51k,device:R,,,RES TF 51K OHM 1% 0.0625W 0402,Stackpole,RMCF0402FT51K0 +42,2,"R46, R55",162k,device:R,,,RES TF 1/16W 162K OHM 1% 0402,Stackpole,RMCF0402FT162K +43,1,R47,330k,device:R,,,RES TF 1/16W 330K OHM 1% 0402,Stackpole,RMCF0402FT330K +44,1,R56,715k,device:R,,,RES TF 1/16W 715K OHM 1% 0402,Stackpole,RMCF0402FT715K +45,1,R69,12k,device:R,,,RES 12.0K OHM 1/16W 1% 0402 SMD,Rohm,MCR01MRTF1202 +46,2,"SW1, SW2",RESET,hackrf:SW_PUSH_SHIELDED,,,SWITCH TACTILE SPST-NO 0.05A 12V,TE Connectivity,FSMRA3JH +47,2,"T1, T2",MIX_OUT_BALUN,hackrf:BALUN-B0310J50100AHF,,,Ultra Low Profile 0805 Balun 50 to 100 ohm Balanced,Anaren,B0310J50100AHF +48,2,"T3, T4",TX_BALUN,hackrf:BALUN,,,BALUN CERAMIC CHIP WIMAX 2.5GHZ,Johanson Technology,2500BL14M100T +49,7,"U1, U2, U5, U6, U7, U10, U11",SKY13350,hackrf:SKY13350,,,0.01-6.0 GHz GaAs SPDT Switch,Skyworks,SKY13350-385LF +50,3,"U9, U12, U14",SKY13317,hackrf:SKY13317,,,20 MHz-6.0 GHz pHEMT GaAs SP3T Switch,Skyworks,SKY13317-373LF +51,2,"U13, U25",MGA-81563,hackrf:MGA-81563,,,"0.1-6 GHz 3 V, 14 dBm Amplifier",Avago,MGA-81563-TR1G +52,1,U15,LXES1TBCC2-004,hackrf:LXES1TBCC2-004,,,ESD Suppressors 0.55pF 6V 2ch,Murata,LXES1TBCC2-004 +53,1,U17,MAX2837,hackrf:MAX2837,,,IC TXRX 2.3GHZ-2.7GHZ 48TQFN,Maxim,MAX2837ETM+ +54,1,U18,MAX5864,hackrf:MAX5864,,,IC ANLG FRONT END 22MSPS 48-TQFN,Maxim,MAX5864ETM+ +55,1,U19,SI5351C,hackrf:SI5351C,,,IC CLK GENERATOR 160MHZ 20QFN,Silicon Laboratories Inc,SI5351C-B-GM +56,1,U20,W25Q80BV,hackrf:W25Q80BV,,,IC FLASH 8MBIT 8SOIC,Winbond,W25Q80BVSSIG +57,1,U21,TPS62410,hackrf:TPS62410,,,IC BUCK SYNC DUAL ADJ 0.8A 10SON,Texas Instruments,TPS62410DRCR +58,1,U23,LPC4320FBD144,hackrf:LPC43XXFBD144,,,IC MCU 32BIT 144LQFP,NXP,"LPC4320FBD144,551" +59,1,U24,GSG-XC2C64A-7VQG100C,hackrf:GSG-XC2C64A-7VQG100C,,,IC CR-II CPLD 64MCELL 100-VQFP,Xilinx,XC2C64A-7VQG100C +60,1,U3,RX_LOWPASS_FILTER,hackrf:FIL-LP0603,,,FILTER LOW PASS 1880MHZ 0603 SMD,AVX,LP0603A1880ANTR +61,1,U4,RFFC5072,hackrf:RFFC5072,,,WIDEBAND SYNTHESIZER/VCO WITH INTEGRATED 6GHz MIXER,RFMD,RFFC5072TR7 +62,1,U8,RX_HIGHPASS_FILTER,hackrf:FIL-DEA,,,FILTER HIGHPASS WLAN&BLUETOOTH,TDK,DEA162400HT-8004B1 +63,1,X1,GSG-XTAL4PIN,hackrf:GSG-XTAL4PIN,,,CRYSTAL 25.000MHZ 8PF SMD,AVX,CX3225GB25000D0HEQZ1 +64,1,X2,MCU_XTAL,hackrf:GSG-XTAL4PIN,,,CRYSTAL 12.000 MHZ 12PF SMD,TXC,7V-12.000MAAE-T +65,1,X3,RTC_XTAL,hackrf-one-cache:CRYSTAL,,,CRYSTAL 32.768KHZ 12.5PF SMD,Abracon,AB26TRQ-32.768KHZ-T From 23c44b1d6eaa6e2870b2727d3fda160857d2b1f3 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 13 Jul 2016 14:38:34 +0100 Subject: [PATCH 05/10] Remove unused USB configuration for CPLD update --- firmware/hackrf_usb/usb_descriptor.c | 97 ++-------------------------- firmware/hackrf_usb/usb_descriptor.h | 2 - firmware/hackrf_usb/usb_device.c | 13 ---- 3 files changed, 4 insertions(+), 108 deletions(-) diff --git a/firmware/hackrf_usb/usb_descriptor.c b/firmware/hackrf_usb/usb_descriptor.c index ff770b24..12d3fcab 100644 --- a/firmware/hackrf_usb/usb_descriptor.c +++ b/firmware/hackrf_usb/usb_descriptor.c @@ -58,7 +58,7 @@ uint8_t usb_descriptor_device[] = { USB_WORD(0x0100), // bcdDevice 0x01, // iManufacturer 0x02, // iProduct - 0x05, // iSerialNumber + 0x04, // iSerialNumber 0x02 // bNumConfigurations }; @@ -70,7 +70,7 @@ uint8_t usb_descriptor_device_qualifier[] = { 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol 64, // bMaxPacketSize0 - 0x02, // bNumOtherSpeedConfigurations + 0x01, // bNumOtherSpeedConfigurations 0x00 // bReserved }; @@ -148,79 +148,6 @@ uint8_t usb_descriptor_configuration_high_speed[] = { 0, // TERMINATOR }; -uint8_t usb_descriptor_configuration_cpld_update_full_speed[] = { - 9, // bLength - USB_DESCRIPTOR_TYPE_CONFIGURATION, // bDescriptorType - USB_WORD(32), // wTotalLength - 0x01, // bNumInterfaces - 0x02, // bConfigurationValue - 0x04, // iConfiguration - 0x80, // bmAttributes: USB-powered - 250, // bMaxPower: 500mA - - 9, // bLength - USB_DESCRIPTOR_TYPE_INTERFACE, // bDescriptorType - 0x00, // bInterfaceNumber - 0x00, // bAlternateSetting - 0x02, // bNumEndpoints - 0xFF, // bInterfaceClass: vendor-specific - 0xFF, // bInterfaceSubClass - 0xFF, // bInterfaceProtocol: vendor-specific - 0x00, // iInterface - - 7, // bLength - USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType - USB_BULK_IN_EP_ADDR, // bEndpointAddress - 0x02, // bmAttributes: BULK - USB_WORD(USB_MAX_PACKET_BULK_FS), // wMaxPacketSize - 0x00, // bInterval: no NAK - - 7, // bLength - USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType - USB_BULK_OUT_EP_ADDR, // bEndpointAddress - 0x02, // bmAttributes: BULK - USB_WORD(USB_MAX_PACKET_BULK_FS), // wMaxPacketSize - 0x00, // bInterval: no NAK - - 0, // TERMINATOR -}; - -uint8_t usb_descriptor_configuration_cpld_update_high_speed[] = { - 9, // bLength - USB_DESCRIPTOR_TYPE_CONFIGURATION, // bDescriptorType - USB_WORD(32), // wTotalLength - 0x01, // bNumInterfaces - 0x02, // bConfigurationValue - 0x04, // iConfiguration - 0x80, // bmAttributes: USB-powered - 250, // bMaxPower: 500mA - - 9, // bLength - USB_DESCRIPTOR_TYPE_INTERFACE, // bDescriptorType - 0x00, // bInterfaceNumber - 0x00, // bAlternateSetting - 0x02, // bNumEndpoints - 0xFF, // bInterfaceClass: vendor-specific - 0xFF, // bInterfaceSubClass - 0xFF, // bInterfaceProtocol: vendor-specific - 0x00, // iInterface - - 7, // bLength - USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType - USB_BULK_IN_EP_ADDR, // bEndpointAddress - 0x02, // bmAttributes: BULK - USB_WORD(USB_MAX_PACKET_BULK_HS), // wMaxPacketSize - 0x00, // bInterval: no NAK - - 7, // bLength - USB_DESCRIPTOR_TYPE_ENDPOINT, // bDescriptorType - USB_BULK_OUT_EP_ADDR, // bEndpointAddress - 0x02, // bmAttributes: BULK - USB_WORD(USB_MAX_PACKET_BULK_HS), // wMaxPacketSize - 0x00, // bInterval: no NAK - - 0, // TERMINATOR -}; uint8_t usb_descriptor_string_languages[] = { 0x04, // bLength @@ -298,7 +225,7 @@ uint8_t usb_descriptor_string_product[] = { #endif }; -uint8_t usb_descriptor_string_config1_description[] = { +uint8_t usb_descriptor_string_config_description[] = { 24, // bLength USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType 'T', 0x00, @@ -314,21 +241,6 @@ uint8_t usb_descriptor_string_config1_description[] = { 'r', 0x00, }; -uint8_t usb_descriptor_string_config2_description[] = { - 24, // bLength - USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType - 'C', 0x00, - 'P', 0x00, - 'L', 0x00, - 'D', 0x00, - ' ', 0x00, - 'u', 0x00, - 'p', 0x00, - 'd', 0x00, - 'a', 0x00, - 't', 0x00, - 'e', 0x00, -}; uint8_t usb_descriptor_string_serial_number[USB_DESCRIPTOR_STRING_SERIAL_BUF_LEN]; @@ -336,8 +248,7 @@ uint8_t* usb_descriptor_strings[] = { usb_descriptor_string_languages, usb_descriptor_string_manufacturer, usb_descriptor_string_product, - usb_descriptor_string_config1_description, - usb_descriptor_string_config2_description, + usb_descriptor_string_config_description, usb_descriptor_string_serial_number, 0, // TERMINATOR }; diff --git a/firmware/hackrf_usb/usb_descriptor.h b/firmware/hackrf_usb/usb_descriptor.h index bffa9bf7..3d496ee0 100644 --- a/firmware/hackrf_usb/usb_descriptor.h +++ b/firmware/hackrf_usb/usb_descriptor.h @@ -25,8 +25,6 @@ extern uint8_t usb_descriptor_device[]; extern uint8_t usb_descriptor_device_qualifier[]; extern uint8_t usb_descriptor_configuration_full_speed[]; extern uint8_t usb_descriptor_configuration_high_speed[]; -extern uint8_t usb_descriptor_configuration_cpld_update_full_speed[]; -extern uint8_t usb_descriptor_configuration_cpld_update_high_speed[]; extern uint8_t usb_descriptor_string_languages[]; extern uint8_t usb_descriptor_string_manufacturer[]; extern uint8_t usb_descriptor_string_product[]; diff --git a/firmware/hackrf_usb/usb_device.c b/firmware/hackrf_usb/usb_device.c index 6df358ed..e7204ad3 100644 --- a/firmware/hackrf_usb/usb_device.c +++ b/firmware/hackrf_usb/usb_device.c @@ -38,23 +38,10 @@ usb_configuration_t usb_configuration_full_speed = { .descriptor = usb_descriptor_configuration_full_speed, }; -usb_configuration_t usb_configuration_cpld_update_full_speed = { - .number = 2, - .speed = USB_SPEED_FULL, - .descriptor = usb_descriptor_configuration_cpld_update_full_speed, -}; - -usb_configuration_t usb_configuration_cpld_update_high_speed = { - .number = 2, - .speed = USB_SPEED_HIGH, - .descriptor = usb_descriptor_configuration_cpld_update_high_speed, -}; usb_configuration_t* usb_configurations[] = { &usb_configuration_high_speed, &usb_configuration_full_speed, - &usb_configuration_cpld_update_full_speed, - &usb_configuration_cpld_update_high_speed, 0, }; From 5138486b1b739ec8ca84c69387597c3417e02a80 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Sun, 17 Jul 2016 22:20:32 +0100 Subject: [PATCH 06/10] Add Windows Compatible ID descriptors --- firmware/common/usb_standard_request.c | 34 ++++++++++++++++++++++---- firmware/common/usb_standard_request.h | 5 ++++ firmware/common/usb_type.h | 3 +++ firmware/hackrf_usb/hackrf_usb.c | 1 + firmware/hackrf_usb/usb_descriptor.c | 29 +++++++++++++++++++++- firmware/hackrf_usb/usb_descriptor.h | 4 +++ firmware/hackrf_usb/usb_device.c | 2 ++ 7 files changed, 72 insertions(+), 6 deletions(-) diff --git a/firmware/common/usb_standard_request.c b/firmware/common/usb_standard_request.c index 43b11151..bf82ab4a 100644 --- a/firmware/common/usb_standard_request.c +++ b/firmware/common/usb_standard_request.c @@ -130,13 +130,17 @@ static usb_request_status_t usb_send_descriptor( static usb_request_status_t usb_send_descriptor_string( usb_endpoint_t* const endpoint ) { - uint_fast8_t index = endpoint->setup.value_l; - for( uint_fast8_t i=0; endpoint->device->descriptor_strings[i] != 0; i++ ) { - if( i == index ) { - return usb_send_descriptor(endpoint, endpoint->device->descriptor_strings[i]); + if ((endpoint->setup.value_l == 0xee) && + (endpoint->device->wcid_string_descriptor != NULL)) { /* MS WCID string */ + return usb_send_descriptor(endpoint, endpoint->device->wcid_string_descriptor); + } else { + uint_fast8_t index = endpoint->setup.value_l; + for( uint_fast8_t i=0; endpoint->device->descriptor_strings[i] != 0; i++ ) { + if( i == index ) { + return usb_send_descriptor(endpoint, endpoint->device->descriptor_strings[i]); + } } } - return USB_REQUEST_STATUS_STALL; } @@ -212,6 +216,26 @@ static usb_request_status_t usb_standard_request_get_descriptor( } } +usb_request_status_t usb_vendor_request_read_wcid( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + if ((endpoint->setup.index == 0x04) && + (endpoint->device->wcid_feature_descriptor != NULL)) { + usb_send_descriptor(endpoint, endpoint->device->wcid_feature_descriptor); + return USB_REQUEST_STATUS_OK; + } + if ((endpoint->setup.index == 0x05) && + (endpoint->device->wcid_extended_properties_descriptor != NULL)) { + usb_send_descriptor(endpoint, endpoint->device->wcid_extended_properties_descriptor); + return USB_REQUEST_STATUS_OK; + } + return USB_REQUEST_STATUS_STALL; + } + return USB_REQUEST_STATUS_OK; +} + /*********************************************************************/ static usb_request_status_t usb_standard_request_set_address_setup( diff --git a/firmware/common/usb_standard_request.h b/firmware/common/usb_standard_request.h index 77fd1b10..50b92c0d 100644 --- a/firmware/common/usb_standard_request.h +++ b/firmware/common/usb_standard_request.h @@ -29,6 +29,11 @@ void usb_set_configuration_changed_cb( void (*callback)(usb_device_t* const) ); +usb_request_status_t usb_vendor_request_read_wcid( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); + usb_request_status_t usb_standard_request( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage diff --git a/firmware/common/usb_type.h b/firmware/common/usb_type.h index 8f683fc6..2a1b7cd1 100644 --- a/firmware/common/usb_type.h +++ b/firmware/common/usb_type.h @@ -127,6 +127,9 @@ typedef struct { const uint8_t* const qualifier_descriptor; usb_configuration_t* (*configurations)[]; const usb_configuration_t* configuration; + uint8_t* wcid_string_descriptor; + uint8_t* wcid_feature_descriptor; + uint8_t* wcid_extended_properties_descriptor; } usb_device_t; typedef struct usb_endpoint_t usb_endpoint_t; diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index eb424be3..8a4357a5 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -139,6 +139,7 @@ static const usb_request_handler_fn vendor_request_handler[] = { NULL, #endif usb_vendor_request_set_freq_explicit, + usb_vendor_request_read_wcid, // USB_WCID_VENDOR_REQ }; static const uint32_t vendor_request_handler_count = diff --git a/firmware/hackrf_usb/usb_descriptor.c b/firmware/hackrf_usb/usb_descriptor.c index 12d3fcab..bacf7dd7 100644 --- a/firmware/hackrf_usb/usb_descriptor.c +++ b/firmware/hackrf_usb/usb_descriptor.c @@ -55,7 +55,7 @@ uint8_t usb_descriptor_device[] = { USB_MAX_PACKET0, // bMaxPacketSize0 USB_WORD(USB_VENDOR_ID), // idVendor USB_WORD(USB_PRODUCT_ID), // idProduct - USB_WORD(0x0100), // bcdDevice + USB_WORD(0x0101), // bcdDevice 0x01, // iManufacturer 0x02, // iProduct 0x04, // iSerialNumber @@ -252,3 +252,30 @@ uint8_t* usb_descriptor_strings[] = { usb_descriptor_string_serial_number, 0, // TERMINATOR }; + +uint8_t wcid_string_descriptor[] = { + 18, // bLength + USB_DESCRIPTOR_TYPE_STRING, // bDescriptorType + 'M', 0x00, + 'S', 0x00, + 'F', 0x00, + 'T', 0x00, + '1', 0x00, + '0', 0x00, + '0', 0x00, + USB_WCID_VENDOR_REQ, // vendor request code for further descriptor + 0x00 +}; + +uint8_t wcid_feature_descriptor[] = { + 0x28, 0x00, 0x00, 0x00, // bLength + USB_WORD(0x0100), // WCID version + USB_WORD(0x0004), // WICD descriptor index + 0x01, //bNumSections + 0x00,0x00,0x00,0x00,0x00,0x00,0x00, //Reserved + 0x00, //bInterfaceNumber + 0x01, //Reserved + 'W', 'I', 'N', 'U', 'S', 'B', 0x00,0x00, //Compatible ID, padded with zeros + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //Sub-compatible ID + 0x00,0x00,0x00,0x00,0x00,0x00 //Reserved +}; diff --git a/firmware/hackrf_usb/usb_descriptor.h b/firmware/hackrf_usb/usb_descriptor.h index 3d496ee0..e8c9d507 100644 --- a/firmware/hackrf_usb/usb_descriptor.h +++ b/firmware/hackrf_usb/usb_descriptor.h @@ -34,3 +34,7 @@ extern uint8_t usb_descriptor_string_product[]; extern uint8_t usb_descriptor_string_serial_number[]; extern uint8_t* usb_descriptor_strings[]; + +#define USB_WCID_VENDOR_REQ 0x19 +extern uint8_t wcid_string_descriptor[]; +extern uint8_t wcid_feature_descriptor[]; diff --git a/firmware/hackrf_usb/usb_device.c b/firmware/hackrf_usb/usb_device.c index e7204ad3..4803e024 100644 --- a/firmware/hackrf_usb/usb_device.c +++ b/firmware/hackrf_usb/usb_device.c @@ -51,4 +51,6 @@ usb_device_t usb_device = { .qualifier_descriptor = usb_descriptor_device_qualifier, .configurations = &usb_configurations, .configuration = 0, + .wcid_string_descriptor = wcid_string_descriptor, + .wcid_feature_descriptor = wcid_feature_descriptor, }; From cccde1b43102b0e24cf97be2c09185e5c482c2ad Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 20 Jul 2016 17:37:35 -0700 Subject: [PATCH 07/10] hackrf_transfer - cast with uint32_t The compiler (MSVC 2013) didnt have the uint typedef, switched to using uint32_t which is the type of sample_rate_hz. --- host/hackrf-tools/src/hackrf_transfer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/hackrf-tools/src/hackrf_transfer.c b/host/hackrf-tools/src/hackrf_transfer.c index a2e0b8c6..8c1b418c 100644 --- a/host/hackrf-tools/src/hackrf_transfer.c +++ b/host/hackrf-tools/src/hackrf_transfer.c @@ -829,7 +829,7 @@ int main(int argc, char** argv) { // Change the freq and sample rate to correct the crystal clock error. if( crystal_correct ) { - sample_rate_hz = (uint)((double)sample_rate_hz * (1000000 - crystal_correct_ppm)/1000000+0.5); + sample_rate_hz = (uint32_t)((double)sample_rate_hz * (1000000 - crystal_correct_ppm)/1000000+0.5); freq_hz = freq_hz * (1000000 - crystal_correct_ppm)/1000000; } From ea2f1a892109eaf38feafb61cabc1ff6ee389020 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Thu, 21 Jul 2016 13:47:45 +0100 Subject: [PATCH 08/10] Reduce configuration count to 1 --- firmware/hackrf_usb/usb_descriptor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/hackrf_usb/usb_descriptor.c b/firmware/hackrf_usb/usb_descriptor.c index bacf7dd7..5a9eeb45 100644 --- a/firmware/hackrf_usb/usb_descriptor.c +++ b/firmware/hackrf_usb/usb_descriptor.c @@ -59,7 +59,7 @@ uint8_t usb_descriptor_device[] = { 0x01, // iManufacturer 0x02, // iProduct 0x04, // iSerialNumber - 0x02 // bNumConfigurations + 0x01 // bNumConfigurations }; uint8_t usb_descriptor_device_qualifier[] = { From 2dffba9c479c2c5afe795ad30428f3cb8f9b16a4 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Thu, 21 Jul 2016 13:50:14 +0100 Subject: [PATCH 09/10] Remove unude set_configuration() code for CPLD updates - now handled under the default configuration --- firmware/hackrf_usb/hackrf_usb.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 8a4357a5..2c5ec3d0 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -177,11 +177,6 @@ void usb_configuration_changed( // transceiver configuration cpu_clock_pll1_max_speed(); led_on(LED1); - } else if( device->configuration->number == 2 ) { - // CPLD update configuration - cpu_clock_pll1_max_speed(); - usb_endpoint_init(&usb_endpoint_bulk_out); - start_cpld_update = true; } else { /* Configuration number equal 0 means usb bus reset. */ cpu_clock_pll1_low_speed(); From 8ba15ad0b1a132a8126a4e094af244aa14cf5d60 Mon Sep 17 00:00:00 2001 From: Radoslav Gerganov Date: Fri, 5 Aug 2016 16:53:36 +0300 Subject: [PATCH 10/10] Make the 'do_exit' flag static Both libhackrf and hackrf_transfer are using boolean flag named "do_exit" which is not static. This is problematic because the flag is used for different things. This patch fixes the problem by making the flag static in both places. --- host/hackrf-tools/src/hackrf_transfer.c | 2 +- host/libhackrf/src/hackrf.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_transfer.c b/host/hackrf-tools/src/hackrf_transfer.c index 8c1b418c..a0c5d637 100644 --- a/host/hackrf-tools/src/hackrf_transfer.c +++ b/host/hackrf-tools/src/hackrf_transfer.c @@ -288,7 +288,7 @@ char* u64toa(uint64_t val, t_u64toa* str) return res; } -volatile bool do_exit = false; +static volatile bool do_exit = false; FILE* fd = NULL; volatile uint32_t byte_count = 0; diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index 2f309c38..57e0b405 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -117,7 +117,7 @@ static const max2837_ft_t max2837_ft[] = { { 0 } }; -volatile bool do_exit = false; +static volatile bool do_exit = false; static const uint16_t hackrf_usb_vid = 0x1d50; static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b;