blob: aa377fe288666d2a69db598d730272e3fffd4172 [file] [log] [blame]
/*
* Copyright (c) 2017 FH Dortmund and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Description:
* Communicating with web server back-end via file access
*
* In order to drive your rover via web page, please follow instructions from:
* https://gitlab.pimes.fh-dortmund.de/RPublic/RoverWeb/raw/master/documentation/RoverWebpageDocumentation.pdf
*
* Authors:
* M. Ozcelikors, R.Hottger
* <mozcelikors@gmail.com> <robert.hoettger@fh-dortmund.de>
*
* Contributors:
*
* Update History:
* 02.02.2017 - first compilation
* 15.03.2017 - updated tasks for web-based driving
*
*/
#include "webserver_motordrive_task.h"
#include <string.h>
#include <ctime>
#include <wiringPi.h>
#include <unistd.h>
#include "../api/basic_psys_rover.h"
#include "../interfaces.h"
#include "../timing/timing.h"
#include <pthread.h>
#include "../RaspberryTest.h"
#include <softPwm.h>
#include "../pthread_monitoring/collect_thread_name.h"
#include <iostream>
#include <fstream>
void *WebServer_MotorDrive_Task(void * arg)
{
timing webserver_motordrive_task_tmr;
CollectThreadName("WebServer_MotorDrive_Task");
webserver_motordrive_task_tmr.setTaskID("Web");
webserver_motordrive_task_tmr.setDeadline(0.05);
webserver_motordrive_task_tmr.setPeriod(0.05);
FILE *fp;
char ch;
while(1)
{
webserver_motordrive_task_tmr.recordStartTime();
webserver_motordrive_task_tmr.calculatePreviousSlackTime();
//Task content starts here -----------------------------------------------
fp = fopen("/var/www/html/ROVER_CMD.inc", "r");
ch = fgetc (fp);
pthread_mutex_lock(&keycommand_lock);
keycommand_shared = tolower(ch);
pthread_mutex_unlock(&keycommand_lock);
fclose(fp);
std::fstream myfile("/var/www/html/ROVER_SPEED.inc", std::ios_base::in);
pthread_mutex_lock(&speed_lock);
myfile >> speed_shared;
pthread_mutex_unlock(&speed_lock);
myfile.close();
//Task content ends here -------------------------------------------------
webserver_motordrive_task_tmr.recordEndTime();
webserver_motordrive_task_tmr.calculateExecutionTime();
webserver_motordrive_task_tmr.calculateDeadlineMissPercentage();
webserver_motordrive_task_tmr.incrementTotalCycles();
pthread_mutex_lock(&webserver_motordrive_task_ti_l);
webserver_motordrive_task_ti.deadline = webserver_motordrive_task_tmr.getDeadline();
webserver_motordrive_task_ti.deadline_miss_percentage = webserver_motordrive_task_tmr.getDeadlineMissPercentage();
webserver_motordrive_task_ti.execution_time = webserver_motordrive_task_tmr.getExecutionTime();
webserver_motordrive_task_ti.period = webserver_motordrive_task_tmr.getPeriod();
webserver_motordrive_task_ti.prev_slack_time = webserver_motordrive_task_tmr.getPrevSlackTime();
webserver_motordrive_task_ti.task_id = webserver_motordrive_task_tmr.getTaskID();
webserver_motordrive_task_ti.start_time = webserver_motordrive_task_tmr.getStartTime();
webserver_motordrive_task_ti.end_time = webserver_motordrive_task_tmr.getEndTime();
pthread_mutex_unlock(&webserver_motordrive_task_ti_l);
webserver_motordrive_task_tmr.sleepToMatchPeriod();
}
}