⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usrper.cc

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 CC
字号:
/* -*- c++ -*- *//* * USRP - Universal Software Radio Peripheral * * Copyright (C) 2003,2004 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, MA  02110-1301  USA */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <usb.h>			/* needed for usb functions */#include <getopt.h>#include <assert.h>#include <errno.h>#include "usrp_prims.h"#include "usrp_spi_defs.h"#include <string.h>char *prog_name;static voidset_progname (char *path){  char *p = strrchr (path, '/');  if (p != 0)    prog_name = p+1;  else    prog_name = path;}static voidusage (){  fprintf (stderr, "usage: \n");  fprintf (stderr, "  %s [-v] [-w <which_board>] [-x] ...\n", prog_name);  fprintf (stderr, "  %s load_standard_bits\n", prog_name);  fprintf (stderr, "  %s load_firmware <file.ihx>\n", prog_name);  fprintf (stderr, "  %s load_fpga <file.rbf>\n", prog_name);  fprintf (stderr, "  %s write_fpga_reg <reg8> <value32>\n", prog_name);  fprintf (stderr, "  %s set_fpga_reset {on|off}\n", prog_name);  fprintf (stderr, "  %s set_fpga_tx_enable {on|off}\n", prog_name);  fprintf (stderr, "  %s set_fpga_rx_enable {on|off}\n", prog_name);  fprintf (stderr, "  ----- diagnostic routines -----\n");  fprintf (stderr, "  %s led0 {on|off}\n", prog_name);  fprintf (stderr, "  %s led1 {on|off}\n", prog_name);  fprintf (stderr, "  %s set_hash0 <hex-string>\n", prog_name);  fprintf (stderr, "  %s get_hash0\n", prog_name);  fprintf (stderr, "  %s i2c_read i2c_addr len\n", prog_name);  fprintf (stderr, "  %s i2c_write i2c_addr <hex-string>\n", prog_name);  fprintf (stderr, "  %s 9862a_write regno value\n", prog_name);  fprintf (stderr, "  %s 9862b_write regno value\n", prog_name);  fprintf (stderr, "  %s 9862a_read regno\n", prog_name);  fprintf (stderr, "  %s 9862b_read regno\n", prog_name);  exit (1);}static voiddie (const char *msg){  fprintf (stderr, "%s (die): %s\n", prog_name, msg);  exit (1);}static int hexval (char ch){  if ('0' <= ch && ch <= '9')    return ch - '0';  if ('a' <= ch && ch <= 'f')    return ch - 'a' + 10;  if ('A' <= ch && ch <= 'F')    return ch - 'A' + 10;  return -1;}static unsigned char *hex_string_to_binary (const char *string, int *lenptr){  int	sl = strlen (string);  if (sl & 0x01){    fprintf (stderr, "%s: odd number of chars in <hex-string>\n", prog_name);    return 0;  }  int len = sl / 2;  *lenptr = len;  unsigned char *buf = new unsigned char [len];  for (int i = 0; i < len; i++){    int hi = hexval (string[2 * i]);    int lo = hexval (string[2 * i + 1]);    if (hi < 0 || lo < 0){      fprintf (stderr, "%s: invalid char in <hex-string>\n", prog_name);      delete [] buf;      return 0;    }    buf[i] = (hi << 4) | lo;  }  return buf;}static voidprint_hex (FILE *fp, unsigned char *buf, int len){  for (int i = 0; i < len; i++){    fprintf (fp, "%02x", buf[i]);  }  fprintf (fp, "\n");}static voidchk_result (bool ok){  if (!ok){    fprintf (stderr, "%s: failed\n", prog_name);    exit (1);  }}static boolget_on_off (const char *s){  if (strcmp (s, "on") == 0)    return true;  if (strcmp (s, "off") == 0)    return false;  usage ();			// no return  return false;}intmain (int argc, char **argv){  int		ch;  bool		verbose = false;  int		which_board = 0;  bool		fx2_ok_p = false;    set_progname (argv[0]);    while ((ch = getopt (argc, argv, "vw:x")) != EOF){    switch (ch){    case 'v':      verbose = true;      break;          case 'w':      which_board = strtol (optarg, 0, 0);      break;          case 'x':      fx2_ok_p = true;      break;          default:      usage ();    }  }  int nopts = argc - optind;  if (nopts < 1)    usage ();  const char *cmd = argv[optind++];  nopts--;  usrp_one_time_init ();    struct usb_device *udev = usrp_find_device (which_board, fx2_ok_p);  if (udev == 0){    fprintf (stderr, "%s: failed to find usrp[%d]\n", prog_name, which_board);    exit (1);  }  if (usrp_unconfigured_usrp_p (udev)){    fprintf (stderr, "%s: found unconfigured usrp; needs firmware.\n", prog_name);  }  if (usrp_fx2_p (udev)){    fprintf (stderr, "%s: found unconfigured FX2; needs firmware.\n", prog_name);  }  struct usb_dev_handle *udh = usrp_open_cmd_interface (udev);  if (udh == 0){    fprintf (stderr, "%s: failed to open_cmd_interface\n", prog_name);    exit (1);  }#define CHKARGS(n) if (nopts != n) usage (); else  if (strcmp (cmd, "led0") == 0){    CHKARGS (1);    bool on = get_on_off (argv[optind]);    chk_result (usrp_set_led (udh, 0, on));  }  else if (strcmp (cmd, "led1") == 0){    CHKARGS (1);    bool on = get_on_off (argv[optind]);    chk_result (usrp_set_led (udh, 1, on));  }  else if (strcmp (cmd, "led2") == 0){    CHKARGS (1);    bool on = get_on_off (argv[optind]);    chk_result (usrp_set_led (udh, 2, on));  }  else if (strcmp (cmd, "set_hash0") == 0){    CHKARGS (1);    char *p = argv[optind];    unsigned char buf[16];    memset (buf, ' ', 16);    for (int i = 0; i < 16 && *p; i++)      buf[i] = *p++;        chk_result (usrp_set_hash (udh, 0, buf));  }  else if (strcmp (cmd, "get_hash0") == 0){    CHKARGS (0);    unsigned char buf[17];    memset (buf, 0, 17);    bool r = usrp_get_hash (udh, 0, buf);    if (r)      printf ("hash: %s\n", buf);    chk_result (r);  }  else if (strcmp (cmd, "load_fpga") == 0){    CHKARGS (1);    char *filename = argv[optind];    chk_result (usrp_load_fpga (udh, filename, true));  }  else if (strcmp (cmd, "load_firmware") == 0){    CHKARGS (1);    char *filename = argv[optind];    chk_result (usrp_load_firmware (udh, filename, true));  }  else if (strcmp (cmd, "write_fpga_reg") == 0){    CHKARGS (2);    chk_result (usrp_write_fpga_reg (udh, strtoul (argv[optind], 0, 0),				     strtoul(argv[optind+1], 0, 0)));  }  else if (strcmp (cmd, "set_fpga_reset") == 0){    CHKARGS (1);    chk_result (usrp_set_fpga_reset (udh, get_on_off (argv[optind])));  }  else if (strcmp (cmd, "set_fpga_tx_enable") == 0){    CHKARGS (1);    chk_result (usrp_set_fpga_tx_enable (udh, get_on_off (argv[optind])));  }  else if (strcmp (cmd, "set_fpga_rx_enable") == 0){    CHKARGS (1);    chk_result (usrp_set_fpga_rx_enable (udh, get_on_off (argv[optind])));  }  else if (strcmp (cmd, "load_standard_bits") == 0){    CHKARGS (0);    usrp_close_interface (udh);    udh = 0;    chk_result (usrp_load_standard_bits (which_board, true));  }  else if (strcmp (cmd, "i2c_read") == 0){    CHKARGS (2);    int	i2c_addr = strtol (argv[optind], 0, 0);    int len = strtol (argv[optind + 1], 0, 0);    if (len < 0)      chk_result (0);    unsigned char *buf = new unsigned char [len];    bool result = usrp_i2c_read (udh, i2c_addr, buf, len);    if (!result){      chk_result (0);    }    print_hex (stdout, buf, len);  }  else if (strcmp (cmd, "i2c_write") == 0){    CHKARGS (2);    int	i2c_addr = strtol (argv[optind], 0, 0);    int	len = 0;    char *hex_string  = argv[optind + 1];    unsigned char *buf = hex_string_to_binary (hex_string, &len);    if (buf == 0)      chk_result (0);    bool result = usrp_i2c_write (udh, i2c_addr, buf, len);    chk_result (result);  }  else if (strcmp (cmd, "9862a_write") == 0){    CHKARGS (2);    int regno = strtol (argv[optind], 0, 0);    int value = strtol (argv[optind+1], 0, 0);    chk_result (usrp_9862_write (udh, 0, regno, value));  }  else if (strcmp (cmd, "9862b_write") == 0){    CHKARGS (2);    int regno = strtol (argv[optind], 0, 0);    int value = strtol (argv[optind+1], 0, 0);    chk_result (usrp_9862_write (udh, 1, regno, value));  }  else if (strcmp (cmd, "9862a_read") == 0){    CHKARGS (1);    int regno = strtol (argv[optind], 0, 0);    unsigned char value;    bool result = usrp_9862_read (udh, 0, regno, &value);    if (!result){      chk_result (0);    }    fprintf (stdout, "reg[%d] = 0x%02x\n", regno, value);  }  else if (strcmp (cmd, "9862b_read") == 0){    CHKARGS (1);    int regno = strtol (argv[optind], 0, 0);    unsigned char value;    bool result = usrp_9862_read (udh, 1, regno, &value);    if (!result){      chk_result (0);    }    fprintf (stdout, "reg[%d] = 0x%02x\n", regno, value);  }  else {    usage ();  }  if (udh){    usrp_close_interface (udh);    udh = 0;  }  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -