2.74

Fork of ExperimentServer by Patrick Wensing

Committer:
pwensing
Date:
Tue Aug 11 21:14:17 2015 +0000
Revision:
1:63635482312f
Parent:
0:85e387719efd
Child:
2:bb4b95f37896
cleaned up cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pwensing 0:85e387719efd 1 #include "ExperimentServer.h"
pwensing 0:85e387719efd 2 #include "EthernetInterface.h"
pwensing 0:85e387719efd 3
pwensing 0:85e387719efd 4 ExperimentServer::ExperimentServer() {
pwensing 0:85e387719efd 5 _terminal = NULL;
pwensing 0:85e387719efd 6 _data_cnt = 0;
pwensing 0:85e387719efd 7 }
pwensing 0:85e387719efd 8
pwensing 1:63635482312f 9 void ExperimentServer::attachTerminal( Serial & terminal) {
pwensing 0:85e387719efd 10 _terminal = &terminal;
pwensing 0:85e387719efd 11 }
pwensing 0:85e387719efd 12
pwensing 1:63635482312f 13 void ExperimentServer::init(const char * ip_addr, const char * subnet_mask, const char * gateway, unsigned int port) {
pwensing 1:63635482312f 14 if(_terminal!=NULL) {
pwensing 0:85e387719efd 15 _terminal->printf("\n==============================\nStarting Server\n");
pwensing 0:85e387719efd 16 _terminal->printf("...Intializing Ethernet\n");
pwensing 0:85e387719efd 17 }
pwensing 0:85e387719efd 18 _eth.init(ip_addr,subnet_mask,gateway);
pwensing 0:85e387719efd 19
pwensing 0:85e387719efd 20 if(_terminal!=NULL)
pwensing 0:85e387719efd 21 _terminal->printf("...Connecting\n");
pwensing 0:85e387719efd 22 _eth.connect();
pwensing 0:85e387719efd 23
pwensing 0:85e387719efd 24 if(_terminal!=NULL)
pwensing 0:85e387719efd 25 _terminal->printf("...Ethernet IP Address is %s\n", _eth.getIPAddress());
pwensing 0:85e387719efd 26
pwensing 0:85e387719efd 27 _server.bind(port);
pwensing 0:85e387719efd 28 if(_terminal!=NULL)
pwensing 0:85e387719efd 29 _terminal->printf("...Listening on Port %d\n", port);
pwensing 0:85e387719efd 30 }
pwensing 0:85e387719efd 31
pwensing 1:63635482312f 32 int ExperimentServer::getParams(float params[], int num_params) {
pwensing 1:63635482312f 33 if(_terminal!=NULL) {
pwensing 0:85e387719efd 34 _terminal->printf("\n========================\nNew Experiment\n");
pwensing 0:85e387719efd 35 _terminal->printf("...Waiting for parameters...\n");
pwensing 0:85e387719efd 36 }
pwensing 0:85e387719efd 37
pwensing 0:85e387719efd 38 int n = _server.receiveFrom(_client,(char *) params, sizeof(params)*sizeof(float));
pwensing 1:63635482312f 39 if ( (n% 4) > 0 ) {
pwensing 0:85e387719efd 40 if(_terminal!=NULL)
pwensing 0:85e387719efd 41 _terminal->printf("ERROR: input data bad size\n");
pwensing 0:85e387719efd 42 return false;
pwensing 0:85e387719efd 43 }
pwensing 1:63635482312f 44 if ( n / 4 != num_params) {
pwensing 0:85e387719efd 45 if(_terminal!=NULL)
pwensing 0:85e387719efd 46 _terminal->printf("ERROR: input data bad size\n");
pwensing 0:85e387719efd 47 return false;
pwensing 0:85e387719efd 48 }
pwensing 0:85e387719efd 49
pwensing 1:63635482312f 50 if(_terminal!=NULL) {
pwensing 0:85e387719efd 51 _terminal->printf("...Received input from: %s\n", _client.get_address());
pwensing 0:85e387719efd 52 _terminal->printf("...Parameters: \n");
pwensing 1:63635482312f 53 for ( int j = 0 ; j < n/sizeof(float) ; j++) {
pwensing 0:85e387719efd 54 _terminal->printf(" %d) %f\n",j+1,params[j]);
pwensing 0:85e387719efd 55 }
pwensing 0:85e387719efd 56 }
pwensing 0:85e387719efd 57 return true;
pwensing 0:85e387719efd 58 }
pwensing 0:85e387719efd 59 void ExperimentServer::flushBuffer() {
pwensing 0:85e387719efd 60 if(_data_cnt > 0) {
pwensing 0:85e387719efd 61 _server.sendTo(_client,(char*) _buffer, 4*_data_cnt );
pwensing 0:85e387719efd 62 _data_cnt = 0;
pwensing 0:85e387719efd 63 }
pwensing 0:85e387719efd 64 }
pwensing 0:85e387719efd 65
pwensing 0:85e387719efd 66 void ExperimentServer::sendData(float data_output[], int data_size) {
pwensing 1:63635482312f 67 if( data_size + _data_cnt > _MAX_BUFFER_SIZE) {
pwensing 0:85e387719efd 68 flushBuffer();
pwensing 0:85e387719efd 69 }
pwensing 0:85e387719efd 70 for(int j = 0; j < data_size; j++) {
pwensing 0:85e387719efd 71 _buffer[ _data_cnt++ ] = data_output[j];
pwensing 0:85e387719efd 72 }
pwensing 0:85e387719efd 73 }
pwensing 0:85e387719efd 74 void ExperimentServer::setExperimentComplete() {
pwensing 0:85e387719efd 75 flushBuffer();
pwensing 0:85e387719efd 76 }