2.74

Fork of ExperimentServer by Patrick Wensing

Committer:
pwensing
Date:
Mon Sep 14 14:28:07 2015 +0000
Revision:
9:5a1f3abfca66
Parent:
4:434982de99ed
Child:
10:47927a20c04d
windows newlines; input data size bug

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 2:bb4b95f37896 13 void ExperimentServer::init() {
pwensing 2:bb4b95f37896 14 // default configuration
pwensing 2:bb4b95f37896 15 char ip_address[] = "192.168.1.100";
pwensing 2:bb4b95f37896 16 char subnet_mask[]= "255.255.255.0";
pwensing 2:bb4b95f37896 17 char gateway[] = "192.168.1.1";
pwensing 2:bb4b95f37896 18 int server_port = 11223;
pwensing 2:bb4b95f37896 19 init(ip_address,subnet_mask,gateway, server_port);
pwensing 2:bb4b95f37896 20 }
pwensing 2:bb4b95f37896 21
pwensing 1:63635482312f 22 void ExperimentServer::init(const char * ip_addr, const char * subnet_mask, const char * gateway, unsigned int port) {
pwensing 1:63635482312f 23 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 24 _terminal->printf("\r\n==============================\r\nStarting Server\r\n");
pwensing 9:5a1f3abfca66 25 _terminal->printf("...Intializing Ethernet\r\n");
pwensing 0:85e387719efd 26 }
pwensing 0:85e387719efd 27 _eth.init(ip_addr,subnet_mask,gateway);
pwensing 0:85e387719efd 28
pwensing 0:85e387719efd 29 if(_terminal!=NULL)
pwensing 9:5a1f3abfca66 30 _terminal->printf("...Connecting\r\n");
pwensing 0:85e387719efd 31 _eth.connect();
pwensing 0:85e387719efd 32
pwensing 0:85e387719efd 33 if(_terminal!=NULL)
pwensing 9:5a1f3abfca66 34 _terminal->printf("...Ethernet IP Address is %s\r\n", _eth.getIPAddress());
pwensing 0:85e387719efd 35
pwensing 0:85e387719efd 36 _server.bind(port);
pwensing 0:85e387719efd 37 if(_terminal!=NULL)
pwensing 9:5a1f3abfca66 38 _terminal->printf("...Listening on Port %d\r\n", port);
pwensing 0:85e387719efd 39 }
pwensing 0:85e387719efd 40
pwensing 1:63635482312f 41 int ExperimentServer::getParams(float params[], int num_params) {
pwensing 1:63635482312f 42 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 43 _terminal->printf("\r\n========================\r\nNew Experiment\r\n");
pwensing 9:5a1f3abfca66 44 _terminal->printf("...Waiting for parameters...\r\n");
pwensing 0:85e387719efd 45 }
pwensing 0:85e387719efd 46
pwensing 9:5a1f3abfca66 47 int n = _server.receiveFrom(_client,(char *) params, num_params*sizeof(float));
pwensing 1:63635482312f 48 if ( (n% 4) > 0 ) {
pwensing 3:588db37d9079 49 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 50 _terminal->printf("ERROR: input data bad size\r\n");
pwensing 9:5a1f3abfca66 51 _terminal->printf("ERROR: Expected %d got %d\r\n",4*num_params,n);
pwensing 3:588db37d9079 52 }
pwensing 0:85e387719efd 53 return false;
pwensing 0:85e387719efd 54 }
pwensing 1:63635482312f 55 if ( n / 4 != num_params) {
pwensing 3:588db37d9079 56 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 57 _terminal->printf("ERROR: input data bad size\r\n");
pwensing 9:5a1f3abfca66 58 _terminal->printf("ERROR: Expected %d got %d\r\n",4*num_params,n);
pwensing 3:588db37d9079 59 }
pwensing 0:85e387719efd 60 return false;
pwensing 0:85e387719efd 61 }
pwensing 0:85e387719efd 62
pwensing 1:63635482312f 63 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 64 _terminal->printf("...Received input from: %s\r\n", _client.get_address());
pwensing 9:5a1f3abfca66 65 _terminal->printf("...Parameters: \r\n");
pwensing 1:63635482312f 66 for ( int j = 0 ; j < n/sizeof(float) ; j++) {
pwensing 9:5a1f3abfca66 67 _terminal->printf(" %d) %f\r\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 1:63635482312f 80 if( data_size + _data_cnt > _MAX_BUFFER_SIZE) {
pwensing 0:85e387719efd 81 flushBuffer();
pwensing 0:85e387719efd 82 }
pwensing 0:85e387719efd 83 for(int j = 0; j < data_size; j++) {
pwensing 0:85e387719efd 84 _buffer[ _data_cnt++ ] = data_output[j];
pwensing 0:85e387719efd 85 }
pwensing 0:85e387719efd 86 }
pwensing 0:85e387719efd 87 void ExperimentServer::setExperimentComplete() {
pwensing 0:85e387719efd 88 flushBuffer();
pwensing 4:434982de99ed 89 char buff[] = {'0'};
pwensing 3:588db37d9079 90 _server.sendTo(_client,buff,1);
pwensing 0:85e387719efd 91 }