From 443335431b621721f11279902ffa8cb0889a7123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20DI=20MERCURIO?= Date: Mon, 12 Nov 2018 17:13:52 +0100 Subject: [PATCH] UDP a peu pres OK --- software/monitor/monitor/Client.cs | 5 + software/monitor/monitor/ClientUDP.cs | 69 +++---- software/monitor/monitor/MonitorUI.cs | 169 +++++++++++++----- software/monitor/monitor/monitor | Bin 104960 -> 105984 bytes .../raspberry/superviseur-robot/lib/server.h | 3 + .../superviseur-robot/lib/src/server.cpp | 39 ++-- software/raspberry/testeur/testeur/main.cpp | 11 +- .../testeur/nbproject/private/private.xml | 8 +- .../private/timestamps-10.105.1.13-pi-22 | 24 +-- 9 files changed, 209 insertions(+), 119 deletions(-) diff --git a/software/monitor/monitor/Client.cs b/software/monitor/monitor/Client.cs index 48bb9c9..a5de13b 100644 --- a/software/monitor/monitor/Client.cs +++ b/software/monitor/monitor/Client.cs @@ -164,6 +164,11 @@ namespace monitor Console.WriteLine("Connection to server dropped: " + e.ToString()); return; } + catch (System.IO.IOException e) + { + readEvent?.Invoke(null, null); + return ; + } newLength = 1; diff --git a/software/monitor/monitor/ClientUDP.cs b/software/monitor/monitor/ClientUDP.cs index 2ba7ae1..3b9d7ab 100644 --- a/software/monitor/monitor/ClientUDP.cs +++ b/software/monitor/monitor/ClientUDP.cs @@ -8,62 +8,47 @@ namespace monitor public static class ClientUDP { private const int listenPort = 11000; - private static byte[] ImageBuffer = null; - private static UdpClient listener = null; - private static IPEndPoint groupEP = null; + private static UdpClient clientUDP = null; + private static IPEndPoint ep = null; - public static void UDPOpen(int port) + public static void UDPOpen(string addr, int port) { - listener = new UdpClient(port); - groupEP = new IPEndPoint(IPAddress.Any, port); + clientUDP = new UdpClient(port); + ep = new IPEndPoint(IPAddress.Parse(addr), port); + clientUDP.Connect(ep); + + SendPing(); } public static void UDPClose() { - listener.Close(); + if (clientUDP!=null) + clientUDP.Close(); } - public static byte[] GetImage() + public static byte[] GetData() { - bool done = false; + Console.WriteLine("Waiting for broadcast"); + byte[] bytes = clientUDP.Receive(ref ep); - try - { - while (!done) - { - Console.WriteLine("Waiting for broadcast"); - byte[] bytes = listener.Receive(ref groupEP); + Console.WriteLine("Received broadcast from {0} :\n {1}\n", + ep.ToString(), + Encoding.ASCII.GetString(bytes, 0, bytes.Length)); + + return bytes; + } - Console.WriteLine("Received broadcast from {0} :\n {1}\n", - groupEP.ToString(), - Encoding.ASCII.GetString(bytes, 0, bytes.Length)); + public static bool SendPing() + { + byte[] msg = new byte[2]; + msg[0] = (byte)'O'; + msg[1] = (byte)'k'; - if (bytes[0]=='I') { - // Nouvelle trame recu - ImageBuffer = bytes; - } - else if (bytes[bytes.Length-1]=='D') - { - Array.Resize(ref ImageBuffer, ImageBuffer.Length + bytes.Length); // resize currrent buffer + Console.WriteLine("Ping Server to send address"); + clientUDP.Send(msg, msg.Length); - System.Buffer.BlockCopy(ImageBuffer, 0, bytes, ImageBuffer.Length-bytes.Length, bytes.Length); - done = true; - } - else{ - Array.Resize(ref ImageBuffer, ImageBuffer.Length + bytes.Length); // resize currrent buffer - - System.Buffer.BlockCopy(ImageBuffer, 0, bytes, ImageBuffer.Length-bytes.Length, bytes.Length); - } - } - - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - - return ImageBuffer; + return true; } } } diff --git a/software/monitor/monitor/MonitorUI.cs b/software/monitor/monitor/MonitorUI.cs index d042c15..82a3e10 100644 --- a/software/monitor/monitor/MonitorUI.cs +++ b/software/monitor/monitor/MonitorUI.cs @@ -24,6 +24,8 @@ using System; using Gtk; using Gdk; +using System.Threading; + using monitor; /// @@ -61,9 +63,28 @@ public partial class MainWindow : Gtk.Window /// private System.Timers.Timer batteryTimer; + /// + /// Counter for total image received, reset after CAM_OPEN is sent + /// private int imageReceivedCounter = 0; + + /// + /// Counter increased each time incorrect image is received + /// private int badImageReceivedCounter = 0; + /// + /// Buffer containing a complete image. + /// + private byte[] imageComplete; + + /// + /// Buffer used to store incoming image. + /// + private byte[] imageInProgress; + + private Thread imageThread; + /// /// Initializes a new instance of the class. /// @@ -120,7 +141,11 @@ public partial class MainWindow : Gtk.Window checkButtonCameraOn.Active = false; checkButtonRobotPosition.Active = false; - if (cmdManager != null) cmdManager.Close(); + if (cmdManager != null) + { + cmdManager.Close(); + ClientUDP.UDPClose(); + } batteryTimer.Stop(); break; @@ -195,14 +220,16 @@ public partial class MainWindow : Gtk.Window { Console.WriteLine("Bye bye"); - if (cmdManager != null) cmdManager.Close(); + if (cmdManager != null) + { + cmdManager.Close(); + ClientUDP.UDPClose(); + } + Application.Quit(); a.RetVal = true; } - private byte[] imageComplete; - private byte[] imageInProgress; - /// /// Callback called when new message is received from server /// @@ -211,7 +238,7 @@ public partial class MainWindow : Gtk.Window /// Raw buffer corresponding of received message public void OnCommandReceivedEvent(string header, string data, byte[] buffer) { - if (buffer==null) + if (buffer == null) { // we have lost server ChangeState(SystemState.NotConnected); @@ -220,6 +247,7 @@ public partial class MainWindow : Gtk.Window ButtonsType.Ok, "Server lost", "Server is down: disconnecting"); cmdManager.Close(); + ClientUDP.UDPClose(); } // if we have received a valid message @@ -231,10 +259,6 @@ public partial class MainWindow : Gtk.Window 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) @@ -272,32 +296,6 @@ public partial class MainWindow : Gtk.Window break; } } - else if (header.ToUpper() == DestijlCommandList.HeaderStmImage) - { - // if message is an image, convert it to a pixbuf - // that can be displayed - 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++; -#if DEBUG - Console.WriteLine("Bad Image: " + badImageReceivedCounter + - " / " + imageReceivedCounter + - " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)"); -#endif - } - } - } } } @@ -309,7 +307,12 @@ public partial class MainWindow : Gtk.Window protected void OnQuitActionActivated(object sender, EventArgs e) { Console.WriteLine("Bye bye 2"); - if (cmdManager != null) cmdManager.Close(); + if (cmdManager != null) + { + cmdManager.Close(); + ClientUDP.UDPClose(); + } + this.Destroy(); Application.Quit(); } @@ -366,14 +369,16 @@ public partial class MainWindow : Gtk.Window entryTimeout.Text = cmdManager.timeout.ToString(); } - // try to connect to givn server. + // try to connect to given server. try { status = cmdManager.Open(entryServerName.Text, Convert.ToInt32(entryServerPort.Text)); + ClientUDP.UDPOpen(entryServerName.Text,Convert.ToInt32(entryServerPort.Text) + 1); } - catch (Exception) + catch (Exception err) { Console.WriteLine("Something went wrong during connection"); + Console.WriteLine(err.ToString()); return; } @@ -401,6 +406,7 @@ public partial class MainWindow : Gtk.Window "Unable to open communication with robot.\nCheck that supervisor is accepting OPEN_COM_DMB command"); cmdManager.Close(); + ClientUDP.UDPClose(); } } } @@ -417,10 +423,10 @@ public partial class MainWindow : Gtk.Window DestijlCommandManager.CommandStatus status; //if robot is not activated - if (buttonRobotActivation.Label == "Activate") + if (buttonRobotActivation.Label == "Activate") { // if a startup with watchdog is requested - if (radioButtonWithWatchdog.Active) + if (radioButtonWithWatchdog.Active) { status = cmdManager.RobotStartWithWatchdog(); } @@ -545,6 +551,74 @@ public partial class MainWindow : Gtk.Window else batteryTimer.Start(); } + /// + /// Thread for image reception + /// + private void ImageThread() + { + byte[] imageFull = null; + byte[] imageBuffer = null; + byte[] bytes; + bool done = false; + + while (true) + { + bytes = new byte[1]; + bytes[0] = 0; + + try + { + bytes = ClientUDP.GetData(); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } + + if (bytes[0] == (byte)'I') + { + // Nouvelle trame recu + imageFull = imageBuffer; + imageBuffer = bytes; + done = true; + } + + else + { + Array.Resize(ref imageBuffer, imageBuffer.Length + bytes.Length); // resize currrent buffer + System.Buffer.BlockCopy(imageBuffer, 0, bytes, imageBuffer.Length - bytes.Length, bytes.Length); + } + + + if (done) + { + done = false; + + if (imageFull != null) + { + byte[] image = new byte[imageFull.Length - 4]; + System.Buffer.BlockCopy(imageFull, 4, image, 0, image.Length); + + imageReceivedCounter++; + try + { + drawingareaCameraPixbuf = new Pixbuf(image); + drawingAreaCamera.QueueDraw(); + } + catch (GLib.GException) + { + badImageReceivedCounter++; +#if DEBUG + Console.WriteLine("Bad Image: " + badImageReceivedCounter + + " / " + imageReceivedCounter + + " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)"); +#endif + } + } + } + } + } + /// /// Callback called when checkbutton for camera is clicked /// @@ -561,6 +635,14 @@ public partial class MainWindow : Gtk.Window ButtonsType.Ok, "Error", "Error when closing camera: bad answer for supervisor or timeout"); } + else + { + if (imageThread != null) + { + imageThread.Abort(); + imageThread = null; + } + } } else // camera is not active, switch it on { @@ -574,6 +656,11 @@ public partial class MainWindow : Gtk.Window "Error when opening camera: bad answer for supervisor or timeout"); checkButtonCameraOn.Active = false; } + else + { + imageThread = new Thread(new ThreadStart(ImageThread)); + imageThread.Start(); + } } } diff --git a/software/monitor/monitor/monitor b/software/monitor/monitor/monitor index d65f28ccb20963cd6bfb8e2953b14a070e75a2b9..d6b81c1ed3ecdeb2ee568f1a59377407e2bf39ed 100755 GIT binary patch delta 20798 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 B-)jH> delta 19568 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 diff --git a/software/raspberry/superviseur-robot/lib/server.h b/software/raspberry/superviseur-robot/lib/server.h index 31904db..b571960 100644 --- a/software/raspberry/superviseur-robot/lib/server.h +++ b/software/raspberry/superviseur-robot/lib/server.h @@ -24,5 +24,8 @@ int sendDataToServer(char *data, int length); int sendDataToServerForClient(int client, char *data, int length); int receiveDataFromServer(char *data, int size); int receiveDataFromServerFromClient(int client, char *data, int size); + +int sendCamImage(char *data, int length); +void waitUdpPing(void); #endif /* _SERVER_H_ */ diff --git a/software/raspberry/superviseur-robot/lib/src/server.cpp b/software/raspberry/superviseur-robot/lib/src/server.cpp index 85b65a4..ee3fa26 100644 --- a/software/raspberry/superviseur-robot/lib/src/server.cpp +++ b/software/raspberry/superviseur-robot/lib/src/server.cpp @@ -53,7 +53,7 @@ int openServer(int port) { listen(socketFD, NB_CONNECTION_MAX); /* Open UDP connection */ - socketUDP = socket(AF_INET, SOCK_DGRAM, 0); + socketUDP = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (socketUDP < 0) { perror("Can not create UDP socket"); exit(-1); @@ -114,33 +114,38 @@ void waitUDPClientAddr(void) MSG_WAITALL, ( struct sockaddr *) &UDPcliaddr, &UDPcliaddrlen); } -int sendImage(char *data, int length) { +int sendCamImage(char *data, int length) { if (clientID >= 0) { - UDPBuffer= (char*)malloc(length+12); + UDPBuffer= (char*)malloc(length+4); UDPBuffer[0]='I'; - UDPBuffer[1]='N'; - UDPBuffer[2]='S'; - UDPBuffer[3]='A'; - UDPBuffer[4]='B'; - UDPBuffer[5]='G'; + UDPBuffer[1]='M'; + UDPBuffer[2]='G'; + UDPBuffer[3]=':'; - UDPBuffer[length+6]='A'; - UDPBuffer[length+7]='S'; - UDPBuffer[length+8]='N'; - UDPBuffer[length+9]='I'; - UDPBuffer[length+10]='E'; - UDPBuffer[length+11]='D'; + memcpy((void*)(UDPBuffer+4),(const void *)data, length); - memcpy((void*)(UDPBuffer+6),(const void *)data, length); - - return sendto(socketUDP, data, length, + return sendto(socketUDP, UDPBuffer, length+4, MSG_CONFIRM, (const struct sockaddr *) &UDPcliaddr, UDPcliaddrlen); } else return 0; } +void waitUdpPing(void) +{ + char msg[4]; + volatile int i=0; + + // Wait for client to send a small message, to get its IP + UDPcliaddrlen = sizeof(UDPcliaddr); + bzero(&UDPcliaddr, sizeof(UDPcliaddr)); + + recvfrom(socketUDP, msg, 2, 0, (sockaddr *)&UDPcliaddr, &UDPcliaddrlen); + printf("Received packet from %s:%d\n", + inet_ntoa(UDPcliaddr.sin_addr), ntohs(UDPcliaddr.sin_port)); +} + int receiveDataFromServer(char *data, int size) { return receiveDataFromServerFromClient(clientID, data, size); } diff --git a/software/raspberry/testeur/testeur/main.cpp b/software/raspberry/testeur/testeur/main.cpp index 3bdccc8..1dba719 100644 --- a/software/raspberry/testeur/testeur/main.cpp +++ b/software/raspberry/testeur/testeur/main.cpp @@ -206,6 +206,7 @@ int decodeMessage(MessageFromMon *mes, int dataLength) { int main(int argc, char** argv) { + int lengthSend; // Ouverture de la com robot #ifdef __FOR_PC__ if (open_communication_robot("/dev/ttyUSB0") != 0) { @@ -233,7 +234,11 @@ int main(int argc, char** argv) { socketID = openServer(5544); cout << "Server opened on port 5544"; cout << std::endl; + cout << "UDP Server opened on port 5545"; + cout << std::endl; + waitUdpPing(); + threadTimer = new std::thread(ThreadTimer); for (;;) { @@ -271,8 +276,12 @@ int main(int argc, char** argv) { if (sendImage) { compress_image(&monImage, &imageCompressed); int length = imageCompressed.size(); - sendBinaryData(HEADER_STM_IMAGE, reinterpret_cast (imageCompressed.data()), length); + //sendBinaryData(HEADER_STM_IMAGE, reinterpret_cast (imageCompressed.data()), length); //sendAnswer(HEADER_STM_IMAGE, reinterpret_cast (imageCompressed.data())); + lengthSend=sendCamImage(reinterpret_cast (imageCompressed.data()), length); + + cout << "Requested Length: " + to_string(length) + " / Send Length: " + to_string(lengthSend); + cout << std::endl; } if (sendPos) { diff --git a/software/raspberry/testeur/testeur/nbproject/private/private.xml b/software/raspberry/testeur/testeur/nbproject/private/private.xml index e7af67d..1d5cbc6 100644 --- a/software/raspberry/testeur/testeur/nbproject/private/private.xml +++ b/software/raspberry/testeur/testeur/nbproject/private/private.xml @@ -7,17 +7,13 @@ -<<<<<<< HEAD - file:/home/dimercur/Documents/Travail/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp - file:/home/dimercur/Documents/Travail/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp - file:/home/dimercur/Documents/Travail/dumber/software/raspberry/testeur/testeur/main.cpp -======= file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/image.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/server.h + file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/main.cpp file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/robot.h ->>>>>>> dev 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 727d827..ae04fb4 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 11:20:04 CET 2018 +#Mon Nov 12 17:04:27 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=c1542014288000 -/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-impl.mk=c1542014288000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/project.xml=c1542029322000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-impl.mk=c1542029322000 /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=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/main.cpp=c1542036786000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp=c1542038373000 /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=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/nbproject/Makefile-variables.mk=c1542029322000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/private/Makefile-variables.mk=c1542029322000 /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=c1542014288000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Makefile-Debug-rpi.mk=c1542029322000 /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=c1542014288000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp=c1542029322000 /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 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/.dep.inc=c1542035117000 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/server.h=c1542036764000 /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=c1542014288000 +/home/dimercur/Documents/Travail/git/dumber/software/raspberry/testeur/testeur/nbproject/Package-Debug-rpi.bash=c1542029322000 /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp=c1541685829000