diff options
Diffstat (limited to 'cpukit/include/adainclude/rtems-object.adb')
-rw-r--r-- | cpukit/include/adainclude/rtems-object.adb | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/cpukit/include/adainclude/rtems-object.adb b/cpukit/include/adainclude/rtems-object.adb new file mode 100644 index 0000000000..7be02ecd4c --- /dev/null +++ b/cpukit/include/adainclude/rtems-object.adb @@ -0,0 +1,303 @@ +-- +-- 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; |