|
|
@@ -391,41 +391,47 @@ int pico_server_dispatcher::pico_measurement()
|
|
|
return sendValidatedMsgpackData();
|
|
|
}
|
|
|
|
|
|
+std::vector<std::vector<int16_t>> pico_server_dispatcher::split_packets(int i, int j)
|
|
|
+{
|
|
|
+ std::vector<std::vector<int16_t>> packets = {};
|
|
|
+
|
|
|
+ std::vector<int16_t> data_vec = std::vector<int16_t>(data_buffer_vec[i][j], data_buffer_vec[i][j] + points_vector[i]);
|
|
|
+
|
|
|
+ for(auto it = data_vec.begin(); it < data_vec.end(); it += MAX_PACKET)
|
|
|
+ {
|
|
|
+ if(it + MAX_PACKET < data_vec.end())
|
|
|
+ {
|
|
|
+ packets.push_back(std::vector<int16_t>(it, it + MAX_PACKET));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ packets.push_back(std::vector<int16_t>(it, data_vec.end()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return packets;
|
|
|
+}
|
|
|
+
|
|
|
int pico_server_dispatcher::pico_send_points()
|
|
|
{
|
|
|
- for(int i = 0; i < measurement_times; ++i)
|
|
|
+ for(uint32_t i = 0; i < measurement_times; ++i)
|
|
|
{
|
|
|
for(uint32_t j = 0; j < number_channels; ++j)
|
|
|
{
|
|
|
- uint32_t data_seek = 0;
|
|
|
- uint32_t packet = 0;
|
|
|
+ std::vector<std::vector<int16_t>> packets = split_packets(i, j);
|
|
|
+ uint32_t num_packet = 1;
|
|
|
uint32_t total_data = sizeof(int16_t) * points_vector[i];
|
|
|
uint32_t total_packets = 1 + ((uint32_t) ((total_data * 1.0f) / MAX_PACKET));
|
|
|
- do
|
|
|
- {
|
|
|
- uint32_t ndata_sent;
|
|
|
- if(total_data - data_seek < MAX_PACKET - 22)
|
|
|
- {
|
|
|
- ndata_sent = total_data - data_seek;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ndata_sent = MAX_PACKET - 22;
|
|
|
- }
|
|
|
|
|
|
+ for(std::vector<int16_t> packet : packets)
|
|
|
+ {
|
|
|
pk_ptr->pack(magic_number);
|
|
|
pk_ptr->pack(0xCD);
|
|
|
pk_ptr->pack(i);
|
|
|
pk_ptr->pack(j);
|
|
|
- pk_ptr->pack(total_packets);
|
|
|
+ pk_ptr->pack(num_packet);
|
|
|
+ pk_ptr->pack(packets.size());
|
|
|
pk_ptr->pack(packet);
|
|
|
- pk_ptr->pack(ndata_sent);
|
|
|
- //pk_ptr->pack(*(data_buffer_vec[i][j] + (data_seek / 2)));
|
|
|
-
|
|
|
- //int16_t test_data = data_buffer_vec[i][j][0];
|
|
|
-
|
|
|
- //logger << LogPref::Flag(INFO) << "Total data: " << total_data << ". Data seek: " << data_seek << ". Test data:" << test_data << endl;
|
|
|
- //logger << LogPref::Flag(INFO) << "Sending packet " << packet << " of " << total_packets << " (sig" << i << "ch" << j << "). Data to send: " << ndata_sent << endl;
|
|
|
|
|
|
int ret = sendValidatedMsgpackData();
|
|
|
if(ret != 1)
|
|
|
@@ -434,9 +440,6 @@ int pico_server_dispatcher::pico_send_points()
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- data_seek += ndata_sent;
|
|
|
- ++packet;
|
|
|
-
|
|
|
ret = recvValidatedHeader();
|
|
|
if(ret != 1)
|
|
|
{
|
|
|
@@ -452,7 +455,9 @@ int pico_server_dispatcher::pico_send_points()
|
|
|
sendErrorMsg(0x80000002, "Invalid confirm code!");
|
|
|
return -1;
|
|
|
}
|
|
|
- } while (packet < total_packets);
|
|
|
+
|
|
|
+ num_packet++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|