libbladeRF  2.1.0-0.2018.10~rc1-2
Nuand bladeRF library
libbladeRF.h
Go to the documentation of this file.
1 
22 #ifndef LIBBLADERF_H_
23 #define LIBBLADERF_H_
24 
25 #include <stdint.h>
26 #include <stdlib.h>
27 
53 #define LIBBLADERF_API_VERSION (0x02010000)
54 
55 #ifdef __cplusplus
56 extern "C" {
57 #else
58 
66 #include <stdbool.h>
67 #endif
68 
69 // clang-format off
70 #if defined _WIN32 || defined __CYGWIN__
71 # include <windows.h>
72 # define CALL_CONV __cdecl
73 # ifdef __GNUC__
74 # define API_EXPORT __attribute__ ((dllexport))
75 # else
76 # define API_EXPORT __declspec(dllexport)
77 # endif
78 #elif defined _DOXYGEN_ONLY_ || defined MATLAB_LINUX_THUNK_BUILD_
79 
81 # define API_EXPORT
82 
84 # define CALL_CONV
85 #else
86 # define API_EXPORT __attribute__ ((visibility ("default")))
87 # define CALL_CONV
88 #endif
89 // clang-format on
90 
106 struct bladerf;
107 
111 typedef enum {
119 
121 #define BLADERF_DESCRIPTION_LENGTH 33
122 
124 #define BLADERF_SERIAL_LENGTH 33
125 
133  uint8_t usb_bus;
134  uint8_t usb_addr;
135  unsigned int instance;
140 };
141 
200 int CALL_CONV bladerf_open(struct bladerf **device,
201  const char *device_identifier);
202 
214 void CALL_CONV bladerf_close(struct bladerf *device);
215 
238 int CALL_CONV bladerf_open_with_devinfo(struct bladerf **device,
239  struct bladerf_devinfo *devinfo);
240 
251 
259 
270 
282 int CALL_CONV bladerf_get_devinfo(struct bladerf *dev,
283  struct bladerf_devinfo *info);
284 
298 int CALL_CONV bladerf_get_devinfo_from_str(const char *devstr,
299  struct bladerf_devinfo *info);
300 
310  const struct bladerf_devinfo *b);
311 
323 bool CALL_CONV bladerf_devstr_matches(const char *dev_str,
324  struct bladerf_devinfo *info);
325 
335 
350 void CALL_CONV bladerf_set_usb_reset_on_open(bool enabled);
351 
369  int64_t min;
370  int64_t max;
371  int64_t step;
372  float scale;
373 };
374 
380 };
381 
386  uint16_t major;
387  uint16_t minor;
388  uint16_t patch;
389  const char *describe;
394 };
395 
399 typedef enum {
406 
411 typedef enum {
412  BLADERF_DEVICE_SPEED_UNKNOWN,
413  BLADERF_DEVICE_SPEED_HIGH,
414  BLADERF_DEVICE_SPEED_SUPER
416 
423 typedef enum {
428 
444 int CALL_CONV bladerf_get_serial(struct bladerf *dev, char *serial);
445 
469 int CALL_CONV bladerf_get_serial_struct(struct bladerf *dev,
470  struct bladerf_serial *serial);
471 
482 int CALL_CONV bladerf_get_fpga_size(struct bladerf *dev,
483  bladerf_fpga_size *size);
484 
499 int CALL_CONV bladerf_get_flash_size(struct bladerf *dev,
500  uint32_t *size,
501  bool *is_guess);
502 
513 int CALL_CONV bladerf_fw_version(struct bladerf *dev,
514  struct bladerf_version *version);
515 
525 int CALL_CONV bladerf_is_fpga_configured(struct bladerf *dev);
526 
536 int CALL_CONV bladerf_fpga_version(struct bladerf *dev,
537  struct bladerf_version *version);
538 
554 int CALL_CONV bladerf_get_fpga_source(struct bladerf *dev,
555  bladerf_fpga_source *source);
556 
565 bladerf_dev_speed CALL_CONV bladerf_device_speed(struct bladerf *dev);
566 
576 const char *CALL_CONV bladerf_get_board_name(struct bladerf *dev);
577 
611 typedef int bladerf_channel;
612 
626 #define BLADERF_CHANNEL_RX(ch) (bladerf_channel)(((ch) << 1) | 0x0)
627 
641 #define BLADERF_CHANNEL_TX(ch) (bladerf_channel)(((ch) << 1) | 0x1)
642 
646 #define BLADERF_CHANNEL_INVALID (bladerf_channel)(-1)
647 
649 #define BLADERF_DIRECTION_MASK (0x1)
650 
653 /* Backwards compatible mapping to `bladerf_module`. */
654 typedef bladerf_channel bladerf_module;
655 #define BLADERF_MODULE_INVALID BLADERF_CHANNEL_INVALID
656 #define BLADERF_MODULE_RX BLADERF_CHANNEL_RX(0)
657 #define BLADERF_MODULE_TX BLADERF_CHANNEL_TX(0)
658 
663 #define BLADERF_CHANNEL_IS_TX(ch) (ch & BLADERF_TX)
664 
668 typedef enum {
672 
676 typedef enum {
682 
692 size_t CALL_CONV bladerf_get_channel_count(struct bladerf *dev,
693  bladerf_direction dir);
694 
710 typedef int bladerf_gain;
711 
722 typedef enum {
732 
738 
745 
752 
760 
762 #define BLADERF_GAIN_AUTOMATIC BLADERF_GAIN_DEFAULT
763 
764 #define BLADERF_GAIN_MANUAL BLADERF_GAIN_MGC
765 
770  const char *name;
771  bladerf_gain_mode mode;
772 };
773 
800 int CALL_CONV bladerf_set_gain(struct bladerf *dev,
801  bladerf_channel ch,
802  bladerf_gain gain);
803 
814 int CALL_CONV bladerf_get_gain(struct bladerf *dev,
815  bladerf_channel ch,
816  bladerf_gain *gain);
817 
837 int CALL_CONV bladerf_set_gain_mode(struct bladerf *dev,
838  bladerf_channel ch,
839  bladerf_gain_mode mode);
840 
855 int CALL_CONV bladerf_get_gain_mode(struct bladerf *dev,
856  bladerf_channel ch,
857  bladerf_gain_mode *mode);
858 
878 int CALL_CONV bladerf_get_gain_modes(struct bladerf *dev,
879  bladerf_channel ch,
880  const struct bladerf_gain_modes **modes);
881 
895 int CALL_CONV bladerf_get_gain_range(struct bladerf *dev,
896  bladerf_channel ch,
897  const struct bladerf_range **range);
898 
912 int CALL_CONV bladerf_set_gain_stage(struct bladerf *dev,
913  bladerf_channel ch,
914  const char *stage,
915  bladerf_gain gain);
916 
930 int CALL_CONV bladerf_get_gain_stage(struct bladerf *dev,
931  bladerf_channel ch,
932  const char *stage,
933  bladerf_gain *gain);
934 
952 int CALL_CONV bladerf_get_gain_stage_range(struct bladerf *dev,
953  bladerf_channel ch,
954  const char *stage,
955  const struct bladerf_range **range);
956 
972 int CALL_CONV bladerf_get_gain_stages(struct bladerf *dev,
973  bladerf_channel ch,
974  const char **stages,
975  size_t count);
976 
993 typedef unsigned int bladerf_sample_rate;
994 
1004  uint64_t integer;
1005  uint64_t num;
1006  uint64_t den;
1008 };
1009 
1027 API_EXPORT
1028 int CALL_CONV bladerf_set_sample_rate(struct bladerf *dev,
1029  bladerf_channel ch,
1030  bladerf_sample_rate rate,
1031  bladerf_sample_rate *actual);
1032 
1047 API_EXPORT
1048 int CALL_CONV
1049  bladerf_set_rational_sample_rate(struct bladerf *dev,
1050  bladerf_channel ch,
1051  struct bladerf_rational_rate *rate,
1052  struct bladerf_rational_rate *actual);
1062 API_EXPORT
1063 int CALL_CONV bladerf_get_sample_rate(struct bladerf *dev,
1064  bladerf_channel ch,
1065  bladerf_sample_rate *rate);
1066 
1076 API_EXPORT
1077 int CALL_CONV bladerf_get_sample_rate_range(struct bladerf *dev,
1078  bladerf_channel ch,
1079  const struct bladerf_range **range);
1080 
1090 API_EXPORT
1091 int CALL_CONV
1092  bladerf_get_rational_sample_rate(struct bladerf *dev,
1093  bladerf_channel ch,
1094  struct bladerf_rational_rate *rate);
1095 
1113 typedef unsigned int bladerf_bandwidth;
1114 
1133 API_EXPORT
1134 int CALL_CONV bladerf_set_bandwidth(struct bladerf *dev,
1135  bladerf_channel ch,
1136  bladerf_bandwidth bandwidth,
1137  bladerf_bandwidth *actual);
1138 
1148 API_EXPORT
1149 int CALL_CONV bladerf_get_bandwidth(struct bladerf *dev,
1150  bladerf_channel ch,
1151  bladerf_bandwidth *bandwidth);
1152 
1162 API_EXPORT
1163 int CALL_CONV bladerf_get_bandwidth_range(struct bladerf *dev,
1164  bladerf_channel ch,
1165  const struct bladerf_range **range);
1166 
1191 typedef uint64_t bladerf_frequency;
1192 
1194 #define BLADERF_PRIuFREQ PRIu64
1195 
1196 #define BLADERF_PRIxFREQ PRIx64
1197 
1198 #define BLADERF_SCNuFREQ SCNu64
1199 
1200 #define BLADERF_SCNxFREQ SCNx64
1201 
1220 API_EXPORT
1221 int CALL_CONV bladerf_select_band(struct bladerf *dev,
1222  bladerf_channel ch,
1223  bladerf_frequency frequency);
1224 
1248 API_EXPORT
1249 int CALL_CONV bladerf_set_frequency(struct bladerf *dev,
1250  bladerf_channel ch,
1251  bladerf_frequency frequency);
1261 API_EXPORT
1262 int CALL_CONV bladerf_get_frequency(struct bladerf *dev,
1263  bladerf_channel ch,
1264  bladerf_frequency *frequency);
1265 
1275 API_EXPORT
1276 int CALL_CONV bladerf_get_frequency_range(struct bladerf *dev,
1277  bladerf_channel ch,
1278  const struct bladerf_range **range);
1279 
1300 typedef enum {
1303 
1306 
1309 
1312 
1315 
1318 
1324 
1330 
1336 
1340 
1345  const char *name;
1346  bladerf_loopback mode;
1347 };
1348 
1364 API_EXPORT
1366  struct bladerf *dev, const struct bladerf_loopback_modes **modes);
1367 
1377  struct bladerf *dev, bladerf_loopback mode);
1378 
1392 API_EXPORT
1393 int CALL_CONV bladerf_set_loopback(struct bladerf *dev, bladerf_loopback lb);
1394 
1403 API_EXPORT
1404 int CALL_CONV bladerf_get_loopback(struct bladerf *dev, bladerf_loopback *lb);
1405 
1529 typedef enum {
1532 
1538 
1544 
1552 
1568 typedef enum {
1583 
1592  bladerf_channel channel;
1593  bladerf_trigger_role role;
1594  bladerf_trigger_signal signal;
1595  uint64_t options;
1597 };
1598 
1614 API_EXPORT
1615 int CALL_CONV bladerf_trigger_init(struct bladerf *dev,
1616  bladerf_channel ch,
1617  bladerf_trigger_signal signal,
1618  struct bladerf_trigger *trigger);
1619 
1640 API_EXPORT
1641 int CALL_CONV bladerf_trigger_arm(struct bladerf *dev,
1642  const struct bladerf_trigger *trigger,
1643  bool arm,
1644  uint64_t resv1,
1645  uint64_t resv2);
1646 
1658 API_EXPORT
1659 int CALL_CONV bladerf_trigger_fire(struct bladerf *dev,
1660  const struct bladerf_trigger *trigger);
1661 
1681 API_EXPORT
1682 int CALL_CONV bladerf_trigger_state(struct bladerf *dev,
1683  const struct bladerf_trigger *trigger,
1684  bool *is_armed,
1685  bool *has_fired,
1686  bool *fire_requested,
1687  uint64_t *resv1,
1688  uint64_t *resv2);
1689 
1706 typedef enum {
1709 
1712 
1719 
1726 
1727  /* RX_MUX setting 0x3 is reserved for future use */
1728 
1731 } bladerf_rx_mux;
1732 
1734 /* Backwards compatible mapping for `bladerf_rx_mux`. */
1735 #define BLADERF_RX_MUX_BASEBAND_LMS BLADERF_RX_MUX_BASEBAND
1736 
1746 API_EXPORT
1747 int CALL_CONV bladerf_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mux);
1748 
1757 API_EXPORT
1758 int CALL_CONV bladerf_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode);
1759 
1780 typedef uint64_t bladerf_timestamp;
1781 
1786 #define BLADERF_RETUNE_NOW (bladerf_timestamp)0
1787 
1798  union {
1799  /* bladeRF1 quick tune parameters */
1800  struct {
1801  uint8_t freqsel;
1802  uint8_t vcocap;
1803  uint16_t nint;
1804  uint32_t nfrac;
1805  uint8_t flags;
1806  };
1807  /* bladeRF2 quick tune parameters */
1808  struct {
1809  /* TODO: Define these */
1810  void *tbd;
1811  };
1812  };
1813 };
1814 
1844 API_EXPORT
1845 int CALL_CONV bladerf_schedule_retune(struct bladerf *dev,
1846  bladerf_channel ch,
1847  bladerf_timestamp timestamp,
1848  bladerf_frequency frequency,
1849  struct bladerf_quick_tune *quick_tune);
1850 
1863 API_EXPORT
1864 int CALL_CONV bladerf_cancel_scheduled_retunes(struct bladerf *dev,
1865  bladerf_channel ch);
1866 
1887 API_EXPORT
1888 int CALL_CONV bladerf_get_quick_tune(struct bladerf *dev,
1889  bladerf_channel ch,
1890  struct bladerf_quick_tune *quick_tune);
1891 
1913 
1923 typedef enum {
1929 
1935 
1941 
1948 
1950 /* Backwards compatible mapping to `bladerf_correction`. */
1951 #define BLADERF_CORR_LMS_DCOFF_I BLADERF_CORR_DCOFF_I
1952 #define BLADERF_CORR_LMS_DCOFF_Q BLADERF_CORR_DCOFF_Q
1953 #define BLADERF_CORR_FPGA_PHASE BLADERF_CORR_PHASE
1954 #define BLADERF_CORR_FPGA_GAIN BLADERF_CORR_GAIN
1955 
1970 API_EXPORT
1971 int CALL_CONV bladerf_set_correction(struct bladerf *dev,
1972  bladerf_channel ch,
1973  bladerf_correction corr,
1974  bladerf_correction_value value);
1975 
1986 API_EXPORT
1987 int CALL_CONV bladerf_get_correction(struct bladerf *dev,
1988  bladerf_channel ch,
1989  bladerf_correction corr,
1990  bladerf_correction_value *value);
1991 
2005 #define BLADERF_PRIuTS PRIu64
2006 
2007 #define BLADERF_PRIxTS PRIx64
2008 
2009 #define BLADERF_SCNuTS SCNu64
2010 
2011 #define BLADERF_SCNxTS SCNx64
2012 
2024 typedef enum {
2081 
2117 } bladerf_format;
2118 
2125 /*
2126  * Metadata status bits
2127  *
2128  * These are used in conjunction with the bladerf_metadata structure's `status`
2129  * field.
2130  */
2131 
2138 #define BLADERF_META_STATUS_OVERRUN (1 << 0)
2139 
2148 #define BLADERF_META_STATUS_UNDERRUN (1 << 1)
2149 
2150 /*
2151  * Metadata flags
2152  *
2153  * These are used in conjunction with the bladerf_metadata structure's `flags`
2154  * field.
2155  */
2156 
2171 #define BLADERF_META_FLAG_TX_BURST_START (1 << 0)
2172 
2199 #define BLADERF_META_FLAG_TX_BURST_END (1 << 1)
2200 
2209 #define BLADERF_META_FLAG_TX_NOW (1 << 2)
2210 
2229 #define BLADERF_META_FLAG_TX_UPDATE_TIMESTAMP (1 << 3)
2230 
2236 #define BLADERF_META_FLAG_RX_NOW (1 << 31)
2237 
2242 #define BLADERF_META_FLAG_RX_HW_UNDERFLOW (1 << 0)
2243 
2248 #define BLADERF_META_FLAG_RX_HW_MINIEXP1 (1 << 16)
2249 
2254 #define BLADERF_META_FLAG_RX_HW_MINIEXP2 (1 << 17)
2255 
2268  bladerf_timestamp timestamp;
2269 
2282  uint32_t flags;
2283 
2291  uint32_t status;
2292 
2306  unsigned int actual_count;
2307 
2312  uint8_t reserved[32];
2313 };
2314 
2361 API_EXPORT
2363  bladerf_format format,
2364  unsigned int buffer_size,
2365  void *samples);
2366 
2389 API_EXPORT
2391  bladerf_format format,
2392  unsigned int buffer_size,
2393  void *samples);
2394 
2417 API_EXPORT
2418 int CALL_CONV bladerf_enable_module(struct bladerf *dev,
2419  bladerf_channel ch,
2420  bool enable);
2421 
2463 API_EXPORT
2464 int CALL_CONV bladerf_get_timestamp(struct bladerf *dev,
2465  bladerf_direction dir,
2466  bladerf_timestamp *timestamp);
2467 
2537 API_EXPORT
2538 int CALL_CONV bladerf_sync_config(struct bladerf *dev,
2539  bladerf_channel_layout layout,
2540  bladerf_format format,
2541  unsigned int num_buffers,
2542  unsigned int buffer_size,
2543  unsigned int num_transfers,
2544  unsigned int stream_timeout);
2545 
2579 API_EXPORT
2580 int CALL_CONV bladerf_sync_tx(struct bladerf *dev,
2581  const void *samples,
2582  unsigned int num_samples,
2583  struct bladerf_metadata *metadata,
2584  unsigned int timeout_ms);
2585 
2619 API_EXPORT
2620 int CALL_CONV bladerf_sync_rx(struct bladerf *dev,
2621  void *samples,
2622  unsigned int num_samples,
2623  struct bladerf_metadata *metadata,
2624  unsigned int timeout_ms);
2625 
2626 
2649 #define BLADERF_STREAM_SHUTDOWN (NULL)
2650 
2656 #define BLADERF_STREAM_NO_DATA ((void *)(-1))
2657 
2659 struct bladerf_stream;
2660 
2708 typedef void *(*bladerf_stream_cb)(struct bladerf *dev,
2709  struct bladerf_stream *stream,
2710  struct bladerf_metadata *meta,
2711  void *samples,
2712  size_t num_samples,
2713  void *user_data);
2714 
2777 API_EXPORT
2778 int CALL_CONV bladerf_init_stream(struct bladerf_stream **stream,
2779  struct bladerf *dev,
2780  bladerf_stream_cb callback,
2781  void ***buffers,
2782  size_t num_buffers,
2783  bladerf_format format,
2784  size_t samples_per_buffer,
2785  size_t num_transfers,
2786  void *user_data);
2787 
2808 API_EXPORT
2809 int CALL_CONV bladerf_stream(struct bladerf_stream *stream,
2810  bladerf_channel_layout layout);
2811 
2839 API_EXPORT
2841  void *buffer,
2842  unsigned int timeout_ms);
2843 
2861 API_EXPORT
2863  void *buffer);
2864 
2865 
2877 API_EXPORT
2878 void CALL_CONV bladerf_deinit_stream(struct bladerf_stream *stream);
2879 
2889 API_EXPORT
2890 int CALL_CONV bladerf_set_stream_timeout(struct bladerf *dev,
2891  bladerf_direction dir,
2892  unsigned int timeout);
2893 
2904 API_EXPORT
2905 int CALL_CONV bladerf_get_stream_timeout(struct bladerf *dev,
2906  bladerf_direction dir,
2907  unsigned int *timeout);
2908 
2938 API_EXPORT
2939 int CALL_CONV bladerf_flash_firmware(struct bladerf *dev, const char *firmware);
2940 
2951 API_EXPORT
2952 int CALL_CONV bladerf_load_fpga(struct bladerf *dev, const char *fpga);
2953 
2964 API_EXPORT
2965 int CALL_CONV bladerf_flash_fpga(struct bladerf *dev, const char *fpga_image);
2966 
2974 API_EXPORT
2975 int CALL_CONV bladerf_erase_stored_fpga(struct bladerf *dev);
2976 
2984 API_EXPORT
2985 int CALL_CONV bladerf_device_reset(struct bladerf *dev);
2986 
2996 API_EXPORT
2997 int CALL_CONV bladerf_get_fw_log(struct bladerf *dev, const char *filename);
2998 
3009 API_EXPORT
3010 int CALL_CONV bladerf_jump_to_bootloader(struct bladerf *dev);
3011 
3027 API_EXPORT
3029 
3053 API_EXPORT
3054 int CALL_CONV bladerf_load_fw_from_bootloader(const char *device_identifier,
3056  uint8_t bus,
3057  uint8_t addr,
3058  const char *file);
3059 
3074 typedef enum {
3086 
3088 #define BLADERF_IMAGE_MAGIC_LEN 7
3089 
3091 #define BLADERF_IMAGE_CHECKSUM_LEN 32
3092 
3094 #define BLADERF_IMAGE_RESERVED_LEN 128
3095 
3115  char magic[BLADERF_IMAGE_MAGIC_LEN + 1];
3116 
3121  uint8_t checksum[BLADERF_IMAGE_CHECKSUM_LEN];
3122 
3128  struct bladerf_version version;
3129 
3131  uint64_t timestamp;
3132 
3142 
3147 
3151  bladerf_image_type type;
3152 
3157  uint32_t address;
3158 
3160  uint32_t length;
3161 
3163  uint8_t *data;
3164 };
3165 
3189 API_EXPORT
3190 struct bladerf_image *CALL_CONV bladerf_alloc_image(bladerf_image_type type,
3191  uint32_t address,
3192  uint32_t length);
3193 
3206 API_EXPORT
3207 struct bladerf_image *CALL_CONV
3208  bladerf_alloc_cal_image(bladerf_fpga_size fpga_size, uint16_t vctcxo_trim);
3209 
3217 API_EXPORT
3218 void CALL_CONV bladerf_free_image(struct bladerf_image *image);
3219 
3234 API_EXPORT
3235 int CALL_CONV bladerf_image_write(struct bladerf_image *image,
3236  const char *file);
3237 
3259 API_EXPORT
3260 int CALL_CONV bladerf_image_read(struct bladerf_image *image, const char *file);
3261 
3293 typedef enum {
3296 
3299 
3302 
3306 
3315 API_EXPORT
3316 int CALL_CONV bladerf_set_vctcxo_tamer_mode(struct bladerf *dev,
3318 
3329 API_EXPORT
3330 int CALL_CONV bladerf_get_vctcxo_tamer_mode(struct bladerf *dev,
3332 
3353 API_EXPORT
3354 int CALL_CONV bladerf_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim);
3355 
3366 API_EXPORT
3367 int CALL_CONV bladerf_trim_dac_write(struct bladerf *dev, uint16_t val);
3368 
3383 API_EXPORT
3384 int CALL_CONV bladerf_trim_dac_read(struct bladerf *dev, uint16_t *val);
3385 
3417 typedef enum {
3420 
3426 
3430 
3440 API_EXPORT
3441 int CALL_CONV bladerf_set_tuning_mode(struct bladerf *dev,
3442  bladerf_tuning_mode mode);
3443 
3452 API_EXPORT
3453 int CALL_CONV bladerf_get_tuning_mode(struct bladerf *dev,
3454  bladerf_tuning_mode *mode);
3455 
3478 #define BLADERF_TRIGGER_REG_ARM ((uint8_t)(1 << 0))
3479 
3489 #define BLADERF_TRIGGER_REG_FIRE ((uint8_t)(1 << 1))
3490 
3499 #define BLADERF_TRIGGER_REG_MASTER ((uint8_t)(1 << 2))
3500 
3507 #define BLADERF_TRIGGER_REG_LINE ((uint8_t)(1 << 3))
3508 
3521 API_EXPORT
3522 int CALL_CONV bladerf_read_trigger(struct bladerf *dev,
3523  bladerf_channel ch,
3524  bladerf_trigger_signal signal,
3525  uint8_t *val);
3526 
3538 API_EXPORT
3539 int CALL_CONV bladerf_write_trigger(struct bladerf *dev,
3540  bladerf_channel ch,
3541  bladerf_trigger_signal signal,
3542  uint8_t val);
3543 
3565 API_EXPORT
3566 int CALL_CONV bladerf_config_gpio_read(struct bladerf *dev, uint32_t *val);
3567 
3580 API_EXPORT
3581 int CALL_CONV bladerf_config_gpio_write(struct bladerf *dev, uint32_t val);
3582 
3614 API_EXPORT
3615 int CALL_CONV bladerf_erase_flash(struct bladerf *dev,
3616  uint32_t erase_block,
3617  uint32_t count);
3618 
3634 API_EXPORT
3635 int CALL_CONV bladerf_read_flash(struct bladerf *dev,
3636  uint8_t *buf,
3637  uint32_t page,
3638  uint32_t count);
3639 
3654 API_EXPORT
3655 int CALL_CONV bladerf_write_flash(struct bladerf *dev,
3656  const uint8_t *buf,
3657  uint32_t page,
3658  uint32_t count);
3659 
3682 API_EXPORT
3683 int CALL_CONV bladerf_set_rf_port(struct bladerf *dev,
3684  bladerf_channel ch,
3685  const char *port);
3686 
3696 API_EXPORT
3697 int CALL_CONV bladerf_get_rf_port(struct bladerf *dev,
3698  bladerf_channel ch,
3699  const char **port);
3700 
3715 API_EXPORT
3716 int CALL_CONV bladerf_get_rf_ports(struct bladerf *dev,
3717  bladerf_channel ch,
3718  const char **ports,
3719  unsigned int count);
3720 
3746 typedef enum {
3754 } bladerf_xb;
3755 
3764 API_EXPORT
3765 int CALL_CONV bladerf_expansion_attach(struct bladerf *dev, bladerf_xb xb);
3766 
3775 API_EXPORT
3776 int CALL_CONV bladerf_expansion_get_attached(struct bladerf *dev,
3777  bladerf_xb *xb);
3778 
3795 typedef enum {
3804 
3813 API_EXPORT
3814 void CALL_CONV bladerf_log_set_verbosity(bladerf_log_level level);
3815 
3829 API_EXPORT
3831 
3850 // clang-format off
3851 #define BLADERF_ERR_UNEXPECTED (-1)
3852 #define BLADERF_ERR_RANGE (-2)
3853 #define BLADERF_ERR_INVAL (-3)
3854 #define BLADERF_ERR_MEM (-4)
3855 #define BLADERF_ERR_IO (-5)
3856 #define BLADERF_ERR_TIMEOUT (-6)
3857 #define BLADERF_ERR_NODEV (-7)
3858 #define BLADERF_ERR_UNSUPPORTED (-8)
3859 #define BLADERF_ERR_MISALIGNED (-9)
3860 #define BLADERF_ERR_CHECKSUM (-10)
3861 #define BLADERF_ERR_NO_FILE (-11)
3862 #define BLADERF_ERR_UPDATE_FPGA (-12)
3863 #define BLADERF_ERR_UPDATE_FW (-13)
3864 #define BLADERF_ERR_TIME_PAST (-14)
3865 #define BLADERF_ERR_QUEUE_FULL (-15)
3867 #define BLADERF_ERR_FPGA_OP (-16)
3868 #define BLADERF_ERR_PERMISSION (-17)
3870 #define BLADERF_ERR_WOULD_BLOCK (-18)
3875 #define BLADERF_ERR_NOT_INIT (-19)
3877 // clang-format on
3878 
3886 API_EXPORT
3887 const char *CALL_CONV bladerf_strerror(int error);
3888 
3891 #include <bladeRF1.h>
3892 #include <bladeRF2.h>
3893 
3894 #ifdef __cplusplus
3895 }
3896 #endif
3897 
3898 #endif /* LIBBLADERF_H_ */
uint8_t * data
Definition: libbladeRF.h:3163
API_EXPORT int CALL_CONV bladerf_set_rx_mux(struct bladerf *dev, bladerf_rx_mux mux)
API_EXPORT const char *CALL_CONV bladerf_backend_str(bladerf_backend backend)
API_EXPORT int CALL_CONV bladerf_image_read(struct bladerf_image *image, const char *file)
API_EXPORT int CALL_CONV bladerf_get_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value *value)
bladerf_gain_mode
Definition: libbladeRF.h:722
API_EXPORT int CALL_CONV bladerf_get_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode *mode)
API_EXPORT int CALL_CONV bladerf_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size)
API_EXPORT int CALL_CONV bladerf_get_rx_mux(struct bladerf *dev, bladerf_rx_mux *mode)
bladerf_channel channel
Definition: libbladeRF.h:1592
API_EXPORT bool CALL_CONV bladerf_devinfo_matches(const struct bladerf_devinfo *a, const struct bladerf_devinfo *b)
unsigned int instance
Definition: libbladeRF.h:135
API_EXPORT int CALL_CONV bladerf_get_tuning_mode(struct bladerf *dev, bladerf_tuning_mode *mode)
API_EXPORT int CALL_CONV bladerf_load_fpga(struct bladerf *dev, const char *fpga)
uint16_t minor
Definition: libbladeRF.h:387
API_EXPORT void CALL_CONV bladerf_log_set_verbosity(bladerf_log_level level)
API_EXPORT void CALL_CONV bladerf_deinit_stream(struct bladerf_stream *stream)
API_EXPORT void CALL_CONV bladerf_set_usb_reset_on_open(bool enabled)
API_EXPORT void CALL_CONV bladerf_version(struct bladerf_version *version)
API_EXPORT int CALL_CONV bladerf_get_gain_stage_range(struct bladerf *dev, bladerf_channel ch, const char *stage, const struct bladerf_range **range)
bladerf_loopback
Definition: libbladeRF.h:1300
API_EXPORT int CALL_CONV bladerf_erase_flash(struct bladerf *dev, uint32_t erase_block, uint32_t count)
API_EXPORT int CALL_CONV bladerf_interleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples)
int bladerf_channel
Definition: libbladeRF.h:611
API_EXPORT int CALL_CONV bladerf_get_rf_ports(struct bladerf *dev, bladerf_channel ch, const char **ports, unsigned int count)
API_EXPORT int CALL_CONV bladerf_get_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int *timeout)
bladerf_trigger_signal signal
Definition: libbladeRF.h:1594
API_EXPORT int CALL_CONV bladerf_set_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate, struct bladerf_rational_rate *actual)
bladerf_rx_mux
Definition: libbladeRF.h:1706
API_EXPORT bool CALL_CONV bladerf_is_loopback_mode_supported(struct bladerf *dev, bladerf_loopback mode)
bladerf_tuning_mode
Definition: libbladeRF.h:3417
uint16_t major
Definition: libbladeRF.h:386
API_EXPORT bool CALL_CONV bladerf_devstr_matches(const char *dev_str, struct bladerf_devinfo *info)
API_EXPORT int CALL_CONV bladerf_get_loopback_modes(struct bladerf *dev, const struct bladerf_loopback_modes **modes)
bladerf_fpga_source
Definition: libbladeRF.h:423
API_EXPORT int CALL_CONV bladerf_is_fpga_configured(struct bladerf *dev)
uint64_t bladerf_timestamp
Definition: libbladeRF.h:1780
bladerf_loopback mode
Definition: libbladeRF.h:1346
API_EXPORT int CALL_CONV bladerf_get_devinfo_from_str(const char *devstr, struct bladerf_devinfo *info)
uint64_t timestamp
Definition: libbladeRF.h:3131
API_EXPORT int CALL_CONV bladerf_trigger_arm(struct bladerf *dev, const struct bladerf_trigger *trigger, bool arm, uint64_t resv1, uint64_t resv2)
API_EXPORT int CALL_CONV bladerf_get_sample_rate_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range)
API_EXPORT int CALL_CONV bladerf_get_rf_port(struct bladerf *dev, bladerf_channel ch, const char **port)
API_EXPORT bladerf_dev_speed CALL_CONV bladerf_device_speed(struct bladerf *dev)
API_EXPORT int CALL_CONV bladerf_get_device_list(struct bladerf_devinfo **devices)
void *(* bladerf_stream_cb)(struct bladerf *dev, struct bladerf_stream *stream, struct bladerf_metadata *meta, void *samples, size_t num_samples, void *user_data)
Definition: libbladeRF.h:2708
#define BLADERF_DESCRIPTION_LENGTH
Definition: libbladeRF.h:121
API_EXPORT struct bladerf_image *CALL_CONV bladerf_alloc_cal_image(bladerf_fpga_size fpga_size, uint16_t vctcxo_trim)
API_EXPORT int CALL_CONV bladerf_get_flash_size(struct bladerf *dev, uint32_t *size, bool *is_guess)
API_EXPORT int CALL_CONV bladerf_set_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate rate, bladerf_sample_rate *actual)
API_EXPORT const char *CALL_CONV bladerf_strerror(int error)
API_EXPORT int CALL_CONV bladerf_trigger_init(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, struct bladerf_trigger *trigger)
API_EXPORT int CALL_CONV bladerf_fpga_version(struct bladerf *dev, struct bladerf_version *version)
bladerf_xb
Definition: libbladeRF.h:3746
char manufacturer[BLADERF_DESCRIPTION_LENGTH]
Definition: libbladeRF.h:138
API_EXPORT int CALL_CONV bladerf_get_quick_tune(struct bladerf *dev, bladerf_channel ch, struct bladerf_quick_tune *quick_tune)
uint8_t usb_bus
Definition: libbladeRF.h:133
uint16_t patch
Definition: libbladeRF.h:388
bladerf_vctcxo_tamer_mode
Definition: libbladeRF.h:3293
uint64_t options
Definition: libbladeRF.h:1595
API_EXPORT int CALL_CONV bladerf_get_rational_sample_rate(struct bladerf *dev, bladerf_channel ch, struct bladerf_rational_rate *rate)
API_EXPORT int CALL_CONV bladerf_cancel_scheduled_retunes(struct bladerf *dev, bladerf_channel ch)
API_EXPORT int CALL_CONV bladerf_set_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency)
API_EXPORT int CALL_CONV bladerf_sync_tx(struct bladerf *dev, const void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms)
bladerf_direction
Definition: libbladeRF.h:668
unsigned int bladerf_sample_rate
Definition: libbladeRF.h:993
API_EXPORT int CALL_CONV bladerf_config_gpio_write(struct bladerf *dev, uint32_t val)
API_EXPORT int CALL_CONV bladerf_get_bandwidth_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range)
API_EXPORT int CALL_CONV bladerf_get_fpga_source(struct bladerf *dev, bladerf_fpga_source *source)
API_EXPORT int CALL_CONV bladerf_set_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth bandwidth, bladerf_bandwidth *actual)
API_EXPORT int CALL_CONV bladerf_read_flash(struct bladerf *dev, uint8_t *buf, uint32_t page, uint32_t count)
bladerf_image_type
Definition: libbladeRF.h:3074
API_EXPORT int CALL_CONV bladerf_read_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t *val)
API_EXPORT int CALL_CONV bladerf_trigger_fire(struct bladerf *dev, const struct bladerf_trigger *trigger)
API_EXPORT int CALL_CONV bladerf_jump_to_bootloader(struct bladerf *dev)
API_EXPORT int CALL_CONV bladerf_get_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode *mode)
bladerf_fpga_size
Definition: libbladeRF.h:399
API_EXPORT int CALL_CONV bladerf_flash_firmware(struct bladerf *dev, const char *firmware)
API_EXPORT int CALL_CONV bladerf_set_gain_mode(struct bladerf *dev, bladerf_channel ch, bladerf_gain_mode mode)
uint64_t bladerf_frequency
Definition: libbladeRF.h:1191
API_EXPORT int CALL_CONV bladerf_flash_fpga(struct bladerf *dev, const char *fpga_image)
API_EXPORT int CALL_CONV bladerf_get_bootloader_list(struct bladerf_devinfo **list)
API_EXPORT int CALL_CONV bladerf_schedule_retune(struct bladerf *dev, bladerf_channel ch, bladerf_timestamp timestamp, bladerf_frequency frequency, struct bladerf_quick_tune *quick_tune)
bladerf_format
Definition: libbladeRF.h:2024
uint8_t usb_addr
Definition: libbladeRF.h:134
bladerf_backend
Definition: libbladeRF.h:111
unsigned int bladerf_bandwidth
Definition: libbladeRF.h:1113
API_EXPORT int CALL_CONV bladerf_set_loopback(struct bladerf *dev, bladerf_loopback lb)
API_EXPORT int CALL_CONV bladerf_set_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain gain)
API_EXPORT const char *CALL_CONV bladerf_get_board_name(struct bladerf *dev)
#define BLADERF_IMAGE_CHECKSUM_LEN
Definition: libbladeRF.h:3091
API_EXPORT int CALL_CONV bladerf_set_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain gain)
API_EXPORT int CALL_CONV bladerf_device_reset(struct bladerf *dev)
API_EXPORT size_t CALL_CONV bladerf_get_channel_count(struct bladerf *dev, bladerf_direction dir)
API_EXPORT int CALL_CONV bladerf_set_vctcxo_tamer_mode(struct bladerf *dev, bladerf_vctcxo_tamer_mode mode)
API_EXPORT int CALL_CONV bladerf_submit_stream_buffer_nb(struct bladerf_stream *stream, void *buffer)
bladerf_log_level
Definition: libbladeRF.h:3795
API_EXPORT int CALL_CONV bladerf_get_gain_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range)
API_EXPORT int CALL_CONV bladerf_open(struct bladerf **device, const char *device_identifier)
char product[BLADERF_DESCRIPTION_LENGTH]
Definition: libbladeRF.h:139
API_EXPORT int CALL_CONV bladerf_expansion_get_attached(struct bladerf *dev, bladerf_xb *xb)
API_EXPORT int CALL_CONV bladerf_init_stream(struct bladerf_stream **stream, struct bladerf *dev, bladerf_stream_cb callback, void ***buffers, size_t num_buffers, bladerf_format format, size_t samples_per_buffer, size_t num_transfers, void *user_data)
API_EXPORT int CALL_CONV bladerf_get_devinfo(struct bladerf *dev, struct bladerf_devinfo *info)
API_EXPORT void CALL_CONV bladerf_free_image(struct bladerf_image *image)
#define BLADERF_IMAGE_RESERVED_LEN
Definition: libbladeRF.h:3094
int16_t bladerf_correction_value
Definition: libbladeRF.h:1912
API_EXPORT int CALL_CONV bladerf_get_frequency_range(struct bladerf *dev, bladerf_channel ch, const struct bladerf_range **range)
API_EXPORT struct bladerf_image *CALL_CONV bladerf_alloc_image(bladerf_image_type type, uint32_t address, uint32_t length)
API_EXPORT int CALL_CONV bladerf_stream(struct bladerf_stream *stream, bladerf_channel_layout layout)
API_EXPORT int CALL_CONV bladerf_fw_version(struct bladerf *dev, struct bladerf_version *version)
bladerf_trigger_signal
Definition: libbladeRF.h:1568
#define CALL_CONV
Definition: libbladeRF.h:84
API_EXPORT int CALL_CONV bladerf_write_trigger(struct bladerf *dev, bladerf_channel ch, bladerf_trigger_signal signal, uint8_t val)
API_EXPORT void CALL_CONV bladerf_init_devinfo(struct bladerf_devinfo *info)
API_EXPORT int CALL_CONV bladerf_get_vctcxo_trim(struct bladerf *dev, uint16_t *trim)
API_EXPORT int CALL_CONV bladerf_sync_config(struct bladerf *dev, bladerf_channel_layout layout, bladerf_format format, unsigned int num_buffers, unsigned int buffer_size, unsigned int num_transfers, unsigned int stream_timeout)
API_EXPORT int CALL_CONV bladerf_get_serial(struct bladerf *dev, char *serial)
API_EXPORT int CALL_CONV bladerf_erase_stored_fpga(struct bladerf *dev)
API_EXPORT int CALL_CONV bladerf_get_gain_stages(struct bladerf *dev, bladerf_channel ch, const char **stages, size_t count)
bladeRF2-specific API
API_EXPORT int CALL_CONV bladerf_get_gain(struct bladerf *dev, bladerf_channel ch, bladerf_gain *gain)
API_EXPORT int CALL_CONV bladerf_write_flash(struct bladerf *dev, const uint8_t *buf, uint32_t page, uint32_t count)
bladerf_backend backend
Definition: libbladeRF.h:130
unsigned int actual_count
Definition: libbladeRF.h:2306
API_EXPORT int CALL_CONV bladerf_trim_dac_read(struct bladerf *dev, uint16_t *val)
API_EXPORT int CALL_CONV bladerf_get_timestamp(struct bladerf *dev, bladerf_direction dir, bladerf_timestamp *timestamp)
API_EXPORT int CALL_CONV bladerf_select_band(struct bladerf *dev, bladerf_channel ch, bladerf_frequency frequency)
uint32_t address
Definition: libbladeRF.h:3157
API_EXPORT void CALL_CONV bladerf_free_device_list(struct bladerf_devinfo *devices)
bladeRF1-specific API
bladerf_gain_mode mode
Definition: libbladeRF.h:771
#define API_EXPORT
Definition: libbladeRF.h:81
const char * describe
Definition: libbladeRF.h:389
bladerf_timestamp timestamp
Definition: libbladeRF.h:2268
API_EXPORT int CALL_CONV bladerf_get_gain_modes(struct bladerf *dev, bladerf_channel ch, const struct bladerf_gain_modes **modes)
API_EXPORT int CALL_CONV bladerf_image_write(struct bladerf_image *image, const char *file)
API_EXPORT int CALL_CONV bladerf_get_sample_rate(struct bladerf *dev, bladerf_channel ch, bladerf_sample_rate *rate)
bladerf_trigger_role role
Definition: libbladeRF.h:1593
API_EXPORT int CALL_CONV bladerf_deinterleave_stream_buffer(bladerf_channel_layout layout, bladerf_format format, unsigned int buffer_size, void *samples)
API_EXPORT int CALL_CONV bladerf_get_frequency(struct bladerf *dev, bladerf_channel ch, bladerf_frequency *frequency)
#define BLADERF_SERIAL_LENGTH
Definition: libbladeRF.h:124
API_EXPORT int CALL_CONV bladerf_config_gpio_read(struct bladerf *dev, uint32_t *val)
API_EXPORT int CALL_CONV bladerf_set_stream_timeout(struct bladerf *dev, bladerf_direction dir, unsigned int timeout)
int64_t min
Definition: libbladeRF.h:369
API_EXPORT int CALL_CONV bladerf_open_with_devinfo(struct bladerf **device, struct bladerf_devinfo *devinfo)
int64_t max
Definition: libbladeRF.h:370
const char * name
Definition: libbladeRF.h:770
API_EXPORT int CALL_CONV bladerf_enable_module(struct bladerf *dev, bladerf_channel ch, bool enable)
API_EXPORT int CALL_CONV bladerf_set_tuning_mode(struct bladerf *dev, bladerf_tuning_mode mode)
API_EXPORT int CALL_CONV bladerf_get_bandwidth(struct bladerf *dev, bladerf_channel ch, bladerf_bandwidth *bandwidth)
bladerf_dev_speed
Definition: libbladeRF.h:411
bladerf_trigger_role
Definition: libbladeRF.h:1529
API_EXPORT void CALL_CONV bladerf_close(struct bladerf *device)
struct bladerf_version version
Definition: libbladeRF.h:3128
API_EXPORT int CALL_CONV bladerf_get_loopback(struct bladerf *dev, bladerf_loopback *lb)
API_EXPORT int CALL_CONV bladerf_trigger_state(struct bladerf *dev, const struct bladerf_trigger *trigger, bool *is_armed, bool *has_fired, bool *fire_requested, uint64_t *resv1, uint64_t *resv2)
bladerf_correction
Definition: libbladeRF.h:1923
bladerf_image_type type
Definition: libbladeRF.h:3151
API_EXPORT int CALL_CONV bladerf_load_fw_from_bootloader(const char *device_identifier, bladerf_backend backend, uint8_t bus, uint8_t addr, const char *file)
int64_t step
Definition: libbladeRF.h:371
API_EXPORT int CALL_CONV bladerf_submit_stream_buffer(struct bladerf_stream *stream, void *buffer, unsigned int timeout_ms)
bladerf_channel_layout
Definition: libbladeRF.h:676
char serial[BLADERF_SERIAL_LENGTH]
Definition: libbladeRF.h:132
API_EXPORT int CALL_CONV bladerf_set_correction(struct bladerf *dev, bladerf_channel ch, bladerf_correction corr, bladerf_correction_value value)
API_EXPORT int CALL_CONV bladerf_set_rf_port(struct bladerf *dev, bladerf_channel ch, const char *port)
uint32_t length
Definition: libbladeRF.h:3160
API_EXPORT int CALL_CONV bladerf_sync_rx(struct bladerf *dev, void *samples, unsigned int num_samples, struct bladerf_metadata *metadata, unsigned int timeout_ms)
int bladerf_gain
Definition: libbladeRF.h:710
API_EXPORT int CALL_CONV bladerf_trim_dac_write(struct bladerf *dev, uint16_t val)
API_EXPORT int CALL_CONV bladerf_expansion_attach(struct bladerf *dev, bladerf_xb xb)
API_EXPORT int CALL_CONV bladerf_get_gain_stage(struct bladerf *dev, bladerf_channel ch, const char *stage, bladerf_gain *gain)
API_EXPORT int CALL_CONV bladerf_get_fw_log(struct bladerf *dev, const char *filename)
#define BLADERF_IMAGE_MAGIC_LEN
Definition: libbladeRF.h:3088
API_EXPORT int CALL_CONV bladerf_get_serial_struct(struct bladerf *dev, struct bladerf_serial *serial)