@@ -32,32 +32,7 @@ AlfServer::AlfServer() : mRpcServers()
3232{
3333}
3434
35- std::string AlfServer::registerRead (const std::string& parameter, std::shared_ptr<roc::BarInterface> bar)
36- {
37- uint32_t address = Util::stringToHex (parameter); // Error from here will get picked up by the StringRpcServer try clause
38- // Util::checkAddress(address);
39-
40- uint32_t value = bar->readRegister (address / 4 );
41- return Util::formatValue (value);
42- }
43-
44- std::string AlfServer::registerWrite (const std::string& parameter, std::shared_ptr<roc::BarInterface> bar)
45- {
46- std::vector<std::string> params = Util::split (parameter, pairSeparator ());
47-
48- if (params.size () != 2 ) {
49- BOOST_THROW_EXCEPTION (AlfException () << ErrorInfo::Message (" Wrong number of parameters for RPC write call" ));
50- }
51-
52- uint32_t address = Util::stringToHex (params[0 ]);
53- // Util::checkAddress(address);
54- uint32_t value = Util::stringToHex (params[1 ]);
55-
56- bar->writeRegister (address / 4 , value);
57- return " " ;
58- }
59-
60- std::string AlfServer::registerBlobWrite (const std::string& parameter, AlfLink link)
35+ std::string AlfServer::registerBlobWrite (const std::string& parameter, AlfLink link, bool isCru)
6136{
6237 std::vector<std::string> stringPairs = Util::split (parameter, argumentSeparator ());
6338 std::vector<std::vector<uint32_t >> registerPairs = parseStringToRegisterPairs (stringPairs);
@@ -66,6 +41,14 @@ std::string AlfServer::registerBlobWrite(const std::string& parameter, AlfLink l
6641 uint32_t address;
6742 for (const auto & registerPair : registerPairs) {
6843 address = registerPair.at (0 );
44+ // If it's a CRU, check address range
45+ if (isCru && (address < 0x00c00000 || address > 0x00cfffff )) {
46+ resultBuffer << " Illegal address 0x" << std::hex << address
47+ << " , allowed: [0x00c0_0000-0x00cf_ffff]"
48+ << " \n " ;
49+ BOOST_THROW_EXCEPTION (AlfException () << ErrorInfo::Message (resultBuffer.str ()));
50+ }
51+
6952 if (registerPair.size () == 1 ) {
7053 value = link.bar ->readRegister (address / 4 );
7154 resultBuffer << Util::formatValue (value) << " \n " ;
@@ -588,13 +571,10 @@ void AlfServer::makeRpcServers(std::vector<AlfLink> links)
588571 }
589572
590573 if (link.linkId == 0 && link.serialId .getEndpoint () == 0 ) { // Services per card
591- // Register Read
592- servers.push_back (makeServer (names.registerRead (),
593- [bar](auto parameter) { return registerRead (parameter, bar); }));
594- // Register Write
595- servers.push_back (makeServer (names.registerWrite (),
596- [bar](auto parameter) { return registerWrite (parameter, bar); }));
597574
575+ // Register Sequence
576+ servers.push_back (makeServer (names.registerSequence (),
577+ [link](auto parameter) { return registerBlobWrite (parameter, link, true ); }));
598578 // Pattern Player
599579 servers.push_back (makeServer (names.patternPlayer (),
600580 [bar](auto parameter) { return patternPlayer (parameter, bar); }));
0 commit comments