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