with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Generic_Graph; use Generic_Graph; with Tasks; use Tasks; with Task_Groups; use Task_Groups; with Buffers; use Buffers; with Messages; use Messages; with Dependencies; use Dependencies; with Resources; use Resources; with Systems; use Systems; with Processors; use Processors; with Processor_Set; use Processor_Set; with Processor_interface; use Processor_interface; with Task_Set; use Task_Set; with Convert_Strings; with Convert_Unbounded_Strings; with Text_IO; use Text_IO; with Ada.Numerics.Aux; use Ada.Numerics.Aux; with Scheduler_Interface; use Scheduler_Interface; with Systems; use Systems; with Ada.Finalization; with Unbounded_Strings; use Unbounded_Strings; use Unbounded_Strings.Unbounded_String_List_Package; with Unchecked_Deallocation; with Ada.Numerics.Discrete_Random; package architecture_factory is type Int_Range is range 0 .. 99999; package Rand_Int is new Ada.Numerics.Discrete_Random (Int_Range); G_Int : Rand_Int.Generator; type Resource_range is range 0 .. 2; package Rand_Res is new Ada.Numerics.Discrete_Random (Resource_range); G_Res : Rand_Res.Generator; Building_Architecture_Exception : exception; procedure initialize_cpt; -- 0 --------= System =-------- procedure Create_Time_Triggered_Communication_System (S : in out System; number_tasks : in Integer; number_Resources : in Integer; number_Messages : in Integer; number_Dependencies : in Integer; number_Core_Units : in Integer; number_Processors : in Integer; number_Buffers : in Integer; number_Address_Spaces : in Integer); procedure Create_Ravenscar_System (S : in out System; number_tasks : in Integer; number_Resources : in Integer; number_Messages : in Integer; number_Dependencies : in Integer; number_Core_Units : in Integer; number_Processors : in Integer; number_Buffers : in Integer; number_Address_Spaces : in Integer); procedure Create_System_From_Scratch (S : in out System; number_tasks : in Integer; number_Resources : in Integer; number_Messages : in Integer; number_Dependencies : in Integer; number_Core_Units : in Integer; number_Processors : in Integer; number_Buffers : in Integer; number_Address_Spaces : in Integer); procedure Create_MF_System (S : in out System; number_groups : in Integer; number_frames : in Integer; number_resources : in Integer; number_resource_usages : in Integer; number_core_units_per_processor : in Integer; number_processors : in Integer; number_address_spaces : in Integer; Sched : in Schedulers_Type; mf_period : in Integer := 0; sync_ratio : in Double := 0.0; number_precedences : in Integer := 0); procedure Create_Tree_Transaction_System (S : in out System; number_groups : in Integer; number_tasks_per_group : in Integer; number_resources : in Integer; number_resource_usages : in Integer; number_core_units_per_processor : in Integer; number_processors : in Integer; number_address_spaces : in Integer; sched : in Schedulers_Type; cpu_utilization : in Double := 0.5; min_period : in Integer := 10; max_period : in Integer := 1000; nim_delta : in Integer := 0; priority_variation_prob : in Double := 0.0; processor_variation_prob : in Double := 0.0; non_immediateness_prob : in Double := 0.0); -- 8 --------= Tasks_Set =-------- procedure Add_Task_Deadline_equals_period_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String; Task_Type : in Tasks_Type); procedure Add_Task_Deadline_larger_than_period_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String; Task_Type : in Tasks_Type); procedure Add_Task_Deadline_smaller_than_period_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String; Task_Type : in Tasks_Type); procedure Add_Aperiodic_Task_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String); procedure Add_Periodic_Task_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String); procedure Add_Frame_Task_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String); procedure Add_Multiple_Tasks_To_System (S : in out System; N : Integer; Task_Type : in Tasks_Type); procedure Add_Multiple_Frame_Tasks_To_System (S : in out System; number_frames : in Integer; mf_period : in Integer; sync_ratio : in Double); procedure Add_Multiple_Tasks_To_Tree_Transactions (S : in out System; number_tasks_per_group : in Integer; sched : in Schedulers_Type; cpu_utilization : in Double; min_period : in Integer; max_period : in Integer; nim_delta : in Integer := 0; priority_variation_prob : in Double := 0.0; processor_variation_prob : in Double := 0.0; non_immediateness_prob : in Double := 0.0); -- 9 --------= Resources_Set =-------- procedure Add_Resource_To_System (S : in out System; N_dependent_tasks : Integer); procedure Add_Resource_To_System (S : in out System; Name : in Unbounded_String; N_dependent_tasks : Integer); procedure Add_Multiple_Resources_To_System (S : in out System; N : Integer); -- 3 --------= Messages_Set =-------- procedure Add_Message_To_System (S : in out System); procedure Add_Message_To_System (S : in out System; Name : in Unbounded_String); procedure Add_Multiple_Messages_To_System (S : in out System; N : Integer); -- 10 --------= Dependecies =-------- procedure Add_Time_Triggered_Communication_Dependency_To_System (S : in out System); procedure Add_Dependency_To_System (S : in out System; Name : in Unbounded_String); procedure Add_Multiple_Dependencies_To_System (S : in out System; N : Integer); procedure Add_Multiple_MF_Precedence_Dependencies_To_System (S : in out System; number_precedences : in Integer; number_groups : in Integer; sync_ratio : in Double); -- 11 --------= Task_Groups_Set =-------- procedure Add_Task_Group_To_System (S : in out System; Task_Group_Type : in Task_Groups_Type); procedure Add_Task_Group_To_System (S : in out System; Name : in Unbounded_String; Task_Group_Type : in Task_Groups_Type); procedure Add_Multiple_Task_Groups_To_System (S : in out System; N : Integer; Task_Group_Type : in Task_Groups_Type); -- 1 --------= Core_Units_Set =-------- procedure Add_Core_Unit_To_System (S : in out System); procedure Add_Core_Unit_To_System (S : in out System; Sched : in Schedulers_Type); procedure Add_Core_Unit_To_System (S : in out System; Name : in Unbounded_String); procedure Add_Core_Unit_To_System (S : in out System; A_Multi_Cores_Processor : in Multi_Cores_Processor_Ptr; Sched : in Schedulers_Type; Preempt : in Preemptives_Type); -- 2 --------= Processors_Set =-------- procedure Add_Mono_Core_Processor_To_System (S : in out System; Preemptivity : in Preemptives_Type; Sched : in Schedulers_Type); procedure Add_Mono_Core_Processor_To_System (S : in out System; Preemptivity : in Preemptives_Type; Sched : in Schedulers_Type; Core : Core_Unit_Ptr); procedure Add_Mono_Core_Processor_To_System (S : in out System; Name : in Unbounded_String; Preemptivity : in Preemptives_Type; Sched : in Schedulers_Type); procedure Add_Multiple_Mono_Core_Processors_To_System (S : in out System; N : Integer); procedure Add_Multi_Cores_Processor_To_System (S : in out System; Number_Core_Units : in Integer; Preemptivity : in Preemptives_Type; Sched : in Schedulers_Type); procedure Add_Multiple_Processors_To_System (S : in out System; Number_Processors : in Integer; Number_Core_Units_Per_Processor : in Integer; Sched : in Schedulers_Type; Preempt : in Preemptives_Type); -- 7 --------= Buffers_Set =-------- procedure Add_Buffer_To_System (S : in out System); procedure Add_Buffer_To_System (S : in out System; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String); procedure Add_Buffer_To_System (S : in out System; Name : in Unbounded_String; Cpu_Name : in Unbounded_String; Address_Space_Name : in Unbounded_String); procedure Add_Multiple_Buffers_To_System (S : in out System; N : Integer); -- 4 --------= Networks_Set =-------- -- 5 --------= Event_Analyzers_Set =-------- -- 6 --------= Address_Spaces_Set =-------- procedure Add_Address_Space_To_System (S : in out System; cpu_name : Unbounded_String); procedure Add_Address_Space_To_System (S : in out System; Name : in Unbounded_String; cpu_name : Unbounded_String); procedure Add_Multiple_Address_Spaces_To_System (S : in out System; N : Integer); procedure Add_Multiple_Address_Spaces_Consistently_To_System (S : in out System; Number_Processors : in Integer; Number_Address_Spaces : in Integer); function Random_Preemptivity return Preemptives_Type; function Random_Scheduler return Schedulers_Type; function Restrained_Random_Scheduler return Schedulers_Type; function Random_Dependency_Type return Dependency_Type; function Random_Resource_Type return Resources_Type; function Restrained_Random_Resource_Type return Resources_Type; function Random_Task_Type return Tasks_Type; function Random_Integer (n : Integer) return Integer; function Random_Integer (n1 : Integer; n2 : Integer) return Integer; -- Added Functions for DP Prototype Demonstration -- procedure compliant_time_triggered_communication (sys: out System); procedure uncompliant_time_triggered_communication (sys: out System); procedure compliant_ravenscar (sys: out System); procedure uncompliant_ravenscar (sys: out System); procedure compliant_unplugged (sys: out System); procedure uncompliant_unplugged (sys: out System); procedure uncompliant_buffer (sys: out System); end architecture_factory;