瀏覽代碼

fixing pico-tcp send_points

Vyacheslav V 5 天之前
父節點
當前提交
bcb45d4a28

+ 4 - 4
pico-tcp-service/pico-tcp/copydll.ps1

@@ -4,9 +4,9 @@ param (
 
 if($mingw)
 {
-    Copy-Item -Path "C:\Program Files\Pico Technology\SDK\lib\ps4000a.dll" -Destination ".\build\ps4000a.dll"
-    Copy-Item -Path "C:\Program Files\Pico Technology\SDK\lib\picoipp.dll" -Destination ".\build\picoipp.dll"
+    Copy-Item -Path ".\libps4000a\ps4000a.dll" -Destination ".\build\ps4000a.dll"
+    Copy-Item -Path ".\libps4000a\picoipp.dll" -Destination ".\build\picoipp.dll"
 } else {
-    Copy-Item -Path "C:\Program Files\Pico Technology\SDK\lib\ps4000a.dll" -Destination ".\build\Release\ps4000a.dll"
-    Copy-Item -Path "C:\Program Files\Pico Technology\SDK\lib\picoipp.dll" -Destination ".\build\Release\picoipp.dll"
+    Copy-Item -Path ".\libps4000a\ps4000a.dll" -Destination ".\build\Release\ps4000a.dll"
+    Copy-Item -Path ".\libps4000a\picoipp.dll" -Destination ".\build\Release\picoipp.dll"
 }

二進制
pico-tcp-service/pico-tcp/libps4000a/picocv.dll


二進制
pico-tcp-service/pico-tcp/libps4000a/picoipp.dll


二進制
pico-tcp-service/pico-tcp/libps4000a/ps4000.dll


二進制
pico-tcp-service/pico-tcp/libps4000a/ps4000a.dll


+ 1 - 1
pico-tcp-service/pico-tcp/src/basic_proto_dispatcher.cpp

@@ -63,7 +63,7 @@ int basic_proto_dispatcher::sendValidatedMsgpackData()
 
     sbuff_ptr->clear();
     upk_ptr->reset();
-    return 0;
+    return 1;
 }
 
 int basic_proto_dispatcher::sendErrorMsg(std::uint32_t errCode, std::string errStr)

+ 10 - 2
pico-tcp-service/pico-tcp/src/pico_server_dispatcher.cpp

@@ -109,6 +109,7 @@ int pico_server_dispatcher::pico_set_points()
 
     this->points_vector = oh.get().as<std::vector<uint32_t>>();
     this->points_value = *(std::max_element(points_vector.begin(), points_vector.end()));
+    this->measurement_times = points_vector.size();
 
     pk_ptr->pack(magic_number);
     pk_ptr->pack(0xCC);
@@ -126,7 +127,7 @@ int pico_server_dispatcher::pico_set_times()
         return -1;
     }
 
-    this->sample_rate = oh.get().as<uint32_t>();
+    this->measurement_times = oh.get().as<uint32_t>();
 
     pk_ptr->pack(magic_number);
     pk_ptr->pack(0xCC);
@@ -420,15 +421,21 @@ std::vector<std::vector<int16_t>> pico_server_dispatcher::split_packets(int i, i
 
 int pico_server_dispatcher::pico_send_points()
 {
+    logger << "Sending points" << endl;
     for(uint32_t i = 0; i < measurement_times; ++i)
     {
         for(uint32_t j = 0; j < number_channels; ++j)
         {
+            logger << "Spliting packets..." << endl;
             std::vector<std::vector<int16_t>> packets = split_packets(i, j);
+            logger << "Packets splited." << endl;
+
             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));
 
+            logger << "Ready to send data!" << endl;
+
             for(std::vector<int16_t> packet : packets)
             {
                 pk_ptr->pack(magic_number);
@@ -455,7 +462,7 @@ int pico_server_dispatcher::pico_send_points()
 
                 if(command_code == 0x3D)
                 {
-                    //logger << LogPref::Flag(INFO) << "Packet confirmed" << endl;
+                    logger << LogPref::Flag(INFO) << "Packet confirmed" << endl;
                 }
                 else  {
                     sendErrorMsg(0x80000002, "Invalid confirm code!");
@@ -467,6 +474,7 @@ int pico_server_dispatcher::pico_send_points()
         }
     }
 
+    logger << "Data sended! Wait confirmation." << endl;
     pk_ptr->pack(magic_number);
     pk_ptr->pack(0xCE);
 

+ 2 - 0
pico-tcp-service/pico-tcp/src/pico_server_dispatcher.hpp

@@ -54,6 +54,8 @@ class pico_server_dispatcher : public basic_proto_dispatcher {
             command_callbacks[0x07] = [this]() { return this->pico_set_rate(); };
             command_callbacks[0x08] = [this]() { return this->pico_set_times(); };
             command_callbacks[0x09] = [this]() { return this->pico_channel_configure(); };
+            command_callbacks[0x0A] = [this]() { return this->pico_trigger_configure(); };
+            command_callbacks[0x0B] = [this]() { return this->pico_set_premeasurement(); };
             command_callbacks[0x0E] = [this]() { return this->pico_stop(); };
             command_callbacks[0x20] = [this]() { return this->pico_measurement(); };
             command_callbacks[0x30] = [this]() { return this->pico_status(); };

+ 8 - 6
pico-tcp-service/py-pico-client/pico_client.py

@@ -240,20 +240,21 @@ class PicoClient(cmd.Cmd):
             print("Not connected.")
             return
         try:
-            packed = msgpack.packb([self.magic, 0xBB])
-            self.sock.sendall(packed)
+            self.send_command(0xBB)
             # Receive data packets
             unpacker = msgpack.Unpacker()
             data_collected = {}
             while True:
-                chunk = self.sock.recv(1024)
+                print("Recv chunk...")
+                chunk = self.sock.recv(8192)
+                print("Chunk recieved!")
                 if not chunk:
                     break
                 unpacker.feed(chunk)
                 for obj in unpacker:
                     if isinstance(obj, list) and len(obj) >= 2:
                         magic, resp_code = obj[0], obj[1]
-                        if resp_code == 0xCA:
+                        if resp_code == 0xCD:
                             i, j, packet = obj[2], obj[3], obj[4]
                             key = (i, j)
                             if key not in data_collected:
@@ -267,13 +268,14 @@ class PicoClient(cmd.Cmd):
                                 # Optionally save to file
                                 # np.save(f"data_{key[0]}_{key[1]}.npy", arr)
                             # Send continue
-                            packed = msgpack.packb([self.magic, 0x3E])
-                            self.sock.sendall(packed)
+                            self.send_command(0x3E)
                             print("Data received and acknowledged.")
                             return
                         else:
                             print(f"Unexpected response: {resp_code}")
                             return
+                    else:
+                        print("ERROR!")
         except Exception as e:
             print(f"Send points failed: {e}")