diff --git a/software/monitor/monitor/MonitorUI.cs b/software/monitor/monitor/MonitorUI.cs
index cc6dda2..d042c15 100644
--- a/software/monitor/monitor/MonitorUI.cs
+++ b/software/monitor/monitor/MonitorUI.cs
@@ -200,6 +200,9 @@ public partial class MainWindow : Gtk.Window
a.RetVal = true;
}
+ private byte[] imageComplete;
+ private byte[] imageInProgress;
+
///
/// Callback called when new message is received from server
///
@@ -208,17 +211,47 @@ public partial class MainWindow : Gtk.Window
/// Raw buffer corresponding of received message
public void OnCommandReceivedEvent(string header, string data, byte[] buffer)
{
+ if (buffer==null)
+ {
+ // we have lost server
+ ChangeState(SystemState.NotConnected);
+
+ MessagePopup(MessageType.Error,
+ ButtonsType.Ok, "Server lost",
+ "Server is down: disconnecting");
+ cmdManager.Close();
+ }
+
// if we have received a valid message
if (header != null)
{
#if DEBUG
// print message content
- Console.WriteLine("Received header (" + header.Length + "): " + header);
- if (header.ToUpper() != DestijlCommandList.HeaderStmImage)
- {
- if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
- }
+ if (header.Length > 4)
+ Console.WriteLine("Bad header(" + buffer.Length + ")");
+ else
+ Console.WriteLine("Received header (" + header.Length + "): " + header);
+ //if (header.ToUpper() != DestijlCommandList.HeaderStmImage)
+ //{
+ // if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
+ //}
#endif
+ // Image management
+ if (header == DestijlCommandList.HeaderStmImage)
+ {
+ imageComplete = imageInProgress;
+ imageInProgress = buffer;
+ }
+ else
+ {
+ if (imageInProgress == null) imageInProgress = buffer;
+ else
+ {
+ Array.Resize(ref imageInProgress, imageInProgress.Length + buffer.Length);
+ System.Buffer.BlockCopy(buffer, 0, imageInProgress, imageInProgress.Length - buffer.Length, buffer.Length);
+ }
+ }
+
// depending on message received (based on header)
// launch correponding action
if (header.ToUpper() == DestijlCommandList.HeaderStmBat)
@@ -243,23 +276,26 @@ public partial class MainWindow : Gtk.Window
{
// if message is an image, convert it to a pixbuf
// that can be displayed
- byte[] image = new byte[buffer.Length - 4];
- System.Buffer.BlockCopy(buffer, 4, image, 0, image.Length);
+ if (imageComplete != null)
+ {
+ byte[] image = new byte[imageComplete.Length - 4];
+ System.Buffer.BlockCopy(imageComplete, 4, image, 0, image.Length);
- imageReceivedCounter++;
- try
- {
- drawingareaCameraPixbuf = new Pixbuf(image);
- drawingAreaCamera.QueueDraw();
- }
- catch (GLib.GException)
- {
- badImageReceivedCounter++;
+ imageReceivedCounter++;
+ try
+ {
+ drawingareaCameraPixbuf = new Pixbuf(image);
+ drawingAreaCamera.QueueDraw();
+ }
+ catch (GLib.GException)
+ {
+ badImageReceivedCounter++;
#if DEBUG
- Console.WriteLine("Bad Image: " + badImageReceivedCounter +
- " / " + imageReceivedCounter +
- " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
-#endif
+ Console.WriteLine("Bad Image: " + badImageReceivedCounter +
+ " / " + imageReceivedCounter +
+ " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
+#endif
+ }
}
}
}
diff --git a/software/monitor/monitor/monitor b/software/monitor/monitor/monitor
index 45c541f..d65f28c 100755
Binary files a/software/monitor/monitor/monitor and b/software/monitor/monitor/monitor differ
diff --git a/software/raspberry/testeur/testeur/main.cpp b/software/raspberry/testeur/testeur/main.cpp
index 577f344..3bdccc8 100644
--- a/software/raspberry/testeur/testeur/main.cpp
+++ b/software/raspberry/testeur/testeur/main.cpp
@@ -63,6 +63,8 @@ MessageToMon messageAnswered;
std::thread *threadTimer;
std::thread *threadServer;
+char* imgMsg = NULL;
+
using namespace std;
/*
@@ -80,7 +82,8 @@ void ThreadTimer(void) {
struct timespec tim, tim2;
tim.tv_sec = 0;
tim.tv_nsec = 100000000;
-
+ int cnt =0;
+
while (1) {
//std::this_thread::sleep_for(std::chrono::seconds )
//sleep(1);
@@ -89,24 +92,32 @@ void ThreadTimer(void) {
return;
}
- sysTick = true;
+ cnt++;
+
+ if (cnt>=1)
+ {
+ sysTick = true;
+ cnt=0;
+ }
}
}
void printReceivedMessage(MessageFromMon *mes) {
- cout << "Received " + to_string(receivedLength) + " data\n";
+ cout << "Received " + to_string(receivedLength) + " data";
+ cout << std::endl;
cout << "Header: ";
for (int i = 0; i < 4; i++) {
cout << mes->header[i];
}
- cout << "\nData: ";
+ cout << std::endl;
+ cout << "Data: ";
for (int i = 0; i < receivedLength - 4; i++) {
cout << mes->data[i];
}
- cout << "\n";
+ cout << std::endl;
}
int sendAnswer(string cmd, string data) {
@@ -115,7 +126,7 @@ int sendAnswer(string cmd, string data) {
msg = cmd + ':' + data;
cout << "Answer: " + msg;
- cout << "\n";
+ cout << std::endl;
sendDataToServer((char*) msg.c_str(), msg.length());
return status;
@@ -123,20 +134,23 @@ int sendAnswer(string cmd, string data) {
int sendBinaryData(string cmd, char* data, int length) {
int status = 0;
- char* msg;
+ int lengthSend;
+
+ if (imgMsg != NULL) free((void*) imgMsg);
+ imgMsg = (char*) malloc(length + 4);
+ imgMsg[0] = cmd[0];
+ imgMsg[1] = cmd[1];
+ imgMsg[2] = cmd[2];
+ imgMsg[3] = ':';
- msg = (char*) malloc(length + 4);
- msg[0] = cmd[0];
- msg[1] = cmd[1];
- msg[2] = cmd[2];
- msg[3] = ':';
-
- memcpy((void*) &msg[4], (const void *) data, length);
+ memcpy((void*) &imgMsg[4], (const void *) data, length);
cout << "Answer: " + cmd;
- cout << "\n";
- sendDataToServer(msg, length + 4);
+ cout << std::endl;
- free((void*) msg);
+ lengthSend=sendDataToServer(imgMsg, length + 4);
+
+ cout << "Requested Length: " + to_string(length) + " / Send Length: " + to_string(lengthSend);
+ cout << std::endl;
return status;
}
@@ -198,30 +212,39 @@ int main(int argc, char** argv) {
#else
if (open_communication_robot("/dev/ttyS0") != 0) {
#endif /*__FOR_PC__ */
- cerr << "Unable to open /dev/ttyUSB0: abort\n";
+ cerr << "Unable to open /dev/ttyUSB0: abort";
+ cout << std::endl;
return -1;
}
- cout << "Com port opened\n";
+ cout << "Com port opened";
+ cout << std::endl;
// Ouverture de la camera
if (open_camera(&cam) == -1) {
- cerr << "Unable to open camera: abort\n";
+ cerr << "Unable to open camera: abort";
+ cout << std::endl;
+
return -1;
}
- cout << "Camera opened\n";
+ cout << "Camera opened";
+ cout << std::endl;
// Ouverture du serveur
socketID = openServer(5544);
- cout << "Server opened on port 5544\n";
+ cout << "Server opened on port 5544";
+ cout << std::endl;
threadTimer = new std::thread(ThreadTimer);
for (;;) {
- cout << "Waiting for client to connect ...\n";
+ cout << "Waiting for client to connect ...";
+ cout << std::endl;
acceptClient();
disconnected = false;
dataReady = false;
- cout << "Client connected\n";
+ cout << "Client connected";
+ cout << std::endl;
+
threadServer = new std::thread(ThreadServer);
while (disconnected == false) {
diff --git a/software/raspberry/testeur/testeur/nbproject/private/timestamps-10.105.1.13-pi-22 b/software/raspberry/testeur/testeur/nbproject/private/timestamps-10.105.1.13-pi-22
index fe5221c..727d827 100644
--- a/software/raspberry/testeur/testeur/nbproject/private/timestamps-10.105.1.13-pi-22
+++ b/software/raspberry/testeur/testeur/nbproject/private/timestamps-10.105.1.13-pi-22
@@ -1,26 +1,26 @@
-#Mon Nov 12 09:47:39 CET 2018
+#Mon Nov 12 11:20:04 CET 2018
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/robot.h=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/project.xml=c1541775358000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-impl.mk=c1541775357000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/project.xml=c1542014288000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-impl.mk=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/image.h=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/main.cpp=c1541778496000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp=c1541685829000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/main.cpp=c1542017998000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-Release.mk=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Package-Debug.bash=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/.gitignore=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-variables.mk=c1541775358000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/private/Makefile-variables.mk=c1541775358000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-variables.mk=c1542014288000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/private/Makefile-variables.mk=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/Makefile=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-Debug-rpi.mk=c1541776257000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-Debug-rpi.mk=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-Debug.mk=c1541775193000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/message.h=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp=c1541778370000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Package-Release.bash=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/.dep.inc=c1541685829000
VERSION=1.3
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/server.h=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/definitions.h=c1541685829000
-/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Package-Debug-rpi.bash=c1541775358000
+/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Package-Debug-rpi.bash=c1542014288000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp=c1541685829000