UDP Experiment Server

Dependents:   Bezier_Trajectory_Follower Dolphin 2_131TEST Jerby ... more

Committer:
gbravop
Date:
Fri Jul 19 16:57:05 2019 +0000
Revision:
10:20f31902ac9f
Parent:
7:405d66abdedf
Updated For Mbed 5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pwensing 0:85e387719efd 1 #include "EthernetInterface.h"
pwensing 0:85e387719efd 2 #include "mbed.h"
pwensing 0:85e387719efd 3
pwensing 0:85e387719efd 4 #define _MAX_BUFFER_SIZE 200
pwensing 0:85e387719efd 5
pwensing 6:760b0ac3df4e 6 /**
pwensing 6:760b0ac3df4e 7 * Experiment Server
pwensing 6:760b0ac3df4e 8 */
pwensing 6:760b0ac3df4e 9
pwensing 0:85e387719efd 10 class ExperimentServer
pwensing 0:85e387719efd 11 {
pwensing 0:85e387719efd 12 public:
pwensing 7:405d66abdedf 13
pwensing 6:760b0ac3df4e 14 /**
pwensing 5:195f5f47b56f 15 * Constructor.
pwensing 5:195f5f47b56f 16 *
pwensing 6:760b0ac3df4e 17 * Constructs an empty experiment server. Server objects require additional
pwensing 6:760b0ac3df4e 18 * initialization before being used.
pwensing 5:195f5f47b56f 19 * Constructs an empty experiment server. Server objects require further
pwensing 5:195f5f47b56f 20 * initialization before use.
pwensing 5:195f5f47b56f 21 */
pwensing 0:85e387719efd 22 ExperimentServer();
pwensing 5:195f5f47b56f 23
pwensing 5:195f5f47b56f 24 /**
pwensing 6:760b0ac3df4e 25 * Link a serial terminal to the server for debugging purposes.
pwensing 5:195f5f47b56f 26 *
pwensing 6:760b0ac3df4e 27 * @param terminal Serial terminal to be used for debugging messages
pwensing 5:195f5f47b56f 28 */
pwensing 0:85e387719efd 29 void attachTerminal( Serial & terminal);
pwensing 5:195f5f47b56f 30
pwensing 6:760b0ac3df4e 31 /**
pwensing 6:760b0ac3df4e 32 * Initialize the server.
pwensing 6:760b0ac3df4e 33 *
pwensing 6:760b0ac3df4e 34 * Following initialization, the getParams, sendData, and setExperimentComplete
pwensing 6:760b0ac3df4e 35 * methods may be used.
pwensing 6:760b0ac3df4e 36 *
pwensing 6:760b0ac3df4e 37 * Applies default server configuration with ip <tt>192.168.1.100</tt>,
pwensing 6:760b0ac3df4e 38 * subnet <tt>255.255.255.0</tt>, gateway <tt>192.168.1.1</tt>, port <tt>11223</tt>.
pwensing 6:760b0ac3df4e 39 */
pwensing 2:bb4b95f37896 40 void init();
pwensing 7:405d66abdedf 41
pwensing 6:760b0ac3df4e 42 /**
pwensing 6:760b0ac3df4e 43 * Initialize the server with supplied configuration.
pwensing 6:760b0ac3df4e 44 *
pwensing 6:760b0ac3df4e 45 * Following initialization, the getParams, sendData, and setExperimentComplete
pwensing 6:760b0ac3df4e 46 * methods may be used.
pwensing 6:760b0ac3df4e 47 *
pwensing 6:760b0ac3df4e 48 * @param addr IP address of the server
pwensing 6:760b0ac3df4e 49 * @param subnet Subnet mask of the IP address
pwensing 6:760b0ac3df4e 50 * @param gateway Gateway/router IP address
pwensing 6:760b0ac3df4e 51 * @param port Port to listen on for connections from MATLAB.
pwensing 6:760b0ac3df4e 52 */
pwensing 6:760b0ac3df4e 53 void init(const char * addr, const char * subnet, const char * gateway, unsigned int port);
pwensing 0:85e387719efd 54
pwensing 6:760b0ac3df4e 55 /**
pwensing 6:760b0ac3df4e 56 * Listen for parameters passed to the server. This operation blocks until any data
pwensing 6:760b0ac3df4e 57 * is recieved.
pwensing 6:760b0ac3df4e 58 *
pwensing 6:760b0ac3df4e 59 * @param params Float array of size num_params used to store incoming data
pwensing 6:760b0ac3df4e 60 * @param num_params Expected length of incoming data (# of floats)
pwensing 6:760b0ac3df4e 61 *
pwensing 6:760b0ac3df4e 62 * @return Success of the operation (0 - Failure, 1 - Success)
pwensing 6:760b0ac3df4e 63 * The operation is considered failure if the correct number of floats
pwensing 6:760b0ac3df4e 64 * is not recieved.
pwensing 6:760b0ac3df4e 65 *
pwensing 6:760b0ac3df4e 66 */
pwensing 0:85e387719efd 67 int getParams(float params[], int num_params);
pwensing 6:760b0ac3df4e 68
pwensing 6:760b0ac3df4e 69 /**
pwensing 6:760b0ac3df4e 70 * Send data back to host machine. To alleviate the processing burden on the host
pwensing 6:760b0ac3df4e 71 * machine, data is actually buffered on the chip and sent to the host in batches.
pwensing 6:760b0ac3df4e 72 *
pwensing 6:760b0ac3df4e 73 * @param data_output Float array of size data_size containing data to send to host
pwensing 6:760b0ac3df4e 74 * @param data_size Length of outgoing data (# of floats)
pwensing 6:760b0ac3df4e 75 *
pwensing 6:760b0ac3df4e 76 */
pwensing 0:85e387719efd 77 void sendData(float data_output[], int data_size);
pwensing 6:760b0ac3df4e 78
pwensing 6:760b0ac3df4e 79 /**
pwensing 6:760b0ac3df4e 80 * Inform the host that the experiment is complete.
pwensing 6:760b0ac3df4e 81 *
pwensing 6:760b0ac3df4e 82 * This function also sends any final buffered output data that has yet
pwensing 6:760b0ac3df4e 83 * to be relayed to the host.
pwensing 6:760b0ac3df4e 84 *
pwensing 6:760b0ac3df4e 85 */
pwensing 0:85e387719efd 86 void setExperimentComplete();
pwensing 0:85e387719efd 87
pwensing 0:85e387719efd 88 private:
pwensing 6:760b0ac3df4e 89
pwensing 6:760b0ac3df4e 90 void flushBuffer(); // Sends all data in buffer to the host
pwensing 0:85e387719efd 91
pwensing 6:760b0ac3df4e 92 EthernetInterface _eth; // Low level ethernet object
gbravop 10:20f31902ac9f 93 SocketAddress _client; // Stores client connected to server
pwensing 6:760b0ac3df4e 94 UDPSocket _server; // Low level UDP server object
pwensing 6:760b0ac3df4e 95 Serial * _terminal; // Pointer to attached terminal for debugging
pwensing 0:85e387719efd 96
pwensing 6:760b0ac3df4e 97 float _buffer[_MAX_BUFFER_SIZE]; // Buffer for batch data storage before sending
pwensing 6:760b0ac3df4e 98 int _data_cnt; // Current occupied length of the buffer
pwensing 0:85e387719efd 99 };