diff --git a/src/boards/LimeSDR/LimeSDR.cpp b/src/boards/LimeSDR/LimeSDR.cpp index c3237cbb0..ef209221e 100644 --- a/src/boards/LimeSDR/LimeSDR.cpp +++ b/src/boards/LimeSDR/LimeSDR.cpp @@ -744,7 +744,7 @@ OpStatus LimeSDR::UploadMemory( return OpStatus::INVALID_VALUE; } - return mfpgaPort->ProgramWrite(data, length, progMode, target, callback); + return mfpgaPort->ProgramWrite(data, length, progMode, static_cast(target), callback); } OpStatus LimeSDR::MemoryWrite(std::shared_ptr storage, Region region, const void* data) diff --git a/src/boards/LimeSDR_X3/LimeSDR_X3.cpp b/src/boards/LimeSDR_X3/LimeSDR_X3.cpp index 59f9c411b..61d98ca0c 100644 --- a/src/boards/LimeSDR_X3/LimeSDR_X3.cpp +++ b/src/boards/LimeSDR_X3/LimeSDR_X3.cpp @@ -1248,7 +1248,7 @@ OpStatus LimeSDR_X3::UploadMemory( return OpStatus::INVALID_VALUE; } - return mfpgaPort->ProgramWrite(data, length, progMode, target, callback); + return mfpgaPort->ProgramWrite(data, length, progMode, static_cast(target), callback); } OpStatus LimeSDR_X3::MemoryWrite(std::shared_ptr storage, Region region, const void* data) diff --git a/src/boards/LimeSDR_XTRX/LimeSDR_XTRX.cpp b/src/boards/LimeSDR_XTRX/LimeSDR_XTRX.cpp index 006d22fb7..d9fd0d799 100644 --- a/src/boards/LimeSDR_XTRX/LimeSDR_XTRX.cpp +++ b/src/boards/LimeSDR_XTRX/LimeSDR_XTRX.cpp @@ -571,7 +571,7 @@ OpStatus LimeSDR_XTRX::UploadMemory( return OpStatus::INVALID_VALUE; } - return fpgaPort->ProgramWrite(data, length, progMode, target, callback); + return fpgaPort->ProgramWrite(data, length, progMode, static_cast(target), callback); } OpStatus LimeSDR_XTRX::MemoryWrite(std::shared_ptr storage, Region region, const void* data) diff --git a/src/boards/MMX8/MM_X8.cpp b/src/boards/MMX8/MM_X8.cpp index 2f2955502..f36ada46d 100644 --- a/src/boards/MMX8/MM_X8.cpp +++ b/src/boards/MMX8/MM_X8.cpp @@ -710,7 +710,7 @@ OpStatus LimeSDR_MMX8::UploadMemory( int progMode = 1; LMS64CProtocol::ProgramWriteTarget target; target = LMS64CProtocol::ProgramWriteTarget::FPGA; - return mMainFPGAcomms->ProgramWrite(data, length, progMode, target, callback); + return mMainFPGAcomms->ProgramWrite(data, length, progMode, static_cast(target), callback); } SDRDevice* dev = mSubDevices.at(moduleIndex); diff --git a/src/protocols/LMS64CProtocol.cpp b/src/protocols/LMS64CProtocol.cpp index d494c3a1c..0c4147cb4 100644 --- a/src/protocols/LMS64CProtocol.cpp +++ b/src/protocols/LMS64CProtocol.cpp @@ -60,10 +60,12 @@ void LMS64CPacketMemoryWriteView::SetAddress(int addr) packet->payload[9] = addr & 0xFF; } -void LMS64CPacketMemoryWriteView::SetDevice(int device) +void LMS64CPacketMemoryWriteView::SetDevice(LMS64CProtocol::ProgramWriteTarget device) { - packet->payload[10] = (device >> 8) & 0xFF; - packet->payload[11] = device & 0xFF; + auto targetAsInteger = static_cast(device); + + packet->payload[10] = (targetAsInteger >> 8) & 0xFF; + packet->payload[11] = targetAsInteger & 0xFF; } void LMS64CPacketMemoryWriteView::SetData(const uint8_t* src, size_t len) @@ -435,7 +437,7 @@ OpStatus ProgramWrite(ISerialPort& port, eCMD_LMS cmd; if (device == ProgramWriteTarget::HPM || device == ProgramWriteTarget::FX3) cmd = CMD_MEMORY_WR; - else if (device == FPGA) + else if (device == ProgramWriteTarget::FPGA) cmd = CMD_ALTERA_FPGA_GW_WR; else { @@ -514,7 +516,7 @@ OpStatus ProgramWrite(ISerialPort& port, } #ifndef NDEBUG auto t2 = std::chrono::high_resolution_clock::now(); - if ((device == 2 && prog_mode == 2) == false) + if ((device == ProgramWriteTarget::FPGA && prog_mode == 2) == false) lime::log(LogLevel::INFO, "Programming finished, %li bytes sent! %li ms", length, diff --git a/src/protocols/LMS64CProtocol.h b/src/protocols/LMS64CProtocol.h index dc742baac..461250b30 100644 --- a/src/protocols/LMS64CProtocol.h +++ b/src/protocols/LMS64CProtocol.h @@ -28,26 +28,6 @@ struct LMS64CPacket { uint8_t payload[payloadSize]; }; -/** @brief Class for interacting with the EEPROM management packets */ -class LMS64CPacketMemoryWriteView -{ - public: - LMS64CPacketMemoryWriteView(LMS64CPacket* pkt); - void SetMode(int mode); - void SetChunkIndex(int index); - void SetChunkSize(int size); - void SetAddress(int size); - void SetDevice(int device); - void SetData(const uint8_t* src, size_t len); - - void GetData(uint8_t* dest, size_t len) const; - static constexpr size_t GetMaxDataSize(); - - private: - LMS64CPacketMemoryWriteView() = delete; - LMS64CPacket* packet; -}; - namespace LMS64CProtocol { enum eCMD_LMS { @@ -125,12 +105,10 @@ enum eCMD_STATUS { STATUS_COUNT }; -enum ProgramWriteTarget { +enum class ProgramWriteTarget : uint8_t { HPM, - FX3, // - FPGA, // prog_modes: 0-bitstream to FPGA, 1-to FLASH, 2-bitstream from FLASH - - PROGRAM_WRITE_TARGET_COUNT + FX3, + FPGA = 3u, }; struct FirmwareInfo { @@ -175,4 +153,24 @@ OpStatus MemoryRead(ISerialPort& port, uint32_t address, void* data, size_t data } // namespace LMS64CProtocol +/** @brief Class for interacting with the EEPROM management packets */ +class LMS64CPacketMemoryWriteView +{ + public: + LMS64CPacketMemoryWriteView(LMS64CPacket* pkt); + void SetMode(int mode); + void SetChunkIndex(int index); + void SetChunkSize(int size); + void SetAddress(int size); + void SetDevice(LMS64CProtocol::ProgramWriteTarget device); + void SetData(const uint8_t* src, size_t len); + + void GetData(uint8_t* dest, size_t len) const; + static constexpr size_t GetMaxDataSize(); + + private: + LMS64CPacketMemoryWriteView() = delete; + LMS64CPacket* packet; +}; + } // namespace lime