2.74

Fork of ExperimentServer by Patrick Wensing

Committer:
benkatz
Date:
Mon Sep 25 19:33:17 2017 +0000
Revision:
10:47927a20c04d
Parent:
9:5a1f3abfca66
lab3;

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
benkatz 10:47927a20c04d 9 void ExperimentServer::attachTerminal( RawSerial & 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 9:5a1f3abfca66 46 int n = _server.receiveFrom(_client,(char *) params, num_params*sizeof(float));
pwensing 1:63635482312f 47 if ( (n% 4) > 0 ) {
pwensing 3:588db37d9079 48 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 49 _terminal->printf("ERROR: input data bad size\r\n");
pwensing 9:5a1f3abfca66 50 _terminal->printf("ERROR: Expected %d got %d\r\n",4*num_params,n);
pwensing 3:588db37d9079 51 }
pwensing 0:85e387719efd 52 return false;
pwensing 0:85e387719efd 53 }
pwensing 1:63635482312f 54 if ( n / 4 != num_params) {
pwensing 3:588db37d9079 55 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 56 _terminal->printf("ERROR: input data bad size\r\n");
pwensing 9:5a1f3abfca66 57 _terminal->printf("ERROR: Expected %d got %d\r\n",4*num_params,n);
pwensing 3:588db37d9079 58 }
pwensing 0:85e387719efd 59 return false;
pwensing 0:85e387719efd 60 }
pwensing 0:85e387719efd 61
pwensing 1:63635482312f 62 if(_terminal!=NULL) {
pwensing 9:5a1f3abfca66 63 _terminal->printf("...Received input from: %s\r\n", _client.get_address());
pwensing 9:5a1f3abfca66 64 _terminal->printf("...Parameters: \r\n");
pwensing 1:63635482312f 65 for ( int j = 0 ; j < n/sizeof(float) ; j++) {
pwensing 9:5a1f3abfca66 66 _terminal->printf(" %d) %f\r\n",j+1,params[j]);
pwensing 0:85e387719efd 67 }
pwensing 0:85e387719efd 68 }
pwensing 0:85e387719efd 69 return true;
pwensing 0:85e387719efd 70 }
pwensing 0:85e387719efd 71 void ExperimentServer::flushBuffer() {
pwensing 0:85e387719efd 72 if(_data_cnt > 0) {
pwensing 0:85e387719efd 73 _server.sendTo(_client,(char*) _buffer, 4*_data_cnt );
pwensing 0:85e387719efd 74 _data_cnt = 0;
pwensing 0:85e387719efd 75 }
pwensing 0:85e387719efd 76 }
pwensing 0:85e387719efd 77
pwensing 0:85e387719efd 78 void ExperimentServer::sendData(float data_output[], int data_size) {
pwensing 1:63635482312f 79 if( data_size + _data_cnt > _MAX_BUFFER_SIZE) {
pwensing 0:85e387719efd 80 flushBuffer();
pwensing 0:85e387719efd 81 }
pwensing 0:85e387719efd 82 for(int j = 0; j < data_size; j++) {
pwensing 0:85e387719efd 83 _buffer[ _data_cnt++ ] = data_output[j];
pwensing 0:85e387719efd 84 }
pwensing 0:85e387719efd 85 }
pwensing 0:85e387719efd 86 void ExperimentServer::setExperimentComplete() {
pwensing 0:85e387719efd 87 flushBuffer();
pwensing 4:434982de99ed 88 char buff[] = {'0'};
pwensing 3:588db37d9079 89 _server.sendTo(_client,buff,1);
pwensing 0:85e387719efd 90 }