Skip to content

Commit 733ee06

Browse files
ALF: changed number format to hex
1 parent 0fc1430 commit 733ee06

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

src/CommandLineUtilities/AliceLowlevelFrontend/AliceLowlevelFrontend.h

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ namespace Alf {
2525
/// Length of the success/failure prefix that's returned in RPC calls
2626
constexpr size_t PREFIX_LENGTH = 8;
2727

28+
/// Converts a 32-bit hex number string (possibly with 0x prefix)
29+
inline uint32_t convertHexString(const std::string& string)
30+
{
31+
uint64_t n = std::stoul(string, nullptr, 16);
32+
if (n > std::numeric_limits<uint32_t>::max()) {
33+
BOOST_THROW_EXCEPTION(std::out_of_range("Parameter does not fit in 32-bit unsigned int"));
34+
}
35+
return n;
36+
}
37+
2838
/// We use this in a few places because DIM insists on non-const char*
2939
inline std::vector<char> toCharBuffer(const std::string& string, bool addTerminator = true)
3040
{
@@ -161,7 +171,7 @@ class RegisterReadRpc: DimRpcInfoWrapper
161171

162172
uint32_t readRegister(uint64_t registerAddress)
163173
{
164-
setString(std::to_string(registerAddress));
174+
setString((boost::format("%u") % registerAddress).str());
165175
return boost::lexical_cast<uint32_t>(stripPrefix(getString()));
166176
}
167177
};
@@ -176,8 +186,7 @@ class RegisterWriteRpc: DimRpcInfoWrapper
176186

177187
void writeRegister(uint64_t registerAddress, uint32_t registerValue)
178188
{
179-
auto string = std::to_string(registerAddress) + ',' + std::to_string(registerValue);
180-
setString(string);
189+
setString((boost::format("%u,%u") % registerAddress % registerValue).str());
181190
getString();
182191
}
183192
};
@@ -192,8 +201,7 @@ class RegisterWriteBlockRpc: DimRpcInfoWrapper
192201

193202
void writeRegister(uint64_t registerAddress, uint32_t registerValue)
194203
{
195-
auto string = std::to_string(registerAddress) + ',' + std::to_string(registerValue);
196-
setString(string);
204+
setString((boost::format("%u,%u") % registerAddress % registerValue).str());
197205
getString();
198206
}
199207
};
@@ -223,8 +231,7 @@ class ScaWriteRpc: DimRpcInfoWrapper
223231

224232
std::string write(uint32_t command, uint32_t data)
225233
{
226-
auto string = std::to_string(data) + ',' + std::to_string(command);
227-
setString(string);
234+
setString((boost::format("0x%x,0x%x") % command % data).str());
228235
return stripPrefix(getString());
229236
}
230237
};
@@ -239,7 +246,7 @@ class ScaGpioWriteRpc: DimRpcInfoWrapper
239246

240247
std::string write(uint32_t data)
241248
{
242-
setString(std::to_string(data));
249+
setString((boost::format("0x%x") % data).str());
243250
return stripPrefix(getString());
244251
}
245252
};

src/CommandLineUtilities/AliceLowlevelFrontend/ProgramAliceLowlevelFrontendServer.cxx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class ProgramAliceLowlevelFrontendServer: public AliceO2::Common::Program
207207
options.add_options()("serial", b::program_options::value<int>(&mSerialNumber), "Card serial number");
208208
}
209209

210-
virtual void run(const b::program_options::variables_map& map) override
210+
virtual void run(const b::program_options::variables_map&) override
211211
{
212212
// Get DIM DNS node from environment
213213
if (getenv(std::string("DIM_DNS_NODE").c_str()) == nullptr) {
@@ -353,17 +353,16 @@ class ProgramAliceLowlevelFrontendServer: public AliceO2::Common::Program
353353
static std::string scaRead(const std::string&, ChannelSharedPtr bar2)
354354
{
355355
getInfoLogger() << "SCA_READ" << endm;
356-
//auto params = split(parameter, ",");
357356
auto result = Sca(*bar2, bar2->getCardType()).read();
358-
return (b::format("%u,%u") % result.data % result.command).str();
357+
return (b::format("0x%x,0x%x") % result.data % result.command).str();
359358
}
360359

361360
static std::string scaWrite(const std::string& parameter, ChannelSharedPtr bar2)
362361
{
363362
getInfoLogger() << "SCA_WRITE: '" << parameter << "'" << endm;
364363
auto params = split(parameter, ",");
365-
auto data = b::lexical_cast<uint32_t>(params.at(0));
366-
auto command = b::lexical_cast<uint32_t>(params.at(1));
364+
auto command = convertHexString(params.at(0));
365+
auto data = convertHexString(params.at(1));
367366
Sca(*bar2, bar2->getCardType()).write(command, data);
368367
return "";
369368
}
@@ -372,15 +371,15 @@ class ProgramAliceLowlevelFrontendServer: public AliceO2::Common::Program
372371
{
373372
getInfoLogger() << "SCA_GPIO_READ" << endm;
374373
auto result = Sca(*bar2, bar2->getCardType()).gpioRead();
375-
return (b::format("%u") % result.data).str();
374+
return (b::format("0x%x") % result.data).str();
376375
}
377376

378377
static std::string scaGpioWrite(const std::string& parameter, ChannelSharedPtr bar2)
379378
{
380379
getInfoLogger() << "SCA_GPIO_WRITE: '" << parameter << "'" << endm;
381-
auto data = b::lexical_cast<uint32_t>(parameter);
382-
auto result = Sca(*bar2, bar2->getCardType()).gpioWrite(data);
383-
return (b::format("%u") % result.data).str();
380+
auto data = convertHexString(parameter);
381+
Sca(*bar2, bar2->getCardType()).gpioWrite(data);
382+
return "";
384383
}
385384

386385
int mSerialNumber = 0;

0 commit comments

Comments
 (0)