Changes to Application & Tasks regarding new API developments

Signed-off-by: Mustafa Ozcelikors <mozcelikors@gmail.com>
diff --git a/rover/include/roverapp.h b/rover/include/roverapp.h
index 69221d7..07e8f44 100644
--- a/rover/include/roverapp.h
+++ b/rover/include/roverapp.h
@@ -32,6 +32,9 @@
 #include "interfaces.h"
 
 #include <roverapi/rover_api.hpp>
+#include <roverapi/rover_driving.hpp>
+#include <roverapi/rover_display.hpp>
+#include <roverapi/rover_utils.hpp>
 
 //Use the following when cross compiling with Eclipse CDT SDK
 //#define CROSS_COMPILE_ECLIPSE 1
@@ -45,7 +48,10 @@
 //Using rover namespace from Rover API
 using namespace rover;
 
-extern RoverBase r;
+extern RoverBase r_base;
+extern RoverDriving r_driving;
+extern RoverDisplay my_display;
+extern RoverUtils r_utils;
 
 extern pthread_t oled_thread;
 
diff --git a/rover/src/roverapp.cpp b/rover/src/roverapp.cpp
index ef8c0bf..47e5741 100644
--- a/rover/src/roverapp.cpp
+++ b/rover/src/roverapp.cpp
@@ -60,7 +60,10 @@
 using namespace rover;
 
 //Create global RoverBase object from Rover API
-RoverBase r;
+RoverBase r_base;
+RoverDriving r_driving;
+RoverDisplay my_display;
+RoverUtils r_utils;
 
 /* Threads */
 pthread_t ultrasonic_grove_thread;
@@ -228,14 +231,15 @@
 
 int main()
 {
-	//Initialize all rover components
-	r.initialize();
+	r_driving = RoverDriving();
+	r_base = RoverBase();
+	my_display = RoverDisplay();
+	r_utils = RoverUtils();
 
-	//Set-up hono instance attributes and register 4711 device to Hono
-	r.inRoverCloud().setHono("idial.institute", 8080, "DEFAULT_TENANT");
-
-	r.inRoverCloud().setRegistrationPort(28080);
-	r.inRoverCloud().registerDevice("4711");
+	//Initialize some of the rover components
+	r_base.initialize();
+	r_driving.initialize();
+	my_display.initialize();
 
 	/* Add signals to exit threads properly */
 	signal(SIGINT, exitHandler);
@@ -255,7 +259,7 @@
 	infrared_shared[3] = 0.0;
 	bearing_shared = 0.0;
 	driving_mode = MANUAL;
-	speed_shared = r.inRoverDriving().HIGHEST_SPEED;
+	speed_shared = HIGHEST_SPEED;
 	buzzer_status_shared = 0;
 	shutdown_hook_shared = 0;
 	running_flag = 1;
@@ -489,6 +493,7 @@
 		//What main thread does should come here..
 		// ...
 
+
 		delayMicroseconds(1* SECONDS_TO_MICROSECONDS);
 	}
 	pthread_exit(NULL);
diff --git a/rover/src/tasks/adaptive_cruise_control_task.cpp b/rover/src/tasks/adaptive_cruise_control_task.cpp
index 79234cb..1896c8e 100644
--- a/rover/src/tasks/adaptive_cruise_control_task.cpp
+++ b/rover/src/tasks/adaptive_cruise_control_task.cpp
@@ -18,6 +18,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_driving.hpp>
 
 void *Adaptive_Cruise_Control_Task(void * arg)
 {
@@ -26,6 +27,9 @@
 	acc_task_tmr.setDeadline(0.1);
 	acc_task_tmr.setPeriod(0.1);
 
+	RoverDriving r_driving = RoverDriving();
+	r_driving.initialize();
+
 	while (1)
 	{
 		acc_task_tmr.recordStartTime();
@@ -43,32 +47,32 @@
 			{
 				// go back if distance ok
 				if (distance_sr04_back_shared < CRITICAL_DISTANCE)
-					r.inRoverDriving().stopRover();
+					r_driving.stopRover();
 				else
 				{
-					r.inRoverDriving().setSpeed(r.inRoverDriving().LOWEST_SPEED);
-					r.inRoverDriving().goBackward();
+					r_driving.setSpeed(LOWEST_SPEED);
+					r_driving.goBackward();
 				}
 			}
 
 			// front distance between correct and critical
 			else if (distance_sr04_front_shared < CORRECT_DISTANCE && distance_sr04_front_shared >= CRITICAL_DISTANCE)
 			{
-				r.inRoverDriving().stopRover();
+				r_driving.stopRover();
 			}
 
 			// front distance between safe and correct
 			else if (distance_sr04_front_shared < SAFE_DISTANCE && distance_sr04_front_shared >= CORRECT_DISTANCE)
 			{
-				r.inRoverDriving().setSpeed(r.inRoverDriving().LOWEST_SPEED);
-				r.inRoverDriving().goForward();
+				r_driving.setSpeed(LOWEST_SPEED);
+				r_driving.goForward();
 			}
 
 			// distance > safe
 			else if (distance_sr04_front_shared >= SAFE_DISTANCE)
 			{
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().goForward();
+				r_driving.setSpeed(speed_shared);
+				r_driving.goForward();
 			}
 
 
diff --git a/rover/src/tasks/compass_sensor_task.cpp b/rover/src/tasks/compass_sensor_task.cpp
index f9d455d..538523d 100644
--- a/rover/src/tasks/compass_sensor_task.cpp
+++ b/rover/src/tasks/compass_sensor_task.cpp
@@ -29,6 +29,8 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_hmc5883l.hpp>
+#include <roverapi/rover_qmc5883l.hpp>
 
 int EndCalibrationMode (void)
 {
@@ -47,6 +49,9 @@
 	compass_task_tmr.setDeadline(0.1);
 	compass_task_tmr.setPeriod(0.1);
 
+	RoverHMC5883L r_hmc5883l = RoverHMC5883L();
+	r_hmc5883l.initialize();
+
 	while (1) {
 		compass_task_tmr.recordStartTime();
 		compass_task_tmr.calculatePreviousSlackTime();
@@ -59,14 +64,14 @@
 		{
 			printf("Starting compass calibration for 5 seconds. Please rotate me 360 degrees.\n");
 			EndCalibrationMode();
-			r.inRoverSensors().calibrateBearingSensor();
+			//r.inRoverSensors().calibrateBearingSensor();
 			//Calibration state..
 			//At the end of calibration to go to the end of calibration mode call EndCalibrationMode()
 		}
 		//Asynchronous end to calibration mode --> Call EndCalibrationMode()
 
 		pthread_mutex_lock(&compass_lock);
-			bearing_shared = r.inRoverSensors().readBearingHMC5883L();
+			bearing_shared = r_hmc5883l.read();
 		pthread_mutex_unlock(&compass_lock);
 
 
diff --git a/rover/src/tasks/cpu_logger_task.cpp b/rover/src/tasks/cpu_logger_task.cpp
index ef7a82d..30cf7ec 100644
--- a/rover/src/tasks/cpu_logger_task.cpp
+++ b/rover/src/tasks/cpu_logger_task.cpp
@@ -29,6 +29,8 @@
 
 #include <roverapp.h>
 
+#include <roverapi/rover_utils.hpp>
+
 void Cpu_Logger_Task_Terminator (int dummy)
 {
 	running_flag = 0;
@@ -47,6 +49,8 @@
 	signal(SIGTERM, Cpu_Logger_Task_Terminator);
 	signal(SIGKILL, Cpu_Logger_Task_Terminator);
 
+	RoverUtils r_utils = RoverUtils();
+
 	float *util;
 
 	while (running_flag)
@@ -56,7 +60,7 @@
 
 		//Task content starts here -----------------------------------------------
 
-		util = r.inRoverUtils().getCoreUtilization();
+		util = r_utils.getCoreUtilization();
 		pthread_mutex_lock(&cpu_util_shared_lock);
 			cpu_util_shared[0] = util[0];
 			cpu_util_shared[1] = util[1];
diff --git a/rover/src/tasks/display_sensors_task.cpp b/rover/src/tasks/display_sensors_task.cpp
index f35469e..25e8f82 100644
--- a/rover/src/tasks/display_sensors_task.cpp
+++ b/rover/src/tasks/display_sensors_task.cpp
@@ -29,14 +29,18 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_gy521.hpp>
 
 void *DisplaySensors_Task (void * arg)
 {
 	timing display_sensors_task_tmr;
 
 	display_sensors_task_tmr.setTaskID("Display-Sensors");
-	display_sensors_task_tmr.setDeadline(5.0);
-	display_sensors_task_tmr.setPeriod(5.0);
+	display_sensors_task_tmr.setDeadline(3.0);
+	display_sensors_task_tmr.setPeriod(3.0);
+
+	RoverGY521 r_accel = RoverGY521();
+	r_accel.initialize();
 
 	while (1)
 	{
@@ -64,6 +68,10 @@
 
 		printf("Bearing: %f\n", bearing_shared);
 
+		printf("Accelerometer acceleration:\t%d\t\t%d\t\t%d\n", r_accel.getAccelX(), r_accel.getAccelY(), r_accel.getAccelZ());
+		printf("Accelerometer angles:\t\t%f\t%f\t%f\n", r_accel.getAngleX(), r_accel.getAngleY(), r_accel.getAngleZ());
+
+
 		//Task content ends here -------------------------------------------------
 		display_sensors_task_tmr.recordEndTime();
 		display_sensors_task_tmr.calculateExecutionTime();
diff --git a/rover/src/tasks/external_gpio_task.cpp b/rover/src/tasks/external_gpio_task.cpp
index 87ce723..7469e0f 100644
--- a/rover/src/tasks/external_gpio_task.cpp
+++ b/rover/src/tasks/external_gpio_task.cpp
@@ -23,6 +23,9 @@
 
 #include <roverapp.h>
 
+#include <roverapi/rover_buzzer.hpp>
+#include <roverapi/rover_button.hpp>
+
 /* Checks global variable buzzer_status */
 /* 1-> ON    0-> OFF */
 void buzzerHandler (void)
@@ -52,33 +55,41 @@
 void buttonHandler (void)
 {
 #ifndef DEBUG_WO_RSL
-	if (r.inRoverGpio().readShutdownButton() == LOW)
+	RoverButton user_b = RoverButton (USER_BUTTON);
+	RoverButton shutdown_b = RoverButton (SHUTDOWN_BUTTON);
+	RoverBuzzer buzzer = RoverBuzzer();
+
+	user_b.initialize();
+	shutdown_b.initialize();
+	buzzer.initialize();
+
+	if (shutdown_b.readButton() == shutdown_b.LO)
 	{
-		r.shutdown();
+		r_base.shutdown();
 	}
 
-	if (r.inRoverGpio().readUserButton() == LOW)
+	if (user_b.readButton() == user_b.LO)
 	{
 		display_use_elsewhere_shared = 1;
-		r.sleep(500);
+		r_base.sleep(500);
 
 		//r.inRoverDisplay().initialize();
-		r.inRoverDisplay().clearDisplay();
-		r.inRoverDisplay().setTextSize(2);
-		r.inRoverDisplay().setTextColor(WHITE);
+		my_display.clearDisplay();
+		my_display.setTextSize(2);
+		my_display.setTextColor(WHITE);
 
-		r.inRoverDisplay().setCursor(10,5);
-		r.inRoverDisplay().print("User");
-		r.inRoverDisplay().setCursor(20,25);
-		r.inRoverDisplay().print("Button");
-		r.inRoverDisplay().setCursor(30,45);
-		r.inRoverDisplay().print("Pressed");
+		my_display.setCursor(10,5);
+		my_display.print("User");
+		my_display.setCursor(20,25);
+		my_display.print("Button");
+		my_display.setCursor(30,45);
+		my_display.print("Pressed");
 
-		r.inRoverDisplay().display();
+		my_display.display();
 
-		r.inRoverGpio().shutdownTone();
+		buzzer.shutdownTone();
 
-		r.sleep(1000);
+		r_base.sleep(1000);
 		display_use_elsewhere_shared = 0;
 	}
 #endif
diff --git a/rover/src/tasks/hono_interaction_task.cpp b/rover/src/tasks/hono_interaction_task.cpp
index be9651c..569c8e7 100644
--- a/rover/src/tasks/hono_interaction_task.cpp
+++ b/rover/src/tasks/hono_interaction_task.cpp
@@ -23,6 +23,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_cloud.hpp>
 
 void *Hono_Interaction_Task(void * arg)
 {
@@ -31,6 +32,14 @@
 	hono_task_tmr.setDeadline(2);
 	hono_task_tmr.setPeriod(2);
 
+	//Set-up hono instance attributes and register 4711 device to Hono
+	RoverCloud r_cloud = RoverCloud();
+
+	r_cloud.setHono("idial.institute", 8080, "DEFAULT_TENANT");
+
+	r_cloud.setRegistrationPort(28080);
+	r_cloud.registerDevice("4711");
+
 	while (1)
 	{
 		hono_task_tmr.recordStartTime();
@@ -40,17 +49,17 @@
 
 		// 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.
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverFront", distance_sr04_front_shared);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverFrontLeft",infrared_shared[3]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverFrontRight", infrared_shared[2]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverRear", distance_sr04_back_shared);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverRearLeft", infrared_shared[1]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverRearRight", infrared_shared[0]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverBearing", bearing_shared);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu1", cpu_util_shared[0]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu2", cpu_util_shared[1]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu3", cpu_util_shared[2]);
-		r.inRoverCloud().sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu4", cpu_util_shared[3]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverFront", distance_sr04_front_shared);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverFrontLeft",infrared_shared[3]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverFrontRight", infrared_shared[2]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverRear", distance_sr04_back_shared);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverRearLeft", infrared_shared[1]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverRearRight", infrared_shared[0]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverBearing", bearing_shared);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu1", cpu_util_shared[0]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu2", cpu_util_shared[1]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu3", cpu_util_shared[2]);
+		r_cloud.sendTelemetry("4711","sensor1","hono-secret","roverUtilCpu4", cpu_util_shared[3]);
 
 
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/infrared_distance_task.cpp b/rover/src/tasks/infrared_distance_task.cpp
index 6ca82c7..01c2b98 100644
--- a/rover/src/tasks/infrared_distance_task.cpp
+++ b/rover/src/tasks/infrared_distance_task.cpp
@@ -31,6 +31,8 @@
 
 #include <roverapp.h>
 
+#include <roverapi/rover_infraredsensor.hpp>
+
 void *InfraredDistance_Task (void * arg)
 {
 	timing infrared_distance_task_tmr;
@@ -39,7 +41,15 @@
 	infrared_distance_task_tmr.setDeadline(0.5);
 	infrared_distance_task_tmr.setPeriod(0.5);
 
-	int chan;
+	RoverInfraredSensor r_infrared0 = RoverInfraredSensor(ROVER_REAR_RIGHT);
+	RoverInfraredSensor r_infrared1 = RoverInfraredSensor(ROVER_REAR_LEFT);
+	RoverInfraredSensor r_infrared2 = RoverInfraredSensor(ROVER_FRONT_RIGHT);
+	RoverInfraredSensor r_infrared3 = RoverInfraredSensor(ROVER_FRONT_LEFT);
+
+	r_infrared0.initialize();
+	r_infrared1.initialize();
+	r_infrared2.initialize();
+	r_infrared3.initialize();
 
 	while (1)
 	{
@@ -49,10 +59,10 @@
 		//Task content starts here -----------------------------------------------
 		//Setting argument in pthread - whenever you R/W access to temperature_shared, you have to do the same.
 		pthread_mutex_lock(&infrared_lock);
-			for (chan = 0; chan <= 3; chan ++)
-			{
-				infrared_shared[chan] = r.inRoverSensors().readInfraredSensor(chan);
-			}
+			infrared_shared[0] = r_infrared0.read();
+			infrared_shared[1] = r_infrared1.read();
+			infrared_shared[2] = r_infrared2.read();
+			infrared_shared[3] = r_infrared3.read();
 		pthread_mutex_unlock(&infrared_lock);
 		//Task content ends here -------------------------------------------------
 
diff --git a/rover/src/tasks/motordriver_task.cpp b/rover/src/tasks/motordriver_task.cpp
index 6e6af7c..4704a2b 100644
--- a/rover/src/tasks/motordriver_task.cpp
+++ b/rover/src/tasks/motordriver_task.cpp
@@ -35,7 +35,7 @@
 {
 	if (driving_mode == ACC || driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT || driving_mode == BOOTH1 || driving_mode == BOOTH2)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 		pthread_mutex_lock(&driving_mode_lock);
 			driving_mode = MANUAL;
 		pthread_mutex_unlock(&driving_mode_lock);
@@ -46,7 +46,7 @@
 {
 	if (driving_mode == ACC || driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT || driving_mode == BOOTH1 || driving_mode == BOOTH2)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = MANUAL;
@@ -60,7 +60,7 @@
 {
 	if (driving_mode == ACC || driving_mode == MANUAL || driving_mode == BOOTH1 || driving_mode == BOOTH2)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = PARKING_RIGHT;
@@ -74,7 +74,7 @@
 {
 	if (driving_mode == ACC || driving_mode == MANUAL || driving_mode == BOOTH1 || driving_mode == BOOTH2)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = PARKING_LEFT;
@@ -88,7 +88,7 @@
 {
 	if (driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT || driving_mode == MANUAL || driving_mode == BOOTH1 || driving_mode == BOOTH2   )
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = ACC;
@@ -102,7 +102,7 @@
 {
 	if (driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT || driving_mode == MANUAL || driving_mode == BOOTH2  || driving_mode == ACC)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = BOOTH1;
@@ -116,7 +116,7 @@
 {
 	if (driving_mode == PARKING_LEFT || driving_mode == PARKING_RIGHT || driving_mode == MANUAL || driving_mode == BOOTH1 || driving_mode == ACC)
 	{
-		r.inRoverDriving().stopRover(); //Stop the rover first.
+		r_driving.stopRover(); //Stop the rover first.
 	}
 	pthread_mutex_lock(&driving_mode_lock);
 		driving_mode = BOOTH2;
@@ -162,50 +162,50 @@
 				break;
 			case 'W':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().goForward();
+				r_driving.setSpeed(speed_shared);
+				r_driving.goForward();
 				break;
 			case 'D':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnBackwardRight();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnBackwardRight();
 				break;
 			case 'S':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().goBackward();
+				r_driving.setSpeed(speed_shared);
+				r_driving.goBackward();
 				break;
 			case 'A':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnBackwardLeft();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnBackwardLeft();
 				break;
 			case 'Q':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnForwardLeft();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnForwardLeft();
 				break;
 			case 'E':
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnForwardRight();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnForwardRight();
 				break;
 			case 'K':  //turn right on spot
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnRight();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnRight();
 				break;
 			case 'J': //turn left on spot
 				ExitAutomaticModes();
-				r.inRoverDriving().setSpeed(speed_shared);
-				r.inRoverDriving().turnLeft();
+				r_driving.setSpeed(speed_shared);
+				r_driving.turnLeft();
 				break;
 			case 'U':
 				//Calibration mode
 				break;
 			case 'R':
 				//Shutdown hook from web server
-				r.shutdown();
+				r_base.shutdown();
 				break;
 			case 'M':
 				//ACC mode set
@@ -224,7 +224,7 @@
 				BoothMode2Set();
 				break;
 			case 'F':
-				r.inRoverDriving().stopRover();
+				r_driving.stopRover();
 				break;
 		}
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/oled_task.cpp b/rover/src/tasks/oled_task.cpp
index 4f0d6ef..0faf9bc 100644
--- a/rover/src/tasks/oled_task.cpp
+++ b/rover/src/tasks/oled_task.cpp
@@ -62,7 +62,6 @@
 
 	int counter_500ms = 0;
 
-	RoverDisplay my_display = r.inRoverDisplay();
 
 	while (1)
 	{
@@ -115,7 +114,7 @@
 						my_display.setTextSize(3);
 						my_display.setTextColor(WHITE);
 
-						if (r.inRoverUtils().getWlanStatus() == 1)
+						if (r_utils.getWlanStatus() == 1)
 						{
 							my_display.setCursor(50,32);
 							my_display.print("ON");
@@ -144,7 +143,7 @@
 						my_display.setTextSize(3);
 						my_display.setTextColor(WHITE);
 
-						if (r.inRoverUtils().getEthernetStatus() == 1)
+						if (r_utils.getEthernetStatus() == 1)
 						{
 							my_display.setCursor(50,32);
 							my_display.print("ON");
@@ -173,7 +172,7 @@
 						my_display.setTextSize(3);
 						my_display.setTextColor(WHITE);
 
-						if (r.inRoverUtils().getInternetStatus() == 1)
+						if (r_utils.getInternetStatus() == 1)
 						{
 							my_display.setCursor(50,32);
 							my_display.print("ON");
@@ -202,7 +201,7 @@
 						my_display.setTextSize(3);
 						my_display.setTextColor(WHITE);
 
-						if (r.inRoverUtils().getBluetoothStatus() == 1)
+						if (r_utils.getBluetoothStatus() == 1)
 						{
 							my_display.setCursor(50,32);
 							my_display.print("ON");
@@ -231,7 +230,7 @@
 						my_display.setTextSize(3);
 						my_display.setTextColor(WHITE);
 
-						if (r.inRoverUtils().getHonoCloudStatus("idial.institute",8080,"DEFAULT_TENANT", "4711","sensor1","hono-secret") == 1)
+						if (r_utils.getHonoCloudStatus("idial.institute",8080,"DEFAULT_TENANT", "4711","sensor1","hono-secret") == 1)
 						{
 							my_display.setCursor(50,32);
 							my_display.print("ON");
@@ -259,7 +258,7 @@
 		else
 		{
 			// Proper shutdown function, including showing message in the OLED display
-			r.shutdown();
+			r_base.shutdown();
 		}
 
 		/* If the display is not in use somewhere else asynchronously */
diff --git a/rover/src/tasks/parking_task.cpp b/rover/src/tasks/parking_task.cpp
index b4b90ec..ccc355e 100644
--- a/rover/src/tasks/parking_task.cpp
+++ b/rover/src/tasks/parking_task.cpp
@@ -29,7 +29,7 @@
 
 int StopParking (void)
 {
-    r.inRoverDriving().stopRover();
+	r_driving.stopRover();
     pthread_mutex_lock(&driving_mode_lock);
         driving_mode = MANUAL;
     pthread_mutex_unlock(&driving_mode_lock);
@@ -55,8 +55,8 @@
 		{
 			//printf ("PARKING STARTED\n");
 			bearing_begin = bearing_shared;
-			r.inRoverDriving().setSpeed(speed_shared-50);
-			r.inRoverDriving().turnLeft();
+			r_driving.setSpeed(speed_shared-50);
+			r_driving.turnLeft();
 			/**
 			 * The following bearing based parking does currently not work due to very unreliable bearing values
 			 */
@@ -74,19 +74,19 @@
 			delay(3000);
 
 
-			r.inRoverDriving().stopRover();
-			r.inRoverDriving().setSpeed(speed_shared);
-			r.inRoverDriving().goForward();
+			r_driving.stopRover();
+			r_driving.setSpeed(speed_shared);
+			r_driving.goForward();
 			delay(2000);
-			r.inRoverDriving().stopRover();
+			r_driving.stopRover();
 
 			//bearing_begin = bearing_shared;
-			r.inRoverDriving().setSpeed(speed_shared-50);
-			r.inRoverDriving().turnRight();
+			r_driving.setSpeed(speed_shared-50);
+			r_driving.turnRight();
 			//while(((int)bearing_begin+(int)bearing_shared) % 360 <80);
 			delay(3000);
 
-			r.inRoverDriving().stopRover();
+			r_driving.stopRover();
 			StopParking();
 			//printf ("PARKING ENDED \n");
 		}
@@ -94,21 +94,21 @@
 		{
 			//printf ("PARKING STARTED\n");
 			bearing_begin = bearing_shared;
-			r.inRoverDriving().setSpeed(speed_shared-50);
-			r.inRoverDriving().turnRight();
+			r_driving.setSpeed(speed_shared-50);
+			r_driving.turnRight();
 			//while(((int)bearing_begin+(int)bearing_shared) % 360 <85);
 			delay(3000);
 
-			r.inRoverDriving().setSpeed(speed_shared);
-			r.inRoverDriving().goForward();
+			r_driving.setSpeed(speed_shared);
+			r_driving.goForward();
 			delay(2000);
 
 			bearing_begin = bearing_shared;
-			r.inRoverDriving().setSpeed(speed_shared-50);
-			r.inRoverDriving().turnLeft();
+			r_driving.setSpeed(speed_shared-50);
+			r_driving.turnLeft();
 			delay(3000);
 
-			r.inRoverDriving().stopRover();
+			r_driving.stopRover();
 			StopParking();
 			//printf ("PARKING ENDED\n");
 		}
diff --git a/rover/src/tasks/temperature_task.cpp b/rover/src/tasks/temperature_task.cpp
index 1063535..7fd9548 100644
--- a/rover/src/tasks/temperature_task.cpp
+++ b/rover/src/tasks/temperature_task.cpp
@@ -29,6 +29,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_dht22.hpp>
 
 void *Temperature_Task(void *arg)
 {
@@ -40,6 +41,9 @@
 
 	float temperature, humidity;
 
+	RoverDHT22 r_dht22 = RoverDHT22();
+	r_dht22.initialize();
+
 	while (1)
 	{
 		temperature_task_tmr.recordStartTime();
@@ -47,8 +51,8 @@
 
 		//Task content starts here -----------------------------------------------
 
-		temperature = r.inRoverSensors().readTemperature();
-		humidity = r.inRoverSensors().readHumidity();
+		temperature = r_dht22.readTemperature();
+		humidity = r_dht22.readHumidity();
 
 		pthread_mutex_lock(&temperature_lock);
 			temperature_shared = temperature;
diff --git a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
index f97f4be..0af01ab 100644
--- a/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_grove_task.cpp
@@ -33,6 +33,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_grooveultrasonic.hpp>
 
 void *Ultrasonic_Sensor_Grove_Task(void *unused)
 {
@@ -42,6 +43,9 @@
 	ultrasonic_grove_task_tmr.setDeadline(0.5);
 	ultrasonic_grove_task_tmr.setPeriod(0.5);
 
+	RoverGrooveUltrasonic r_groove = RoverGrooveUltrasonic(ROVER_REAR);
+	r_groove.initialize();
+
 	while (1)
 	{
 		ultrasonic_grove_task_tmr.recordStartTime();
@@ -52,7 +56,7 @@
 			distance_grove_shared = getCM_GrooveUltrasonicRanger();
 		pthread_mutex_unlock(&distance_grove_lock);*/
 		pthread_mutex_lock(&distance_sr04_back_lock);
-			distance_sr04_back_shared = r.inRoverSensors().readGrooveUltrasonicSensor(r.inRoverSensors().ROVER_REAR);
+			distance_sr04_back_shared = (int) r_groove.read();
 		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_sr04_back_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
index 12ef99b..3ad129f 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_back_task.cpp
@@ -52,6 +52,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_hcsr04.hpp>
 
 void *Ultrasonic_Sensor_SR04_Back_Task (void *unused)
 {
@@ -61,6 +62,9 @@
 	ultrasonic_sr04_back_task_tmr.setDeadline(0.1);
 	ultrasonic_sr04_back_task_tmr.setPeriod(0.1);
 
+	RoverHCSR04 r_ultrasonicrear = RoverHCSR04(ROVER_REAR);
+	r_ultrasonicrear.initialize();
+
 	while (1)
 	{
 		ultrasonic_sr04_back_task_tmr.recordStartTime();
@@ -68,7 +72,7 @@
 
 		//Task content starts here -----------------------------------------------
 		pthread_mutex_lock(&distance_sr04_back_lock);
-			distance_sr04_back_shared = r.inRoverSensors().readHCSR04UltrasonicSensor(r.inRoverSensors().ROVER_REAR);
+			distance_sr04_back_shared = r_ultrasonicrear.read();
 		pthread_mutex_unlock(&distance_sr04_back_lock);
 
 		//Task content ends here -------------------------------------------------
diff --git a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
index 7329ce5..7a255cb 100644
--- a/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
+++ b/rover/src/tasks/ultrasonic_sensor_sr04_front_task.cpp
@@ -52,6 +52,7 @@
 #include <pthread.h>
 
 #include <roverapp.h>
+#include <roverapi/rover_hcsr04.hpp>
 
 void *Ultrasonic_Sensor_SR04_Front_Task(void *unused)
 {
@@ -61,6 +62,9 @@
 	ultrasonic_sr04_front_task_tmr.setDeadline(0.1);
 	ultrasonic_sr04_front_task_tmr.setPeriod(0.1);
 
+	RoverHCSR04 r_ultrasonicfront = RoverHCSR04 (ROVER_FRONT);
+	r_ultrasonicfront.initialize();
+
 	while (1)
 	{
 		ultrasonic_sr04_front_task_tmr.recordStartTime();
@@ -68,7 +72,7 @@
 
 		//Task content starts here -----------------------------------------------
 		pthread_mutex_lock(&distance_sr04_front_lock);
-			distance_sr04_front_shared = r.inRoverSensors().readHCSR04UltrasonicSensor(r.inRoverSensors().ROVER_FRONT);
+			distance_sr04_front_shared = r_ultrasonicfront.read();
 		pthread_mutex_unlock(&distance_sr04_front_lock);
 		//Task content ends here -------------------------------------------------