images are now sent using base64. 40fps on localhost, test to be done on raspberry
This commit is contained in:
parent
7f0be2d5fd
commit
8bf6c73dbb
40 changed files with 1021 additions and 1289 deletions
16
.vscode/c_cpp_properties.json
vendored
16
.vscode/c_cpp_properties.json
vendored
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Linux",
|
|
||||||
"includePath": [
|
|
||||||
"${workspaceFolder}/**"
|
|
||||||
],
|
|
||||||
"defines": [],
|
|
||||||
"compilerPath": "/usr/bin/clang",
|
|
||||||
"cStandard": "c11",
|
|
||||||
"cppStandard": "c++17",
|
|
||||||
"intelliSenseMode": "clang-x64"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": 4
|
|
||||||
}
|
|
16
.vscode/tasks.json
vendored
16
.vscode/tasks.json
vendored
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
|
||||||
// for the documentation about the tasks.json format
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"taskName": "Compile on raspberry",
|
|
||||||
"command": "rsync -az '${file}' 10.105.1.6:~ && ssh server.example.org 'chmod +x ./${fileBasename}; ./${fileBasename}'",
|
|
||||||
"type": "shell",
|
|
||||||
"group": {
|
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -23,6 +23,8 @@ using System;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace monitor
|
namespace monitor
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -66,21 +68,26 @@ namespace monitor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static byte[] receiveBuffer;
|
private static byte[] receiveBuffer;
|
||||||
|
|
||||||
private static int initialReceiveBufferIndex = 0;
|
//private static int initialReceiveBufferIndex = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// String containing received message from tcp server
|
/// String containing received message from tcp server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static StringBuilder message = new StringBuilder();
|
private static StringBuilder message = new StringBuilder();
|
||||||
private static int newLength = 1;
|
//private static int newLength = 1;
|
||||||
private static int packetCounter = 0;
|
//private static int packetCounter = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback to send received message to upper level
|
/// Callback to send received message to upper level
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void ReadEvent(string msg, byte[] buffer);
|
public delegate void ReadEvent(string msg);
|
||||||
public static ReadEvent readEvent = null;
|
public static ReadEvent readEvent = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Thread used in reception
|
||||||
|
/// </summary>
|
||||||
|
private static Thread readThread;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Open connection to server "host", on default port number.
|
/// Open connection to server "host", on default port number.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -114,7 +121,12 @@ namespace monitor
|
||||||
|
|
||||||
// received data are stored in buffer
|
// received data are stored in buffer
|
||||||
// Next reading will be done in ReadCallback method
|
// Next reading will be done in ReadCallback method
|
||||||
stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message);
|
stream.BeginRead(buffer, 0, 1, new AsyncCallback(ReadCallback), message);
|
||||||
|
|
||||||
|
// Start reading thread
|
||||||
|
//message.Clear();
|
||||||
|
//readThread = new Thread(new ThreadStart(ReadCallback));
|
||||||
|
//readThread.Start();
|
||||||
}
|
}
|
||||||
catch (ArgumentNullException e)
|
catch (ArgumentNullException e)
|
||||||
{
|
{
|
||||||
|
@ -144,19 +156,142 @@ namespace monitor
|
||||||
if (client != null) client.Close();
|
if (client != null) client.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Callback call by stream.BeginRead after reception of newLength data
|
||||||
|
/// </summary>
|
||||||
|
//private static void ReadCallback()
|
||||||
|
//{
|
||||||
|
// char character;
|
||||||
|
// int data;
|
||||||
|
// byte[] buffer=new byte[4096];
|
||||||
|
// int lengthRead;
|
||||||
|
|
||||||
|
// while (client.Connected)
|
||||||
|
// {
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// //data = stream.ReadByte();
|
||||||
|
// lengthRead = stream.Read(buffer, 0, buffer.Length);
|
||||||
|
// }
|
||||||
|
// catch (ObjectDisposedException)
|
||||||
|
// {
|
||||||
|
// Console.WriteLine("Connection to server dropped (object disposed)!");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// catch (System.IO.IOException)
|
||||||
|
// {
|
||||||
|
// Console.WriteLine("Connection to server dropped (other error)");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (lengthRead > 0) // a data was read
|
||||||
|
// {
|
||||||
|
// //character = (char)data;
|
||||||
|
// var str = System.Text.Encoding.Default.GetString(buffer);
|
||||||
|
// int indexOf = str.IndexOf('\n');
|
||||||
|
|
||||||
|
// //if (character != '\n')
|
||||||
|
// if (indexOf == -1) // \n doesn't exists
|
||||||
|
// {
|
||||||
|
// message.Append(str);
|
||||||
|
|
||||||
|
// //if (receiveBuffer == null) receiveBuffer = new byte[1];
|
||||||
|
// //else Array.Resize<byte>(ref receiveBuffer, receiveBuffer.Length + 1); // resize currrent buffer
|
||||||
|
|
||||||
|
// //receiveBuffer[receiveBuffer.Length - 1] = (byte)data;
|
||||||
|
// }
|
||||||
|
// else // end of string found
|
||||||
|
// {
|
||||||
|
// message.Append((str.Substring(0,indexOf)));
|
||||||
|
// readEvent?.Invoke(message.ToString(), receiveBuffer);
|
||||||
|
|
||||||
|
// message.Clear();
|
||||||
|
// receiveBuffer = null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback call by stream.BeginRead after reception of newLength data
|
/// Callback call by stream.BeginRead after reception of newLength data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ar">Not sure of what is it, but needed for terminate reading</param>
|
/// <param name="ar">Not sure of what is it, but needed for terminate reading</param>
|
||||||
|
//private static void ReadCallback(IAsyncResult ar)
|
||||||
|
//{
|
||||||
|
// if (client.Connected)
|
||||||
|
// {
|
||||||
|
// int bytesRead;
|
||||||
|
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// // Termintae read operation, and get number of byte stored in buffer
|
||||||
|
// bytesRead = stream.EndRead(ar);
|
||||||
|
// }
|
||||||
|
// catch (ObjectDisposedException e)
|
||||||
|
// {
|
||||||
|
// Console.WriteLine("Connection to server dropped: " + e.ToString());
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// newLength = 1;
|
||||||
|
|
||||||
|
// // if number of byte read is not 0, concatenate string and buffer
|
||||||
|
// if (bytesRead > 0)
|
||||||
|
// {
|
||||||
|
// packetCounter++;
|
||||||
|
|
||||||
|
// if (packetCounter >= 3)
|
||||||
|
// {
|
||||||
|
// //Console.WriteLine("Supplementary packet " + packetCounter);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Append new data to current string (expecting data are ascii)
|
||||||
|
// message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead));
|
||||||
|
|
||||||
|
// // Similarly, append received bytes to current buffer
|
||||||
|
// if (receiveBuffer == null) receiveBuffer = new byte[bytesRead];
|
||||||
|
// else Array.Resize<byte>(ref receiveBuffer, initialReceiveBufferIndex + bytesRead); // resize currrent buffer
|
||||||
|
|
||||||
|
// System.Buffer.BlockCopy(buffer, 0, receiveBuffer, initialReceiveBufferIndex, bytesRead); // and add received data
|
||||||
|
// initialReceiveBufferIndex = receiveBuffer.Length; // move last index of current buffer
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // if it remains received data, prepare for a new reading (get another buffer to append to current one)
|
||||||
|
// if (client.Available > 0)
|
||||||
|
// {
|
||||||
|
// newLength = client.Available;
|
||||||
|
// if (newLength > BufferMaxSize) newLength = BufferMaxSize;
|
||||||
|
// else newLength = client.Available;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// // no more data to read, buffer and string can be send to upper level
|
||||||
|
// readEvent?.Invoke(message.ToString(), receiveBuffer);
|
||||||
|
|
||||||
|
// message.Clear();
|
||||||
|
// receiveBuffer = null;
|
||||||
|
// initialReceiveBufferIndex = 0;
|
||||||
|
// packetCounter = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Prepare for reading new data
|
||||||
|
// if (newLength> BufferMaxSize) newLength = BufferMaxSize;
|
||||||
|
// if (newLength <= 0) newLength = 1;
|
||||||
|
// stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
private static void ReadCallback(IAsyncResult ar)
|
private static void ReadCallback(IAsyncResult ar)
|
||||||
{
|
{
|
||||||
|
int newLength = 1;
|
||||||
|
|
||||||
if (client.Connected)
|
if (client.Connected)
|
||||||
{
|
{
|
||||||
int bytesRead;
|
int bytesRead;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Termintae read operation, and get number of byte stored in buffer
|
// Terminate read operation, and get number of byte stored in buffer
|
||||||
bytesRead = stream.EndRead(ar);
|
bytesRead = stream.EndRead(ar);
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException e)
|
catch (ObjectDisposedException e)
|
||||||
|
@ -165,27 +300,13 @@ namespace monitor
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newLength = 1;
|
//newLength = 1;
|
||||||
|
|
||||||
// if number of byte read is not 0, concatenate string and buffer
|
// if number of byte read is not 0, concatenate string and buffer
|
||||||
if (bytesRead > 0)
|
if (bytesRead > 0)
|
||||||
{
|
{
|
||||||
packetCounter++;
|
|
||||||
|
|
||||||
if (packetCounter >= 3)
|
|
||||||
{
|
|
||||||
//Console.WriteLine("Supplementary packet " + packetCounter);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append new data to current string (expecting data are ascii)
|
// Append new data to current string (expecting data are ascii)
|
||||||
message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead));
|
message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead));
|
||||||
|
|
||||||
// Similarly, append received bytes to current buffer
|
|
||||||
if (receiveBuffer == null) receiveBuffer = new byte[bytesRead];
|
|
||||||
else Array.Resize<byte>(ref receiveBuffer, initialReceiveBufferIndex + bytesRead); // resize currrent buffer
|
|
||||||
|
|
||||||
System.Buffer.BlockCopy(buffer, 0, receiveBuffer, initialReceiveBufferIndex, bytesRead); // and add received data
|
|
||||||
initialReceiveBufferIndex = receiveBuffer.Length; // move last index of current buffer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if it remains received data, prepare for a new reading (get another buffer to append to current one)
|
// if it remains received data, prepare for a new reading (get another buffer to append to current one)
|
||||||
|
@ -198,12 +319,9 @@ namespace monitor
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// no more data to read, buffer and string can be send to upper level
|
// no more data to read, buffer and string can be send to upper level
|
||||||
readEvent?.Invoke(message.ToString(), receiveBuffer);
|
readEvent?.Invoke(message.ToString());
|
||||||
|
|
||||||
message.Clear();
|
message.Clear();
|
||||||
receiveBuffer = null;
|
|
||||||
initialReceiveBufferIndex = 0;
|
|
||||||
packetCounter = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepare for reading new data
|
// Prepare for reading new data
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace monitor
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback for sending received data to upper level
|
/// Callback for sending received data to upper level
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void CommandReceivedEvent(string msg, byte[] buffer);
|
public delegate void CommandReceivedEvent(string msg);
|
||||||
public CommandReceivedEvent commandReceivedEvent = null;
|
public CommandReceivedEvent commandReceivedEvent = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -122,7 +122,7 @@ namespace monitor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">Message received from server</param>
|
/// <param name="message">Message received from server</param>
|
||||||
/// <param name="buffer">Raw buffer reived from server</param>
|
/// <param name="buffer">Raw buffer reived from server</param>
|
||||||
private void OnMessageReception(string message, byte[] buffer)
|
private void OnMessageReception(string message)
|
||||||
{
|
{
|
||||||
waitTimer.Stop(); // Stop timeout stopwatch
|
waitTimer.Stop(); // Stop timeout stopwatch
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ namespace monitor
|
||||||
|
|
||||||
waitForAcknowledge = false;
|
waitForAcknowledge = false;
|
||||||
|
|
||||||
this.commandReceivedEvent?.Invoke(message, buffer);
|
this.commandReceivedEvent?.Invoke(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ namespace monitor
|
||||||
messageReceived = null;
|
messageReceived = null;
|
||||||
// set buffer and message as null to indicate that no message was received
|
// set buffer and message as null to indicate that no message was received
|
||||||
// and call to OnMessagereception is due to timeout
|
// and call to OnMessagereception is due to timeout
|
||||||
OnMessageReception(messageReceived, null);
|
OnMessageReception(messageReceived);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace monitor
|
namespace monitor
|
||||||
{
|
{
|
||||||
|
@ -28,47 +29,84 @@ namespace monitor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class DestijlCommandList
|
public static class DestijlCommandList
|
||||||
{
|
{
|
||||||
public const string HeaderMtsComDmb = "COM";
|
public const string ANSWER_ACK = "AACK";
|
||||||
public const string HeaderMtsDmbOrder = "DMB";
|
public const string ANSWER_NACK = "ANAK";
|
||||||
public const string HeaderMtsCamera = "CAM";
|
public const string ANSWER_COM_ERROR = "ACER";
|
||||||
public const string HeaderMtsMessage = "MSG";
|
public const string ANSWER_TIMEOUT = "ATIM";
|
||||||
|
public const string ANSWER_CMD_REJECTED = "ACRJ";
|
||||||
|
public const string MESSAGE = "MSSG";
|
||||||
|
public const string CAMERA_OPEN = "COPN";
|
||||||
|
public const string CAMERA_CLOSE = "CCLS";
|
||||||
|
public const string CAMERA_IMAGE = "CIMG";
|
||||||
|
public const string CAMERA_ARENA_ASK = "CASA";
|
||||||
|
public const string CAMERA_ARENA_INFIRM = "CAIN";
|
||||||
|
public const string CAMERA_ARENA_CONFIRM = "CACO";
|
||||||
|
public const string CAMERA_POSITION_COMPUTE = "CPCO";
|
||||||
|
public const string CAMERA_POSITION_STOP = "CPST";
|
||||||
|
public const string CAMERA_POSITION = "CPOS";
|
||||||
|
public const string ROBOT_COM_OPEN = "ROPN";
|
||||||
|
public const string ROBOT_COM_CLOSE = "RCLS";
|
||||||
|
public const string ROBOT_PING = "RPIN";
|
||||||
|
public const string ROBOT_RESET = "RRST";
|
||||||
|
public const string ROBOT_START_WITHOUT_WD = "RSOW";
|
||||||
|
public const string ROBOT_START_WITH_WD = "RSWW";
|
||||||
|
public const string ROBOT_RELOAD_WD = "RLDW";
|
||||||
|
public const string ROBOT_MOVE = "RMOV";
|
||||||
|
public const string ROBOT_TURN = "RTRN";
|
||||||
|
public const string ROBOT_GO_FORWARD = "RGFW";
|
||||||
|
public const string ROBOT_GO_BACKWARD = "RGBW";
|
||||||
|
public const string ROBOT_GO_LEFT = "RGLF";
|
||||||
|
public const string ROBOT_GO_RIGHT = "RGRI";
|
||||||
|
public const string ROBOT_STOP = "RSTP";
|
||||||
|
public const string ROBOT_POWEROFF = "RPOF";
|
||||||
|
public const string ROBOT_BATTERY_LEVEL = "RBLV";
|
||||||
|
public const string ROBOT_GET_BATTERY = "RGBT";
|
||||||
|
public const string ROBOT_GET_STATE = "RGST";
|
||||||
|
public const string ROBOT_CURRENT_STATE = "RCST";
|
||||||
|
|
||||||
public const string DataComOpen = "o";
|
public const char SEPARATOR_CHAR = ':';
|
||||||
public const string DataComClose = "C";
|
|
||||||
|
|
||||||
public const string DataCamOpen = "A";
|
//public const string HeaderMtsComDmb = "COM";
|
||||||
public const string DataCamClose = "I";
|
//public const string HeaderMtsDmbOrder = "DMB";
|
||||||
public const string DataCamAskArena = "y";
|
//public const string HeaderMtsCamera = "CAM";
|
||||||
public const string DataCamArenaConfirm = "x";
|
//public const string HeaderMtsMessage = "MSG";
|
||||||
public const string DataCamInfirm = "z";
|
|
||||||
public const string DataCamComputePosition = "p";
|
|
||||||
public const string DataCamStopComputePosition = "s";
|
|
||||||
|
|
||||||
public const string HeaderStmAck = "ACK";
|
//public const string DataComOpen = "o";
|
||||||
public const string HeaderStmNoAck = "NAK";
|
//public const string DataComClose = "C";
|
||||||
public const string HeaderStmLostDmb = "LCD";
|
|
||||||
public const string HeaderStmImage = "IMG";
|
//public const string DataCamOpen = "A";
|
||||||
public const string HeaderStmPos = "POS";
|
//public const string DataCamClose = "I";
|
||||||
public const string HeaderStmMes = "MSG";
|
//public const string DataCamAskArena = "y";
|
||||||
public const string HeaderStmBat = "BAT";
|
//public const string DataCamArenaConfirm = "x";
|
||||||
|
//public const string DataCamInfirm = "z";
|
||||||
|
//public const string DataCamComputePosition = "p";
|
||||||
|
//public const string DataCamStopComputePosition = "s";
|
||||||
|
|
||||||
|
//public const string HeaderStmAck = "ACK";
|
||||||
|
//public const string HeaderStmNoAck = "NAK";
|
||||||
|
//public const string HeaderStmLostDmb = "LCD";
|
||||||
|
//public const string HeaderStmImage = "IMG";
|
||||||
|
//public const string HeaderStmPos = "POS";
|
||||||
|
//public const string HeaderStmMes = "MSG";
|
||||||
|
//public const string HeaderStmBat = "BAT";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Commands used for robot messages
|
/// Commands used for robot messages
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class RobotCommandList
|
//public static class RobotCommandList
|
||||||
{
|
//{
|
||||||
public const string RobotPing = "p";
|
// public const string RobotPing = "p";
|
||||||
public const string RobotReset = "r";
|
// public const string RobotReset = "r";
|
||||||
public const string RobotStartWithoutWatchdog = "u";
|
// public const string RobotStartWithoutWatchdog = "u";
|
||||||
public const string RobotStartWithWatchdog = "W";
|
// public const string RobotStartWithWatchdog = "W";
|
||||||
public const string RobotGetBattery = "v";
|
// public const string RobotGetBattery = "v";
|
||||||
public const string RobotGetBusyState = "b";
|
// public const string RobotGetBusyState = "b";
|
||||||
public const string RobotMove = "M";
|
// public const string RobotMove = "M";
|
||||||
public const string RobotTurn = "T";
|
// public const string RobotTurn = "T";
|
||||||
public const string RobotGetVersion = "V";
|
// public const string RobotGetVersion = "V";
|
||||||
public const string RobotPowerOff = "z";
|
// public const string RobotPowerOff = "z";
|
||||||
}
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specialization class for command manager, which implemnent destijl protocol between monitor and server
|
/// Specialization class for command manager, which implemnent destijl protocol between monitor and server
|
||||||
|
@ -93,7 +131,7 @@ namespace monitor
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback for sending received data to application level
|
/// Callback for sending received data to application level
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void CommandReceivedEvent(string header, string data, byte[] buffer);
|
public delegate void CommandReceivedEvent(string header, string data);
|
||||||
public CommandReceivedEvent commandReceivedEvent = null;
|
public CommandReceivedEvent commandReceivedEvent = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -114,6 +152,34 @@ namespace monitor
|
||||||
CommunicationLostWithServer
|
CommunicationLostWithServer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct Point {
|
||||||
|
public double x;
|
||||||
|
public double y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Position {
|
||||||
|
public int robotID;
|
||||||
|
public double angle;
|
||||||
|
public Point centre;
|
||||||
|
public Point direction;
|
||||||
|
|
||||||
|
public Position() {
|
||||||
|
robotID = 0;
|
||||||
|
angle = 0.0;
|
||||||
|
centre.x = 0.0;
|
||||||
|
centre.y = 0.0;
|
||||||
|
direction.x = 0.0;
|
||||||
|
direction.y = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() {
|
||||||
|
string s = "ID: " + robotID + ", Angle: " + angle +
|
||||||
|
", Centre (x: " + centre.x + ", y: " + centre.y +
|
||||||
|
"), Direction (x: " + direction.x + ", y: " + direction.y + ")";
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="monitor.DestijlCommandManager"/> class.
|
/// Initializes a new instance of the <see cref="monitor.DestijlCommandManager"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -138,10 +204,13 @@ namespace monitor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="msg">String containing received message</param>
|
/// <param name="msg">String containing received message</param>
|
||||||
/// <param name="buffer">Raw buffer to be used when data are not in ascii format (image for example)</param>
|
/// <param name="buffer">Raw buffer to be used when data are not in ascii format (image for example)</param>
|
||||||
private void OnCommandReceived(string msg, byte[] buffer)
|
private void OnCommandReceived(string msg)
|
||||||
{
|
{
|
||||||
// Firstly, split message in (at least) two part : header, and data
|
// Firstly, remove ending \n and everything after
|
||||||
string[] msgs = msg.Split(':');
|
string[] msgsCarriageReturn = msg.Split('\n');
|
||||||
|
|
||||||
|
// Second, split message in (at least) two part : header, and data
|
||||||
|
string[] msgs = msgsCarriageReturn[0].Split(DestijlCommandList.SEPARATOR_CHAR);
|
||||||
|
|
||||||
// If it exist at least on element in string array, it should be command header
|
// If it exist at least on element in string array, it should be command header
|
||||||
if (msgs.Length >= 1) receivedHeader = msgs[0];
|
if (msgs.Length >= 1) receivedHeader = msgs[0];
|
||||||
|
@ -152,7 +221,7 @@ namespace monitor
|
||||||
else receivedData = null;
|
else receivedData = null;
|
||||||
|
|
||||||
// when split is done, provide data to application
|
// when split is done, provide data to application
|
||||||
this.commandReceivedEvent?.Invoke(receivedHeader, receivedData, buffer);
|
this.commandReceivedEvent?.Invoke(receivedHeader, receivedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -193,7 +262,17 @@ namespace monitor
|
||||||
/// <param name="data">Data part of the command</param>
|
/// <param name="data">Data part of the command</param>
|
||||||
private string CreateCommand(string header, string data)
|
private string CreateCommand(string header, string data)
|
||||||
{
|
{
|
||||||
return header + ":" + data;
|
return header + DestijlCommandList.SEPARATOR_CHAR + data+"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates the command to send to server, based on header
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The command string</returns>
|
||||||
|
/// <param name="header">Header part of the command</param>
|
||||||
|
private string CreateCommand(string header)
|
||||||
|
{
|
||||||
|
return header + DestijlCommandList.SEPARATOR_CHAR+"\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -215,9 +294,9 @@ namespace monitor
|
||||||
if (answer != null)
|
if (answer != null)
|
||||||
{
|
{
|
||||||
// if command is not acknowledged, return Rejected
|
// if command is not acknowledged, return Rejected
|
||||||
if (answer.ToUpper().Contains(DestijlCommandList.HeaderStmNoAck)) status = CommandStatus.Rejected;
|
if (answer.ToUpper().Contains(DestijlCommandList.ANSWER_NACK)) status = CommandStatus.Rejected;
|
||||||
// if communication is lost with robot, return CommunicationLostWithRobot
|
// if communication is lost with robot, return CommunicationLostWithRobot
|
||||||
else if (answer.ToUpper().Contains(DestijlCommandList.HeaderStmLostDmb)) status = CommandStatus.CommunicationLostWithRobot;
|
else if (answer.ToUpper().Contains(DestijlCommandList.ANSWER_TIMEOUT)) status = CommandStatus.CommunicationLostWithRobot;
|
||||||
// if answer is empty, communication with robot is lost
|
// if answer is empty, communication with robot is lost
|
||||||
else if (answer.Length == 0) status = CommandStatus.CommunicationLostWithServer;
|
else if (answer.Length == 0) status = CommandStatus.CommunicationLostWithServer;
|
||||||
//else status = CommandStatus.InvalidAnswer;
|
//else status = CommandStatus.InvalidAnswer;
|
||||||
|
@ -237,7 +316,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsComDmb, DestijlCommandList.DataComOpen),
|
CreateCommand(DestijlCommandList.ROBOT_COM_OPEN),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -254,7 +333,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsComDmb, DestijlCommandList.DataComClose),
|
CreateCommand(DestijlCommandList.ROBOT_COM_CLOSE),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -271,7 +350,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotPing),
|
CreateCommand(DestijlCommandList.ROBOT_PING),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -288,7 +367,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotReset),
|
CreateCommand(DestijlCommandList.ROBOT_RESET),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -305,7 +384,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotStartWithWatchdog),
|
CreateCommand(DestijlCommandList.ROBOT_START_WITH_WD),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -322,7 +401,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotStartWithoutWatchdog),
|
CreateCommand(DestijlCommandList.ROBOT_START_WITHOUT_WD),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -340,7 +419,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotMove + "=" + distance),
|
CreateCommand(DestijlCommandList.ROBOT_MOVE, Convert.ToString(distance)),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -358,7 +437,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotTurn + "=" + angle),
|
CreateCommand(DestijlCommandList.ROBOT_TURN, Convert.ToString(angle)),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -375,48 +454,13 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotGetBattery),
|
CreateCommand(DestijlCommandList.ROBOT_GET_BATTERY),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
return DecodeStatus(localStatus, answer);
|
return DecodeStatus(localStatus, answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Request robot firmware version
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>Command status (see DecodeStatus)</returns>
|
|
||||||
/// <param name="version">todo</param>
|
|
||||||
public CommandStatus RobotGetVersion(out string version)
|
|
||||||
{
|
|
||||||
CommandManager.CommandManagerStatus localStatus;
|
|
||||||
CommandStatus status = CommandStatus.Success;
|
|
||||||
version = "";
|
|
||||||
|
|
||||||
string answer;
|
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotGetVersion),
|
|
||||||
out answer,
|
|
||||||
this.timeout);
|
|
||||||
|
|
||||||
if (localStatus == CommandManager.CommandManagerStatus.AnswerReceived)
|
|
||||||
{
|
|
||||||
string[] msg = answer.Split(':');
|
|
||||||
|
|
||||||
if (msg.Length > 1)
|
|
||||||
{
|
|
||||||
version = msg[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (localStatus == CommandManager.CommandManagerStatus.Timeout)
|
|
||||||
{
|
|
||||||
status = CommandStatus.CommunicationLostWithServer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Power off robot
|
/// Power off robot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -427,7 +471,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsDmbOrder, RobotCommandList.RobotPowerOff),
|
CreateCommand(DestijlCommandList.ROBOT_POWEROFF),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -444,7 +488,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamOpen),
|
CreateCommand(DestijlCommandList.CAMERA_OPEN),
|
||||||
out answer,
|
out answer,
|
||||||
this.timeout);
|
this.timeout);
|
||||||
|
|
||||||
|
@ -461,7 +505,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamClose),
|
CreateCommand(DestijlCommandList.CAMERA_CLOSE),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -478,7 +522,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamAskArena),
|
CreateCommand(DestijlCommandList.CAMERA_ARENA_ASK),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -495,7 +539,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamArenaConfirm),
|
CreateCommand(DestijlCommandList.CAMERA_ARENA_CONFIRM),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -512,7 +556,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamInfirm),
|
CreateCommand(DestijlCommandList.CAMERA_ARENA_INFIRM),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -529,7 +573,7 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamComputePosition),
|
CreateCommand(DestijlCommandList.CAMERA_POSITION_COMPUTE),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -546,11 +590,86 @@ namespace monitor
|
||||||
string answer;
|
string answer;
|
||||||
|
|
||||||
localStatus = commandManager.SendCommand(
|
localStatus = commandManager.SendCommand(
|
||||||
CreateCommand(DestijlCommandList.HeaderMtsCamera, DestijlCommandList.DataCamStopComputePosition),
|
CreateCommand(DestijlCommandList.CAMERA_POSITION_STOP),
|
||||||
out answer,
|
out answer,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
return DecodeStatus(localStatus, answer);
|
return DecodeStatus(localStatus, answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Position DecodePosition(string data) {
|
||||||
|
Position pos = new Position();
|
||||||
|
|
||||||
|
pos.robotID = 0;
|
||||||
|
pos.angle = 0.0;
|
||||||
|
pos.centre.x = 0.0;
|
||||||
|
pos.centre.y=0.0;
|
||||||
|
pos.direction.x = 0.0;
|
||||||
|
pos.direction.y = 0.0;
|
||||||
|
|
||||||
|
string[] parts = data.Split(';');
|
||||||
|
|
||||||
|
//for (int i = 0; i < parts.Length; i++) {
|
||||||
|
// Console.WriteLine(parts[i]);
|
||||||
|
//}
|
||||||
|
|
||||||
|
NumberFormatInfo provider = new NumberFormatInfo();
|
||||||
|
provider.NumberDecimalSeparator = ".";
|
||||||
|
provider.NumberGroupSeparator = ",";
|
||||||
|
provider.NumberGroupSizes = new int[] { 3 };
|
||||||
|
|
||||||
|
if (parts.Length == 6) {
|
||||||
|
pos.robotID = Convert.ToInt32(parts[0]);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pos.angle = Convert.ToDouble(parts[1]);
|
||||||
|
} catch (FormatException)
|
||||||
|
{
|
||||||
|
pos.angle = Convert.ToDouble(parts[1],provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pos.centre.x = Convert.ToDouble(parts[2]);
|
||||||
|
} catch (FormatException)
|
||||||
|
{
|
||||||
|
pos.centre.x = Convert.ToDouble(parts[2], provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pos.centre.y = Convert.ToDouble(parts[3]);
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
pos.centre.y = Convert.ToDouble(parts[3], provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pos.direction.x = Convert.ToDouble(parts[4]);
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
pos.direction.x = Convert.ToDouble(parts[4], provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pos.direction.y = Convert.ToDouble(parts[5]);
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
pos.direction.y = Convert.ToDouble(parts[5], provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// misformatted data, return 0 filled position
|
||||||
|
Console.WriteLine("Misformated position");
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
using System;
|
using System;
|
||||||
using Gtk;
|
using Gtk;
|
||||||
using Gdk;
|
using Gdk;
|
||||||
|
using Cairo;
|
||||||
|
|
||||||
using monitor;
|
using monitor;
|
||||||
|
|
||||||
|
@ -41,6 +42,11 @@ public partial class MainWindow : Gtk.Window
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private Pixbuf drawingareaCameraPixbuf;
|
private Pixbuf drawingareaCameraPixbuf;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Position used for displaying position
|
||||||
|
/// </summary>
|
||||||
|
private DestijlCommandManager.Position position=new DestijlCommandManager.Position();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of availble state for the application
|
/// List of availble state for the application
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -200,8 +206,8 @@ public partial class MainWindow : Gtk.Window
|
||||||
a.RetVal = true;
|
a.RetVal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] imageComplete;
|
//private byte[] imageComplete;
|
||||||
private byte[] imageInProgress;
|
//private byte[] imageInProgress;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback called when new message is received from server
|
/// Callback called when new message is received from server
|
||||||
|
@ -209,17 +215,20 @@ public partial class MainWindow : Gtk.Window
|
||||||
/// <param name="header">Header of message</param>
|
/// <param name="header">Header of message</param>
|
||||||
/// <param name="data">Data of message</param>
|
/// <param name="data">Data of message</param>
|
||||||
/// <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)
|
||||||
{
|
{
|
||||||
if (buffer==null)
|
if (header == null)
|
||||||
{
|
{
|
||||||
// we have lost server
|
// we have lost server
|
||||||
ChangeState(SystemState.NotConnected);
|
ChangeState(SystemState.NotConnected);
|
||||||
|
|
||||||
|
Gtk.Application.Invoke(delegate
|
||||||
|
{
|
||||||
MessagePopup(MessageType.Error,
|
MessagePopup(MessageType.Error,
|
||||||
ButtonsType.Ok, "Server lost",
|
ButtonsType.Ok, "Server lost",
|
||||||
"Server is down: disconnecting");
|
"Server is down: disconnecting");
|
||||||
cmdManager.Close();
|
cmdManager.Close();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have received a valid message
|
// if we have received a valid message
|
||||||
|
@ -228,64 +237,81 @@ public partial class MainWindow : Gtk.Window
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
// print message content
|
// print message content
|
||||||
if (header.Length > 4)
|
if (header.Length > 4)
|
||||||
Console.WriteLine("Bad header(" + buffer.Length + ")");
|
Console.WriteLine("Bad header(" + header.Length + ")");
|
||||||
else
|
//else
|
||||||
Console.WriteLine("Received header (" + header.Length + "): " + header);
|
// Console.WriteLine("Received header (" + header.Length + "): " + header);
|
||||||
//if (header.ToUpper() != DestijlCommandList.HeaderStmImage)
|
//if (header.ToUpper() != DestijlCommandList.HeaderStmImage)
|
||||||
//{
|
//{
|
||||||
// if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
|
// if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
|
||||||
//}
|
//}
|
||||||
#endif
|
#endif
|
||||||
// Image management
|
// Image management
|
||||||
if (header == DestijlCommandList.HeaderStmImage)
|
//if (header == DestijlCommandList.CAMERA_IMAGE)
|
||||||
{
|
//{
|
||||||
imageComplete = imageInProgress;
|
// imageComplete = imageInProgress;
|
||||||
imageInProgress = buffer;
|
// //TODO: Decoder le base64 pour recuperer le JPG
|
||||||
}
|
// imageInProgress = buffer;
|
||||||
else
|
//}
|
||||||
{
|
//else
|
||||||
if (imageInProgress == null) 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);
|
// 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)
|
header = header.ToUpper();
|
||||||
|
|
||||||
|
if (header == DestijlCommandList.ROBOT_BATTERY_LEVEL)
|
||||||
{
|
{
|
||||||
|
string batLevel = "";
|
||||||
|
|
||||||
switch (data[0])
|
switch (data[0])
|
||||||
{
|
{
|
||||||
case '2':
|
case '2':
|
||||||
labelBatteryLevel.Text = "High";
|
batLevel = "High";
|
||||||
break;
|
break;
|
||||||
case '1':
|
case '1':
|
||||||
labelBatteryLevel.Text = "Low";
|
batLevel = "Low";
|
||||||
break;
|
break;
|
||||||
case '0':
|
case '0':
|
||||||
labelBatteryLevel.Text = "Empty";
|
batLevel = "Empty";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
labelBatteryLevel.Text = "Invalid value";
|
batLevel = "Invalid value";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Gtk.Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
labelBatteryLevel.Text = batLevel;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else if (header.ToUpper() == DestijlCommandList.HeaderStmImage)
|
else if (header == DestijlCommandList.CAMERA_IMAGE)
|
||||||
{
|
{
|
||||||
// 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
|
||||||
if (imageComplete != null)
|
//if (imageComplete != null)
|
||||||
{
|
//{
|
||||||
byte[] image = new byte[imageComplete.Length - 4];
|
//TODO: Decoder le base64 et convertir en JPG
|
||||||
System.Buffer.BlockCopy(imageComplete, 4, image, 0, image.Length);
|
byte[] image = Convert.FromBase64String(data);
|
||||||
|
//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);
|
||||||
|
|
||||||
|
Gtk.Application.Invoke(delegate
|
||||||
|
{
|
||||||
drawingAreaCamera.QueueDraw();
|
drawingAreaCamera.QueueDraw();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
catch (GLib.GException)
|
catch (GLib.GException)
|
||||||
{
|
{
|
||||||
|
@ -296,7 +322,19 @@ public partial class MainWindow : Gtk.Window
|
||||||
" (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
|
" (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
else if (header == DestijlCommandList.CAMERA_POSITION)
|
||||||
|
{
|
||||||
|
//Console.WriteLine("Pos data: " + data);
|
||||||
|
|
||||||
|
position = DestijlCommandManager.DecodePosition(data);
|
||||||
|
//Console.WriteLine("decoded position: " + position.ToString());
|
||||||
|
|
||||||
|
Gtk.Application.Invoke(delegate
|
||||||
|
{
|
||||||
|
drawingAreaCamera.QueueDraw();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -557,9 +595,7 @@ public partial class MainWindow : Gtk.Window
|
||||||
{
|
{
|
||||||
if (cmdManager.CameraClose() != DestijlCommandManager.CommandStatus.Success)
|
if (cmdManager.CameraClose() != DestijlCommandManager.CommandStatus.Success)
|
||||||
{
|
{
|
||||||
MessagePopup(MessageType.Error,
|
Console.WriteLine("Error when closing camera: bad answer for supervisor or timeout");
|
||||||
ButtonsType.Ok, "Error",
|
|
||||||
"Error when closing camera: bad answer for supervisor or timeout");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // camera is not active, switch it on
|
else // camera is not active, switch it on
|
||||||
|
@ -569,10 +605,8 @@ public partial class MainWindow : Gtk.Window
|
||||||
|
|
||||||
if (cmdManager.CameraOpen() != DestijlCommandManager.CommandStatus.Success)
|
if (cmdManager.CameraOpen() != DestijlCommandManager.CommandStatus.Success)
|
||||||
{
|
{
|
||||||
MessagePopup(MessageType.Error,
|
Console.WriteLine("Error when opening camera: bad answer for supervisor or timeout");
|
||||||
ButtonsType.Ok, "Error",
|
//checkButtonCameraOn.Active = false;
|
||||||
"Error when opening camera: bad answer for supervisor or timeout");
|
|
||||||
checkButtonCameraOn.Active = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -589,20 +623,16 @@ public partial class MainWindow : Gtk.Window
|
||||||
{
|
{
|
||||||
if (cmdManager.CameraStopComputePosition() != DestijlCommandManager.CommandStatus.Success)
|
if (cmdManager.CameraStopComputePosition() != DestijlCommandManager.CommandStatus.Success)
|
||||||
{
|
{
|
||||||
MessagePopup(MessageType.Error,
|
Console.WriteLine("Error when stopping position reception: bad answer for supervisor or timeout");
|
||||||
ButtonsType.Ok, "Error",
|
|
||||||
"Error when stopping position reception: bad answer for supervisor or timeout");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // start reception of robot position
|
else // start reception of robot position
|
||||||
{
|
{
|
||||||
if (cmdManager.CameraComputePosition() != DestijlCommandManager.CommandStatus.Success)
|
if (cmdManager.CameraComputePosition() != DestijlCommandManager.CommandStatus.Success)
|
||||||
{
|
{
|
||||||
MessagePopup(MessageType.Error,
|
Console.WriteLine("Error when starting getting robot position: bad answer for supervisor or timeout");
|
||||||
ButtonsType.Ok, "Error",
|
|
||||||
"Error when starting getting robot position: bad answer for supervisor or timeout");
|
|
||||||
|
|
||||||
checkButtonRobotPosition.Active = false;
|
//checkButtonRobotPosition.Active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -657,6 +687,47 @@ public partial class MainWindow : Gtk.Window
|
||||||
(areaHeight - displayPixbuf.Height) / 2,
|
(areaHeight - displayPixbuf.Height) / 2,
|
||||||
displayPixbuf.Width, displayPixbuf.Height,
|
displayPixbuf.Width, displayPixbuf.Height,
|
||||||
RgbDither.Normal, 0, 0);
|
RgbDither.Normal, 0, 0);
|
||||||
|
|
||||||
|
if (checkButtonRobotPosition.Active) {
|
||||||
|
Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow);
|
||||||
|
Cairo.Color textFontColor = new Cairo.Color(0.8, 0, 0);
|
||||||
|
|
||||||
|
cr.SelectFontFace("Cantarell", FontSlant.Normal, FontWeight.Bold);
|
||||||
|
cr.SetSourceColor(textFontColor);
|
||||||
|
cr.SetFontSize(16);
|
||||||
|
|
||||||
|
double space = 0.0;
|
||||||
|
string text = "Direction (" + position.direction.x.ToString("0.##") + " ; " + position.direction.y.ToString("0.##") +")";
|
||||||
|
TextExtents te = cr.TextExtents(text);
|
||||||
|
cr.MoveTo(areaWidth - te.Width-5,
|
||||||
|
areaHeight - te.Height -5);
|
||||||
|
space = te.Height;
|
||||||
|
cr.ShowText(text);
|
||||||
|
|
||||||
|
text = "Centre (" + position.centre.x.ToString("0.##") + " ; " + position.centre.y.ToString("0.##") + ")";
|
||||||
|
te = cr.TextExtents(text);
|
||||||
|
cr.MoveTo(areaWidth - te.Width - 5,
|
||||||
|
areaHeight - te.Height - 5 - space-5);
|
||||||
|
space = space+ te.Height+5;
|
||||||
|
cr.ShowText(text);
|
||||||
|
|
||||||
|
text = "Angle: " + position.angle.ToString("0.##");
|
||||||
|
te = cr.TextExtents(text);
|
||||||
|
cr.MoveTo(areaWidth - te.Width - 5,
|
||||||
|
areaHeight - te.Height - 5 - space - 5);
|
||||||
|
space = space+ te.Height+5;
|
||||||
|
cr.ShowText(text);
|
||||||
|
|
||||||
|
text = "ID: " + position.robotID;
|
||||||
|
te = cr.TextExtents(text);
|
||||||
|
cr.MoveTo(areaWidth - te.Width - 5,
|
||||||
|
areaHeight - te.Height - 5 - space-5);
|
||||||
|
|
||||||
|
cr.ShowText(text);
|
||||||
|
|
||||||
|
((IDisposable)cr.GetTarget()).Dispose();
|
||||||
|
((IDisposable)cr).Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
# This code depends on make tool being used
|
|
||||||
DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES} ${TESTOBJECTFILES}))
|
|
||||||
ifneq (${DEPFILES},)
|
|
||||||
include ${DEPFILES}
|
|
||||||
endif
|
|
|
@ -1 +0,0 @@
|
||||||
ProjDestijl
|
|
|
@ -1,29 +0,0 @@
|
||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<code_scheme name="Project" version="173">
|
|
||||||
<Objective-C-extensions>
|
|
||||||
<file>
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
|
|
||||||
</file>
|
|
||||||
<class>
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
|
|
||||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
|
|
||||||
</class>
|
|
||||||
<extensions>
|
|
||||||
<pair source="cpp" header="h" fileNamingConvention="NONE" />
|
|
||||||
<pair source="c" header="h" fileNamingConvention="NONE" />
|
|
||||||
</extensions>
|
|
||||||
</Objective-C-extensions>
|
|
||||||
</code_scheme>
|
|
||||||
</component>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
|
||||||
<component name="JavaScriptSettings">
|
|
||||||
<option name="languageLevel" value="ES6" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/superviseur-robot.iml" filepath="$PROJECT_DIR$/.idea/superviseur-robot.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -1,2 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -1,864 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true" buildAllGenerated="true">
|
|
||||||
<generated>
|
|
||||||
<config projectName="ProjDestijl" targetName="superviseur" />
|
|
||||||
<config projectName="ProjDestijl" targetName="destijl" />
|
|
||||||
</generated>
|
|
||||||
</component>
|
|
||||||
<component name="CMakeSettings" AUTO_RELOAD="true">
|
|
||||||
<configurations>
|
|
||||||
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
|
|
||||||
</configurations>
|
|
||||||
</component>
|
|
||||||
<component name="ChangeListManager">
|
|
||||||
<list default="true" id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment="">
|
|
||||||
<change afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/destijl_init/Makefile" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/examples/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/examples/CMakeLists.txt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/lib/CMakeLists.txt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/Robot.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/Serial.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/TcpServer.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/definitions.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/image.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/message.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/monitor.h" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/Robot.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/Serial.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/TcpServer.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/image.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/message.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/lib/src/monitor.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" beforeDir="false" />
|
|
||||||
</list>
|
|
||||||
<ignored path="$PROJECT_DIR$/cmake-build-debug/" />
|
|
||||||
<ignored path="$PROJECT_DIR$/CMakeFiles/" />
|
|
||||||
<ignored path="$PROJECT_DIR$/superviseur/CMakeFiles/" />
|
|
||||||
<ignored path="$PROJECT_DIR$/lib/CMakeFiles/" />
|
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
||||||
</component>
|
|
||||||
<component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" />
|
|
||||||
<component name="FUSProjectUsageTrigger">
|
|
||||||
<session id="-329952360">
|
|
||||||
<usages-collector id="statistics.lifecycle.project">
|
|
||||||
<counts>
|
|
||||||
<entry key="project.closed" value="2" />
|
|
||||||
<entry key="project.open.time.3" value="1" />
|
|
||||||
<entry key="project.open.time.9" value="1" />
|
|
||||||
<entry key="project.opened" value="2" />
|
|
||||||
</counts>
|
|
||||||
</usages-collector>
|
|
||||||
<usages-collector id="statistics.file.extensions.open">
|
|
||||||
<counts>
|
|
||||||
<entry key="cmake" value="1" />
|
|
||||||
<entry key="cpp" value="36" />
|
|
||||||
<entry key="gitignore" value="1" />
|
|
||||||
<entry key="h" value="18" />
|
|
||||||
<entry key="txt" value="20" />
|
|
||||||
</counts>
|
|
||||||
</usages-collector>
|
|
||||||
<usages-collector id="statistics.file.types.open">
|
|
||||||
<counts>
|
|
||||||
<entry key="CMakeLists.txt" value="21" />
|
|
||||||
<entry key="ObjectiveC" value="54" />
|
|
||||||
<entry key="PLAIN_TEXT" value="1" />
|
|
||||||
</counts>
|
|
||||||
</usages-collector>
|
|
||||||
<usages-collector id="statistics.file.extensions.edit">
|
|
||||||
<counts>
|
|
||||||
<entry key="cpp" value="3165" />
|
|
||||||
<entry key="gitignore" value="19" />
|
|
||||||
<entry key="h" value="1381" />
|
|
||||||
<entry key="txt" value="1035" />
|
|
||||||
</counts>
|
|
||||||
</usages-collector>
|
|
||||||
<usages-collector id="statistics.file.types.edit">
|
|
||||||
<counts>
|
|
||||||
<entry key="CMakeLists.txt" value="1035" />
|
|
||||||
<entry key="Doxygen file" value="2" />
|
|
||||||
<entry key="ObjectiveC" value="4544" />
|
|
||||||
<entry key="PLAIN_TEXT" value="19" />
|
|
||||||
</counts>
|
|
||||||
</usages-collector>
|
|
||||||
</session>
|
|
||||||
</component>
|
|
||||||
<component name="FileEditorManager">
|
|
||||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state>
|
|
||||||
<caret column="81" selection-start-column="81" selection-end-column="81" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/image.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="209">
|
|
||||||
<caret line="17" selection-start-line="17" selection-end-line="17" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#566#599#0" expanded="true" />
|
|
||||||
<element signature="e#635#673#0" expanded="true" />
|
|
||||||
<element signature="e#865#890#0" expanded="true" />
|
|
||||||
<element signature="e#935#962#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/message.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="405">
|
|
||||||
<caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/monitor.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="389">
|
|
||||||
<caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="338">
|
|
||||||
<caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="330">
|
|
||||||
<caret line="22" selection-start-line="22" selection-end-line="22" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="135">
|
|
||||||
<caret line="9" selection-start-line="9" selection-end-line="9" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="75">
|
|
||||||
<caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#88#106#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/functions.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="180">
|
|
||||||
<caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#319#337#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file pinned="false" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="300">
|
|
||||||
<caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
|
||||||
</component>
|
|
||||||
<component name="Git.Settings">
|
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
|
|
||||||
</component>
|
|
||||||
<component name="IdeDocumentHistory">
|
|
||||||
<option name="CHANGED_PATHS">
|
|
||||||
<list>
|
|
||||||
<option value="$PROJECT_DIR$/.gitignore" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/Definition.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/Robot.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/Image.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/Camera.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/Camera.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/Image.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/destijl_init/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor/src/functions.h" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor/src/main.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor-pc/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor-pc/src/functions.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor-pc/src/functions.h" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor-pc/src/main.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/monitor-pthread/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.h" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/TcpServer.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/TcpServer.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/Messages.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/Messages.h" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/examples/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/MsgManager.h" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/image.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/message.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/monitor.h" />
|
|
||||||
<option value="$PROJECT_DIR$/lib/src/monitor.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur/src/functions.h" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur/src/functions.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/CMakeLists.txt" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur/src/main.cpp" />
|
|
||||||
<option value="$PROJECT_DIR$/superviseur/CMakeLists.txt" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
|
|
||||||
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
|
|
||||||
<component name="JsGulpfileManager">
|
|
||||||
<detection-done>true</detection-done>
|
|
||||||
<sorting>DEFINITION_ORDER</sorting>
|
|
||||||
</component>
|
|
||||||
<component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
|
|
||||||
<component name="ProjectFrameBounds">
|
|
||||||
<option name="x" value="260" />
|
|
||||||
<option name="y" value="101" />
|
|
||||||
<option name="width" value="1660" />
|
|
||||||
<option name="height" value="1088" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
|
||||||
<component name="ProjectView">
|
|
||||||
<navigator proportions="" version="1">
|
|
||||||
<foldersAlwaysOnTop value="true" />
|
|
||||||
</navigator>
|
|
||||||
<panes>
|
|
||||||
<pane id="Scope" />
|
|
||||||
<pane id="ProjectPane">
|
|
||||||
<subPane>
|
|
||||||
<expand>
|
|
||||||
<path>
|
|
||||||
<item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="lib" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="superviseur" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="superviseur" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
|
||||||
<item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
|
|
||||||
</path>
|
|
||||||
</expand>
|
|
||||||
<select />
|
|
||||||
</subPane>
|
|
||||||
</pane>
|
|
||||||
</panes>
|
|
||||||
</component>
|
|
||||||
<component name="PropertiesComponent">
|
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/superviseur/bin/superviseur" />
|
|
||||||
<property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.General" />
|
|
||||||
</component>
|
|
||||||
<component name="RecentsManager">
|
|
||||||
<key name="CopyFile.RECENT_KEYS">
|
|
||||||
<recent name="$PROJECT_DIR$/destijl_init" />
|
|
||||||
</key>
|
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
|
||||||
<recent name="$PROJECT_DIR$/lib" />
|
|
||||||
<recent name="$PROJECT_DIR$/destijl_init/src" />
|
|
||||||
</key>
|
|
||||||
</component>
|
|
||||||
<component name="RunDashboard">
|
|
||||||
<option name="ruleStates">
|
|
||||||
<list>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
<RuleState>
|
|
||||||
<option name="name" value="StatusDashboardGroupingRule" />
|
|
||||||
</RuleState>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="RunManager" selected="Application.superviseur">
|
|
||||||
<configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" EXPLICIT_BUILD_TARGET_NAME="all">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<configuration name="destijl" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ProjDestijl" TARGET_NAME="destijl" CONFIG_NAME="Debug">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<configuration name="superviseur" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ProjDestijl" TARGET_NAME="superviseur" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="ProjDestijl" RUN_TARGET_NAME="superviseur">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<list>
|
|
||||||
<item itemvalue="Application.Build All" />
|
|
||||||
<item itemvalue="Application.destijl" />
|
|
||||||
<item itemvalue="Application.superviseur" />
|
|
||||||
</list>
|
|
||||||
</component>
|
|
||||||
<component name="SvnConfiguration">
|
|
||||||
<configuration />
|
|
||||||
</component>
|
|
||||||
<component name="TaskManager">
|
|
||||||
<task active="true" id="Default" summary="Default task">
|
|
||||||
<changelist id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment="" />
|
|
||||||
<created>1539692092358</created>
|
|
||||||
<option name="number" value="Default" />
|
|
||||||
<option name="presentableId" value="Default" />
|
|
||||||
<updated>1539692092358</updated>
|
|
||||||
<workItem from="1539692095452" duration="3090000" />
|
|
||||||
<workItem from="1539698076207" duration="43886000" />
|
|
||||||
</task>
|
|
||||||
<servers />
|
|
||||||
</component>
|
|
||||||
<component name="TimeTrackingManager">
|
|
||||||
<option name="totallyTimeSpent" value="46976000" />
|
|
||||||
</component>
|
|
||||||
<component name="ToolWindowManager">
|
|
||||||
<frame x="260" y="101" width="1660" height="1088" extended-state="0" />
|
|
||||||
<layout>
|
|
||||||
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.21277915" />
|
|
||||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
|
||||||
<window_info id="Favorites" order="2" side_tool="true" />
|
|
||||||
<window_info anchor="bottom" id="Message" order="0" />
|
|
||||||
<window_info anchor="bottom" id="Find" order="1" weight="0.2114165" />
|
|
||||||
<window_info anchor="bottom" id="Run" order="2" />
|
|
||||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.39957717" />
|
|
||||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
|
||||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
|
||||||
<window_info anchor="bottom" id="TODO" order="6" />
|
|
||||||
<window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
|
|
||||||
<window_info anchor="bottom" id="Messages" order="8" weight="0.3118393" />
|
|
||||||
<window_info anchor="bottom" id="Terminal" order="9" weight="0.32980973" />
|
|
||||||
<window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
|
|
||||||
<window_info anchor="bottom" id="Version Control" order="11" show_stripe_button="false" />
|
|
||||||
<window_info anchor="bottom" id="CMake" order="12" weight="0.32980973" />
|
|
||||||
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
|
||||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
|
||||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
|
||||||
<window_info anchor="right" id="Database" order="3" />
|
|
||||||
</layout>
|
|
||||||
</component>
|
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
|
||||||
<option name="version" value="1" />
|
|
||||||
</component>
|
|
||||||
<component name="VcsContentAnnotationSettings">
|
|
||||||
<option name="myLimit" value="2678400000" />
|
|
||||||
</component>
|
|
||||||
<component name="XDebuggerManager">
|
|
||||||
<breakpoint-manager>
|
|
||||||
<breakpoints>
|
|
||||||
<line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType">
|
|
||||||
<url>file://$PROJECT_DIR$/examples/src/serverTest.cpp</url>
|
|
||||||
<line>28</line>
|
|
||||||
<option name="timeStamp" value="1" />
|
|
||||||
</line-breakpoint>
|
|
||||||
<line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType">
|
|
||||||
<url>file://$PROJECT_DIR$/superviseur/src/functions.cpp</url>
|
|
||||||
<line>16</line>
|
|
||||||
<option name="timeStamp" value="6" />
|
|
||||||
</line-breakpoint>
|
|
||||||
</breakpoints>
|
|
||||||
</breakpoint-manager>
|
|
||||||
</component>
|
|
||||||
<component name="editorHistoryManager">
|
|
||||||
<entry file="file://$PROJECT_DIR$/destijl_init/src/functions.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/destijl_init/src/main.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor" />
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/Camera.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="795">
|
|
||||||
<caret line="53" column="19" selection-start-line="53" selection-start-column="19" selection-end-line="53" selection-end-column="19" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#43#62#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/Image.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="525">
|
|
||||||
<caret line="35" column="52" selection-start-line="35" selection-start-column="52" selection-end-line="35" selection-end-column="52" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#80#99#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/Definition.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="330">
|
|
||||||
<caret line="22" column="10" selection-start-line="22" selection-start-column="10" selection-end-line="22" selection-end-column="10" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#90#128#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/Camera.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="435">
|
|
||||||
<caret line="29" selection-start-line="29" selection-end-line="29" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#82#120#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/destijl_init/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="90">
|
|
||||||
<caret line="6" column="21" selection-start-line="6" selection-start-column="21" selection-end-line="6" selection-end-column="21" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="135">
|
|
||||||
<caret line="9" selection-start-line="9" selection-end-line="9" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor/src/functions.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="615">
|
|
||||||
<caret line="41" column="41" selection-start-line="41" selection-start-column="41" selection-end-line="41" selection-end-column="41" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#1028#1087#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor/src/functions.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="203">
|
|
||||||
<caret line="33" selection-start-line="24" selection-end-line="33" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#319#337#0" expanded="true" />
|
|
||||||
<element signature="e#446#577#0" expanded="true" />
|
|
||||||
<element signature="e#588#616#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/build/CMakeFiles/Makefile.cmake">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="90">
|
|
||||||
<caret line="6" column="16" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pc/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state>
|
|
||||||
<caret column="68" selection-start-column="68" selection-end-column="68" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor/src/main.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-1185">
|
|
||||||
<caret line="20" selection-start-line="20" selection-end-line="20" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#88#106#0" expanded="true" />
|
|
||||||
<element signature="e#308#328#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="434">
|
|
||||||
<caret line="68" lean-forward="true" selection-start-line="30" selection-end-line="68" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#319#337#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pc/src/main.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-510">
|
|
||||||
<caret line="11" lean-forward="true" selection-start-line="11" selection-end-line="11" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="824">
|
|
||||||
<caret line="214" column="11" lean-forward="true" selection-start-line="214" selection-start-column="11" selection-end-line="214" selection-end-column="11" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/image.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-1260">
|
|
||||||
<caret line="12" selection-start-line="12" selection-end-line="12" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#494#512#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/image.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-810" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pthread/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="30">
|
|
||||||
<caret line="2" column="43" lean-forward="true" selection-start-line="2" selection-start-column="43" selection-end-line="2" selection-end-column="43" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/monitor-pthread/src/functions.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-2655" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/monitor.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="1680">
|
|
||||||
<caret line="112" lean-forward="true" selection-start-line="19" selection-end-line="112" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#82#104#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/message.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="135">
|
|
||||||
<caret line="9" column="2" lean-forward="true" selection-start-line="9" selection-start-column="2" selection-end-line="9" selection-end-column="2" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#312#330#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/Serial.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-1080" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/message.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="405">
|
|
||||||
<caret line="27" column="36" lean-forward="true" selection-start-line="26" selection-start-column="4" selection-end-line="27" selection-end-column="36" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/src.sav/monitor.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="433">
|
|
||||||
<caret line="151" column="1" selection-start-line="146" selection-end-line="151" selection-end-column="1" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#1030#1072#0" expanded="true" />
|
|
||||||
<element signature="e#1814#1860#0" expanded="true" />
|
|
||||||
<element signature="e#1973#2002#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/TcpServer.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="299">
|
|
||||||
<caret line="76" selection-start-line="76" selection-end-line="76" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#648#670#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/Robot.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-495" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/TcpServer.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="195">
|
|
||||||
<caret line="14" column="17" selection-start-line="14" selection-start-column="17" selection-end-line="14" selection-end-column="17" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Program.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="419">
|
|
||||||
<caret line="107" selection-start-line="107" selection-end-line="107" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#90#108#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/examples/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="135">
|
|
||||||
<caret line="9" column="22" selection-start-line="9" selection-start-column="22" selection-end-line="9" selection-end-column="22" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="105">
|
|
||||||
<caret line="7" column="60" selection-start-line="7" selection-start-column="60" selection-end-line="7" selection-end-column="60" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="405">
|
|
||||||
<caret line="33" column="40" selection-start-line="33" selection-start-column="40" selection-end-line="33" selection-end-column="40" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#319#338#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="509">
|
|
||||||
<caret line="245" column="27" selection-start-line="245" selection-start-column="27" selection-end-line="245" selection-end-column="27" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#18#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="373">
|
|
||||||
<caret line="148" column="7" selection-start-line="145" selection-start-column="6" selection-end-line="148" selection-end-column="7" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#88#106#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/Robot.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="165">
|
|
||||||
<caret line="29" column="19" selection-start-line="29" selection-start-column="19" selection-end-line="29" selection-end-column="19" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#891#909#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="748">
|
|
||||||
<caret line="84" column="60" selection-start-line="84" selection-start-column="60" selection-end-line="84" selection-end-column="60" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#316#341#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/MsgManager.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-151">
|
|
||||||
<caret line="20" column="8" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="8" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#86#105#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="410">
|
|
||||||
<caret line="92" column="35" lean-forward="true" selection-start-line="92" selection-start-column="35" selection-end-line="92" selection-end-column="35" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#19#0" expanded="true" />
|
|
||||||
<element signature="e#876#929#0" expanded="true" />
|
|
||||||
<element signature="e#1024#1083#0" expanded="true" />
|
|
||||||
<element signature="e#1218#1293#0" expanded="true" />
|
|
||||||
<element signature="e#1799#1852#0" expanded="true" />
|
|
||||||
<element signature="e#1939#2002#0" expanded="true" />
|
|
||||||
<element signature="e#2104#2194#0" expanded="true" />
|
|
||||||
<element signature="e#2383#2442#0" expanded="true" />
|
|
||||||
<element signature="e#2683#2730#0" expanded="true" />
|
|
||||||
<element signature="e#3232#3297#0" expanded="true" />
|
|
||||||
<element signature="e#3735#3816#0" expanded="true" />
|
|
||||||
<element signature="e#3922#3978#0" expanded="true" />
|
|
||||||
<element signature="e#6217#6275#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/Image.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="419">
|
|
||||||
<caret line="51" column="6" selection-start-line="51" selection-start-column="6" selection-end-line="51" selection-end-column="26" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/MsgManager.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="339">
|
|
||||||
<caret line="136" column="23" selection-start-line="136" selection-start-column="23" selection-end-line="136" selection-end-column="23" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#44#64#0" expanded="true" />
|
|
||||||
<element signature="e#751#793#0" expanded="true" />
|
|
||||||
<element signature="e#832#878#0" expanded="true" />
|
|
||||||
<element signature="e#938#967#0" expanded="true" />
|
|
||||||
<element signature="e#1253#1282#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="60">
|
|
||||||
<caret line="4" column="82" selection-start-line="4" selection-start-column="82" selection-end-line="4" selection-end-column="82" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/image.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="209">
|
|
||||||
<caret line="17" selection-start-line="17" selection-end-line="17" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#566#599#0" expanded="true" />
|
|
||||||
<element signature="e#635#673#0" expanded="true" />
|
|
||||||
<element signature="e#865#890#0" expanded="true" />
|
|
||||||
<element signature="e#935#962#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/message.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="405">
|
|
||||||
<caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/monitor.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="389">
|
|
||||||
<caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="338">
|
|
||||||
<caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/functions.h">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="180">
|
|
||||||
<caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#319#337#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="330">
|
|
||||||
<caret line="22" selection-start-line="22" selection-end-line="22" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state>
|
|
||||||
<caret column="81" selection-start-column="81" selection-end-column="81" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="135">
|
|
||||||
<caret line="9" selection-start-line="9" selection-end-line="9" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="75">
|
|
||||||
<caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#88#106#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="300">
|
|
||||||
<caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
Binary file not shown.
2
software/raspberry/superviseur-robot/lib/base64/.gitignore
vendored
Normal file
2
software/raspberry/superviseur-robot/lib/base64/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
*.swp
|
||||||
|
test-base64
|
19
software/raspberry/superviseur-robot/lib/base64/LICENSE
Normal file
19
software/raspberry/superviseur-robot/lib/base64/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright © 2004-2017 by René Nyffenegger
|
||||||
|
|
||||||
|
This source code is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the author be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this source code must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original source code. If you use this source code
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original source code.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
|
@ -0,0 +1,7 @@
|
||||||
|
# base64 (C++)
|
||||||
|
|
||||||
|
Base64 encoding and decoding with c++
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp
|
122
software/raspberry/superviseur-robot/lib/base64/base64.cpp
Normal file
122
software/raspberry/superviseur-robot/lib/base64/base64.cpp
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
base64.cpp and base64.h
|
||||||
|
|
||||||
|
base64 encoding and decoding with C++.
|
||||||
|
|
||||||
|
Version: 1.01.00
|
||||||
|
|
||||||
|
Copyright (C) 2004-2017 René Nyffenegger
|
||||||
|
|
||||||
|
This source code is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the author be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this source code must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original source code. If you use this source code
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original source code.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
René Nyffenegger rene.nyffenegger@adp-gmbh.ch
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "base64.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
static const std::string base64_chars =
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
"abcdefghijklmnopqrstuvwxyz"
|
||||||
|
"0123456789+/";
|
||||||
|
|
||||||
|
|
||||||
|
static inline bool is_base64(unsigned char c) {
|
||||||
|
return (isalnum(c) || (c == '+') || (c == '/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
|
||||||
|
std::string ret;
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
unsigned char char_array_3[3];
|
||||||
|
unsigned char char_array_4[4];
|
||||||
|
|
||||||
|
while (in_len--) {
|
||||||
|
char_array_3[i++] = *(bytes_to_encode++);
|
||||||
|
if (i == 3) {
|
||||||
|
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
||||||
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
||||||
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
||||||
|
char_array_4[3] = char_array_3[2] & 0x3f;
|
||||||
|
|
||||||
|
for(i = 0; (i <4) ; i++)
|
||||||
|
ret += base64_chars[char_array_4[i]];
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i)
|
||||||
|
{
|
||||||
|
for(j = i; j < 3; j++)
|
||||||
|
char_array_3[j] = '\0';
|
||||||
|
|
||||||
|
char_array_4[0] = ( char_array_3[0] & 0xfc) >> 2;
|
||||||
|
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
|
||||||
|
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
|
||||||
|
|
||||||
|
for (j = 0; (j < i + 1); j++)
|
||||||
|
ret += base64_chars[char_array_4[j]];
|
||||||
|
|
||||||
|
while((i++ < 3))
|
||||||
|
ret += '=';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string base64_decode(std::string const& encoded_string) {
|
||||||
|
int in_len = encoded_string.size();
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
int in_ = 0;
|
||||||
|
unsigned char char_array_4[4], char_array_3[3];
|
||||||
|
std::string ret;
|
||||||
|
|
||||||
|
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
|
||||||
|
char_array_4[i++] = encoded_string[in_]; in_++;
|
||||||
|
if (i ==4) {
|
||||||
|
for (i = 0; i <4; i++)
|
||||||
|
char_array_4[i] = base64_chars.find(char_array_4[i]);
|
||||||
|
|
||||||
|
char_array_3[0] = ( char_array_4[0] << 2 ) + ((char_array_4[1] & 0x30) >> 4);
|
||||||
|
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
||||||
|
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
|
||||||
|
|
||||||
|
for (i = 0; (i < 3); i++)
|
||||||
|
ret += char_array_3[i];
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i) {
|
||||||
|
for (j = 0; j < i; j++)
|
||||||
|
char_array_4[j] = base64_chars.find(char_array_4[j]);
|
||||||
|
|
||||||
|
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
|
||||||
|
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
|
||||||
|
|
||||||
|
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
14
software/raspberry/superviseur-robot/lib/base64/base64.h
Normal file
14
software/raspberry/superviseur-robot/lib/base64/base64.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
//
|
||||||
|
// base64 encoding and decoding with C++.
|
||||||
|
// Version: 1.01.00
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
|
||||||
|
#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
std::string base64_encode(unsigned char const* , unsigned int len);
|
||||||
|
std::string base64_decode(std::string const& s);
|
||||||
|
|
||||||
|
#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */
|
2
software/raspberry/superviseur-robot/lib/base64/compile-and-run-test
Executable file
2
software/raspberry/superviseur-robot/lib/base64/compile-and-run-test
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
g++ test.cpp base64.cpp -o test-base64
|
||||||
|
./test-base64
|
56
software/raspberry/superviseur-robot/lib/base64/test.cpp
Normal file
56
software/raspberry/superviseur-robot/lib/base64/test.cpp
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#include "base64.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
const std::string s =
|
||||||
|
"René Nyffenegger\n"
|
||||||
|
"http://www.renenyffenegger.ch\n"
|
||||||
|
"passion for data\n";
|
||||||
|
|
||||||
|
std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(s.c_str()), s.length());
|
||||||
|
std::string decoded = base64_decode(encoded);
|
||||||
|
|
||||||
|
std::cout << "encoded: " << std::endl << encoded << std::endl << std::endl;
|
||||||
|
std::cout << "decoded: " << std::endl << decoded << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Test all possibilites of fill bytes (none, one =, two ==)
|
||||||
|
// References calculated with: https://www.base64encode.org/
|
||||||
|
|
||||||
|
std::string rest0_original = "abc";
|
||||||
|
std::string rest0_reference = "YWJj";
|
||||||
|
|
||||||
|
std::string rest0_encoded = base64_encode(reinterpret_cast<const unsigned char*>(rest0_original.c_str()),
|
||||||
|
rest0_original.length());
|
||||||
|
std::string rest0_decoded = base64_decode(rest0_encoded);
|
||||||
|
|
||||||
|
std::cout << "encoded: " << rest0_encoded << std::endl;
|
||||||
|
std::cout << "reference: " << rest0_reference << std::endl;
|
||||||
|
std::cout << "decoded: " << rest0_decoded << std::endl << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
std::string rest1_original = "abcd";
|
||||||
|
std::string rest1_reference = "YWJjZA==";
|
||||||
|
|
||||||
|
std::string rest1_encoded = base64_encode(reinterpret_cast<const unsigned char*>(rest1_original.c_str()),
|
||||||
|
rest1_original.length());
|
||||||
|
std::string rest1_decoded = base64_decode(rest1_encoded);
|
||||||
|
|
||||||
|
std::cout << "encoded: " << rest1_encoded << std::endl;
|
||||||
|
std::cout << "reference: " << rest1_reference << std::endl;
|
||||||
|
std::cout << "decoded: " << rest1_decoded << std::endl << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
std::string rest2_original = "abcde";
|
||||||
|
std::string rest2_reference = "YWJjZGU=";
|
||||||
|
|
||||||
|
std::string rest2_encoded = base64_encode(reinterpret_cast<const unsigned char*>(rest2_original.c_str()),
|
||||||
|
rest2_original.length());
|
||||||
|
std::string rest2_decoded = base64_decode(rest2_encoded);
|
||||||
|
|
||||||
|
std::cout << "encoded: " << rest2_encoded << std::endl;
|
||||||
|
std::cout << "reference: " << rest2_reference << std::endl;
|
||||||
|
std::cout << "decoded: " << rest2_decoded << std::endl << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -20,8 +20,24 @@
|
||||||
|
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
|
|
||||||
void Camera::setSize(int size) {
|
Camera::Camera(int size) {
|
||||||
|
this->SetSize(size);
|
||||||
|
this->cap.set(CV_CAP_PROP_FORMAT, CV_8UC3);
|
||||||
|
this->cap.set(CV_CAP_PROP_FRAME_WIDTH,width);
|
||||||
|
this->cap.set(CV_CAP_PROP_FRAME_HEIGHT,height);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Camera::Open() {
|
||||||
|
this->cap.open(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::Close() {
|
||||||
|
this->cap.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Camera::SetSize(int size) {
|
||||||
this->size = size;
|
this->size = size;
|
||||||
|
|
||||||
switch (size){
|
switch (size){
|
||||||
case xs:
|
case xs:
|
||||||
this->width = 480;
|
this->width = 480;
|
||||||
|
@ -46,40 +62,24 @@ void Camera::setSize(int size) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Img Camera::Grab() {
|
||||||
int Camera::open_camera() {
|
|
||||||
this->cap.open(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Camera::Camera(int size) {
|
|
||||||
this->setSize(size);
|
|
||||||
this->cap.set(CV_CAP_PROP_FORMAT, CV_8UC3);
|
|
||||||
this->cap.set(CV_CAP_PROP_FRAME_WIDTH,width);
|
|
||||||
this->cap.set(CV_CAP_PROP_FRAME_HEIGHT,height);
|
|
||||||
}
|
|
||||||
|
|
||||||
int Camera::close_camera() {
|
|
||||||
cap.release();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Img Camera::grab_image() {
|
|
||||||
ImageMat frame;
|
ImageMat frame;
|
||||||
|
|
||||||
cap >> frame;
|
cap >> frame;
|
||||||
Img capture = Img(frame);
|
Img capture = Img(frame);
|
||||||
|
|
||||||
return capture;
|
return capture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Camera::IsOpen() {
|
||||||
bool Camera::isOpen() {
|
|
||||||
return cap.isOpened();
|
return cap.isOpened();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Camera::getWidth() const {
|
int Camera::GetWidth() const {
|
||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Camera::getHeight() const {
|
int Camera::GetHeight() const {
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,20 +27,18 @@ enum captureSize {xs, sm, md, lg};
|
||||||
|
|
||||||
class Camera {
|
class Camera {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Camera(int size);
|
Camera(int size);
|
||||||
|
|
||||||
int open_camera();
|
bool Open();
|
||||||
|
void Close();
|
||||||
|
|
||||||
int getWidth() const;
|
int GetWidth() const;
|
||||||
|
int GetHeight() const;
|
||||||
|
|
||||||
int getHeight() const;
|
bool IsOpen();
|
||||||
|
void SetSize(int size);
|
||||||
|
|
||||||
bool isOpen();
|
Img Grab();
|
||||||
void setSize(int size);
|
|
||||||
|
|
||||||
int close_camera();
|
|
||||||
Img grab_image();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cv::VideoCapture cap;
|
cv::VideoCapture cap;
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "base64/base64.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief Constants used for sending commands to monitor
|
* @brief Constants used for sending commands to monitor
|
||||||
*/
|
*/
|
||||||
|
@ -41,7 +43,7 @@ const string LABEL_MONITOR_CAMERA_OPEN = "COPN";
|
||||||
const string LABEL_MONITOR_CAMERA_CLOSE = "CCLS";
|
const string LABEL_MONITOR_CAMERA_CLOSE = "CCLS";
|
||||||
const string LABEL_MONITOR_CAMERA_IMAGE = "CIMG";
|
const string LABEL_MONITOR_CAMERA_IMAGE = "CIMG";
|
||||||
const string LABEL_MONITOR_CAMERA_ARENA_ASK = "CASA";
|
const string LABEL_MONITOR_CAMERA_ARENA_ASK = "CASA";
|
||||||
const string LABEL_MONITOR_CAMERA_ARENA_INFIRME = "CAIN";
|
const string LABEL_MONITOR_CAMERA_ARENA_INFIRM = "CAIN";
|
||||||
const string LABEL_MONITOR_CAMERA_ARENA_CONFIRM = "CACO";
|
const string LABEL_MONITOR_CAMERA_ARENA_CONFIRM = "CACO";
|
||||||
const string LABEL_MONITOR_CAMERA_POSITION_COMPUTE = "CPCO";
|
const string LABEL_MONITOR_CAMERA_POSITION_COMPUTE = "CPCO";
|
||||||
const string LABEL_MONITOR_CAMERA_POSITION_STOP = "CPST";
|
const string LABEL_MONITOR_CAMERA_POSITION_STOP = "CPST";
|
||||||
|
@ -83,6 +85,12 @@ int ComMonitor::Open(int port) {
|
||||||
throw std::runtime_error{"Can not create socket"};
|
throw std::runtime_error{"Can not create socket"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int enable = 1;
|
||||||
|
if (setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0) {
|
||||||
|
cerr<<"setsockopt(SO_REUSEADDR) failed"<<endl<<flush;
|
||||||
|
}
|
||||||
|
|
||||||
|
bzero((char *) &server, sizeof(server));
|
||||||
server.sin_addr.s_addr = INADDR_ANY;
|
server.sin_addr.s_addr = INADDR_ANY;
|
||||||
server.sin_family = AF_INET;
|
server.sin_family = AF_INET;
|
||||||
server.sin_port = htons(port);
|
server.sin_port = htons(port);
|
||||||
|
@ -130,7 +138,7 @@ int ComMonitor::AcceptClient() {
|
||||||
* @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that.
|
* @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that.
|
||||||
* @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously
|
* @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously
|
||||||
*/
|
*/
|
||||||
void ComMonitor::Write(Message &msg) {
|
void ComMonitor::Write(Message *msg) {
|
||||||
string str;
|
string str;
|
||||||
|
|
||||||
// Call user method before Write
|
// Call user method before Write
|
||||||
|
@ -142,7 +150,9 @@ void ComMonitor::Write(Message &msg) {
|
||||||
//cout << "Message sent to monitor: " << str->c_str() << endl;
|
//cout << "Message sent to monitor: " << str->c_str() << endl;
|
||||||
write(clientID, str.c_str(), str.length());
|
write(clientID, str.c_str(), str.length());
|
||||||
|
|
||||||
delete(&msg);
|
if (!msg->CompareID(MESSAGE_CAM_IMAGE)) {
|
||||||
|
delete(msg);
|
||||||
|
}
|
||||||
|
|
||||||
// Call user method after write
|
// Call user method after write
|
||||||
Write_Post();
|
Write_Post();
|
||||||
|
@ -191,13 +201,17 @@ Message *ComMonitor::Read() {
|
||||||
* @param msg Message to be converted
|
* @param msg Message to be converted
|
||||||
* @return A string, image of the message
|
* @return A string, image of the message
|
||||||
*/
|
*/
|
||||||
string ComMonitor::MessageToString(Message &msg) {
|
string ComMonitor::MessageToString(Message *msg) {
|
||||||
int id;
|
int id;
|
||||||
string str;
|
string str;
|
||||||
Message *localMsg = &msg;
|
//Message *localMsg = msg;
|
||||||
Position pos;
|
Position pos;
|
||||||
|
|
||||||
id = msg.GetID();
|
Img *image;
|
||||||
|
Jpg jpeg ;
|
||||||
|
string s;
|
||||||
|
|
||||||
|
id = msg->GetID();
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case MESSAGE_ANSWER_ACK :
|
case MESSAGE_ANSWER_ACK :
|
||||||
|
@ -219,17 +233,23 @@ string ComMonitor::MessageToString(Message &msg) {
|
||||||
str.append(LABEL_MONITOR_ANSWER_COM_ERROR);
|
str.append(LABEL_MONITOR_ANSWER_COM_ERROR);
|
||||||
break;
|
break;
|
||||||
case MESSAGE_CAM_POSITION:
|
case MESSAGE_CAM_POSITION:
|
||||||
pos = ((MessagePosition*) & msg)->GetPosition();
|
pos = ((MessagePosition*) msg)->GetPosition();
|
||||||
|
|
||||||
str.append(LABEL_MONITOR_CAMERA_POSITION + LABEL_SEPARATOR_CHAR + to_string(pos.robotId) + ";" +
|
str.append(LABEL_MONITOR_CAMERA_POSITION + LABEL_SEPARATOR_CHAR + to_string(pos.robotId) + ";" +
|
||||||
to_string(pos.angle) + ";" + to_string(pos.center.x) + ";" + to_string(pos.center.y) + ";" +
|
to_string(pos.angle) + ";" + to_string(pos.center.x) + ";" + to_string(pos.center.y) + ";" +
|
||||||
to_string(pos.direction.x) + ";" + to_string(pos.direction.y));
|
to_string(pos.direction.x) + ";" + to_string(pos.direction.y));
|
||||||
break;
|
break;
|
||||||
case MESSAGE_CAM_IMAGE:
|
case MESSAGE_CAM_IMAGE:
|
||||||
str.append(LABEL_MONITOR_CAMERA_IMAGE + LABEL_SEPARATOR_CHAR + ((MessageImg*) & msg)->GetImage()->ToBase64());
|
image=((MessageImg*) msg)->GetImage();
|
||||||
|
jpeg = image->ToJpg();
|
||||||
|
|
||||||
|
cout << "Jpeg size: " << to_string(jpeg.size())<<endl<<flush;
|
||||||
|
|
||||||
|
s = base64_encode(jpeg.data(), jpeg.size());
|
||||||
|
str.append(LABEL_MONITOR_CAMERA_IMAGE + LABEL_SEPARATOR_CHAR + s);
|
||||||
break;
|
break;
|
||||||
case MESSAGE_ROBOT_BATTERY_LEVEL:
|
case MESSAGE_ROBOT_BATTERY_LEVEL:
|
||||||
str.append(LABEL_MONITOR_ROBOT_BATTERY_LEVEL + LABEL_SEPARATOR_CHAR + to_string(((MessageBattery*) & msg)->GetLevel()));
|
str.append(LABEL_MONITOR_ROBOT_BATTERY_LEVEL + LABEL_SEPARATOR_CHAR + to_string(((MessageBattery*) msg)->GetLevel()));
|
||||||
break;
|
break;
|
||||||
case MESSAGE_ROBOT_STATE_BUSY:
|
case MESSAGE_ROBOT_STATE_BUSY:
|
||||||
str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "1");
|
str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "1");
|
||||||
|
@ -238,13 +258,13 @@ string ComMonitor::MessageToString(Message &msg) {
|
||||||
str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "0");
|
str.append(LABEL_MONITOR_ROBOT_CURRENT_STATE + LABEL_SEPARATOR_CHAR + "0");
|
||||||
break;
|
break;
|
||||||
case MESSAGE_LOG:
|
case MESSAGE_LOG:
|
||||||
str.append(LABEL_MONITOR_MESSAGE + LABEL_SEPARATOR_CHAR + ((MessageString*) & msg)->GetString());
|
str.append(LABEL_MONITOR_MESSAGE + LABEL_SEPARATOR_CHAR + ((MessageString*) msg)->GetString());
|
||||||
break;
|
break;
|
||||||
case MESSAGE_EMPTY:
|
case MESSAGE_EMPTY:
|
||||||
str.append(""); //empty string
|
str.append(""); //empty string
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cerr<<"["<<__PRETTY_FUNCTION__<<"] (from ComMonitor::Write): Invalid message to send ("<<msg.ToString()<<")"<<endl<<flush;
|
cerr<<"["<<__PRETTY_FUNCTION__<<"] (from ComMonitor::Write): Invalid message to send ("<<msg->ToString()<<")"<<endl<<flush;
|
||||||
throw std::runtime_error {"Invalid message to send"};
|
throw std::runtime_error {"Invalid message to send"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +311,7 @@ Message *ComMonitor::StringToMessage(string &s) {
|
||||||
msg = new Message(MESSAGE_CAM_ASK_ARENA);
|
msg = new Message(MESSAGE_CAM_ASK_ARENA);
|
||||||
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_CONFIRM) != string::npos) {
|
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_CONFIRM) != string::npos) {
|
||||||
msg = new Message(MESSAGE_CAM_ARENA_CONFIRM);
|
msg = new Message(MESSAGE_CAM_ARENA_CONFIRM);
|
||||||
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_INFIRME) != string::npos) {
|
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_ARENA_INFIRM) != string::npos) {
|
||||||
msg = new Message(MESSAGE_CAM_ARENA_INFIRM);
|
msg = new Message(MESSAGE_CAM_ARENA_INFIRM);
|
||||||
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_CLOSE) != string::npos) {
|
} else if (tokenCmd.find(LABEL_MONITOR_CAMERA_CLOSE) != string::npos) {
|
||||||
msg = new Message(MESSAGE_CAM_CLOSE);
|
msg = new Message(MESSAGE_CAM_CLOSE);
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define SERVER_PORT 1234
|
#define SERVER_PORT 5544
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class used for generating a server and communicating through it with monitor
|
* Class used for generating a server and communicating through it with monitor
|
||||||
|
@ -71,7 +71,7 @@ public:
|
||||||
* @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that.
|
* @attention Message given in parameter will be destroyed (delete) after being sent. No need for user to delete message after that.
|
||||||
* @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously
|
* @warning Write is not thread safe : check that multiple tasks can't access this method simultaneously
|
||||||
*/
|
*/
|
||||||
void Write(Message &msg);
|
void Write(Message *msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called at beginning of Write method
|
* Function called at beginning of Write method
|
||||||
|
@ -121,7 +121,7 @@ protected:
|
||||||
* @param msg Message to be converted
|
* @param msg Message to be converted
|
||||||
* @return A string, image of the message
|
* @return A string, image of the message
|
||||||
*/
|
*/
|
||||||
string MessageToString(Message &msg);
|
string MessageToString(Message *msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method used internally to convert a string received over TCP to a message
|
* Method used internally to convert a string received over TCP to a message
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
#include "img.h"
|
#include "img.h"
|
||||||
|
|
||||||
bool Arene::empty() {
|
bool Arena::IsEmpty() {
|
||||||
if ((this->arene.height==0) || (this->arene.width==0)) return true;
|
if ((this->arena.height==0) || (this->arena.width==0)) return true;
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,22 +30,18 @@ string Img::ToString() {
|
||||||
return "Image size: "+to_string(this->img.cols)+"x"+to_string(this->img.rows)+" (dim="+to_string(this->img.dims)+")";
|
return "Image size: "+to_string(this->img.cols)+"x"+to_string(this->img.rows)+" (dim="+to_string(this->img.dims)+")";
|
||||||
}
|
}
|
||||||
|
|
||||||
string Img::ToBase64() {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
Img* Img::Copy() {
|
Img* Img::Copy() {
|
||||||
return new Img(this->img);
|
return new Img(this->img);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Img::calculAngle(Position robot) {
|
float Img::CalculAngle(Position robot) {
|
||||||
float a = robot.direction.x - robot.center.x;
|
float a = robot.direction.x - robot.center.x;
|
||||||
float b = robot.direction.y - robot.center.y ;
|
float b = robot.direction.y - robot.center.y ;
|
||||||
float angle = atan2(b,a);
|
float angle = atan2(b,a);
|
||||||
return angle * 180.f/M_PI;
|
return angle * 180.f/M_PI;
|
||||||
}
|
}
|
||||||
|
|
||||||
float Img::calculAngle2(cv::Point2f pt1, cv::Point2f pt2) {
|
float Img::CalculAngle2(cv::Point2f pt1, cv::Point2f pt2) {
|
||||||
float a = pt1.x - pt2.x;
|
float a = pt1.x - pt2.x;
|
||||||
float b = pt1.y - pt2.y ;
|
float b = pt1.y - pt2.y ;
|
||||||
float angle = atan2(b,a);
|
float angle = atan2(b,a);
|
||||||
|
@ -61,7 +57,7 @@ cv::Point2f Img::find_aruco_direction(std::vector<cv::Point2f> aruco) {
|
||||||
return ((aruco[0]+aruco[1])/2);;
|
return ((aruco[0]+aruco[1])/2);;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::list<Position> Img::search_aruco(Arene monArene) {
|
std::list<Position> Img::search_aruco(Arena monArene) {
|
||||||
ImageMat imgTraitment;
|
ImageMat imgTraitment;
|
||||||
std::list<Position> positionList;
|
std::list<Position> positionList;
|
||||||
cv::Point2f areneCoor;
|
cv::Point2f areneCoor;
|
||||||
|
@ -93,12 +89,12 @@ std::list<Position> Img::search_aruco(Arene monArene) {
|
||||||
}
|
}
|
||||||
#endif // __WITH_ARUCO__
|
#endif // __WITH_ARUCO__
|
||||||
|
|
||||||
float Img::euclideanDist(cv::Point2f p, cv::Point2f q) {
|
float Img::EuclideanDistance(cv::Point2f p, cv::Point2f q) {
|
||||||
cv::Point diff = p - q;
|
cv::Point diff = p - q;
|
||||||
return cv::sqrt(diff.x*diff.x + diff.y*diff.y);
|
return cv::sqrt(diff.x*diff.x + diff.y*diff.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Jpg Img::toJpg() {
|
Jpg Img::ToJpg() {
|
||||||
Jpg imgJpg;
|
Jpg imgJpg;
|
||||||
cv::imencode(".jpg",this->img,imgJpg);
|
cv::imencode(".jpg",this->img,imgJpg);
|
||||||
return imgJpg;
|
return imgJpg;
|
||||||
|
@ -112,7 +108,7 @@ Jpg Img::toJpg() {
|
||||||
// return imgBase64;
|
// return imgBase64;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
std::list<Position> Img::search_robot(Arene monArene) {
|
std::list<Position> Img::SearchRobot(Arena monArene) {
|
||||||
|
|
||||||
std::list<Position> robotsFind;
|
std::list<Position> robotsFind;
|
||||||
std::vector<std::vector<cv::Point2f> > contours;
|
std::vector<std::vector<cv::Point2f> > contours;
|
||||||
|
@ -121,10 +117,10 @@ std::list<Position> Img::search_robot(Arene monArene) {
|
||||||
|
|
||||||
ImageMat imgTraitment;
|
ImageMat imgTraitment;
|
||||||
|
|
||||||
if(monArene.empty())
|
if(monArene.IsEmpty())
|
||||||
imgTraitment=this->img.clone();
|
imgTraitment=this->img.clone();
|
||||||
else
|
else
|
||||||
imgTraitment = cropArena(monArene);
|
imgTraitment = CropArena(monArene);
|
||||||
|
|
||||||
cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY);
|
cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY);
|
||||||
threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY);
|
threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY);
|
||||||
|
@ -145,14 +141,14 @@ std::list<Position> Img::search_robot(Arene monArene) {
|
||||||
c = approx[2];
|
c = approx[2];
|
||||||
|
|
||||||
|
|
||||||
if(!monArene.empty()) // ajout de l'offset de l'arène
|
if(!monArene.IsEmpty()) // ajout de l'offset de l'arène
|
||||||
{
|
{
|
||||||
a.x += monArene.arene.x;
|
a.x += monArene.arena.x;
|
||||||
a.y += monArene.arene.y;
|
a.y += monArene.arena.y;
|
||||||
b.x += monArene.arene.x;
|
b.x += monArene.arena.x;
|
||||||
b.y += monArene.arene.y;
|
b.y += monArene.arena.y;
|
||||||
c.x += monArene.arene.x;
|
c.x += monArene.arena.x;
|
||||||
c.y += monArene.arene.y;
|
c.y += monArene.arena.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
center.x = (a.x + b.x + c.x)/3;
|
center.x = (a.x + b.x + c.x)/3;
|
||||||
|
@ -160,13 +156,13 @@ std::list<Position> Img::search_robot(Arene monArene) {
|
||||||
Position newPos;
|
Position newPos;
|
||||||
newPos.center=center;
|
newPos.center=center;
|
||||||
|
|
||||||
if(euclideanDist(center,b) > euclideanDist(center,a) && euclideanDist(center,b) > euclideanDist(center,c) )
|
if(EuclideanDistance(center,b) > EuclideanDistance(center,a) && EuclideanDistance(center,b) > EuclideanDistance(center,c) )
|
||||||
{
|
{
|
||||||
|
|
||||||
newPos.direction=b;
|
newPos.direction=b;
|
||||||
//line(img,center,b,Scalar(0,125,0),2,8,0);
|
//line(img,center,b,Scalar(0,125,0),2,8,0);
|
||||||
}
|
}
|
||||||
else if(euclideanDist(center,a) > euclideanDist(center,c))
|
else if(EuclideanDistance(center,a) > EuclideanDistance(center,c))
|
||||||
{
|
{
|
||||||
newPos.direction=a;
|
newPos.direction=a;
|
||||||
//line(img,center,a,Scalar(0,125,0),2,8,0);
|
//line(img,center,a,Scalar(0,125,0),2,8,0);
|
||||||
|
@ -177,14 +173,14 @@ std::list<Position> Img::search_robot(Arene monArene) {
|
||||||
newPos.direction=c;
|
newPos.direction=c;
|
||||||
//line(img,center,c,Scalar(0,125,0),2,8,0);
|
//line(img,center,c,Scalar(0,125,0),2,8,0);
|
||||||
}
|
}
|
||||||
newPos.angle=calculAngle(newPos);
|
newPos.angle=CalculAngle(newPos);
|
||||||
robotsFind.push_back(newPos);
|
robotsFind.push_back(newPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return robotsFind;
|
return robotsFind;
|
||||||
}
|
}
|
||||||
|
|
||||||
Arene Img::search_arena() {
|
Arena Img::SearchArena() {
|
||||||
std::vector<std::vector<cv::Point> > contours;
|
std::vector<std::vector<cv::Point> > contours;
|
||||||
std::vector<cv::Point> approx;
|
std::vector<cv::Point> approx;
|
||||||
std::vector<cv::Vec4i> hierarchy;
|
std::vector<cv::Vec4i> hierarchy;
|
||||||
|
@ -200,31 +196,31 @@ Arene Img::search_arena() {
|
||||||
approxPolyDP(ImageMat(contours[i]), approx, cv::arcLength(ImageMat(contours[i]), true)*0.1, true);
|
approxPolyDP(ImageMat(contours[i]), approx, cv::arcLength(ImageMat(contours[i]), true)*0.1, true);
|
||||||
if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000)
|
if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000)
|
||||||
{
|
{
|
||||||
Arene rectangle;
|
Arena rectangle;
|
||||||
rectangle.arene = cv::boundingRect(ImageMat(contours[i]));
|
rectangle.arena = cv::boundingRect(ImageMat(contours[i]));
|
||||||
return rectangle;
|
return rectangle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Arene();
|
return Arena();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Img::draw_robot(Position robot) {
|
int Img::DrawRobot(Position robot) {
|
||||||
cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0);
|
cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Img::draw_all_robots(std::list<Position> robots) {
|
int Img::DrawAllRobots(std::list<Position> robots) {
|
||||||
for(Position robot : robots){
|
for(Position robot : robots){
|
||||||
cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0);
|
cv::arrowedLine(this->img, (cv::Point2f)robot.center, (cv::Point2f)robot.direction, cv::Scalar(0,0,255),3,8,0);
|
||||||
}
|
}
|
||||||
return robots.size();
|
return robots.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Img::draw_arena(Arene areneToDraw) {
|
int Img::DrawArena(Arena areneToDraw) {
|
||||||
cv::rectangle(this->img,areneToDraw.arene.tl(),areneToDraw.arene.br(),cv::Scalar(0,0,125),2,8,0);
|
cv::rectangle(this->img,areneToDraw.arena.tl(),areneToDraw.arena.br(),cv::Scalar(0,0,125),2,8,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageMat Img::cropArena(Arene arene) {
|
ImageMat Img::CropArena(Arena arene) {
|
||||||
return this->img(arene.arene);
|
return this->img(arene.arena);
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,12 +47,12 @@ typedef struct {
|
||||||
int robotId;
|
int robotId;
|
||||||
} Position;
|
} Position;
|
||||||
|
|
||||||
class Arene {
|
class Arena {
|
||||||
public:
|
public:
|
||||||
Arene() {}
|
Arena() {}
|
||||||
|
|
||||||
cv::Rect arene;
|
cv::Rect arena;
|
||||||
bool empty();
|
bool IsEmpty();
|
||||||
};
|
};
|
||||||
|
|
||||||
class Img {
|
class Img {
|
||||||
|
@ -62,18 +62,17 @@ public:
|
||||||
string ToString();
|
string ToString();
|
||||||
Img* Copy();
|
Img* Copy();
|
||||||
|
|
||||||
Jpg toJpg();
|
Jpg ToJpg();
|
||||||
string ToBase64();
|
Arena SearchArena();
|
||||||
Arene search_arena();
|
|
||||||
|
|
||||||
int draw_robot(Position robot);
|
int DrawRobot(Position robot);
|
||||||
int draw_all_robots(std::list<Position> robots);
|
int DrawAllRobots(std::list<Position> robots);
|
||||||
int draw_arena(Arene areneToDraw);
|
int DrawArena(Arena areneToDraw);
|
||||||
std::list<Position> search_robot(Arene monArene);
|
std::list<Position> SearchRobot(Arena myArena);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __WITH_ARUCO__
|
#ifdef __WITH_ARUCO__
|
||||||
list<Position> search_aruco(Arene monArene = NULL);
|
list<Position> search_aruco(Arena monArene = NULL);
|
||||||
#endif // __WITH_ARUCO__
|
#endif // __WITH_ARUCO__
|
||||||
private:
|
private:
|
||||||
ImageMat img;
|
ImageMat img;
|
||||||
|
@ -84,10 +83,10 @@ private:
|
||||||
cv::Point2f find_aruco_direction(std::vector<cv::Point2f> aruco);
|
cv::Point2f find_aruco_direction(std::vector<cv::Point2f> aruco);
|
||||||
#endif // __WITH_ARUCO__
|
#endif // __WITH_ARUCO__
|
||||||
|
|
||||||
float calculAngle(Position robots);
|
float CalculAngle(Position robots);
|
||||||
float calculAngle2(cv::Point2f pt1, cv::Point2f pt2);
|
float CalculAngle2(cv::Point2f pt1, cv::Point2f pt2);
|
||||||
float euclideanDist(cv::Point2f p, cv::Point2f q);
|
float EuclideanDistance(cv::Point2f p, cv::Point2f q);
|
||||||
ImageMat cropArena(Arene arene);
|
ImageMat CropArena(Arena arene);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__IMG_H__
|
#endif //__IMG_H__
|
||||||
|
|
|
@ -291,7 +291,7 @@ MessageImg::MessageImg() {
|
||||||
* @param image Image
|
* @param image Image
|
||||||
* @throw std::runtime_error if message ID is incompatible with image
|
* @throw std::runtime_error if message ID is incompatible with image
|
||||||
*/
|
*/
|
||||||
MessageImg::MessageImg(MessageID id, Img* image) {
|
MessageImg::MessageImg(MessageID id, Img *image) {
|
||||||
MessageImg::SetID(id);
|
MessageImg::SetID(id);
|
||||||
MessageImg::SetImage(image);
|
MessageImg::SetImage(image);
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,8 @@ void MessageImg::SetID(MessageID id) {
|
||||||
* @param image Reference to image object
|
* @param image Reference to image object
|
||||||
*/
|
*/
|
||||||
void MessageImg::SetImage(Img* image) {
|
void MessageImg::SetImage(Img* image) {
|
||||||
this->image = image->Copy();
|
//this->image = image->Copy();
|
||||||
|
this->image = image;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -341,7 +342,6 @@ string MessageImg::ToString() {
|
||||||
* @return A message, copy of current
|
* @return A message, copy of current
|
||||||
*/
|
*/
|
||||||
Message* MessageImg::Copy() {
|
Message* MessageImg::Copy() {
|
||||||
|
|
||||||
return new MessageImg(this->messageID, this->image->Copy());
|
return new MessageImg(this->messageID, this->image->Copy());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,13 @@ typedef enum {
|
||||||
MESSAGE_ANSWER_ROBOT_ERROR,
|
MESSAGE_ANSWER_ROBOT_ERROR,
|
||||||
MESSAGE_ANSWER_COM_ERROR,
|
MESSAGE_ANSWER_COM_ERROR,
|
||||||
|
|
||||||
|
// Messages specific to server
|
||||||
|
MESSAGE_MONITOR_LOST,
|
||||||
|
|
||||||
// messages for serial communication with robot
|
// messages for serial communication with robot
|
||||||
MESSAGE_ROBOT_COM_OPEN,
|
MESSAGE_ROBOT_COM_OPEN,
|
||||||
MESSAGE_ROBOT_COM_CLOSE,
|
MESSAGE_ROBOT_COM_CLOSE,
|
||||||
|
|
||||||
// Messages specific to server
|
|
||||||
MESSAGE_MONITOR_LOST,
|
|
||||||
|
|
||||||
// Messages for camera
|
// Messages for camera
|
||||||
MESSAGE_CAM_OPEN,
|
MESSAGE_CAM_OPEN,
|
||||||
MESSAGE_CAM_CLOSE,
|
MESSAGE_CAM_CLOSE,
|
||||||
|
@ -373,7 +373,7 @@ public:
|
||||||
* @param image Pointer to image
|
* @param image Pointer to image
|
||||||
* @throw std::runtime_error if message ID is incompatible with image message
|
* @throw std::runtime_error if message ID is incompatible with image message
|
||||||
*/
|
*/
|
||||||
MessageImg(MessageID id, Img* image);
|
MessageImg(MessageID id, Img *image);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy Image message
|
* Destroy Image message
|
||||||
|
|
|
@ -38,15 +38,16 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
tasks.Init();
|
tasks.Init();
|
||||||
|
|
||||||
/*if (tasks.AcceptClient()) {
|
if (tasks.AcceptClient()) {
|
||||||
|
cout << "Rock'n'Roll baby, client accepted!"<<endl<<flush;
|
||||||
tasks.Run();
|
tasks.Run();
|
||||||
|
|
||||||
tasks.Join();
|
tasks.Join();
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.Stop();*/
|
tasks.Stop();
|
||||||
|
|
||||||
tasks.Run();
|
//tasks.Run();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ OBJECTFILES= \
|
||||||
${OBJECTDIR}/lib/server.o \
|
${OBJECTDIR}/lib/server.o \
|
||||||
${OBJECTDIR}/main.o \
|
${OBJECTDIR}/main.o \
|
||||||
${OBJECTDIR}/tasks.o \
|
${OBJECTDIR}/tasks.o \
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
||||||
|
@ -108,6 +109,11 @@ ${OBJECTDIR}/tasks.o: tasks.cpp
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
||||||
|
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
${MKDIR} -p ${OBJECTDIR}/_ext/a7f31ab4
|
||||||
|
${RM} "$@.d"
|
||||||
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a7f31ab4/base64.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
||||||
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
|
|
|
@ -37,6 +37,7 @@ OBJECTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}
|
||||||
OBJECTFILES= \
|
OBJECTFILES= \
|
||||||
${OBJECTDIR}/lib/messages.o \
|
${OBJECTDIR}/lib/messages.o \
|
||||||
${OBJECTDIR}/main.o \
|
${OBJECTDIR}/main.o \
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
||||||
|
@ -78,6 +79,11 @@ ${OBJECTDIR}/main.o: main.cpp
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
|
||||||
|
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
${MKDIR} -p ${OBJECTDIR}/_ext/a7f31ab4
|
||||||
|
${RM} "$@.d"
|
||||||
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -D__FOR_PC__ -D__WITH_PTHREAD__ -I./ -I./lib `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a7f31ab4/base64.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
||||||
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
|
|
|
@ -43,6 +43,7 @@ OBJECTFILES= \
|
||||||
${OBJECTDIR}/lib/server.o \
|
${OBJECTDIR}/lib/server.o \
|
||||||
${OBJECTDIR}/main.o \
|
${OBJECTDIR}/main.o \
|
||||||
${OBJECTDIR}/tasks.o \
|
${OBJECTDIR}/tasks.o \
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
||||||
|
@ -114,6 +115,11 @@ ${OBJECTDIR}/tasks.o: tasks.cpp
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
$(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
||||||
|
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
${MKDIR} -p ${OBJECTDIR}/_ext/a7f31ab4
|
||||||
|
${RM} "$@.d"
|
||||||
|
$(COMPILE.cc) -g -D_WITH_TRACE_ -I./ -I./lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury `pkg-config --cflags opencv` -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a7f31ab4/base64.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
||||||
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
|
|
|
@ -43,6 +43,7 @@ OBJECTFILES= \
|
||||||
${OBJECTDIR}/lib/server.o \
|
${OBJECTDIR}/lib/server.o \
|
||||||
${OBJECTDIR}/main.o \
|
${OBJECTDIR}/main.o \
|
||||||
${OBJECTDIR}/tasks.o \
|
${OBJECTDIR}/tasks.o \
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/commonitor.o \
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
${OBJECTDIR}/_ext/6cc0dc4a/comrobot.o \
|
||||||
|
@ -114,6 +115,11 @@ ${OBJECTDIR}/tasks.o: tasks.cpp
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
$(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
$(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/tasks.o tasks.cpp
|
||||||
|
|
||||||
|
${OBJECTDIR}/_ext/a7f31ab4/base64.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
${MKDIR} -p ${OBJECTDIR}/_ext/a7f31ab4
|
||||||
|
${RM} "$@.d"
|
||||||
|
$(COMPILE.cc) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/a7f31ab4/base64.o /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp
|
||||||
|
|
||||||
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
${OBJECTDIR}/_ext/6cc0dc4a/camera.o: /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp
|
||||||
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
${MKDIR} -p ${OBJECTDIR}/_ext/6cc0dc4a
|
||||||
${RM} "$@.d"
|
${RM} "$@.d"
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<logicalFolder name="HeaderFiles"
|
<logicalFolder name="HeaderFiles"
|
||||||
displayName="Header Files"
|
displayName="Header Files"
|
||||||
projectFiles="true">
|
projectFiles="true">
|
||||||
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h</itemPath>
|
||||||
<itemPath>./lib/camera.h</itemPath>
|
<itemPath>./lib/camera.h</itemPath>
|
||||||
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h</itemPath>
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h</itemPath>
|
||||||
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h</itemPath>
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h</itemPath>
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
<logicalFolder name="SourceFiles"
|
<logicalFolder name="SourceFiles"
|
||||||
displayName="Source Files"
|
displayName="Source Files"
|
||||||
projectFiles="true">
|
projectFiles="true">
|
||||||
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp</itemPath>
|
||||||
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp</itemPath>
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp</itemPath>
|
||||||
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</itemPath>
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</itemPath>
|
||||||
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp</itemPath>
|
<itemPath>/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp</itemPath>
|
||||||
|
@ -127,6 +129,16 @@
|
||||||
</item>
|
</item>
|
||||||
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
||||||
</item>
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp"
|
||||||
|
ex="false"
|
||||||
|
tool="1"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h"
|
||||||
|
ex="false"
|
||||||
|
tool="3"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
||||||
ex="false"
|
ex="false"
|
||||||
tool="1"
|
tool="1"
|
||||||
|
@ -220,6 +232,16 @@
|
||||||
</item>
|
</item>
|
||||||
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
||||||
</item>
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp"
|
||||||
|
ex="false"
|
||||||
|
tool="1"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h"
|
||||||
|
ex="false"
|
||||||
|
tool="3"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
||||||
ex="false"
|
ex="false"
|
||||||
tool="1"
|
tool="1"
|
||||||
|
@ -330,6 +352,16 @@
|
||||||
</item>
|
</item>
|
||||||
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
<item path="./tasks.h" ex="false" tool="3" flavor2="0">
|
||||||
</item>
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp"
|
||||||
|
ex="false"
|
||||||
|
tool="1"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h"
|
||||||
|
ex="false"
|
||||||
|
tool="3"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
||||||
ex="false"
|
ex="false"
|
||||||
tool="1"
|
tool="1"
|
||||||
|
@ -434,6 +466,16 @@
|
||||||
</item>
|
</item>
|
||||||
<item path="./tasks.cpp" ex="true" tool="1" flavor2="9">
|
<item path="./tasks.cpp" ex="true" tool="1" flavor2="9">
|
||||||
</item>
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp"
|
||||||
|
ex="false"
|
||||||
|
tool="1"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h"
|
||||||
|
ex="false"
|
||||||
|
tool="3"
|
||||||
|
flavor2="0">
|
||||||
|
</item>
|
||||||
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
<item path="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/camera.cpp"
|
||||||
ex="false"
|
ex="false"
|
||||||
tool="1"
|
tool="1"
|
||||||
|
|
|
@ -7,10 +7,9 @@
|
||||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||||
<group>
|
<group>
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp</file>
|
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/comrobot.h</file>
|
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.h</file>
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/tasks_pthread.h</file>
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h</file>
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.h</file>
|
||||||
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/img.h</file>
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/main.cpp</file>
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/main.cpp</file>
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h</file>
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/messages.h</file>
|
||||||
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</file>
|
<file>file:/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</file>
|
||||||
|
|
|
@ -52,7 +52,7 @@ void Tasks::Init() {
|
||||||
|
|
||||||
/* Open com port with STM32 */
|
/* Open com port with STM32 */
|
||||||
cout << "Open serial com (";
|
cout << "Open serial com (";
|
||||||
status = robot.Open("/dev/ttyUSB1");
|
status = robot.Open("/dev/ttyUSB0");
|
||||||
cout << status;
|
cout << status;
|
||||||
cout << ")" << endl;
|
cout << ")" << endl;
|
||||||
|
|
||||||
|
@ -72,41 +72,40 @@ void Tasks::Init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tasks::Run() {
|
void Tasks::Run() {
|
||||||
Message *msgRcv;
|
|
||||||
Message *msgSend;
|
|
||||||
int counter = 3;
|
|
||||||
|
|
||||||
// threadServer=new thread((void (*)(void*)) &Tasks::ServerTask,this);
|
threadTimer=new thread((void (*)(void*)) &Tasks::TimerTask,this);
|
||||||
|
threadServer=new thread((void (*)(void*)) &Tasks::ServerTask,this);
|
||||||
// threadSendToMon=new thread((void (*)(void*)) &Tasks::SendToMonTask,this);
|
// threadSendToMon=new thread((void (*)(void*)) &Tasks::SendToMonTask,this);
|
||||||
// threadTimer=new thread((void (*)(void*)) &Tasks::TimerTask,this);
|
|
||||||
|
|
||||||
msgSend = ComRobot::Ping();
|
|
||||||
cout << "Send => " << msgSend->ToString() << endl << flush;
|
|
||||||
msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
|
||||||
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
|
||||||
|
|
||||||
delete(msgRcv);
|
// msgSend = ComRobot::Ping();
|
||||||
|
// cout << "Send => " << msgSend->ToString() << endl << flush;
|
||||||
msgSend = ComRobot::StartWithoutWD();
|
// msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
||||||
cout << "Send => " << msgSend->ToString() << endl << flush;
|
// cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
||||||
msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
//
|
||||||
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
// delete(msgRcv);
|
||||||
|
//
|
||||||
delete(msgRcv);
|
// msgSend = ComRobot::StartWithoutWD();
|
||||||
|
// cout << "Send => " << msgSend->ToString() << endl << flush;
|
||||||
msgSend = ComRobot::Move(1000);
|
// msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
||||||
cout << "Send => " << msgSend->ToString() << endl << flush;
|
// cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
||||||
msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
//
|
||||||
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
// delete(msgRcv);
|
||||||
|
//
|
||||||
delete(msgRcv);
|
// msgSend = ComRobot::Move(1000);
|
||||||
|
// cout << "Send => " << msgSend->ToString() << endl << flush;
|
||||||
msgSend = ComRobot::GetBattery();
|
// msgRcv = robot.SendCommand(msgSend, MESSAGE_ANSWER_ACK, 3);
|
||||||
cout << "Send => " << msgSend->ToString() << endl << flush;
|
// cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
||||||
msgRcv = robot.SendCommand(msgSend, MESSAGE_ROBOT_BATTERY_LEVEL, 3);
|
//
|
||||||
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
// delete(msgRcv);
|
||||||
|
//
|
||||||
delete(msgRcv);
|
// msgSend = ComRobot::GetBattery();
|
||||||
|
// cout << "Send => " << msgSend->ToString() << endl << flush;
|
||||||
|
// msgRcv = robot.SendCommand(msgSend, MESSAGE_ROBOT_BATTERY_LEVEL, 3);
|
||||||
|
// cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
||||||
|
//
|
||||||
|
// delete(msgRcv);
|
||||||
|
cout<<"Tasks launched"<<endl<<flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tasks::Stop() {
|
void Tasks::Stop() {
|
||||||
|
@ -115,20 +114,69 @@ void Tasks::Stop() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tasks::ServerTask(void *arg) {
|
void Tasks::ServerTask(void *arg) {
|
||||||
int err;
|
Message *msgRcv;
|
||||||
|
Message *msgSend;
|
||||||
|
bool isActive=true;
|
||||||
|
|
||||||
cout << "Start " << __PRETTY_FUNCTION__ <<endl<<flush;
|
cout << "Start " << __PRETTY_FUNCTION__ <<endl<<flush;
|
||||||
|
|
||||||
while (1) {
|
while (isActive) {
|
||||||
|
msgRcv=NULL;
|
||||||
|
msgSend=NULL;
|
||||||
|
|
||||||
|
msgRcv = monitor.Read();
|
||||||
|
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_COM_CLOSE)) msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITH_WD)) msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_COM_CLOSE)) isActive = false;
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_CAM_OPEN)) {
|
||||||
|
sendImage=true;
|
||||||
|
msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_CAM_CLOSE)) {
|
||||||
|
sendImage=false;
|
||||||
|
msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_START)) {
|
||||||
|
sendPosition=true;
|
||||||
|
msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_STOP)) {
|
||||||
|
sendPosition=false;
|
||||||
|
msgSend = new Message(MESSAGE_ANSWER_ACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgRcv->CompareID(MESSAGE_ROBOT_BATTERY_GET)) msgSend = new MessageBattery(MESSAGE_ROBOT_BATTERY_LEVEL,BATTERY_FULL);
|
||||||
|
|
||||||
|
if (msgSend != NULL) monitor.Write(msgSend);
|
||||||
|
delete(msgRcv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tasks::TimerTask(void* arg) {
|
void Tasks::TimerTask(void* arg) {
|
||||||
struct timespec tim, tim2;
|
struct timespec tim, tim2;
|
||||||
|
Message *msgSend;
|
||||||
|
int counter;
|
||||||
|
|
||||||
tim.tv_sec = 0;
|
tim.tv_sec = 0;
|
||||||
tim.tv_nsec = 100000000;
|
tim.tv_nsec = 50000000; // 50ms (20fps)
|
||||||
|
|
||||||
cout << "Start " << __PRETTY_FUNCTION__ <<endl<<flush;
|
cout << "Start " << __PRETTY_FUNCTION__ <<endl<<flush;
|
||||||
|
|
||||||
|
Camera camera=Camera(sm);
|
||||||
|
cout << "Try opening camera"<<endl<<flush;
|
||||||
|
if (camera.Open()) cout<<"Camera opened successfully"<<endl<<flush;
|
||||||
|
else cout<<"Failed to open camera"<<endl<<flush;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
//std::this_thread::sleep_for(std::chrono::seconds )
|
//std::this_thread::sleep_for(std::chrono::seconds )
|
||||||
//sleep(1);
|
//sleep(1);
|
||||||
|
@ -137,7 +185,33 @@ void Tasks::TimerTask(void* arg) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutexTimer.unlock();
|
//mutexTimer.unlock();
|
||||||
|
if (sendImage==true) {
|
||||||
|
counter++;
|
||||||
|
|
||||||
|
if (counter>=1) {
|
||||||
|
counter=0;
|
||||||
|
Img image=camera.Grab();
|
||||||
|
|
||||||
|
cout << image.ToString()<<endl<<flush;
|
||||||
|
MessageImg *msg=new MessageImg(MESSAGE_CAM_IMAGE, &image);
|
||||||
|
|
||||||
|
monitor.Write(msg);
|
||||||
|
cout << "Image sent"<<endl<<flush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendPosition==true) {
|
||||||
|
Position pos;
|
||||||
|
pos.angle=0.0;
|
||||||
|
pos.robotId=1;
|
||||||
|
pos.center=cv::Point2f(0.5,0.5);
|
||||||
|
pos.direction=cv::Point2f(1.0,2.5);
|
||||||
|
|
||||||
|
MessagePosition *msgp=new MessagePosition(MESSAGE_CAM_POSITION, pos);
|
||||||
|
monitor.Write(msgp);
|
||||||
|
cout << "Position sent"<<endl<<flush;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,9 @@ private:
|
||||||
ComMonitor monitor;
|
ComMonitor monitor;
|
||||||
ComRobot robot;
|
ComRobot robot;
|
||||||
|
|
||||||
|
bool sendImage=false;
|
||||||
|
bool sendPosition=false;
|
||||||
|
|
||||||
thread *threadServer;
|
thread *threadServer;
|
||||||
thread *threadSendToMon;
|
thread *threadSendToMon;
|
||||||
thread *threadTimer;
|
thread *threadTimer;
|
||||||
|
|
Loading…
Reference in a new issue