@@ -70,7 +70,7 @@ std::string AlfServer::swtBlobWrite(const std::string& parameter, AlfLink link)
7070{
7171
7272 std::vector<std::string> stringPairs = Util::split (parameter, argumentSeparator ());
73- std::vector<std::pair<SwtWord , Swt::Operation>> swtPairs = parseStringToSwtPairs (stringPairs);
73+ std::vector<std::pair<Swt::SwtData , Swt::Operation>> swtPairs = parseStringToSwtPairs (stringPairs);
7474 Swt swt = Swt (link);
7575 return swt.writeSequence (swtPairs);
7676}
@@ -113,10 +113,10 @@ Sca::CommandData AlfServer::stringToScaPair(std::string stringPair)
113113}
114114
115115// / Converts a 76-bit hex number string
116- std::pair<SwtWord , Swt::Operation> AlfServer::stringToSwtPair (const std::string stringPair)
116+ std::pair<Swt::SwtData , Swt::Operation> AlfServer::stringToSwtPair (const std::string stringPair)
117117{
118118 std::vector<std::string> swtPair = Util::split (stringPair, pairSeparator ());
119- if (swtPair.size () != 1 && swtPair.size () != 2 ) {
119+ if (swtPair.size () < 1 || swtPair.size () > 2 ) {
120120 BOOST_THROW_EXCEPTION (
121121 AlfException () << ErrorInfo::Message (" SWT word pair not formatted correctly" ));
122122 }
@@ -125,10 +125,6 @@ std::pair<SwtWord, Swt::Operation> AlfServer::stringToSwtPair(const std::string
125125
126126 if (swtPair[swtPair.size () - 1 ] == " read" ) {
127127 operation = Swt::Operation::Read;
128- if (swtPair.size () == 2 ) {
129- BOOST_THROW_EXCEPTION (
130- AlfException () << ErrorInfo::Message (" Too many arguments for READ operation" ));
131- }
132128 } else if (swtPair[swtPair.size () - 1 ] == " write" ) {
133129 operation = Swt::Operation::Write;
134130 if (swtPair.size () == 1 ) {
@@ -145,8 +141,10 @@ std::pair<SwtWord, Swt::Operation> AlfServer::stringToSwtPair(const std::string
145141 BOOST_THROW_EXCEPTION (std::out_of_range (" Parameter for SWT operation unkown" ));
146142 }
147143
148- SwtWord word;
144+ Swt::SwtData data;
145+
149146 if (operation == Swt::Operation::Write) {
147+ SwtWord word;
150148 std::string hexString = swtPair[0 ];
151149 std::string leadingHex = " 0x" ;
152150
@@ -165,9 +163,17 @@ std::pair<SwtWord, Swt::Operation> AlfServer::stringToSwtPair(const std::string
165163 word.setHigh (std::stoul (ss.str ().substr (0 , 3 ), NULL , 16 ));
166164 word.setMed (std::stoul (ss.str ().substr (3 , 8 ), NULL , 16 ));
167165 word.setLow (std::stoul (ss.str ().substr (11 , 8 ), NULL , 16 ));
166+
167+ data = word;
168+ } else if (operation == Swt::Operation::Read && swtPair.size () == 2 ) {
169+ try {
170+ data = std::stoi (swtPair[0 ]);
171+ } catch (const std::exception& e) {
172+ BOOST_THROW_EXCEPTION (SwtException () << ErrorInfo::Message (" SWT Read Timeout provided cannot be converted to int" ));
173+ }
168174 }
169175
170- return std::make_pair (word , operation);
176+ return std::make_pair (data , operation);
171177}
172178
173179std::pair<Ic::IcData, Ic::Operation> AlfServer::stringToIcPair (const std::string stringPair)
@@ -256,10 +262,10 @@ std::vector<Sca::CommandData> AlfServer::parseStringToScaCommands(std::vector<st
256262 return pairs;
257263}
258264
259- std::vector<std::pair<SwtWord , Swt::Operation>> AlfServer::parseStringToSwtPairs (std::vector<std::string> stringPairs)
265+ std::vector<std::pair<Swt::SwtData , Swt::Operation>> AlfServer::parseStringToSwtPairs (std::vector<std::string> stringPairs)
260266{
261267
262- std::vector<std::pair<SwtWord , Swt::Operation>> pairs;
268+ std::vector<std::pair<Swt::SwtData , Swt::Operation>> pairs;
263269 for (const auto & stringPair : stringPairs) {
264270 if (stringPair.find (' #' ) == std::string::npos) {
265271 pairs.push_back (stringToSwtPair (stringPair));
0 commit comments