Skip to content

Instantly share code, notes, and snippets.

@adamgreig
Created August 30, 2013 22:37
Show Gist options
  • Save adamgreig/6394968 to your computer and use it in GitHub Desktop.
Save adamgreig/6394968 to your computer and use it in GitHub Desktop.
BladeRF testing
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <unistd.h>
#include <math.h>
#include "libbladeRF.h"
int main(int argc, char* argv[]) {
struct bladerf *dev;
int status;
printf("Connecting to device... ");
fflush(stdout);
status = bladerf_open(&dev, NULL);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
printf("Enabling TX... ");
fflush(stdout);
status = bladerf_enable_module(dev, BLADERF_MODULE_TX, true);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
unsigned int freq = 434650000;
printf("Tuning to %uHz... ", freq);
fflush(stdout);
status = bladerf_set_frequency(dev, BLADERF_MODULE_TX, freq);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
status = bladerf_get_frequency(dev, BLADERF_MODULE_TX, &freq);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("Tuned to %u\n", freq);
unsigned int sr = 400000;
printf("Setting sampling rate to %9usps... ", sr);
fflush(stdout);
unsigned int actual_sr;
status = bladerf_set_sample_rate(dev, BLADERF_MODULE_TX, sr, &actual_sr);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
printf("Actual sampling rate: %9usps\n", actual_sr);
unsigned int bw = 150000;
unsigned int actual_bw;
printf("Setting bandwidth to %9uHz... ", bw);
fflush(stdout);
status = bladerf_set_bandwidth(dev, BLADERF_MODULE_TX, bw, &actual_bw);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
printf("Actual bandwidth: %9uHz\n", actual_bw);
printf("Setting post-LPF gain to 0dB... ");
fflush(stdout);
status = bladerf_set_txvga1(dev, 0);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
printf("Setting PA gain to 0dB... ");
fflush(stdout);
status = bladerf_set_txvga2(dev, 0);
if(status) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
printf("OK\n");
printf("All set up. Generating signals... ");
fflush(stdout);
int samples_per_tx = 262144;
samples_per_tx = 32768;
int seconds_to_tx = 3;
int n_tx = ((seconds_to_tx * actual_sr) / samples_per_tx) + 1;
int nsamples = n_tx * samples_per_tx;
printf("%i transmissions, %i samples... ", n_tx, nsamples);
int16_t samples[2 * nsamples];
int n;
double t;
for(n=0; n<(2 * nsamples); n += 2) {
t = ((double)(n / 2)) / ((double)actual_sr);
if((n/2) % (samples_per_tx * 2) < samples_per_tx) {
samples[n ] = 0x0fff & (int16_t)(2048.0 * cos(2.0 * M_PI * 1300.0 * t));
samples[n+1] = 0x0fff & (int16_t)(2048.0 * sin(2.0 * M_PI * 1300.0 * t));
} else {
samples[n ] = 0x0fff & (int16_t)(2048.0 * cos(2.0 * M_PI * 700.0 * t));
samples[n+1] = 0x0fff & (int16_t)(2048.0 * sin(2.0 * M_PI * 700.0 * t));
}
}
printf("OK\n");
printf("Transmitting... ");
fflush(stdout);
int i;
for(i=0; i<n_tx; i++) {
printf("tx %i... ", i);
fflush(stdout);
int16_t* start_sample = &samples[i * samples_per_tx];
status = bladerf_tx(dev, BLADERF_FORMAT_SC16_Q12, start_sample, samples_per_tx, NULL);
if(status < 0) {
printf("failed: %s\n", bladerf_strerror(status));
bladerf_close(dev);
return 1;
}
}
printf("OK\n");
printf("Closing down... ");
bladerf_close(dev);
printf("OK\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment