small modifs

This commit is contained in:
Sébastien DI MERCURIO 2018-11-12 14:00:53 +01:00
parent 5da49a7e59
commit 111c118844
4 changed files with 113 additions and 54 deletions

View file

@ -200,6 +200,9 @@ public partial class MainWindow : Gtk.Window
a.RetVal = true; a.RetVal = true;
} }
private byte[] imageComplete;
private byte[] imageInProgress;
/// <summary> /// <summary>
/// Callback called when new message is received from server /// Callback called when new message is received from server
/// </summary> /// </summary>
@ -208,17 +211,47 @@ public partial class MainWindow : Gtk.Window
/// <param name="buffer">Raw buffer corresponding of received message</param> /// <param name="buffer">Raw buffer corresponding of received message</param>
public void OnCommandReceivedEvent(string header, string data, byte[] buffer) 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 we have received a valid message
if (header != null) if (header != null)
{ {
#if DEBUG #if DEBUG
// print message content // print message content
Console.WriteLine("Received header (" + header.Length + "): " + header); if (header.Length > 4)
if (header.ToUpper() != DestijlCommandList.HeaderStmImage) Console.WriteLine("Bad header(" + buffer.Length + ")");
{ else
if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data); Console.WriteLine("Received header (" + header.Length + "): " + header);
} //if (header.ToUpper() != DestijlCommandList.HeaderStmImage)
//{
// if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
//}
#endif #endif
// Image management
if (header == DestijlCommandList.HeaderStmImage)
{
imageComplete = imageInProgress;
imageInProgress = buffer;
}
else
{
if (imageInProgress == null) imageInProgress = buffer;
else
{
Array.Resize<byte>(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) // depending on message received (based on header)
// launch correponding action // launch correponding action
if (header.ToUpper() == DestijlCommandList.HeaderStmBat) 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 // if message is an image, convert it to a pixbuf
// that can be displayed // that can be displayed
byte[] image = new byte[buffer.Length - 4]; if (imageComplete != null)
System.Buffer.BlockCopy(buffer, 4, image, 0, image.Length); {
byte[] image = new byte[imageComplete.Length - 4];
System.Buffer.BlockCopy(imageComplete, 4, image, 0, image.Length);
imageReceivedCounter++; imageReceivedCounter++;
try try
{ {
drawingareaCameraPixbuf = new Pixbuf(image); drawingareaCameraPixbuf = new Pixbuf(image);
drawingAreaCamera.QueueDraw(); drawingAreaCamera.QueueDraw();
} }
catch (GLib.GException) catch (GLib.GException)
{ {
badImageReceivedCounter++; badImageReceivedCounter++;
#if DEBUG #if DEBUG
Console.WriteLine("Bad Image: " + badImageReceivedCounter + Console.WriteLine("Bad Image: " + badImageReceivedCounter +
" / " + imageReceivedCounter + " / " + imageReceivedCounter +
" (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)"); " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
#endif #endif
}
} }
} }
} }

Binary file not shown.

View file

@ -63,6 +63,8 @@ MessageToMon messageAnswered;
std::thread *threadTimer; std::thread *threadTimer;
std::thread *threadServer; std::thread *threadServer;
char* imgMsg = NULL;
using namespace std; using namespace std;
/* /*
@ -80,7 +82,8 @@ void ThreadTimer(void) {
struct timespec tim, tim2; struct timespec tim, tim2;
tim.tv_sec = 0; tim.tv_sec = 0;
tim.tv_nsec = 100000000; tim.tv_nsec = 100000000;
int cnt =0;
while (1) { while (1) {
//std::this_thread::sleep_for(std::chrono::seconds ) //std::this_thread::sleep_for(std::chrono::seconds )
//sleep(1); //sleep(1);
@ -89,24 +92,32 @@ void ThreadTimer(void) {
return; return;
} }
sysTick = true; cnt++;
if (cnt>=1)
{
sysTick = true;
cnt=0;
}
} }
} }
void printReceivedMessage(MessageFromMon *mes) { void printReceivedMessage(MessageFromMon *mes) {
cout << "Received " + to_string(receivedLength) + " data\n"; cout << "Received " + to_string(receivedLength) + " data";
cout << std::endl;
cout << "Header: "; cout << "Header: ";
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
cout << mes->header[i]; cout << mes->header[i];
} }
cout << "\nData: "; cout << std::endl;
cout << "Data: ";
for (int i = 0; i < receivedLength - 4; i++) { for (int i = 0; i < receivedLength - 4; i++) {
cout << mes->data[i]; cout << mes->data[i];
} }
cout << "\n"; cout << std::endl;
} }
int sendAnswer(string cmd, string data) { int sendAnswer(string cmd, string data) {
@ -115,7 +126,7 @@ int sendAnswer(string cmd, string data) {
msg = cmd + ':' + data; msg = cmd + ':' + data;
cout << "Answer: " + msg; cout << "Answer: " + msg;
cout << "\n"; cout << std::endl;
sendDataToServer((char*) msg.c_str(), msg.length()); sendDataToServer((char*) msg.c_str(), msg.length());
return status; return status;
@ -123,20 +134,23 @@ int sendAnswer(string cmd, string data) {
int sendBinaryData(string cmd, char* data, int length) { int sendBinaryData(string cmd, char* data, int length) {
int status = 0; 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); memcpy((void*) &imgMsg[4], (const void *) data, length);
msg[0] = cmd[0];
msg[1] = cmd[1];
msg[2] = cmd[2];
msg[3] = ':';
memcpy((void*) &msg[4], (const void *) data, length);
cout << "Answer: " + cmd; cout << "Answer: " + cmd;
cout << "\n"; cout << std::endl;
sendDataToServer(msg, length + 4);
free((void*) msg); lengthSend=sendDataToServer(imgMsg, length + 4);
cout << "Requested Length: " + to_string(length) + " / Send Length: " + to_string(lengthSend);
cout << std::endl;
return status; return status;
} }
@ -198,30 +212,39 @@ int main(int argc, char** argv) {
#else #else
if (open_communication_robot("/dev/ttyS0") != 0) { if (open_communication_robot("/dev/ttyS0") != 0) {
#endif /*__FOR_PC__ */ #endif /*__FOR_PC__ */
cerr << "Unable to open /dev/ttyUSB0: abort\n"; cerr << "Unable to open /dev/ttyUSB0: abort";
cout << std::endl;
return -1; return -1;
} }
cout << "Com port opened\n"; cout << "Com port opened";
cout << std::endl;
// Ouverture de la camera // Ouverture de la camera
if (open_camera(&cam) == -1) { if (open_camera(&cam) == -1) {
cerr << "Unable to open camera: abort\n"; cerr << "Unable to open camera: abort";
cout << std::endl;
return -1; return -1;
} }
cout << "Camera opened\n"; cout << "Camera opened";
cout << std::endl;
// Ouverture du serveur // Ouverture du serveur
socketID = openServer(5544); socketID = openServer(5544);
cout << "Server opened on port 5544\n"; cout << "Server opened on port 5544";
cout << std::endl;
threadTimer = new std::thread(ThreadTimer); threadTimer = new std::thread(ThreadTimer);
for (;;) { for (;;) {
cout << "Waiting for client to connect ...\n"; cout << "Waiting for client to connect ...";
cout << std::endl;
acceptClient(); acceptClient();
disconnected = false; disconnected = false;
dataReady = false; dataReady = false;
cout << "Client connected\n"; cout << "Client connected";
cout << std::endl;
threadServer = new std::thread(ThreadServer); threadServer = new std::thread(ThreadServer);
while (disconnected == false) { while (disconnected == false) {

View file

@ -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/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/project.xml=c1542014288000
/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/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/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/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/testeur/testeur/main.cpp=c1542017998000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp=c1541685829000 /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/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/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/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/.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/Makefile-variables.mk=c1542014288000
/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/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/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/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/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/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=c1541685829000
VERSION=1.3 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=c1541685829000
/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/definitions.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 /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp=c1541685829000