--
-- RTEMS / Body
--
-- DESCRIPTION:
--
-- This package provides the interface to the RTEMS API.
--
--
-- DEPENDENCIES:
--
--
--
-- COPYRIGHT (c) 1997-2011.
-- On-Line Applications Research Corporation (OAR).
--
-- The license and distribution terms for this file may in
-- the file LICENSE in this distribution or at
-- http://www.rtems.org/license/LICENSE.
--
with Interfaces; use Interfaces;
with Interfaces.C.Strings; use Interfaces.C.Strings;
package body RTEMS.Object is
--
-- Object Services
--
function Build_Name
(C1 : in Character;
C2 : in Character;
C3 : in Character;
C4 : in Character)
return RTEMS.Name
is
C1_Value : RTEMS.Unsigned32;
C2_Value : RTEMS.Unsigned32;
C3_Value : RTEMS.Unsigned32;
C4_Value : RTEMS.Unsigned32;
begin
C1_Value := Character'Pos (C1);
C2_Value := Character'Pos (C2);
C3_Value := Character'Pos (C3);
C4_Value := Character'Pos (C4);
return Interfaces.Shift_Left (C1_Value, 24) or
Interfaces.Shift_Left (C2_Value, 16) or
Interfaces.Shift_Left (C3_Value, 8) or
C4_Value;
end Build_Name;
procedure Get_Classic_Name
(ID : in RTEMS.ID;
Name : out RTEMS.Name;
Result : out RTEMS.Status_Codes)
is
function Get_Classic_Name_Base
(ID : RTEMS.ID;
Name : access RTEMS.Name)
return RTEMS.Status_Codes;
pragma Import
(C,
Get_Classic_Name_Base,
"rtems_object_get_classic_name");
Tmp_Name : aliased RTEMS.Name;
begin
Result := Get_Classic_Name_Base (ID, Tmp_Name'Access);
Name := Tmp_Name;
end Get_Classic_Name;
procedure Get_Name
(ID : in RTEMS.ID;
Name : out String;
Result : out RTEMS.Address)
is
function Get_Name_Base
(ID : RTEMS.ID;
Length : RTEMS.Unsigned32;
Name : RTEMS.Address)
return RTEMS.Address;
pragma Import (C, Get_Name_Base, "rtems_object_get_name");
begin
Name := (others => ASCII.NUL);
Result :=
Get_Name_Base (ID, Name'Length, Name (Name'First)'Address);
end Get_Name;
procedure Set_Name
(ID : in RTEMS.ID;
Name : in String;
Result : out RTEMS.Status_Codes)
is
function Set_Name_Base
(ID : RTEMS.ID;
Name : chars_ptr)
return RTEMS.Status_Codes;
pragma Import (C, Set_Name_Base, "rtems_object_set_name");
NameAsCString : constant chars_ptr := New_String (Name);
begin
Result := Set_Name_Base (ID, NameAsCString);
end Set_Name;
procedure Id_Get_API
(ID : in RTEMS.ID;
API : out RTEMS.Unsigned32)
is
function Id_Get_API_Base
(ID : RTEMS.ID)
return RTEMS.Unsigned32;
pragma Import (C, Id_Get_API_Base, "rtems_object_id_get_api");
begin
API := Id_Get_API_Base (ID);
end Id_Get_API;
procedure Id_Get_Class
(ID : in RTEMS.ID;
The_Class : out RTEMS.Unsigned32)
is
function Id_Get_Class_Base
(ID : RTEMS.ID)
return RTEMS.Unsigned32;
pragma Import
(C,
Id_Get_Class_Base,
"rtems_object_id_get_class");
begin
The_Class := Id_Get_Class_Base (ID);
end Id_Get_Class;
procedure Id_Get_Node
(ID : in RTEMS.ID;
Node : out RTEMS.Unsigned32)
is
function Id_Get_Node_Base
(ID : RTEMS.ID)
return RTEMS.Unsigned32;
pragma Import (C, Id_Get_Node_Base, "rtems_object_id_get_node");
begin
Node := Id_Get_Node_Base (ID);
end Id_Get_Node;
procedure Id_Get_Index
(ID : in RTEMS.ID;
Index : out RTEMS.Unsigned32)
is
function Id_Get_Index_Base
(ID : RTEMS.ID)
return RTEMS.Unsigned32;
pragma Import
(C,
Id_Get_Index_Base,
"rtems_object_id_get_index");
begin
Index := Id_Get_Index_Base (ID);
end Id_Get_Index;
function Build_Id
(The_API : in RTEMS.Unsigned32;
The_Class : in RTEMS.Unsigned32;
The_Node : in RTEMS.Unsigned32;
The_Index : in RTEMS.Unsigned32)
return RTEMS.ID
is
function Build_Id_Base
(The_API : RTEMS.Unsigned32;
The_Class : RTEMS.Unsigned32;
The_Node : RTEMS.Unsigned32;
The_Index : RTEMS.Unsigned32)
return RTEMS.ID;
pragma Import (C, Build_Id_Base, "rtems_build_id");
begin
return Build_Id_Base (The_API, The_Class, The_Node, The_Index);
end Build_Id;
function Id_API_Minimum return RTEMS.Unsigned32 is
function Id_API_Minimum_Base return RTEMS.Unsigned32;
pragma Import
(C,
Id_API_Minimum_Base,
"rtems_object_id_api_minimum");
begin
return Id_API_Minimum_Base;
end Id_API_Minimum;
function Id_API_Maximum return RTEMS.Unsigned32 is
function Id_API_Maximum_Base return RTEMS.Unsigned32;
pragma Import
(C,
Id_API_Maximum_Base,
"rtems_object_id_api_maximum");
begin
return Id_API_Maximum_Base;
end Id_API_Maximum;
procedure API_Minimum_Class
(API : in RTEMS.Unsigned32;
Minimum : out RTEMS.Unsigned32)
is
function API_Minimum_Class_Base
(API : RTEMS.Unsigned32)
return RTEMS.Unsigned32;
pragma Import
(C,
API_Minimum_Class_Base,
"rtems_object_api_minimum_class");
begin
Minimum := API_Minimum_Class_Base (API);
end API_Minimum_Class;
procedure API_Maximum_Class
(API : in RTEMS.Unsigned32;
Maximum : out RTEMS.Unsigned32)
is
function API_Maximum_Class_Base
(API : RTEMS.Unsigned32)
return RTEMS.Unsigned32;
pragma Import
(C,
API_Maximum_Class_Base,
"rtems_object_api_maximum_class");
begin
Maximum := API_Maximum_Class_Base (API);
end API_Maximum_Class;
-- Translate S from a C-style char* into an Ada String.
-- If S is Null_Ptr, return "", don't raise an exception.
-- Copied from Lovelace Tutorial
function Value_Without_Exception (S : chars_ptr) return String is
begin
if S = Null_Ptr then
return "";
else
return Value (S);
end if;
end Value_Without_Exception;
pragma Inline (Value_Without_Exception);
procedure Get_API_Name
(API : in RTEMS.Unsigned32;
Name : out String)
is
function Get_API_Name_Base
(API : RTEMS.Unsigned32)
return chars_ptr;
pragma Import
(C,
Get_API_Name_Base,
"rtems_object_get_api_name");
Result : constant chars_ptr := Get_API_Name_Base (API);
APIName : constant String := Value_Without_Exception (Result);
begin
Name := APIName;
end Get_API_Name;
procedure Get_API_Class_Name
(The_API : in RTEMS.Unsigned32;
The_Class : in RTEMS.Unsigned32;
Name : out String)
is
function Get_API_Class_Name_Base
(API : RTEMS.Unsigned32;
Class : RTEMS.Unsigned32)
return chars_ptr;
pragma Import
(C,
Get_API_Class_Name_Base,
"rtems_object_get_api_class_name");
Result : constant chars_ptr :=
Get_API_Class_Name_Base (The_API, The_Class);
ClassName : constant String := Value_Without_Exception (Result);
begin
Name := ClassName;
end Get_API_Class_Name;
procedure Get_Class_Information
(The_API : in RTEMS.Unsigned32;
The_Class : in RTEMS.Unsigned32;
Info : out API_Class_Information;
Result : out RTEMS.Status_Codes)
is
function Get_Class_Information_Base
(The_API : RTEMS.Unsigned32;
The_Class : RTEMS.Unsigned32;
Info : access API_Class_Information)
return RTEMS.Status_Codes;
pragma Import
(C,
Get_Class_Information_Base,
"rtems_object_get_class_information");
TmpInfo : aliased API_Class_Information;
begin
Result :=
Get_Class_Information_Base
(The_API,
The_Class,
TmpInfo'Access);
Info := TmpInfo;
end Get_Class_Information;
end RTEMS.Object;