ROVER - Changes involve the following:
(1) - Hono interaction thread added
(2) - Cpu logger thread added.
(3) - Headers moved from interfaces to implementation
Sensor & cpu util information is sent to Eclipse Hono every 1 second for now.
The code will be tested in depth soon on the rover.
Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/rover/src/RaspberryTest.cpp b/rover/src/RaspberryTest.cpp
index b77e55f..eb046f3 100644
--- a/rover/src/RaspberryTest.cpp
+++ b/rover/src/RaspberryTest.cpp
@@ -45,6 +45,10 @@
#include "hono_interaction/hono_interaction.h"
+#include "timing/timing.h"
+
+#include "api/basic_psys_rover.h"
+
//Please comment the line below to work with SR-04 sensor instead of GROOVE for rear proximity sensing.
//#define USE_GROOVE_SENSOR 1
@@ -94,7 +98,15 @@
timing_interface parking_task_ti;
pthread_mutex_t parking_task_ti_l;
+timing_interface hono_task_ti;
+pthread_mutex_t hono_task_ti_l;
+
+timing_interface cpu_logger_task_ti;
+pthread_mutex_t cpu_logger_task_ti_l;
+
+
//Shared data between threads
+
float temperature_shared;
pthread_mutex_t temperature_lock;
@@ -128,11 +140,13 @@
int speed_shared;
pthread_mutex_t speed_lock;
+double cpu_util_shared[4];
+pthread_mutex_t cpu_util_shared_lock;
+
int main()
{
- //Register the device to cloud
- registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771);
- //sendEventDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"Bearing",0.5);
+ //Register all the entries as devices to cloud
+ registerEntriesToHonoInstance();
RefreshThreadList();
@@ -326,7 +340,6 @@
placeAThreadToCore (displaysensors_thread, 0);
placeAThreadToCore (webserver_motordrive_thread, 0);
-
while (1)
{
//What main thread does should come here..
diff --git a/rover/src/hono_interaction/hono_interaction.cpp b/rover/src/hono_interaction/hono_interaction.cpp
index e67eea6..16c7d08 100644
--- a/rover/src/hono_interaction/hono_interaction.cpp
+++ b/rover/src/hono_interaction/hono_interaction.cpp
@@ -104,23 +104,21 @@
* Arguments: char * host_name
* int port
* char * tenant_name
- * int device_id
+ * char * device_id
* Returns: Successfully returns status data.
* If the action completed -> returns 1
* If the action failed -> returns 0
*/
-int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, int device_id)
+int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id)
{
FILE *fp;
int code;
int status;
//Prepare command as string
- //Example: "curl -X POST -i -d 'device_id=4711' http://localhost:28080/registration/DEFAULT_TENANT"
+ //Example: "curl -X POST -i -d 'device_id=AStringID' http://localhost:28080/registration/DEFAULT_TENANT"
sprintf(buffer, "curl -X POST -i -d 'device_id=");
- snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
- strcat(buffer, num_buffer);
- num_buffer[0] = 0; //Clear array
+ strcat(buffer, device_id);
strcat(buffer, "' http://");
strcat(buffer, host_name);
strcat(buffer, ":");
@@ -173,14 +171,14 @@
* Arguments: char * host_name
* int port
* char * tenant_name
- * int device_id
+ * char * device_id
* char * field
* double value
* Returns: Successfully returns status data.
* If the action completed -> returns 1
* If the action failed -> returns 0
*/
-int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value)
+int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value)
{
FILE *fp;
int code;
@@ -188,6 +186,10 @@
//Prepare command as string
//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"Bearing": 0.5}' http://idial.institute:8080/telemetry/DEFAULT_TENANT/4711"
+
+ //To get the information in dashboard, we use device ID as the entry name, and "value" as field.
+ //Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"value": 0.5}' http://idial.institute:8080/telemetry/DEFAULT_TENANT/roverRearSensor"
+
sprintf(buffer, "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{\"");
strcat(buffer, field);
strcat(buffer, "\": ");
@@ -203,9 +205,7 @@
strcat(buffer, "/telemetry/");
strcat(buffer, tenant_name);
strcat(buffer, "/");
- snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
- strcat(buffer, num_buffer);
- num_buffer[0] = 0; //Clear array
+ strcat(buffer, device_id);
//To redirect pipe to prevent stdout showing all outputs generated by curl
strcat(buffer, " 2>/dev/null"); //2>&1 would redirect to stderr, we choose to be able to parse returned code
@@ -250,14 +250,14 @@
* Arguments: char * host_name
* int port
* char * tenant_name
- * int device_id
+ * char * device_id
* char * field
* double value
* Returns: Successfully returns status data.
* If the action completed -> returns 1
* If the action failed -> returns 0
*/
-int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value)
+int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value)
{
FILE *fp;
int code;
@@ -265,6 +265,9 @@
//Prepare command as string
//Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"Bearing": 0.5}' http://idial.institute:8080/event/DEFAULT_TENANT/4711"
+
+ //To get the information in dashboard, we use device ID as the entry name, and "value" as field.
+ //Example: "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{"value": 0.5}' http://idial.institute:8080/event/DEFAULT_TENANT/roverRearSensor"
sprintf(buffer, "curl -X PUT -i -H 'Content-Type: application/json' --data-binary '{\"");
strcat(buffer, field);
strcat(buffer, "\": ");
@@ -280,9 +283,7 @@
strcat(buffer, "/event/");
strcat(buffer, tenant_name);
strcat(buffer, "/");
- snprintf(num_buffer, sizeof(num_buffer), "%d", device_id);
- strcat(buffer, num_buffer);
- num_buffer[0] = 0; //Clear array
+ strcat(buffer, device_id);
//To redirect pipe to prevent stdout showing all outputs generated by curl
strcat(buffer, " 2>/dev/null"); //2>&1 would redirect to stderr, we choose to be able to parse returned code
@@ -319,3 +320,27 @@
return status;
}
+/**
+ * Function Name: registerSensorsToHonoInstance
+ * Description: If non registered already, this function
+ * registers all the sensors and other entries
+ * of APP4MC Rover as devices to Hono instance.
+ * for visualization of Raw data in Granafa/InnoDB.
+ */
+int registerEntriesToHonoInstance (void)
+{
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFront");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontLeft");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontRight");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRear");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearLeft");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearRight");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverBearing");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu1");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu2");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu3");
+ registerDeviceToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu4");
+
+ return 1;
+}
+
diff --git a/rover/src/hono_interaction/hono_interaction.h b/rover/src/hono_interaction/hono_interaction.h
index f6326f3..8126977 100644
--- a/rover/src/hono_interaction/hono_interaction.h
+++ b/rover/src/hono_interaction/hono_interaction.h
@@ -26,9 +26,9 @@
//Interfaces
+int registerEntriesToHonoInstance (void);
int registerDeviceToHonoInstance (char * host_name, int port, char * tenant_name, int device_id);
-int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value);
-int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, int device_id, char * field, double value);
-
+int sendTelemetryDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value);
+int sendEventDataToHonoInstance (char * host_name, int port, char * tenant_name, char * device_id, char * field, double value);
#endif /* HONO_INTERACTION_HONO_INTERACTION_H_ */
diff --git a/rover/src/interfaces.h b/rover/src/interfaces.h
index 1f87a49..6ea16ec 100644
--- a/rover/src/interfaces.h
+++ b/rover/src/interfaces.h
@@ -86,6 +86,12 @@
extern timing_interface parking_task_ti;
extern pthread_mutex_t parking_task_ti_l;
+extern timing_interface hono_task_ti;
+extern pthread_mutex_t hono_task_ti_l;
+
+extern timing_interface cpu_logger_task_ti;
+extern pthread_mutex_t cpu_logger_task_ti_l;
+
//---
extern float temperature_shared;
@@ -118,5 +124,8 @@
extern int speed_shared;
extern pthread_mutex_t speed_lock;
+extern double cpu_util_shared[4];
+extern pthread_mutex_t cpu_util_shared_lock;
+
#endif /* INTERFACES_H_ */
diff --git a/rover/src/tasks/adaptive_cruise_control_task.cpp b/rover/src/tasks/adaptive_cruise_control_task.cpp
index a463014..440a713 100644
--- a/rover/src/tasks/adaptive_cruise_control_task.cpp
+++ b/rover/src/tasks/adaptive_cruise_control_task.cpp
@@ -11,6 +11,18 @@
#include "adaptive_cruise_control_task.h"
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
void *Adaptive_Cruise_Control_Task(void * arg)
{
timing acc_task_tmr;
diff --git a/rover/src/tasks/adaptive_cruise_control_task.h b/rover/src/tasks/adaptive_cruise_control_task.h
index 56d1be7..a648a9e 100644
--- a/rover/src/tasks/adaptive_cruise_control_task.h
+++ b/rover/src/tasks/adaptive_cruise_control_task.h
@@ -15,17 +15,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
-#include "../pthread_monitoring/collect_thread_name.h"
#define CRITICAL_DISTANCE 10
#define CORRECT_DISTANCE 20
diff --git a/rover/src/tasks/compass_sensor_task.cpp b/rover/src/tasks/compass_sensor_task.cpp
index 0d1e932..0c52fd9 100644
--- a/rover/src/tasks/compass_sensor_task.cpp
+++ b/rover/src/tasks/compass_sensor_task.cpp
@@ -20,7 +20,22 @@
*
*/
#include "compass_sensor_task.h"
-#include "../hono_interaction/hono_interaction.h"
+#include <stdint.h>
+#include <ctime>
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+#include <unistd.h>
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include "../timing/timing.h"
+#include <pthread.h>
+#include <math.h>
+
+#include <fstream>
+#include <iostream>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
#define HMC588L_ADDRESS 0x1E
#define CALIBRATION_DURATION 10000 //compass calibration has a duration of 5 seconds
@@ -155,7 +170,6 @@
if (i2c_hmc588l_fd >= 0) {
pthread_mutex_lock(&compass_lock);
bearing_shared = getBearingFromSensor();
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"Bearing", bearing_shared);
pthread_mutex_unlock(&compass_lock);
//printf("Bearing=%f\n", bearing_shared);
}
diff --git a/rover/src/tasks/compass_sensor_task.h b/rover/src/tasks/compass_sensor_task.h
index b9e2032..936ad54 100644
--- a/rover/src/tasks/compass_sensor_task.h
+++ b/rover/src/tasks/compass_sensor_task.h
@@ -25,22 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <stdint.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <wiringPiI2C.h>
-#include <unistd.h>
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include "../timing/timing.h"
-#include <pthread.h>
-#include <math.h>
-#include <fstream>
-#include <iostream>
-
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
using namespace std;
diff --git a/rover/src/tasks/cpu_logger_task.cpp b/rover/src/tasks/cpu_logger_task.cpp
new file mode 100644
index 0000000..79b1d26
--- /dev/null
+++ b/rover/src/tasks/cpu_logger_task.cpp
@@ -0,0 +1,107 @@
+/*
+ * 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:
+ * CPU Utilization Logger Task for Rover / Raspberry Pi
+ *
+ * Authors:
+ * M. Ozcelikors, R.Hottger
+ * <mozcelikors@gmail.com> <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#include "cpu_logger_task.h"
+#include <string.h>
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
+void *Cpu_Logger_Task(void * arg)
+{
+ FILE* fileptr;
+ char buf[20];
+ int core_num = 0;
+ double roverUtilCpu[4];
+
+ timing cpu_logger_task_tmr;
+ cpu_logger_task_tmr.setTaskID("CpuTsk");
+ cpu_logger_task_tmr.setDeadline(1);
+ cpu_logger_task_tmr.setPeriod(1);
+
+ CollectThreadName("Cpu_Logger_Task");
+
+
+ while (1)
+ {
+ cpu_logger_task_tmr.recordStartTime();
+ cpu_logger_task_tmr.calculatePreviousSlackTime();
+
+ //Task content starts here -----------------------------------------------
+
+ // Read from file
+ fileptr = fopen ("/var/www/html/core_usage_rpi.inc", "r");
+ if (!fileptr)
+ {
+ fprintf(stderr, "Unable to read from file");
+ abort(); //Dump the core
+ }
+ else
+ {
+ // Get the data
+ fgets(buf, 20, fileptr);
+
+ // Parse the read file to get core usage information, Splitting operation with tokens
+ char *token = strtok(buf, ",");
+
+ while (token != NULL && core_num<=4)
+ {
+ sscanf(token, "%f", &roverUtilCpu[core_num]);
+ token = strtok(NULL, ",");
+ core_num++;
+ }
+
+ // Write it to a shared variable for further usage in the application
+ pthread_mutex_lock(&cpu_util_shared_lock);
+ for (int i = 0; i < 4; i++)
+ cpu_util_shared[i] = roverUtilCpu[i];
+ pthread_mutex_unlock(&cpu_util_shared_lock);
+
+ }
+
+
+ //Task content ends here -------------------------------------------------
+
+ cpu_logger_task_tmr.recordEndTime();
+ cpu_logger_task_tmr.calculateExecutionTime();
+ cpu_logger_task_tmr.calculateDeadlineMissPercentage();
+ cpu_logger_task_tmr.incrementTotalCycles();
+ pthread_mutex_lock(&cpu_logger_task_ti_l);
+ cpu_logger_task_ti.deadline = cpu_logger_task_tmr.getDeadline();
+ cpu_logger_task_ti.deadline_miss_percentage = cpu_logger_task_tmr.getDeadlineMissPercentage();
+ cpu_logger_task_ti.execution_time = cpu_logger_task_tmr.getExecutionTime();
+ cpu_logger_task_ti.period = cpu_logger_task_tmr.getPeriod();
+ cpu_logger_task_ti.prev_slack_time = cpu_logger_task_tmr.getPrevSlackTime();
+ cpu_logger_task_ti.task_id = cpu_logger_task_tmr.getTaskID();
+ cpu_logger_task_ti.start_time = cpu_logger_task_tmr.getStartTime();
+ cpu_logger_task_ti.end_time = cpu_logger_task_tmr.getEndTime();
+ pthread_mutex_unlock(&cpu_logger_task_ti_l);
+ cpu_logger_task_tmr.sleepToMatchPeriod();
+ }
+
+ /* the function must return something - NULL will do */
+ return NULL;
+}
+
+
diff --git a/rover/src/tasks/cpu_logger_task.h b/rover/src/tasks/cpu_logger_task.h
new file mode 100644
index 0000000..30fd784
--- /dev/null
+++ b/rover/src/tasks/cpu_logger_task.h
@@ -0,0 +1,29 @@
+/*
+ * 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:
+ * CPU Utilization Logger Task for Rover / Raspberry Pi - header file
+ *
+ * Authors:
+ * M. Ozcelikors, R.Hottger
+ * <mozcelikors@gmail.com> <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#ifndef TASKS_CPU_LOGGER_TASK_H_
+#define TASKS_CPU_LOGGER_TASK_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+void *Cpu_Logger_Task (void * arg);
+
+
+
+#endif /* TASKS_CPU_LOGGER_TASK_H_ */
diff --git a/rover/src/tasks/display_sensors_task.cpp b/rover/src/tasks/display_sensors_task.cpp
index 94d9257..e04c206 100644
--- a/rover/src/tasks/display_sensors_task.cpp
+++ b/rover/src/tasks/display_sensors_task.cpp
@@ -20,9 +20,19 @@
*
*/
-
#include "display_sensors_task.h"
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
void *DisplaySensors_Task (void * arg)
{
timing display_sensors_task_tmr;
diff --git a/rover/src/tasks/display_sensors_task.h b/rover/src/tasks/display_sensors_task.h
index d629be8..d31d11f 100644
--- a/rover/src/tasks/display_sensors_task.h
+++ b/rover/src/tasks/display_sensors_task.h
@@ -26,16 +26,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
void *DisplaySensors_Task (void * arg);
diff --git a/rover/src/tasks/hono_interaction_task.cpp b/rover/src/tasks/hono_interaction_task.cpp
new file mode 100644
index 0000000..33c4304
--- /dev/null
+++ b/rover/src/tasks/hono_interaction_task.cpp
@@ -0,0 +1,85 @@
+/*
+ * 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:
+ * Hono interaction task for Rover
+ *
+ * Authors:
+ * M. Ozcelikors, R.Hottger
+ * <mozcelikors@gmail.com> <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#include "hono_interaction_task.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
+#include "../hono_interaction/hono_interaction.h"
+
+void *Hono_Interaction_Task(void * arg)
+{
+ timing hono_task_tmr;
+ hono_task_tmr.setTaskID("HonoTsk");
+ hono_task_tmr.setDeadline(1);
+ hono_task_tmr.setPeriod(1);
+
+ CollectThreadName("Hono_Interaction_Task");
+
+ while (1)
+ {
+ hono_task_tmr.recordStartTime();
+ hono_task_tmr.calculatePreviousSlackTime();
+
+ //Task content starts here -----------------------------------------------
+
+ // Send everything to Hono every second in this task using the following functions
+ // TODO: This can be done with one curl command, probably a better way.
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFront","value", distance_sr04_front_shared);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontLeft","value",infrared_shared[3]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverFrontRight","value", infrared_shared[2]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRear","value", distance_sr04_back_shared);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearLeft","value", infrared_shared[1]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverRearRight","value", infrared_shared[0]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverBearing","value", bearing_shared);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu1","value", cpu_util_shared[0]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu2","value", cpu_util_shared[1]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu3","value", cpu_util_shared[2]);
+ sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", "roverUtilCpu4","value", cpu_util_shared[3]);
+
+ //Task content ends here -------------------------------------------------
+
+ hono_task_tmr.recordEndTime();
+ hono_task_tmr.calculateExecutionTime();
+ hono_task_tmr.calculateDeadlineMissPercentage();
+ hono_task_tmr.incrementTotalCycles();
+ pthread_mutex_lock(&hono_task_ti_l);
+ hono_task_ti.deadline = hono_task_tmr.getDeadline();
+ hono_task_ti.deadline_miss_percentage = hono_task_tmr.getDeadlineMissPercentage();
+ hono_task_ti.execution_time = hono_task_tmr.getExecutionTime();
+ hono_task_ti.period = hono_task_tmr.getPeriod();
+ hono_task_ti.prev_slack_time = hono_task_tmr.getPrevSlackTime();
+ hono_task_ti.task_id = hono_task_tmr.getTaskID();
+ hono_task_ti.start_time = hono_task_tmr.getStartTime();
+ hono_task_ti.end_time = hono_task_tmr.getEndTime();
+ pthread_mutex_unlock(&hono_task_ti_l);
+ hono_task_tmr.sleepToMatchPeriod();
+ }
+
+ /* the function must return something - NULL will do */
+ return NULL;
+}
+
diff --git a/rover/src/tasks/hono_interaction_task.h b/rover/src/tasks/hono_interaction_task.h
new file mode 100644
index 0000000..bb6f5d8
--- /dev/null
+++ b/rover/src/tasks/hono_interaction_task.h
@@ -0,0 +1,29 @@
+/*
+ * 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:
+ * Hono interaction task for Rover - header file
+ *
+ * Authors:
+ * M. Ozcelikors, R.Hottger
+ * <mozcelikors@gmail.com> <robert.hoettger@fh-dortmund.de>
+ *
+ */
+
+#ifndef TASKS_HONO_INTERACTION_TASK_H_
+#define TASKS_HONO_INTERACTION_TASK_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+void *Hono_Interaction_Task (void * arg);
+
+
+
+#endif /* TASKS_HONO_INTERACTION_TASK_H_ */
diff --git a/rover/src/tasks/infrared_distance_task.cpp b/rover/src/tasks/infrared_distance_task.cpp
index e4b62ac..1f44370 100644
--- a/rover/src/tasks/infrared_distance_task.cpp
+++ b/rover/src/tasks/infrared_distance_task.cpp
@@ -22,7 +22,18 @@
*/
#include "infrared_distance_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <ctime>
+#include <wiringPi.h>
+#include <unistd.h>
+#include "../api/basic_psys_rover.h"
+#include "../timing/timing.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include <mcp3004.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
void setupInfraredSensors()
{
@@ -65,7 +76,6 @@
//setupInfraredSensors();
int chan;
- char str_buf[32];
while (1)
{
@@ -78,9 +88,6 @@
for (chan = 0; chan <= 3; chan ++)
{
infrared_shared[chan] = getDistanceFromInfraredSensor(chan);
- sprintf(str_buf, "IR_%d", chan);
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771, str_buf, infrared_shared[chan]);
- str_buf[0] = 0;
}
pthread_mutex_unlock(&infrared_lock);
//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/infrared_distance_task.h b/rover/src/tasks/infrared_distance_task.h
index 6a72a90..ef57970 100644
--- a/rover/src/tasks/infrared_distance_task.h
+++ b/rover/src/tasks/infrared_distance_task.h
@@ -27,17 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <unistd.h>
-#include "../api/basic_psys_rover.h"
-#include "../timing/timing.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include <mcp3004.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
diff --git a/rover/src/tasks/keycommand_task.cpp b/rover/src/tasks/keycommand_task.cpp
index 0f15411..94c2ed6 100644
--- a/rover/src/tasks/keycommand_task.cpp
+++ b/rover/src/tasks/keycommand_task.cpp
@@ -22,6 +22,17 @@
#include "keycommand_task.h"
+#include <ctime>
+#include <stdlib.h>
+#include <wiringPi.h>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
void *KeyCommandInput_Task(void * arg)
{
diff --git a/rover/src/tasks/keycommand_task.h b/rover/src/tasks/keycommand_task.h
index bdce923..23e6ea0 100644
--- a/rover/src/tasks/keycommand_task.h
+++ b/rover/src/tasks/keycommand_task.h
@@ -25,17 +25,7 @@
#include <string.h>
#include <stdio.h>
-#include <ctime>
-#include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
void *KeyCommandInput_Task(void * arg);
diff --git a/rover/src/tasks/motordriver_task.cpp b/rover/src/tasks/motordriver_task.cpp
index 22c15db..8c2a515 100644
--- a/rover/src/tasks/motordriver_task.cpp
+++ b/rover/src/tasks/motordriver_task.cpp
@@ -23,6 +23,18 @@
#include "motordriver_task.h"
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+
void ExitAutomaticModes(void)
{
if (driving_mode == ACC || driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT)
diff --git a/rover/src/tasks/motordriver_task.h b/rover/src/tasks/motordriver_task.h
index 4c973ab..588ef79 100644
--- a/rover/src/tasks/motordriver_task.h
+++ b/rover/src/tasks/motordriver_task.h
@@ -27,17 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
-#include "../pthread_monitoring/collect_thread_name.h"
void *MotorDriver_Task(void * arg);
diff --git a/rover/src/tasks/parking_task.cpp b/rover/src/tasks/parking_task.cpp
index 48f26b0..8603914 100644
--- a/rover/src/tasks/parking_task.cpp
+++ b/rover/src/tasks/parking_task.cpp
@@ -18,6 +18,20 @@
*/
#include "parking_task.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+#include "../RaspberryTest.h"
+#include <softPwm.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../tasks/motordriver_task.h"
+
int StopParking (void)
{
stop();
diff --git a/rover/src/tasks/parking_task.h b/rover/src/tasks/parking_task.h
index 6ad5e23..09d74b9 100644
--- a/rover/src/tasks/parking_task.h
+++ b/rover/src/tasks/parking_task.h
@@ -23,18 +23,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../RaspberryTest.h"
-#include <softPwm.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../tasks/motordriver_task.h"
void *Parking_Task(void * arg);
diff --git a/rover/src/tasks/record_sensor_data.cpp b/rover/src/tasks/record_sensor_data.cpp
index 6ab4550..9127ef7 100644
--- a/rover/src/tasks/record_sensor_data.cpp
+++ b/rover/src/tasks/record_sensor_data.cpp
@@ -22,6 +22,21 @@
#include "record_sensor_data.h"
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
+#include <fstream>
+#include <iostream>
+#include <cstdio>
+
void RecordSensorDataForWebpage(void)
{
ofstream myfile;
diff --git a/rover/src/tasks/record_sensor_data.h b/rover/src/tasks/record_sensor_data.h
index 73c79d0..bd7929c 100644
--- a/rover/src/tasks/record_sensor_data.h
+++ b/rover/src/tasks/record_sensor_data.h
@@ -24,20 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
-
-#include <fstream>
-#include <iostream>
-#include <cstdio>
void *RecordSensorData_Task (void * arg);
diff --git a/rover/src/tasks/record_timing_task.cpp b/rover/src/tasks/record_timing_task.cpp
index d4ceef7..26933e9 100644
--- a/rover/src/tasks/record_timing_task.cpp
+++ b/rover/src/tasks/record_timing_task.cpp
@@ -21,6 +21,18 @@
#include "record_timing_task.h"
+#include <wiringPi.h>
+#include <unistd.h>
+#include <ctime>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
+
+
void PrintTimingInfo(timing_interface ifc)
{
if (ifc.execution_time != 0){
diff --git a/rover/src/tasks/record_timing_task.h b/rover/src/tasks/record_timing_task.h
index efd2844..0a46077 100644
--- a/rover/src/tasks/record_timing_task.h
+++ b/rover/src/tasks/record_timing_task.h
@@ -24,16 +24,6 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <unistd.h>
-#include <ctime>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
void *Record_Timing_Task (void * arg);
diff --git a/rover/src/tasks/temperature_task.cpp b/rover/src/tasks/temperature_task.cpp
index ae97699..623df9b 100644
--- a/rover/src/tasks/temperature_task.cpp
+++ b/rover/src/tasks/temperature_task.cpp
@@ -36,7 +36,18 @@
*/
#include "temperature_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <ctime>
+#include <wiringPi.h>
+#include <wiringPiI2C.h>
+#include <unistd.h>
+#include "../timing/timing.h"
+#include "../api/basic_psys_rover.h"
+#include "../interfaces.h"
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../RaspberryTest.h"
static int i2c_th02_fd = 0;
@@ -155,13 +166,10 @@
//Setting argument in pthread - whenever you R/W access to temperature_shared, you have to do the same.
pthread_mutex_lock(&temperature_lock);
temperature_shared = getTemperatureFromSensor();
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"temperature", temperature_shared);
pthread_mutex_unlock(&temperature_lock);
pthread_mutex_lock(&humidity_lock);
humidity_shared = getHumidityFromSensor();
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"humidity", humidity_shared);
-
pthread_mutex_unlock(&humidity_lock);
//printf("Temperaturex: %f\n", getTemperatureFromSensor());
diff --git a/rover/src/tasks/temperature_task.h b/rover/src/tasks/temperature_task.h
index 5eeb861..5238065 100644
--- a/rover/src/tasks/temperature_task.h
+++ b/rover/src/tasks/temperature_task.h
@@ -40,17 +40,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <ctime>
-#include <wiringPi.h>
-#include <wiringPiI2C.h>
-#include <unistd.h>
-#include "../timing/timing.h"
-#include "../api/basic_psys_rover.h"
-#include "../interfaces.h"
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../RaspberryTest.h"
diff --git a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
index 21afdfc..718cfc6 100644
--- a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
@@ -24,7 +24,14 @@
*/
#include "ultrasonic_sensor_grove_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
void setup_GrooveUltrasonicRanger() {
//wiringPiSetup(); //Since this can only be used once in a program, we do it in main and comment this.
@@ -81,7 +88,6 @@
pthread_mutex_unlock(&distance_grove_lock);*/
pthread_mutex_lock(&distance_sr04_back_lock);
distance_sr04_back_shared = getCM_GrooveUltrasonicRanger();
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Rear", distance_sr04_back_shared);
pthread_mutex_unlock(&distance_sr04_back_lock);
//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_grove_task.h b/rover/src/tasks/ultrasonic_sensor_grove_task.h
index 7838090..f79d806 100644
--- a/rover/src/tasks/ultrasonic_sensor_grove_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_grove_task.h
@@ -31,13 +31,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
index c35ade4..5777a6f 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
@@ -43,7 +43,14 @@
#include "ultrasonic_sensor_sr04_back_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
void setup_HCSR04UltrasonicBack() {
//wiringPiSetup();
@@ -105,7 +112,6 @@
pthread_mutex_lock(&distance_sr04_back_lock);
distance_sr04_back_shared = getCM_HCSR04UltrasonicBack();
pthread_mutex_unlock(&distance_sr04_back_lock);
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Rear", distance_sr04_back_shared);
//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
index 8371f20..13e454b 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.h
@@ -48,13 +48,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
#define TRIG1 1 //BCM-18 -> WiringPi 1
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
index 4a1247b..9f9c913 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
@@ -43,7 +43,14 @@
#include "ultrasonic_sensor_sr04_front_task.h"
-#include "../hono_interaction/hono_interaction.h"
+
+#include <wiringPi.h>
+#include <ctime>
+#include <pthread.h>
+
+#include "../pthread_monitoring/collect_thread_name.h"
+#include "../timing/timing.h"
+#include "../RaspberryTest.h"
void setup_HCSR04UltrasonicFront() {
//wiringPiSetup();
@@ -103,7 +110,6 @@
//Task content starts here -----------------------------------------------
pthread_mutex_lock(&distance_sr04_front_lock);
distance_sr04_front_shared = getCM_HCSR04UltrasonicFront();
- sendTelemetryDataToHonoInstance("idial.institute",8080,"DEFAULT_TENANT", 4771,"US_Front", distance_sr04_front_shared);
pthread_mutex_unlock(&distance_sr04_front_lock);
//printf("Distance: %dcm\n", getCM_GrooveUltrasonicRanger());
//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
index 6002c49..36a8a77 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.h
@@ -48,13 +48,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <wiringPi.h>
-#include <ctime>
-#include <pthread.h>
-#include "../pthread_monitoring/collect_thread_name.h"
-#include "../timing/timing.h"
-#include "../RaspberryTest.h"
#define TRIG0 7 //BCM-4 -> WiringPi 7
diff --git a/rover/src/tasks/webserver_motordrive_task.cpp b/rover/src/tasks/webserver_motordrive_task.cpp
index 151ade1..aa377fe 100644
--- a/rover/src/tasks/webserver_motordrive_task.cpp
+++ b/rover/src/tasks/webserver_motordrive_task.cpp
@@ -24,6 +24,20 @@
*/
#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>
diff --git a/rover/src/tasks/webserver_motordrive_task.h b/rover/src/tasks/webserver_motordrive_task.h
index 0afea07..ebe1969 100644
--- a/rover/src/tasks/webserver_motordrive_task.h
+++ b/rover/src/tasks/webserver_motordrive_task.h
@@ -28,18 +28,7 @@
#include <stdio.h>
#include <stdlib.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"
void *WebServer_MotorDrive_Task(void * arg);