UDP Experiment Server
Dependents: Bezier_Trajectory_Follower Dolphin 2_131TEST Jerby ... more
ExperimentServer.cpp@0:85e387719efd, 2015-08-11 (annotated)
- Committer:
- pwensing
- Date:
- Tue Aug 11 21:11:10 2015 +0000
- Revision:
- 0:85e387719efd
- Child:
- 1:63635482312f
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:85e387719efd | 9 | void ExperimentServer::attachTerminal( Serial & terminal) |
pwensing | 0:85e387719efd | 10 | { |
pwensing | 0:85e387719efd | 11 | _terminal = &terminal; |
pwensing | 0:85e387719efd | 12 | } |
pwensing | 0:85e387719efd | 13 | |
pwensing | 0:85e387719efd | 14 | void ExperimentServer::init(const char * ip_addr, const char * subnet_mask, const char * gateway, unsigned int port) |
pwensing | 0:85e387719efd | 15 | { |
pwensing | 0:85e387719efd | 16 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 17 | { |
pwensing | 0:85e387719efd | 18 | _terminal->printf("\n==============================\nStarting Server\n"); |
pwensing | 0:85e387719efd | 19 | _terminal->printf("...Intializing Ethernet\n"); |
pwensing | 0:85e387719efd | 20 | } |
pwensing | 0:85e387719efd | 21 | _eth.init(ip_addr,subnet_mask,gateway); |
pwensing | 0:85e387719efd | 22 | |
pwensing | 0:85e387719efd | 23 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 24 | _terminal->printf("...Connecting\n"); |
pwensing | 0:85e387719efd | 25 | _eth.connect(); |
pwensing | 0:85e387719efd | 26 | |
pwensing | 0:85e387719efd | 27 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 28 | _terminal->printf("...Ethernet IP Address is %s\n", _eth.getIPAddress()); |
pwensing | 0:85e387719efd | 29 | |
pwensing | 0:85e387719efd | 30 | _server.bind(port); |
pwensing | 0:85e387719efd | 31 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 32 | _terminal->printf("...Listening on Port %d\n", port); |
pwensing | 0:85e387719efd | 33 | } |
pwensing | 0:85e387719efd | 34 | |
pwensing | 0:85e387719efd | 35 | |
pwensing | 0:85e387719efd | 36 | |
pwensing | 0:85e387719efd | 37 | |
pwensing | 0:85e387719efd | 38 | int ExperimentServer::getParams(float params[], int num_params) |
pwensing | 0:85e387719efd | 39 | { |
pwensing | 0:85e387719efd | 40 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 41 | { |
pwensing | 0:85e387719efd | 42 | _terminal->printf("\n========================\nNew Experiment\n"); |
pwensing | 0:85e387719efd | 43 | _terminal->printf("...Waiting for parameters...\n"); |
pwensing | 0:85e387719efd | 44 | } |
pwensing | 0:85e387719efd | 45 | |
pwensing | 0:85e387719efd | 46 | int n = _server.receiveFrom(_client,(char *) params, sizeof(params)*sizeof(float)); |
pwensing | 0:85e387719efd | 47 | if ( (n% 4) > 0 ) |
pwensing | 0:85e387719efd | 48 | { |
pwensing | 0:85e387719efd | 49 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 50 | _terminal->printf("ERROR: input data bad size\n"); |
pwensing | 0:85e387719efd | 51 | return false; |
pwensing | 0:85e387719efd | 52 | } |
pwensing | 0:85e387719efd | 53 | if ( n / 4 != num_params) |
pwensing | 0:85e387719efd | 54 | { |
pwensing | 0:85e387719efd | 55 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 56 | _terminal->printf("ERROR: input data bad size\n"); |
pwensing | 0:85e387719efd | 57 | |
pwensing | 0:85e387719efd | 58 | return false; |
pwensing | 0:85e387719efd | 59 | } |
pwensing | 0:85e387719efd | 60 | |
pwensing | 0:85e387719efd | 61 | if(_terminal!=NULL) |
pwensing | 0:85e387719efd | 62 | { |
pwensing | 0:85e387719efd | 63 | _terminal->printf("...Received input from: %s\n", _client.get_address()); |
pwensing | 0:85e387719efd | 64 | _terminal->printf("...Parameters: \n"); |
pwensing | 0:85e387719efd | 65 | for ( int j = 0 ; j < n/sizeof(float) ; j++) |
pwensing | 0:85e387719efd | 66 | { |
pwensing | 0:85e387719efd | 67 | _terminal->printf(" %d) %f\n",j+1,params[j]); |
pwensing | 0:85e387719efd | 68 | } |
pwensing | 0:85e387719efd | 69 | } |
pwensing | 0:85e387719efd | 70 | return true; |
pwensing | 0:85e387719efd | 71 | } |
pwensing | 0:85e387719efd | 72 | void ExperimentServer::flushBuffer() { |
pwensing | 0:85e387719efd | 73 | if(_data_cnt > 0) { |
pwensing | 0:85e387719efd | 74 | _server.sendTo(_client,(char*) _buffer, 4*_data_cnt ); |
pwensing | 0:85e387719efd | 75 | _data_cnt = 0; |
pwensing | 0:85e387719efd | 76 | } |
pwensing | 0:85e387719efd | 77 | } |
pwensing | 0:85e387719efd | 78 | |
pwensing | 0:85e387719efd | 79 | void ExperimentServer::sendData(float data_output[], int data_size) { |
pwensing | 0:85e387719efd | 80 | if( data_size + _data_cnt > _MAX_BUFFER_SIZE) |
pwensing | 0:85e387719efd | 81 | { |
pwensing | 0:85e387719efd | 82 | //_terminal->printf("@%d + %d, flushing\n"); |
pwensing | 0:85e387719efd | 83 | flushBuffer(); |
pwensing | 0:85e387719efd | 84 | } |
pwensing | 0:85e387719efd | 85 | |
pwensing | 0:85e387719efd | 86 | for(int j = 0; j < data_size; j++) { |
pwensing | 0:85e387719efd | 87 | _buffer[ _data_cnt++ ] = data_output[j]; |
pwensing | 0:85e387719efd | 88 | } |
pwensing | 0:85e387719efd | 89 | } |
pwensing | 0:85e387719efd | 90 | void ExperimentServer::setExperimentComplete() { |
pwensing | 0:85e387719efd | 91 | flushBuffer(); |
pwensing | 0:85e387719efd | 92 | } |