small modifs
This commit is contained in:
parent
5da49a7e59
commit
111c118844
4 changed files with 113 additions and 54 deletions
|
@ -200,6 +200,9 @@ public partial class MainWindow : Gtk.Window
|
|||
a.RetVal = true;
|
||||
}
|
||||
|
||||
private byte[] imageComplete;
|
||||
private byte[] imageInProgress;
|
||||
|
||||
/// <summary>
|
||||
/// Callback called when new message is received from server
|
||||
/// </summary>
|
||||
|
@ -208,17 +211,47 @@ public partial class MainWindow : Gtk.Window
|
|||
/// <param name="buffer">Raw buffer corresponding of received message</param>
|
||||
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<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)
|
||||
// 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 + "%)");
|
||||
Console.WriteLine("Bad Image: " + badImageReceivedCounter +
|
||||
" / " + imageReceivedCounter +
|
||||
" (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
|
@ -63,6 +63,8 @@ MessageToMon messageAnswered;
|
|||
std::thread *threadTimer;
|
||||
std::thread *threadServer;
|
||||
|
||||
char* imgMsg = NULL;
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
|
@ -80,6 +82,7 @@ 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 )
|
||||
|
@ -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;
|
||||
|
||||
msg = (char*) malloc(length + 4);
|
||||
msg[0] = cmd[0];
|
||||
msg[1] = cmd[1];
|
||||
msg[2] = cmd[2];
|
||||
msg[3] = ':';
|
||||
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] = ':';
|
||||
|
||||
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) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue