From 7235ace10fff01827b9ca986157bee7a1ad9ae09 Mon Sep 17 00:00:00 2001
From: Blinningjr <nicke.l@telia.com>
Date: Mon, 11 Jan 2021 14:35:58 +0100
Subject: [PATCH] Added schedulable output variable

---
 srp_analysis/example/output1.txt |  3 ++-
 srp_analysis/src/formater.rs     | 13 +++++++++----
 srp_analysis/src/srp_analyser.rs | 17 +++++++++++++++++
 3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/srp_analysis/example/output1.txt b/srp_analysis/example/output1.txt
index 37e15d9..14909e6 100644
--- a/srp_analysis/example/output1.txt
+++ b/srp_analysis/example/output1.txt
@@ -1,7 +1,8 @@
 Overview
+	Schedulable: No
 	Total Util: 0.85
 	Tasks: T1 T2 T3
-	Priority:  P(R1) = 2  P(T2) = 2  P(T1) = 1  P(R2) = 3  P(T3) = 3
+	Priority:  P(R1) = 2  P(T1) = 1  P(T2) = 2  P(R2) = 3  P(T3) = 3
 	Task Resources: T2:( R1 R2 ) T3:( R2 )
 
 Analysis of T1
diff --git a/srp_analysis/src/formater.rs b/srp_analysis/src/formater.rs
index a88491d..06468eb 100644
--- a/srp_analysis/src/formater.rs
+++ b/srp_analysis/src/formater.rs
@@ -6,7 +6,7 @@ use super::srp_analyser::*;
  * Creates a readable representation of the analysis and the given information.
  */
 pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
-    let overview = format_overview(tasks, ip, tr);
+    let overview = format_overview(tasks, ip, tr, analysis);
 
     let mut body = String::new();
     for at in analysis {
@@ -26,7 +26,7 @@ pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio,
 /*
  * Creates the overview section of the readable representation.
  */
-pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
+pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources, atasks: &Vec<AnalysedTask>) -> String {
     // Formats the names of all the tasks.
     fn format_task_names(tasks: &Tasks) -> String {
         let mut task_names = "Tasks:".to_string();
@@ -60,13 +60,18 @@ pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String
         }
         return task_res;
     }
+    let ltot = total_load_factor(tasks);
 
-    let tot_util = format!("Total Util: {}", total_load_factor(tasks));
+    let schedulable = format!("Schedulable: {}", match schedulable(ltot, atasks) {
+        true => "Yes",
+        false => "No",
+    });
+    let tot_util = format!("Total Util: {}", ltot);
     let task_names = format_task_names(tasks);
     let id_prio = format_id_prio(ip);
     let task_res = format_task_res(tr);
 
-    return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); 
+    return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}\n\t{}", schedulable, tot_util, task_names, id_prio, task_res); 
 }
  
 
diff --git a/srp_analysis/src/srp_analyser.rs b/srp_analysis/src/srp_analyser.rs
index 3251f6d..440daf5 100644
--- a/srp_analysis/src/srp_analyser.rs
+++ b/srp_analysis/src/srp_analyser.rs
@@ -175,6 +175,23 @@ pub fn interference_time(task: &Task, tasks: &Tasks, ip: &IdPrio, tr: &TaskResou
 }
 
 
+/*
+ * Calculate if it is schedulable.
+ */
+pub fn schedulable(ltot: f32, atasks: &Vec<AnalysedTask>) -> bool {
+    if ltot >= 1.0 {
+        return false;
+    }
+
+    for at in atasks {
+        if at.response_time >= at.task.deadline {
+            return false;
+        }
+    }
+    return true;
+}
+
+
 /*
  * Analyse tasks.
  *
-- 
GitLab