2.74

Fork of ExperimentServer by Patrick Wensing

Committer:
pwensing
Date:
Thu Aug 13 20:06:37 2015 +0000
Revision:
6:760b0ac3df4e
Parent:
2:bb4b95f37896
Child:
7:405d66abdedf
Updated documentation

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