int bladerf_set_frequency(struct bladerf *dev, bladerf_module module, unsigned int frequency) { int status; bladerf_xb attached; status = bladerf_expansion_get_attached(dev, &attached); if (status) return status; if (attached == BLADERF_XB_200) { if (frequency < BLADERF_FREQUENCY_MIN) { status = bladerf_xb200_set_path(dev, module, BLADERF_XB200_MIX); if (status) return status; frequency = 1248000000 - frequency; } else { status = bladerf_xb200_set_path(dev, module, BLADERF_XB200_BYPASS); if (status) return status; } } status = lms_set_frequency(dev, module, frequency); if (status != 0) { return status; } else { return bladerf_select_band(dev, module, frequency); } }
static int get_xb_lut(struct cli_state *state, const struct xb_gpio_lut **lut, size_t *len) { bladerf_xb xb_type; int status; status = bladerf_expansion_get_attached(state->dev, &xb_type); if (status < 0) { return status; } switch (xb_type) { case BLADERF_XB_100: *lut = xb100_pins; *len = ARRAY_SIZE(xb100_pins); break; case BLADERF_XB_200: *lut = xb200_pins; *len = ARRAY_SIZE(xb200_pins); break; default: *lut = xb_pins; *len = ARRAY_SIZE(xb_pins); } return 0; }
int main(int argc, char *argv[]) { int status; struct app_params p; size_t i; struct bladerf *dev = NULL; bladerf_xb expected, attached; struct stats *stats = NULL; bool pass = true; status = get_params(argc, argv, &p); if (status != 0) { if (status == 1) { status = 0; } goto out; } for (i = 0; i < ARRAY_SIZE(tests); i++) { if (p.test_name == NULL || !strcasecmp(p.test_name, tests[i]->name)) { break; } } if (i >= ARRAY_SIZE(tests)) { fprintf(stderr, "Invalid test: %s\n", p.test_name); status = -1; goto out; } stats = calloc(ARRAY_SIZE(tests), sizeof(stats[0])); if (stats == NULL) { perror("calloc"); status = -1; goto out; } status = bladerf_open(&dev, p.device_str); if (status != 0) { fprintf(stderr, "Failed to open device: %s\n", bladerf_strerror(status)); goto out; } if (p.use_xb200) { expected = BLADERF_XB_200; status = bladerf_expansion_attach(dev, BLADERF_XB_200); if (status != 0) { fprintf(stderr, "Failed to attach XB-200: %s\n", bladerf_strerror(status)); goto out; } } else { expected = BLADERF_XB_NONE; } status = bladerf_expansion_get_attached(dev, &attached); if (status != 0) { fprintf(stderr, "Failed to query attached expansion board: %s\n", bladerf_strerror(status)); goto out; } if (expected != attached) { fprintf(stderr, "Unexpected expansion board readback: %d\n", attached); status = -1; goto out; } for (i = 0; i < ARRAY_SIZE(tests); i++) { if (p.test_name == NULL || !strcasecmp(p.test_name, tests[i]->name)) { p.randval_state = p.randval_seed; stats[i].ran = true; stats[i].failures = tests[i]->fn(dev, &p, false); } } puts("\nFailure counts"); puts("--------------------------------------------"); for (i = 0; i < ARRAY_SIZE(tests); i++) { if (stats[i].ran) { printf("%16s %u\n", tests[i]->name, stats[i].failures); } if (stats[i].failures != 0) { pass = false; } } puts(""); status = pass ? 0 : -1; out: if (dev) { bladerf_close(dev); } free(p.device_str); free(p.test_name); free(stats); return status; }