Skip to content
Snippets Groups Projects
Select Git revision
  • aaf7c677538f19fbbcee373b9703310f57901f43
  • master default protected
2 results

rule-format.md

Blame
  • MotionToPhotonServer.cpp 4.76 KiB
    #include "MotionToPhotonServer.h"
    
    /* Server Setup */
    
    	MotionToPhotonServer::MotionToPhotonServer(unsigned long* result_buffer_, unsigned int result_buffer_length_, unsigned int (* getPhotodiodeReadingFunction)(), unsigned int (* getThresholdFunction)(), void (* setThresholdFunction)(unsigned int), unsigned int (* getDeflectionFunction)(), void (* setDeflectionFunction)(unsigned int), String (* getStatusFunction)(), void (* startMeasureFunction)(unsigned int), unsigned int (* getCurrentNumberOfResultsFunction)(), void (* abortMeasurementFunction)()) {
    		getPhotodiodeReading = getPhotodiodeReadingFunction;
    		getThreshold = getThresholdFunction;
    		setThreshold = setThresholdFunction;
    		getDeflection = getDeflectionFunction;
    		setDeflection = setDeflectionFunction;
    		getStatus = getStatusFunction;
    		startMeasure = startMeasureFunction;
    		abortMeasurement = abortMeasurementFunction;
    		getCurrentNumberOfResults = getCurrentNumberOfResultsFunction;
    		result_buffer = result_buffer_;
    		result_buffer_length = result_buffer_length_;
    	}
    
    	void MotionToPhotonServer::setup(){
    		if(!Serial) Serial.begin(115200);
    		if(!SPIFFS.begin()){
    			Serial.println("An Error has occurred while mounting SPIFFS");
    			return;
    		}
    
    		WiFi.softAP(ssid, password);
    		WiFi.softAPConfig(local_ip, gateway, subnet);
    		delay(100);
    
    		server.on("/", [this](){this->pageIndex();} );
    		server.on("/measure", [this](){this->pageMeasure();});
    		server.on("/results", [this](){this->pageResults();});
    		server.on("/status", [this](){this->pageStatus();});
    		server.on("/sensor", [this](){this->pageSensor();});
    		server.on("/setThreshold", [this](){this->pageSetThreshold();});
    		server.on("/getThreshold", [this](){this->pageGetThreshold();});
    		server.on("/setDeflection", [this](){this->pageSetDeflection();});
    		server.on("/getDeflection", [this](){this->pageGetDeflection();});
    		server.on("/abort", [this](){this->pageAbort();});
    		server.onNotFound([this](){this->pageNotFound();});
    
    		server.begin();
    		Serial.println("HTTP server started");
    	}
    
    	void MotionToPhotonServer::serve() {
    		server.handleClient();
    	}
    
    /* Pages to Serve */	
    	void MotionToPhotonServer::pageAbort(){
    		abortMeasurement();
    		server.send(200, "text/plain", "Ok."); 
    	}
    	
    	void MotionToPhotonServer::pageStatus(){
    		unsigned int results = getCurrentNumberOfResults();
    		server.send(200, "text/plain", String(getStatus()) + ((results > 0) ? ": " + String(results):"") ); 
    	}
    
    	void MotionToPhotonServer::pageSetThreshold(){
    		if(server.args() <= 0){
    			server.send(400, "text/plain", "No parameters given. Give t=<threshold>");
    			return;
    		}
    		unsigned int threshold = String(server.arg(0)).toInt();
    		
    		setThreshold(threshold);
    		server.send(200, "text/plain", "Ok."); 
    	}
    
    	void MotionToPhotonServer::pageGetThreshold(){
    		server.send(200, "text/plain", String(getThreshold())); 
    	}
    
    	void MotionToPhotonServer::pageSetDeflection(){
    		if(server.args() <= 0){
    			server.send(400, "text/plain", "No parameters given. Give d=<deflection>");
    			return;
    		}
    		unsigned int deflection = String(server.arg(0)).toInt();
    		
    		setDeflection(deflection);
    		server.send(200, "text/plain", "Ok."); 
    	}
    
    	void MotionToPhotonServer::pageGetDeflection(){
    		server.send(200, "text/plain", String(getDeflection())); 
    	}
    
    	void MotionToPhotonServer::pageSensor(){
    		server.send(200, "text/plain", String(getPhotodiodeReading())); 
    	}
    
    	void MotionToPhotonServer::pageMeasure(){
    		if(server.args() <= 0){
    			server.send(400, "text/plain", "No parameters given. Give t=<times to measure>");
    			return;
    		}
    		unsigned int timesToMeasure = String(server.arg(0)).toInt();
    		startMeasure(timesToMeasure);
    		Serial.println("Measuring " + String(timesToMeasure) + " times!");
    		server.send(200, "text/plain", "Ok."); 
    	}
    
    	void MotionToPhotonServer::pageResults(){
    		Serial.println("Client wants index page.");
    		server.setContentLength(CONTENT_LENGTH_UNKNOWN);
    		server.send(200, "text/plain", "");
    		unsigned int currentNumberOfResults = getCurrentNumberOfResults();
    		for(unsigned int i = 0; i < currentNumberOfResults; i++){
    			server.sendContent(String(result_buffer[i]) + ((i != currentNumberOfResults-1) ? ",\n":""));
    		}
    		server.client().stop();
    	}
    
    	void MotionToPhotonServer::pageIndex(){
    		Serial.println("Client wants index page.");
    		server.send(200, "text/html", readFile("index.html")); 
    	}
    
    	void MotionToPhotonServer::pageNotFound(){
    		server.send(404, "text/plain", "Not found!");
    	}
    
    /* Utility */
    
    	String MotionToPhotonServer::readFile(String filename){
    		memset(file_buffer, '\0', file_buffer_length * sizeof(char)); //clear buffer
    		File file = SPIFFS.open("/" + filename, "r");
    		if (!file) return "";
    
    		if(file.size() > file_buffer_length) return "Error Reading File.";
    		unsigned int offset = 0;
    		while(file.available()){
    			file_buffer[offset] = file.read();
    			offset++;
    		}
    		
    		return String(file_buffer);
    	}