Skip to content

Commit

Permalink
Fix a bug where the wrong ProgramWrite target would be used
Browse files Browse the repository at this point in the history
  • Loading branch information
DominykasPetke committed Feb 26, 2024
1 parent bcdb912 commit 8e2d70e
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 34 deletions.
2 changes: 1 addition & 1 deletion src/boards/LimeSDR/LimeSDR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>(target), callback);
}

OpStatus LimeSDR::MemoryWrite(std::shared_ptr<DataStorage> storage, Region region, const void* data)
Expand Down
2 changes: 1 addition & 1 deletion src/boards/LimeSDR_X3/LimeSDR_X3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>(target), callback);
}

OpStatus LimeSDR_X3::MemoryWrite(std::shared_ptr<DataStorage> storage, Region region, const void* data)
Expand Down
2 changes: 1 addition & 1 deletion src/boards/LimeSDR_XTRX/LimeSDR_XTRX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>(target), callback);
}

OpStatus LimeSDR_XTRX::MemoryWrite(std::shared_ptr<DataStorage> storage, Region region, const void* data)
Expand Down
2 changes: 1 addition & 1 deletion src/boards/MMX8/MM_X8.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>(target), callback);
}

SDRDevice* dev = mSubDevices.at(moduleIndex);
Expand Down
12 changes: 7 additions & 5 deletions src/protocols/LMS64CProtocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<int>(device);

packet->payload[10] = (targetAsInteger >> 8) & 0xFF;
packet->payload[11] = targetAsInteger & 0xFF;
}

void LMS64CPacketMemoryWriteView::SetData(const uint8_t* src, size_t len)
Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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,
Expand Down
48 changes: 23 additions & 25 deletions src/protocols/LMS64CProtocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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

0 comments on commit 8e2d70e

Please sign in to comment.