package main import ( "bladerunner/arrange" "bladerunner/auxillary" rf "github.com/erayarslan/go-bladerf" "github.com/rs/zerolog" "strconv" "strings" ) var log zerolog.Logger var devlog zerolog.Logger // TODO: //// optional bitcask database initialization //// fix default config file writing func init() { // style points aux.Banner() // configuration engine arrange.Blueprint() // initialize logger log = aux.LogInit() arrange.Blueprint() // initialize configuration file/engine zerolog.SetGlobalLevel(zerolog.InfoLevel) if arrange.Debug { zerolog.SetGlobalLevel(zerolog.DebugLevel) } log.Info().Msg("Initialization complete") } func getBlade() { log.Info().Msg("Attempting to access bladerf device...") // after much tomfooling around i found that apparently without calling anything else this will just somehow magically open the first bladerf device it finds dev, err := rf.Open() if err != nil { log.Fatal().Err(err).Msg("DEVICE_ACCESS_FAILURE") } info, err := rf.GetDeviceInfo(dev) if err != nil { log.Fatal().Err(err).Msg("DEVICE_INFO_FAILURE") } // define sublogger specific to our device devlog = log.With(). Interface("usb_bus", info.UsbBus). Interface("usb_addr", info.UsbAddr). Interface("instance", info.Instance). Logger() devlog.Debug().Msg("Connected, retrieving firmware and FPGA information...") firmware, err := rf.GetFirmwareVersion(dev) if err != nil { devlog.Fatal().Err(err).Msg("FIRMWARE_ENUMERATION_FAILURE") } firmware_str := strings.Split(rf.PrintVersion(firmware), " ")[0] fpgasrc, err := rf.GetFpgaSource(dev) if err != nil { devlog.Fatal().Err(err).Msg("FPGA_SRC_ENUMERATION_FAILURE") } fpgasize, err := rf.GetFpgaSize(dev) if err != nil { devlog.Fatal().Err(err).Msg("FPGA_SIZE_ENUMERATION_FAILURE") } println() label := "[" + strconv.FormatUint(uint64(info.Instance), 10) + "]" log.Info().Str("DEVICE_PRODUCT", info.Product).Msg(label) log.Info().Str("DEVICE_SERIAL", info.Serial).Msg(label) log.Info().Str("DEVICE_MANUFACTURER", info.Manufacturer).Msg(label) log.Info().Str("DEVICE_FIRMWARE", firmware_str).Msg(label) log.Debug().Str("DEVICE_BACKEND", rf.BackendString(info.Backend)).Msg(label) log.Debug().Interface("DEVICE_SPEED", rf.GetDeviceSpeed(dev)).Msg(label) log.Debug().Interface("DEVICE_FPGA_SRC", fpgasrc).Interface("DEVICE_FPGA_SIZE", fpgasize).Msg(label) } func main() { getBlade() }