98 {
99
100 TLOG() <<
"Board: " <<
m_ip <<
", sending command " << cmd;
101 std::vector<uint64_t> bytes;
102 for (
char ch : cmd) {
103 bytes.push_back(
static_cast<uint64_t
>(
ch));
104 }
105 bytes.push_back(0x0d);
106
108
109
110 for (size_t i = 0; i < (bytes.size() + 49) / 50; ++i) {
111 std::vector<uint64_t> part(bytes.begin() + i*50,
112 bytes.begin() + std::min((i+1)*50, bytes.size()));
114 }
115
116 TLOG() <<
"Board: " <<
m_ip <<
", Command sent, waiting for result";
117
118
120 std::string * writing_pointer = nullptr;
121
122 auto start_time = std::chrono::high_resolution_clock::now();
123
124 int more = 40;
125 while (more > 0) {
127 for (size_t i = 0; i < data_block.size(); ++i) {
128 if (data_block[i] == 255) {
129 break;
130 } else if (data_block[i] == 1) {
131
132 writing_pointer = & res.
command;
133 } else if (data_block[i] == 2) {
134
135 writing_pointer = & res.
result;
136 } else if (data_block[i] == 3) {
137
138 writing_pointer = nullptr;
139 } else if (isprint(static_cast<int>(data_block[i]))) {
140 more = 40;
141 char c =
static_cast<char>(data_block[i]);
142 if ( writing_pointer ) {
143 *writing_pointer += static_cast<char>(data_block[i]);
144 }
145 else {
146 TLOG() <<
"Failed adding charachter " <<
c;
147 }
148 }
149 }
150 auto now = std::chrono::high_resolution_clock::now();
151
153
155 TLOG() <<
"Details of timeout";
156 for ( size_t i = 0; i < data_block.size(); ++i ) {
157 TLOG() << i <<
"\t" << std::hex << data_block[i] << std::dec;
158 }
160 auto delay_us = std::chrono::duration_cast<std::chrono::microseconds>(delay);
161 throw CommandTimeout(
ERS_HERE, cmd, delay_us.count());
162 }
163
164 std::this_thread::sleep_for(std::chrono::milliseconds(1));
165 --more;
166 }
167
168 return res;
169}
std::vector< uint64_t > read_buffer(uint64_t addr, uint8_t size) const
void write_buffer(uint64_t addr, std::vector< uint64_t > &&data) const
std::mutex m_command_mutex
PDS Frame with unphysical timestamp detected with ch