2.74
Fork of ExperimentServer by
ExperimentServer.h@7:405d66abdedf, 2015-08-13 (annotated)
- Committer:
- pwensing
- Date:
- Thu Aug 13 20:09:42 2015 +0000
- Revision:
- 7:405d66abdedf
- Parent:
- 6:760b0ac3df4e
- Parent:
- 5:195f5f47b56f
- Child:
- 10:47927a20c04d
merge documentation;
Who changed what in which revision?
User | Revision | Line number | New 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 |
pwensing | 6:760b0ac3df4e | 93 | Endpoint _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 | }; |