// // Copyright 2014 Ettus Research LLC // // 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, see . // #include #include "e300_fifo_config.hpp" #include "e300_fifo_config.hpp" #include "e300_common.hpp" #include #include namespace uhd { namespace usrp { namespace e300 { namespace common { void load_fpga_image(const std::string &path) { if (not boost::filesystem::exists("/dev/xdevcfg")) ::system("mknod /dev/xdevcfg c 259 0"); UHD_MSG(status) << "Loading FPGA image: " << path << "..." << std::flush; std::ifstream fpga_file(path.c_str(), std::ios_base::binary); UHD_ASSERT_THROW(fpga_file.good()); std::FILE *wfile; wfile = std::fopen("/dev/xdevcfg", "wb"); UHD_ASSERT_THROW(!(wfile == NULL)); char buff[16384]; // devcfg driver can't handle huge writes do { fpga_file.read(buff, sizeof(buff)); std::fwrite(buff, 1, size_t(fpga_file.gcount()), wfile); } while (fpga_file); fpga_file.close(); std::fclose(wfile); UHD_MSG(status) << " done" << std::endl; } } }}}