@@-- 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 @@-- @_Partition_Name_@ : Partition name for parent function @@-- @_Param_Names_@ : List of parameter names @@-- @_Param_Types_@ : |_ Corresponding parameter types @@-- @_Param_Directions_@ : |_ Corresponding direction @@-- @_Remote_Function_Names_@ : List of callees @@-- @_Remote_Interface_Names_@ : |_ callee's interface name @@-- @_Calling_Threads_@ : Calling threads of the containing block // Required interface @_Name_@ in function @_Parent_Function_@ @@IF@@ @_Param_Names'Length_@ = 0 void vm_@_LOWER:Parent_Function_@_@_LOWER:Name_@(void) @@ELSE@@ void vm_@_LOWER:Parent_Function_@_@_LOWER:Name_@ @@INLINE( \()(,\n )(\)\n)@@ @@TABLE@@ @@IF@@ @_Param_Directions_@ = "PARAM_IN" void *IN_buf_@_LOWER:Param_Names_@, size_t size_IN_buf_@_LOWER:Param_Names_@ @@ELSE@@ void *OUT_buf_@_LOWER:Param_Names_@, size_t *size_OUT_buf_@_LOWER:Param_Names_@ @@END_IF@@ @@END_TABLE@@ @@END_INLINE@@ @@END_IF@@ { @@IF@@ @_Kind_@ = SPORADIC_OPERATION __po_hi_task_id current_task = __po_hi_get_task_id(); @@TABLE@@ // @_Calling_Threads_@ calling thread if (@_LOWER:Partition_Name_@_@_LOWER:Calling_Threads_@_k == current_task) { // puts("[TASTE] Sporadic call of @_Name_@ from thread @_LOWER:Partition_Name_@_@_LOWER:Calling_Threads_@"); @@IF@@ @_Param_Names'Length_@ > 0 @@INLINE( )( \n )(\n)@@ __po_hi_request_t request; __po_hi_copy_array(&(request.vars.@_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@.@_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@.buffer), @@TABLE@@ IN_buf_@_LOWER:Param_Names_@, size_IN_buf_@_LOWER:Param_Names_@); @@END_TABLE@@ request.vars.@_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@.@_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@.length = @@TABLE@@ size_IN_buf_@_LOWER:Param_Names_@; @@END_TABLE@@ request.port = @_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@; __po_hi_gqueue_store_out(@_LOWER:Partition_Name_@_@_LOWER:Calling_Threads_@_k, @_LOWER:Calling_Threads_@_local_outport_@_LOWER:Name_@, &request); __po_hi_send_output(@_LOWER:Partition_Name_@_@_LOWER:Calling_Threads_@_k, @_LOWER:Calling_Threads_@_global_outport_@_LOWER:Name_@); @@END_INLINE@@ @@END_IF@@ return; } @@END_TABLE@@ // calling threads: @_Calling_Threads_@ partition: @_Partition_Name_@ @@ELSIF@@ @_Kind_@ = UNPROTECTED_OPERATION @@TABLE@@ @_LOWER:Remote_Function_Names_@_@_LOWER:Remote_Interface_Names_@ @@INLINE( \()(,\n )(\);\n)@@ @@TABLE@@ @@IF@@ @_Param_Directions_@ = "PARAM_IN" IN_buf_@_LOWER:Param_Names_@, size_IN_buf_@_LOWER:Param_Names_@ @@ELSE@@ OUT_buf_@_LOWER:Param_Names_@, size_OUT_buf_@_LOWER:Param_Names_@ @@END_IF@@ @@END_TABLE@@ @@END_INLINE@@ @@END_TABLE@@ @@ELSE@@ @@-- Protected call // puts("[TASTE] Protected call of @_Name_@"); @@TABLE@@ pro_@_LOWER:Remote_Function_Names_@_@_LOWER:Remote_Interface_Names_@ @@INLINE( \()(,\n )(\);\n)@@ @@TABLE@@ @@IF@@ @_Param_Directions_@ = "PARAM_IN" IN_buf_@_LOWER:Param_Names_@, size_IN_buf_@_LOWER:Param_Names_@ @@ELSE@@ OUT_buf_@_LOWER:Param_Names_@, size_OUT_buf_@_LOWER:Param_Names_@ @@END_IF@@ @@END_TABLE@@ @@END_INLINE@@ @@END_TABLE@@ @@END_IF@@ }