Browse Source

gestion des flux binaires

Sebastien DI MERCURIO 5 years ago
parent
commit
2c66078b46

+ 12
- 2
software/monitor/monitor/Client.cs View File

11
         private static NetworkStream myStream = null;
11
         private static NetworkStream myStream = null;
12
         private const int BufferMaxSize = 512;
12
         private const int BufferMaxSize = 512;
13
         private static byte[] buffer = new byte[BufferMaxSize];
13
         private static byte[] buffer = new byte[BufferMaxSize];
14
+
14
         private static StringBuilder sb = new StringBuilder();
15
         private static StringBuilder sb = new StringBuilder();
15
         private static int newLength = 1;
16
         private static int newLength = 1;
16
 
17
 
51
 
52
 
52
         private const int BufferMaxSize = 512;
53
         private const int BufferMaxSize = 512;
53
         private static byte[] buffer = new byte[BufferMaxSize];
54
         private static byte[] buffer = new byte[BufferMaxSize];
55
+        private static byte[] receiveBuffer;
56
+        private static int initialReceiveBufferIndex = 0;
54
         private static StringBuilder message = new StringBuilder();
57
         private static StringBuilder message = new StringBuilder();
55
         private static int newLength = 1;
58
         private static int newLength = 1;
56
 
59
 
57
-        public delegate void ReadEvent(string msg);
60
+        public delegate void ReadEvent(string msg, byte[] buffer);
58
         public static ReadEvent readEvent = null;
61
         public static ReadEvent readEvent = null;
59
 
62
 
60
         public Client()
63
         public Client()
124
                 if (bytesRead > 0)
127
                 if (bytesRead > 0)
125
                 {
128
                 {
126
                     message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead));
129
                     message.Append(Encoding.ASCII.GetString(buffer, 0, bytesRead));
130
+                    if (receiveBuffer == null) receiveBuffer = new byte[bytesRead];
131
+                    else Array.Resize<byte>(ref receiveBuffer, initialReceiveBufferIndex + bytesRead);
132
+
133
+                    System.Buffer.BlockCopy(buffer, 0, receiveBuffer, initialReceiveBufferIndex, bytesRead);
134
+                    initialReceiveBufferIndex = receiveBuffer.Length;
127
                 }
135
                 }
128
 
136
 
129
                 if (client.Available > 0)
137
                 if (client.Available > 0)
134
                 }
142
                 }
135
                 else
143
                 else
136
                 {
144
                 {
137
-                    readEvent?.Invoke(message.ToString());
145
+                    readEvent?.Invoke(message.ToString(), receiveBuffer);
138
 
146
 
139
                     message.Clear();
147
                     message.Clear();
148
+                    receiveBuffer = null;
149
+                    initialReceiveBufferIndex = 0;
140
                 }
150
                 }
141
 
151
 
142
                 stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message);
152
                 stream.BeginRead(buffer, 0, newLength, new AsyncCallback(ReadCallback), message);

+ 4
- 4
software/monitor/monitor/CommandManager.cs View File

4
 {
4
 {
5
     public class CommandManager
5
     public class CommandManager
6
     {
6
     {
7
-        public delegate void CommandReceivedEvent(string msg);
7
+        public delegate void CommandReceivedEvent(string msg, byte[] buffer);
8
         public CommandReceivedEvent commandReceivedEvent = null;
8
         public CommandReceivedEvent commandReceivedEvent = null;
9
 
9
 
10
         private System.Timers.Timer waitTimer = new System.Timers.Timer();
10
         private System.Timers.Timer waitTimer = new System.Timers.Timer();
50
             Client.Close();
50
             Client.Close();
51
         }
51
         }
52
 
52
 
53
-        private void OnMessageReception(string message)
53
+        private void OnMessageReception(string message, byte[] buffer)
54
         {
54
         {
55
             waitTimer.Stop();
55
             waitTimer.Stop();
56
             this.messageReceived = message;
56
             this.messageReceived = message;
62
             }
62
             }
63
             else {
63
             else {
64
                 waitForAcknowledge = false;
64
                 waitForAcknowledge = false;
65
-                this.commandReceivedEvent?.Invoke(message);
65
+                this.commandReceivedEvent?.Invoke(message, buffer);
66
             }
66
             }
67
         }
67
         }
68
 
68
 
69
         private void OnMessageTimeout(object sender, System.Timers.ElapsedEventArgs e)
69
         private void OnMessageTimeout(object sender, System.Timers.ElapsedEventArgs e)
70
         {
70
         {
71
             messageReceived = null;
71
             messageReceived = null;
72
-            OnMessageReception(messageReceived);
72
+            OnMessageReception(messageReceived, null);
73
         }
73
         }
74
 
74
 
75
         public CommandManagerStatus SendCommand(string cmd, out string answer, double timeout)
75
         public CommandManagerStatus SendCommand(string cmd, out string answer, double timeout)

+ 3
- 3
software/monitor/monitor/DestijlCommandManager.cs View File

50
         private string receivedHeader = null;
50
         private string receivedHeader = null;
51
         private string receivedData = null;
51
         private string receivedData = null;
52
 
52
 
53
-        public delegate void CommandReceivedEvent(string header, string data);
53
+        public delegate void CommandReceivedEvent(string header, string data, byte[] buffer);
54
         public CommandReceivedEvent commandReceivedEvent = null;
54
         public CommandReceivedEvent commandReceivedEvent = null;
55
 
55
 
56
         public double timeout = 100; // timeout pour les commandes avec acquitement
56
         public double timeout = 100; // timeout pour les commandes avec acquitement
76
             if (commandManager != null) commandManager.Close();
76
             if (commandManager != null) commandManager.Close();
77
         }
77
         }
78
 
78
 
79
-        private void OnCommandReceived(string msg)
79
+        private void OnCommandReceived(string msg, byte[] buffer)
80
         {
80
         {
81
             string[] msgs = msg.Split(':');
81
             string[] msgs = msg.Split(':');
82
 
82
 
86
             if (msgs.Length >= 2) receivedData = msgs[1];
86
             if (msgs.Length >= 2) receivedData = msgs[1];
87
             else receivedData = null;
87
             else receivedData = null;
88
 
88
 
89
-            this.commandReceivedEvent?.Invoke(receivedHeader, receivedData);
89
+            this.commandReceivedEvent?.Invoke(receivedHeader, receivedData, buffer);
90
         }
90
         }
91
 
91
 
92
         public bool Open(string hostname)
92
         public bool Open(string hostname)

+ 11
- 4
software/monitor/monitor/MonitorUI.cs View File

129
         a.RetVal = true;
129
         a.RetVal = true;
130
     }
130
     }
131
 
131
 
132
-    public void OnCommandReceivedEvent(string header, string data)
132
+    public void OnCommandReceivedEvent(string header, string data, byte[] buffer)
133
     {
133
     {
134
         if (header != null) Console.WriteLine("Received header (" + header.Length + "): " + header);
134
         if (header != null) Console.WriteLine("Received header (" + header.Length + "): " + header);
135
         if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
135
         if (data != null) Console.WriteLine("Received data (" + data.Length + "): " + data);
152
                     break;
152
                     break;
153
             }
153
             }
154
         }
154
         }
155
+        else if (header.ToUpper() == DestijlCommandList.HeaderStmImage)
156
+        {
157
+            Console.WriteLine("Image received");
158
+            byte[] image = new byte[buffer.Length-4];
159
+            System.Buffer.BlockCopy(buffer, 4, image, 0, image.Length);
160
+            drawingareaCameraPixbuf = new Pixbuf(image.Length, image, true);
161
+        }
155
     }
162
     }
156
 
163
 
157
     protected void OnQuitActionActivated(object sender, EventArgs e)
164
     protected void OnQuitActionActivated(object sender, EventArgs e)
382
         {
389
         {
383
             if (cmdManager.CameraClose() != DestijlCommandManager.CommandStatus.Success)
390
             if (cmdManager.CameraClose() != DestijlCommandManager.CommandStatus.Success)
384
             {
391
             {
385
-                MessagePopup(MessageType.Error,
386
-                             ButtonsType.Ok, "Error",
387
-                             "Error when closing camera: bad answer for supervisor or timeout");
392
+                //MessagePopup(MessageType.Error,
393
+                //             ButtonsType.Ok, "Error",
394
+                //             "Error when closing camera: bad answer for supervisor or timeout");
388
             }
395
             }
389
         }
396
         }
390
         else
397
         else

+ 1
- 1
software/raspberry/superviseur-robot/lib/src/image.cpp View File

44
     // open the default camera, use something different from 0 otherwise;
44
     // open the default camera, use something different from 0 otherwise;
45
     // Check VideoCapture documentation.
45
     // Check VideoCapture documentation.
46
     printf("Opening Camera...\n");
46
     printf("Opening Camera...\n");
47
-    if(!cap.open(0))
47
+    if(!cap.open(1))
48
         return -1;
48
         return -1;
49
     
49
     
50
     sleep(1);
50
     sleep(1);

+ 2
- 0
software/raspberry/superviseur-robot/lib/src/server.cpp View File

52
     close(socketFD);
52
     close(socketFD);
53
 
53
 
54
     socketFD = -1;
54
     socketFD = -1;
55
+    
56
+    return 0;
55
 }
57
 }
56
 
58
 
57
 int acceptClient() {
59
 int acceptClient() {

+ 16
- 2
software/raspberry/testeur/testeur/main.cpp View File

114
     return status;
114
     return status;
115
 }
115
 }
116
 
116
 
117
+int sendBinaryData(string cmd, unsigned char* data) {
118
+    int status = 0;
119
+    string msg;
120
+
121
+//TODO: Faire une version binaire de sendDataToServer
122
+    //TODO: Gerer la concatenation du header et des données binaires
123
+    msg = cmd + ':' + data;
124
+    cout << "Answer: " + msg;
125
+    cout << "\n";
126
+    sendDataToServer((char*) msg.c_str(), msg.length());
127
+
128
+    return status;
129
+}
130
+
117
 int decodeMessage(MessageFromMon *mes, int dataLength) {
131
 int decodeMessage(MessageFromMon *mes, int dataLength) {
118
     int status = 0;
132
     int status = 0;
119
     string header(mes->header, 4);
133
     string header(mes->header, 4);
169
     namedWindow("Sortie Camera");
183
     namedWindow("Sortie Camera");
170
 
184
 
171
     // Ouverture de la com robot
185
     // Ouverture de la com robot
172
-    if (open_communication_robot("/dev/ttyUSB0") != 0) {
186
+    /*if (open_communication_robot("/dev/ttyUSB0") != 0) {
173
         cerr << "Unable to open /dev/ttyUSB0: abort\n";
187
         cerr << "Unable to open /dev/ttyUSB0: abort\n";
174
         return -1;
188
         return -1;
175
     }
189
     }
176
     cout << "/dev/ttyUSB0 opened\n";
190
     cout << "/dev/ttyUSB0 opened\n";
177
-
191
+*/
178
     // Ouverture de la camera
192
     // Ouverture de la camera
179
     if (open_camera(0) == -1) {
193
     if (open_camera(0) == -1) {
180
         cerr << "Unable to open camera: abort\n";
194
         cerr << "Unable to open camera: abort\n";

+ 5
- 5
software/raspberry/testeur/testeur/nbproject/Makefile-Debug.mk View File

69
 ${OBJECTDIR}/_ext/e4d40e25/image.o: ../../superviseur-robot/lib/src/image.cpp
69
 ${OBJECTDIR}/_ext/e4d40e25/image.o: ../../superviseur-robot/lib/src/image.cpp
70
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
70
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
71
 	${RM} "$@.d"
71
 	${RM} "$@.d"
72
-	$(COMPILE.cc) -g -D__FOR_PC__ -DD_REENTRANT -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/image.o ../../superviseur-robot/lib/src/image.cpp
72
+	$(COMPILE.cc) -g -DD_REENTRANT -D__FOR_PC__ -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/image.o ../../superviseur-robot/lib/src/image.cpp
73
 
73
 
74
 ${OBJECTDIR}/_ext/e4d40e25/message.o: ../../superviseur-robot/lib/src/message.cpp
74
 ${OBJECTDIR}/_ext/e4d40e25/message.o: ../../superviseur-robot/lib/src/message.cpp
75
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
75
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
76
 	${RM} "$@.d"
76
 	${RM} "$@.d"
77
-	$(COMPILE.cc) -g -D__FOR_PC__ -DD_REENTRANT -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/message.o ../../superviseur-robot/lib/src/message.cpp
77
+	$(COMPILE.cc) -g -DD_REENTRANT -D__FOR_PC__ -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/message.o ../../superviseur-robot/lib/src/message.cpp
78
 
78
 
79
 ${OBJECTDIR}/_ext/e4d40e25/robot.o: ../../superviseur-robot/lib/src/robot.cpp
79
 ${OBJECTDIR}/_ext/e4d40e25/robot.o: ../../superviseur-robot/lib/src/robot.cpp
80
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
80
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
81
 	${RM} "$@.d"
81
 	${RM} "$@.d"
82
-	$(COMPILE.cc) -g -D__FOR_PC__ -DD_REENTRANT -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/robot.o ../../superviseur-robot/lib/src/robot.cpp
82
+	$(COMPILE.cc) -g -DD_REENTRANT -D__FOR_PC__ -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/robot.o ../../superviseur-robot/lib/src/robot.cpp
83
 
83
 
84
 ${OBJECTDIR}/_ext/e4d40e25/server.o: ../../superviseur-robot/lib/src/server.cpp
84
 ${OBJECTDIR}/_ext/e4d40e25/server.o: ../../superviseur-robot/lib/src/server.cpp
85
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
85
 	${MKDIR} -p ${OBJECTDIR}/_ext/e4d40e25
86
 	${RM} "$@.d"
86
 	${RM} "$@.d"
87
-	$(COMPILE.cc) -g -D__FOR_PC__ -DD_REENTRANT -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/server.o ../../superviseur-robot/lib/src/server.cpp
87
+	$(COMPILE.cc) -g -DD_REENTRANT -D__FOR_PC__ -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/_ext/e4d40e25/server.o ../../superviseur-robot/lib/src/server.cpp
88
 
88
 
89
 ${OBJECTDIR}/main.o: main.cpp
89
 ${OBJECTDIR}/main.o: main.cpp
90
 	${MKDIR} -p ${OBJECTDIR}
90
 	${MKDIR} -p ${OBJECTDIR}
91
 	${RM} "$@.d"
91
 	${RM} "$@.d"
92
-	$(COMPILE.cc) -g -D__FOR_PC__ -DD_REENTRANT -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
92
+	$(COMPILE.cc) -g -DD_REENTRANT -D__FOR_PC__ -I../../superviseur-robot/lib `pkg-config --cflags opencv`   -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/main.o main.cpp
93
 
93
 
94
 # Subprojects
94
 # Subprojects
95
 .build-subprojects:
95
 .build-subprojects:

+ 8
- 0
software/raspberry/testeur/testeur/nbproject/private/private.xml View File

4
         <activeConfTypeElem>1</activeConfTypeElem>
4
         <activeConfTypeElem>1</activeConfTypeElem>
5
         <activeConfIndexElem>0</activeConfIndexElem>
5
         <activeConfIndexElem>0</activeConfIndexElem>
6
     </data>
6
     </data>
7
+    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
8
+    <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
9
+        <group>
10
+            <file>file:/home/dimercur/Documents/Travail/dumber/software/raspberry/superviseur-robot/lib/src/server.cpp</file>
11
+            <file>file:/home/dimercur/Documents/Travail/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp</file>
12
+            <file>file:/home/dimercur/Documents/Travail/dumber/software/raspberry/testeur/testeur/main.cpp</file>
13
+        </group>
14
+    </open-files>
7
 </project-private>
15
 </project-private>

Loading…
Cancel
Save