Commit 50e23713 authored by Maxime Perrotin's avatar Maxime Perrotin
Browse files

Start supporting C++ function type

parent 33596244
......@@ -6,6 +6,7 @@
with Ada.Exceptions,
Ada.Directories,
Ada.Strings.Fixed,
Ocarina.Instances.Queries,
Ocarina.Analyzer,
Ocarina.Options,
......@@ -23,6 +24,7 @@ with Ada.Exceptions,
package body TASTE.Interface_View is
use Ada.Exceptions,
Ada.Strings.Fixed,
Ocarina.Instances.Queries,
Ocarina.Namet,
Ocarina.Options,
......@@ -636,13 +638,45 @@ package body TASTE.Interface_View is
or Each.Name = "Taste::is_Component_Type") and then
Each.Value = "true"
then
Put_Debug ("Component type found : " & To_String (Each.Value));
Result.Is_Type := True;
end if;
if Each.Name = "TASTE_IV_Properties::is_instance_of"
or Each.Name = "Taste::is_instance_of"
or Each.Name = "Taste::is_instance_of2"
then
-- Old form, should not appear in new designs
Result.Instance_Of := Just (Each.Value);
elsif Each.Name = "Taste::is_Instance_Of"
then
-- New form, however should be deprecated soon
-- String "foo::bar::hello.world" -> we have to extract hello
declare
Inp : constant String := To_String (Each.Value);
Sep1 : constant String := "::";
nb1 : constant Natural :=
Ada.Strings.Fixed.Count (Inp, sep1);
sep2 : constant String := ".";
From : Natural := Inp'First;
To : Natural;
begin
for I in 0 .. nb1 loop
To := Index (Inp, Sep1, From => From);
if To = 0 then
To := Inp'Last + 1;
end if;
if I < nb1 then
From := To + 2;
end if;
end loop;
To := Index (Inp (From .. To - 1), Sep2, From => From);
Result.Instance_Of := Just (US (Inp (From .. To - 1)));
end;
Put_Debug ("Instance : "
& To_String
(Result.Instance_Of.Value_Or (US ("???"))));
elsif Each.Name = "Taste::is_Instance_Of2" then
-- Could not find a way to parse the classifier property,
-- see taste-parser_utils.adb
null;
end if;
end loop;
......
......@@ -18,6 +18,7 @@ with Ada.Characters.Latin_1,
Ocarina.Configuration,
Ocarina.FE_AADL.Parser,
Ocarina.Instances.Queries,
-- Ocarina.ME_AADL.AADL_Instances.Entities,
TASTE.Parser_Version;
package body TASTE.Parser_Utils is
......@@ -25,6 +26,7 @@ package body TASTE.Parser_Utils is
use GNAT.OS_Lib,
GNAT.Command_Line,
Templates_Parser.Utils,
-- Ocarina.ME_AADL.AADL_Instances.Entities,
Ocarina.Instances.Queries;
procedure Put_Info (Info : String) is
......@@ -343,6 +345,26 @@ package body TASTE.Parser_Utils is
if Present (ATN.Single_Value (prop_value)) then
-- Only support single-value properties for now
single_val := ATN.Single_Value (prop_value);
-- declare
-- dummy_foo : Node_Id;
-- dummy_bar : Name_Id;
-- dummy_path : List_Id;
-- begin
-- if ATN.Kind (single_val) = ATN.K_Component_Classifier_Term
-- then
-- dummy_foo := ATN.Identifier (single_val); -- No exception
-- dummy_foo := ATN.Entity (single_val); -- No exception
-- Put_Debug (ATN.Kind (dummy_foo)'Img); -- K_UNITS_TYPE
-- dummy_path := ATN.Namespace_Path (single_val); -- no exc
-- dummy_foo := ATN.First_Node (dummy_path); -- exception!
-- Put_Debug ("no exception!");
-- end if;
-- exception
-- when others =>
-- Put_Error ("sorry! exception!");
-- end;
result.Insert (Key => AIN_Case (property),
New_Item => (Name => US (AIN_Case (property)),
Value =>
......@@ -364,9 +386,11 @@ package body TASTE.Parser_Utils is
when ATN.K_Enumeration_Term =>
Get_Name_String
(ATN.Display_Name (ATN.Identifier (single_val))),
when ATN.K_Number_Range_Term =>
"RANGE NOT SUPPORTED!",
when others => "ERROR! Unsupported kind: "
when ATN.K_Number_Range_Term => "RANGE NOT SUPPORTED!",
when ATN.K_Component_Classifier_Term =>
-- Property used e.g. to reference a component type
"Ohoh - I don't know how to parse this property...",
when others => "ERROR! Kazoo does not support Kind: "
& ATN.Kind (single_val)'Img)));
end if;
property := AIN.Next_Node (property);
......
......@@ -12,7 +12,11 @@
@@IF@@ @_Language_@ = SDL
@_LOWER:Name_@: ../@_LOWER:Name_@/SDL/code/@_LOWER:Name_@.adb
@@IF@@ @_Instance_Of_@ = ""
../@_LOWER:Name_@/SDL/code/@_LOWER:Name_@.adb: ../@_LOWER:Name_@/SDL/src/@_LOWER:Name_@.pr ../@_LOWER:Name_@/SDL/src/system_structure.pr
@@ELSE@@
../@_LOWER:Name_@/SDL/code/@_LOWER:Name_@.adb: ../@_LOWER:Instance_Of_@/SDL/src/@_LOWER:Instance_Of_@.pr ../@_LOWER:Instance_Of_@/SDL/src/system_structure.pr
@@END_IF@@
# Call opengeode to generate the functional code
make -j -C ../@_LOWER:Name_@/SDL generate-code
@@ELSIF@@ @_Zip_File_@ /= ""
......
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Is_Type_@ : True if function type
@@-- @_Instance_Of_@ : Name of instance or empty string
@_LOWER:Name_@.cc
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Language_@ : The implementation language
@@-- @_List_Of_PIs_@ : List of all Provided Interfaces (just names)
@@-- @_List_Of_RIs_@ : List of all Required Interfaces (just names)
@@-- @_List_Of_Sync_PIs@ : List of synchronous Provided Interfaces
@@-- @_List_Of_Sync_RIs@ : List of synchronous Required Interfaces
@@-- @_List_Of_ASync_PIs@ : List of asynchronous Provided Interfaces
@@-- @_List_Of_ASync_RIs@ : List of asynchronous Required Interfaces
@@-- @_ASN1_Modules_@ : List of ASN.1 Modules names
@@-- @_ASN1_Files_@ : List of ASN.1 Files with path
@@-- @_Timers_@ : List of timers (just names)
@@-- @_Has_Context_@ : Flag, True if there are context parameters
@@-- @_CP_Names_@ : List of Context Parameter names
@@-- @_CP_Types_@ : List of Context Parameter types
@@-- @_Provided_Interfaces_@ : From template: Provided interfaces with params
@@-- @_Required_Interfaces_@ : From template: Required interfaces with params
@@-- @_Property_Names_@ : List of User-defined properties (names)
@@-- @_Property_Values_@ : List of User-defined properties (values)
@@-- @_Is_Type_@ : Flag, True if function is a component type
@@-- @_Instance_Of_@ : Optional name of component type
@@IF@@ not @_Is_Type_@ and not @_EXIST:Instance_Of_@
@@INCLUDE@@ ../c-body/function.tmplt
@@ELSE@@
/* C++ Body file for function type @_Name_@
* Generated by TASTE on @_NOW_@
* You can edit this file, it will not be overwritten
* Provided interfaces : @_List_Of_PIs_@
* Required interfaces : @_List_Of_RIs_@
* User-defined properties for this function:
@@TABLE@@
* |_ @_Property_Names_@ = @_Property_Values_@
@@END_TABLE@@
* Timers : @_Timers_@
*/
#include "@_LOWER:Name_@.h"
@@IF@@ @_Has_Context_@
// Include Context Parameters (constants defined in the Interface View)
#include "Context-@_REPLACE_ALL(_/-):LOWER:Name_@.h"
@@END_IF@@
void @_LOWER:Name_@_startup()
{
// Write your initialisation code, but DO NOT CALL REQUIRED INTERFACES
// puts ("[@_Name_@] Startup");
}
@@TABLE@@
@_Provided_Interfaces_@
@@END_TABLE@@
@@TABLE@@
//void @_LOWER:Name_@_PI_@_Timers_@()
//{
// This function is called when the timer @_Timers_@ expires
//}
@@END_TABLE@@
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the interface
@@-- @_Direction_@ : "PI" or "RI"
@@-- @_Kind_@ : The RCM Kind
@@-- @_Parent_Function_@ : The name of the function
@@-- @_Param_Names_@ : List of parameter names
@@-- @_Param_Types_@ : |_ Corresponding parameter types
@@-- @_Param_Directions_@ : |_ Corresponding direction
@@-- @_Param_Encodings_@ : |_ Corresponding ASN.1 encoding
@@-- @_Is_Timer_@ : Flag set to true if this is a timer interface
@@-- @_Period_@, @_WCET_@, @_Queue_Size_@ : Properties of the interface
@@-- @_IF_Property_Names_@, _Values_@ : User-defined properties (vector tag)
@@IF@@ not @_Is_Timer_@
@@IF@@ @_EXIST:Param_Names_@
void @_LOWER:Parent_Function_@_PI_@_Name_@
@@INLINE( \()(,\n )(\)\n)@@
@@TABLE@@
@@IF@@ @_Param_Directions_@ = "PARAM_IN"
const asn1Scc@_REPLACE_ALL((-)/_):Param_Types_@ *IN_@_LOWER:Param_Names_@
@@ELSE@@
asn1Scc@_REPLACE_ALL((-)/_):Param_Types_@ *OUT_@_LOWER:Param_Names_@
@@END_IF@@
@@END_TABLE@@
@@END_INLINE@@
@@ELSE@@
void @_LOWER:Parent_Function_@_PI_@_Name_@(void)
@@END_IF@@
{
// Write your code here
}
@@END_IF@@
@@-- This template must return either TRUE or something else (meaning FALSE)
@@-- It is used to determine if the other templates in this folder will be
@@-- processed or ignored.
@@-- One folder can contain two templates: one for a function, and one for
@@-- a corresponding makefile (or build script)
@@-- The name of the function is read from template "function-filename.tmplt"
@@-- The name of the makefile is read from template "makefile-filename.tmplt"
@@-- These files are optional, if absent no error is raised
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Is_Type_@ : True if function type
@@-- @_Instance_Of_@ : Name of instance or empty string
@@-- @_Language_@ : Implementation language for the function
@@-- @_Filename_Is_Present_@ : True if target function output already exists
@@-- @_Makefile_Is_Present_@ : True if target build script already exists
@@-- @_Zip_File_@ : Optional path to zip file
@@-- @_Use_POHIC_@ : Command line configuration
@@-- In addition all other command line configuration values are available
@@-- as well as all function attributes
@@IF@@ @_Language_@ = "CPP" and not @_Filename_Is_Present_@ and @_Zip_File_@ = "" and @_Is_Type_@
TRUE
@@END_IF@@
......@@ -18,6 +18,6 @@
@@-- @_Use_POHIC_@ : Command line configuration
@@-- In addition all other command line configuration values are available
@@-- as well as all function attributes
@@IF@@ @_Language_@ = "CPP" and not @_Filename_Is_Present_@ and @_Zip_File_@ = ""
@@IF@@ @_Language_@ = "CPP" and not @_Filename_Is_Present_@ and @_Zip_File_@ = "" and not @_Is_Type_@ and @_Instance_Of_@ = ""
TRUE
@@END_IF@@
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Is_Type_@ : True if function type
@@-- @_Instance_Of_@ : Name of instance or empty string
@_LOWER:Name_@.h
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Language_@ : The implementation language
@@-- @_List_Of_PIs_@ : List of all Provided Interfaces (just names)
@@-- @_List_Of_RIs_@ : List of all Required Interfaces (just names)
@@-- @_List_Of_Sync_PIs@ : List of synchronous Provided Interfaces
@@-- @_List_Of_Sync_RIs@ : List of synchronous Required Interfaces
@@-- @_List_Of_ASync_PIs@ : List of asynchronous Provided Interfaces
@@-- @_List_Of_ASync_RIs@ : List of asynchronous Required Interfaces
@@-- @_ASN1_Modules_@ : List of ASN.1 Modules names
@@-- @_ASN1_Files_@ : List of ASN.1 Files with path
@@-- @_Timers_@ : List of timers (just names)
@@-- @_Has_Context_@ : Flag, True if there are context parameters
@@-- @_CP_Names_@ : List of Context Parameter names
@@-- @_CP_Types_@ : List of Context Parameter types
@@-- @_Provided_Interfaces_@ : From template: Provided interfaces with params
@@-- @_Required_Interfaces_@ : From template: Required interfaces with params
@@-- @_Property_Names_@ : List of User-defined properties (names)
@@-- @_Property_Values_@ : List of User-defined properties (values)
@@-- @_Is_Type_@ : Flag, True if function is a component type
@@-- @_Instance_Of_@ : Optional name of component type
@@IF@@ not @_Is_Type_@ and not @_EXIST:Instance_Of_@
@@INCLUDE@@ ../c-header/function.tmplt
@@ELSE@@
/* C++ Function Type
* Header file for function @_Name_@ in @_Language_@ language
* Generated by TASTE on @_NOW_@
* Context Parameters present : @_YES_NO:Has_Context_@
* Provided interfaces : @_List_Of_PIs_@
* Required interfaces : @_List_Of_RIs_@
* User-defined properties for this function:
@@TABLE@@
* |_ @_Property_Names_@ = @_Property_Values_@
@@END_TABLE@@
* DO NOT EDIT THIS FILE, IT WILL BE OVERWRITTEN DURING THE BUILD
*/
#pragma once
#include "dataview-uniq.h"
#ifdef __cplusplus
extern "C" {
#endif
class @_LOWER:Name_@
{
void startup();
/* Provided interfaces */
@@TABLE@@
@_Provided_Interfaces_@
@@END_TABLE@@
/* Required interfaces */
@@TABLE@@
@_Required_Interfaces_@
@@END_TABLE@@
@@TABLE@@
// void @_Timers_@(void);
/* Call these functions to set/reset @_Timers_@ (value in milliseconds)*/
void @_LOWER:Name_@_RI_SET_@_Timers_@(asn1SccT_UInt32 *);
void @_LOWER:Name_@_RI_RESET_@_Timers_@();
@@END_TABLE@@
}
#ifdef __cplusplus
}
#endif
@@END_IF@@
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the interface
@@-- @_Direction_@ : "PI" or "RI"
@@-- @_Kind_@ : The RCM Kind
@@-- @_Parent_Function_@ : The name of the function
@@-- @_Param_Names_@ : List of parameter names
@@-- @_Param_Types_@ : |_ Corresponding parameter types
@@-- @_Param_Directions_@ : |_ Corresponding direction
@@INLINE@@
@@IF@@ @_Direction_@ = "PI"
void @_LOWER:Parent_Function_@_PI_@_Name_@(
@@ELSE@@
extern void @_LOWER:Parent_Function_@_RI_@_Name_@(
@@END_IF@@
@@INLINE(, )@@
@@TABLE@@
@@IF@@ @_Param_Directions_@ = "PARAM_IN"
const asn1Scc@_REPLACE_ALL((-)/_):Param_Types_@ *
@@ELSE@@
asn1Scc@_REPLACE_ALL((-)/_):Param_Types_@ *
@@END_IF@@
@@END_TABLE@@
@@END_INLINE@@
);
@@END_INLINE@@
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
Makefile
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The function name
@@-- @_ASN1_Files_@ : List of all ASN.1 files
@@-- @_ASN1_Modules_@ : List of all ASN.1 modules
@@-- @_Is_Type_@ : Flag set to True for function type
@@-- @_Instance_Of_@ : Name of function type if instance
VISUAL?=kate
all: compile-linux
clean:
rm -rf obj
edit:
$(VISUAL) ../../dataview/C/dataview-uniq.h src/@_LOWER:Name_@.h src/@_LOWER:Name_@.cc
compile-linux:
mkdir -p obj && cd obj && g++ -c ../src/*.cc
@@-- This template must return either TRUE or something else (meaning FALSE)
@@-- It is used to determine if the other templates in this folder will be
@@-- processed or ignored.
@@-- One folder can contain two templates: one for a function, and one for
@@-- a corresponding makefile (or build script)
@@-- The name of the function is read from template "function-filename.tmplt"
@@-- The name of the makefile is read from template "makefile-filename.tmplt"
@@-- These files are optional, if absent no error is raised
@@-- The following tags are available in this template:
@@--
@@-- @_Name_@ : The name of the function
@@-- @_Is_Type_@ : True if function type
@@-- @_Instance_Of_@ : Name of instance or empty string
@@-- @_Language_@ : Implementation language for the function
@@-- @_Filename_Is_Present_@ : True if target function output already exists
@@-- @_Makefile_Is_Present_@ : True if target build script already exists
@@-- @_C_Middleware_@ : True if middleware is in C (e.g. PO-HI-C)
@@IF@@ @_Language_@ = CPP and @_Is_Type_@
TRUE
@@END_IF@@
......@@ -15,6 +15,6 @@
@@-- @_Filename_Is_Present_@ : True if target function output already exists
@@-- @_Makefile_Is_Present_@ : True if target build script already exists
@@-- @_C_Middleware_@ : True if middleware is in C (e.g. PO-HI-C)
@@IF@@ @_Language_@ = "CPP"
@@IF@@ @_Language_@ = CPP and not @_Is_Type_@ and @_Instance_Of_@ = ""
TRUE
@@END_IF@@
......@@ -27,6 +27,7 @@ PUBLIC
WITH interfaceview::IV::Worker;
WITH interfaceview::IV::Son;
WITH interfaceview::IV::Daugther;
WITH ocarina_processors_x86;
WITH deploymentview::DV::Node1;
WITH Taste;
......@@ -44,6 +45,9 @@ SUBCOMPONENTS
IV_Son : SYSTEM interfaceview::IV::Son::Son.others {
Taste::FunctionName => "Son";
};
IV_Daugther : SYSTEM interfaceview::IV::Daugther::Daugther.others {
Taste::FunctionName => "Daugther";
};
demo : PROCESS deploymentview::DV::Node1::demo.others {
Taste::coordinates => "109723 74124 143183 93800";
Deployment::Port_Number => 0;
......@@ -54,6 +58,7 @@ SUBCOMPONENTS
PROPERTIES
Taste::APLC_Binding => (reference (demo)) APPLIES TO IV_Worker;
Taste::APLC_Binding => (reference (demo)) APPLIES TO IV_Son;
Taste::APLC_Binding => (reference (demo)) APPLIES TO IV_Daugther;
Actual_Processor_Binding => (reference (x86_linux)) APPLIES TO demo;
END Node1.others;
......@@ -72,6 +77,6 @@ PROPERTIES
Taste::coordinates => "0 0 297000 210000";
Taste::version => "2.3";
Taste::interfaceView => "InterfaceView.aadl";
Taste::HWLibraries => ("/home/taste/tool-inst/share/ocarina/AADLv2/ocarina_components.aadl");
Taste::HWLibraries => ("../../../../tool-inst/share/ocarina/AADLv2/ocarina_components.aadl");
END deploymentview::DV;
......@@ -12,6 +12,8 @@ WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM PI_Pulse
PROPERTIES
Taste::Associated_Queue_Size => 1;
END PI_Pulse;
SUBPROGRAM IMPLEMENTATION PI_Pulse.others
......@@ -35,13 +37,14 @@ END RI_DoSomething.others;
SYSTEM Mother
FEATURES
PI_Pulse : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Mother::PI_Pulse.others {
Taste::coordinates => "92596 60943";
Taste::coordinates => "107714 52439";
Taste::RCMoperationKind => cyclic;
Taste::RCMperiod => 500 ms;
Taste::Deadline => 0 ms;
Taste::InterfaceName => "Pulse";
};
RI_DoSomething : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::Mother::RI_DoSomething.others {
Taste::coordinates => "92596 70864";
Taste::coordinates => "91651 65510";
Taste::RCMoperationKind => unprotected;
Taste::InterfaceName => "DoSomething";
Taste::labelInheritance => "false";
......@@ -71,6 +74,8 @@ FEATURES
b : OUT PARAMETER DataView::T_Int32 {
Taste::encoding => NATIVE;
};
PROPERTIES
Taste::Associated_Queue_Size => 1;
END PI_DoSomething;
SUBPROGRAM IMPLEMENTATION PI_DoSomething.others
......@@ -83,6 +88,8 @@ FEATURES
PI_DoSomething : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Worker::PI_DoSomething.others {
Taste::coordinates => "154169 98581";
Taste::RCMoperationKind => unprotected;
Taste::RCMperiod => 0 ms;
Taste::Deadline => 0 ms;
Taste::InterfaceName => "DoSomething";
};
PROPERTIES
......@@ -103,6 +110,8 @@ WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM PI_Pulse
PROPERTIES
Taste::Associated_Queue_Size => 1;
END PI_Pulse;
SUBPROGRAM IMPLEMENTATION PI_Pulse.others
......@@ -126,13 +135,14 @@ END RI_DoSomething.others;
SYSTEM Son
FEATURES
PI_Pulse : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Son::PI_Pulse.others {
Taste::coordinates => "91966 98297";
Taste::coordinates => "105981 88816";
Taste::RCMoperationKind => cyclic;
Taste::RCMperiod => 500 ms;
Taste::Deadline => 0 ms;
Taste::InterfaceName => "Pulse";
};
RI_DoSomething : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::Worker::PI_DoSomething.others {
Taste::coordinates => "130233 98544";
Taste::coordinates => "120942 98544";
Taste::RCMoperationKind => unprotected;
Taste::InterfaceName => "DoSomething";
Taste::labelInheritance => "false";
......@@ -149,12 +159,120 @@ END Son.others;
END interfaceview::IV::Son;
PACKAGE interfaceview::IV::Father
PUBLIC
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM PI_Pulse
END PI_Pulse;
SUBPROGRAM IMPLEMENTATION PI_Pulse.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_Pulse.others;
SUBPROGRAM RI_DoSomething
FEATURES
a : IN PARAMETER DataView::T_Int32 {
Taste::encoding => NATIVE;
};
b : OUT PARAMETER DataView::T_Int32 {
Taste::encoding => NATIVE;
};
END RI_DoSomething;
SUBPROGRAM IMPLEMENTATION RI_DoSomething.others
END RI_DoSomething.others;
SYSTEM Father
FEATURES
PI_Pulse : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Father::PI_Pulse.others {
Taste::coordinates => "147083 52282";
Taste::RCMoperationKind => cyclic;
Taste::RCMperiod => 1000 ms;
Taste::InterfaceName => "Pulse";
};
RI_DoSomething : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::Father::RI_DoSomething.others {
Taste::coordinates => "131020 65353";
Taste::RCMoperationKind => unprotected;
Taste::InterfaceName => "DoSomething";
Taste::labelInheritance => "false";
};
PROPERTIES
Source_Language => (CPP);
Taste::Active_Interfaces => any;
Taste::is_Component_Type => true;
END Father;
SYSTEM IMPLEMENTATION Father.others
END Father.others;
END interfaceview::IV::Father;
PACKAGE interfaceview::IV::Daugther
PUBLIC
WITH interfaceview::IV::Worker;
WITH Taste;
WITH DataView;
WITH TASTE_IV_Properties;
SUBPROGRAM PI_Pulse
END PI_Pulse;
SUBPROGRAM IMPLEMENTATION PI_Pulse.others
PROPERTIES
Compute_Execution_Time => 0 ms .. 0 ms;
END PI_Pulse.others;
SUBPROGRAM RI_DoSomething
FEATURES
a : IN PARAMETER DataView::T_Int32 {
Taste::encoding => NATIVE;
};
b : OUT PARAMETER DataView::T_Int32 {
Taste::encoding => NATIVE;
};
END RI_DoSomething;
SUBPROGRAM IMPLEMENTATION RI_DoSomething.others
END RI_DoSomething.others;
SYSTEM Daugther
FEATURES
PI_Pulse : PROVIDES SUBPROGRAM ACCESS interfaceview::IV::Daugther::PI_Pulse.others {
Taste::coordinates => "135587 75747";
Taste::RCMoperationKind => cyclic;
Taste::RCMperiod => 1000 ms;
Taste::InterfaceName => "Pulse";
};
RI_DoSomething : REQUIRES SUBPROGRAM ACCESS interfaceview::IV::Worker::PI_DoSomething.others {
Taste::coordinates => "132595 86298";
Taste::RCMoperationKind => unprotected;
Taste::InterfaceName => "DoSomething";