File : flex_common.ads


--                              -*- Mode: Ada -*-
-- Filename        : flex_common.ads
-- Description     : common data definitions and routines
-- Author          : Christfried Webers
-- Created On      : Wed Nov 10 15:02:14 1999
-- Last Modified By: .
-- Last Modified On: .
-- Update Count    : 0
-- Status          : Experimental
------------------------------------------------------------------------------

package Flex_Common is

   type Raw_8Bit is mod 2 ** 8;
   type Raw_16Bit is mod 2 ** 16;
   type Raw_32Bit is mod 2 ** 32;

   type Signed_32Bit is range -2 ** 31 .. 2 ** 31 - 1;

   type ByteArray is array (Integer range <>) of Raw_8Bit;
   type ByteArrayPointer is access ByteArray;

   ----------------------------------------------------------------------------
   ---
   --
   -- Utility routines
   --
   ----------------------------------------------------------------------------
   ---

   function ByteArrayToString (Data : in ByteArray) return String;
   function StringToByteArray (Data : in String) return ByteArray;

   function FourBytes_To_Raw_32Bit (Bytes : in ByteArray) return Raw_32Bit;
   function FourBytes_To_Signed_32Bit
     (Bytes : in ByteArray)
      return  Signed_32Bit;
   function TwoBytes_To_Raw_16Bit (Bytes : in ByteArray) return Raw_16Bit;
   function Raw_32Bit_To_FourBytes (Number : in Raw_32Bit) return ByteArray;
   -- function Raw_32Bit_To_Signed_32Bit (Number : in Raw_32Bit) return
   --Signed_32Bit;

   procedure PutHex (Number : in Raw_8Bit);
   procedure PutHex (Number : in Raw_16Bit);
   procedure PutHex (Number : in Raw_32Bit);

   procedure ShowContents (Contents : in ByteArray);

   ----------------------------------------------------------------------------
   ---
   --
   -- Packet types and definitions
   --
   ----------------------------------------------------------------------------
   ---
   type SendPacketType is (
      LinMotorCommand,
      AngMotorCommand,
      MotorStartStopSending,
      SonarStartStopSending,
      DIOStartStopSending);

   MotorDataID : constant Raw_16Bit := 16#0221#; -- motor data from flex
   SonarDataID : constant Raw_16Bit := 16#0402#; -- sonar data from flex
   DIODataID   : constant Raw_16Bit := 16#0501#; -- digital IO data from flex

   MotorCommandID   : constant Raw_16Bit := 16#0207#;
   MotorStartStopID : constant Raw_16Bit := 16#0222#;
   SonarStartStopID : constant Raw_16Bit := 16#0400#;
   DIOStartStopID   : constant Raw_16Bit := 16#0500#;

   type MotorCommandType is new ByteArray (1 .. 18);
   type MotorStartStopSendingType is new ByteArray (1 .. 12);
   type SonarStartStopSendingType is new ByteArray (1 .. 17);
   type DIOStartStopSendingType is new ByteArray (1 .. 8);

   -- Linux: 02 FF 22 08 00 01 86 A0 00 00 00 03
   MotorStartSendingPacket : MotorStartStopSendingType :=
     (16#02#,
      16#FF#,
      16#22#,
      16#08#,  --
      16#00#,
      16#00#,
      16#00#,
      16#00#,  -- timestamp
      16#00#,
      16#00#,
      16#00#,
      16#03#   -- 03 = start
     );

   -- Linux: 02 FF 22 08 00 01 86 A0 00 00 00 00
   MotorStopSendingPacket : MotorStartStopSendingType :=
     (16#02#,
      16#FF#,
      16#22#,
      16#08#,  --
      16#00#,
      16#00#,
      16#00#,
      16#00#,  -- timestamp
      16#00#,
      16#00#,
      16#00#,
      16#00#   -- 00 = stop
     );

   LinMotorCommandPacket : MotorCommandType :=
     (16#02#,
      16#01#,
      16#07#,
      16#0E#,   --
      16#00#,                           -- axis
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- velocity
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- acceleration
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- torque
      16#00#                            -- sign
     );

   AngMotorCommandPacket : MotorCommandType :=
     (16#02#,
      16#01#,
      16#07#,
      16#0E#,   --
      16#01#,                           -- axis
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- velocity
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- acceleration
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- torque
      16#00#                            -- sign
     );

   LinMotorEmergencyStopPacket : MotorCommandType :=
     (16#02#,
      16#01#,
      16#07#,
      16#0E#,   --
      16#00#,                           -- axis
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- velocity
      16#00#,
      16#00#,
      16#FF#,
      16#FF#,   -- acceleration
      16#00#,
      16#00#,
      16#FF#,
      16#FF#,   -- torque
      16#00#                            -- sign
     );

   AngMotorEmergencyStopPacket : MotorCommandType :=
     (16#02#,
      16#01#,
      16#07#,
      16#0E#,   --
      16#01#,                           -- axis
      16#00#,
      16#00#,
      16#00#,
      16#00#,   -- velocity
      16#00#,
      16#00#,
      16#FF#,
      16#FF#,   -- acceleration
      16#00#,
      16#00#,
      16#FF#,
      16#FF#,   -- torque
      16#00#                            -- sign
     );

   --    MotorDataPacket : ByteArray :=
   --      ( 16#02#, 16#01#, 16#21#, 16#19#,   -- 02 PacketNumber 21 Length
   --        16#00#, 16#00#, 16#00#, 16#00#,   -- 00 00 00 00
   --        16#00#, 16#00#, 16#00#, 16#00#,   -- time stamp
   --        16#00#,                           -- axis
   --        16#00#, 16#00#, 16#00#, 16#00#,   -- position
   --        16#00#, 16#00#, 16#00#, 16#00#,   -- velocity
   --        16#00#, 16#00#, 16#00#, 16#00#,   -- acceleration
   --        16#00#, 16#00#, 16#00#, 16#00#    -- torque
   --        );

   -- Linux: 04 FF 00 0D 00 00 75 30 00 00 00 00 00 00 00 00 02
   SonarStartSendingPacket : SonarStartStopSendingType :=
     (16#04#,
      16#FF#,
      16#00#,
      16#0D#,  -- 04 FF 00 Length
   -- 16#00#, 16#00#, 16#75#, 16#30#,  -- Sending-Speed  5 Hz
      16#00#,
      16#00#,
      16#3A#,
      16#98#,  -- Sending-Speed 10 Hz
      16#00#,
      16#00#,
      16#00#,
      16#00#,  --
      16#00#,
      16#00#,
      16#00#,
      16#00#,  --
      16#02#                           --
     );

   -- Linux: 04 FF 00 0D 00 00 00 00 00 00 00 00 00 00 00 00 00
   SonarStopSendingPacket : SonarStartStopSendingType :=
     (16#04#,
      16#FF#,
      16#00#,
      16#0D#,  -- 04 FF 00 Length
      16#00#,
      16#00#,
      16#00#,
      16#00#,  --
      16#00#,
      16#00#,
      16#00#,
      16#00#,  --
      16#00#,
      16#00#,
      16#00#,
      16#00#,  --
      16#00#                           --
     );

   DIOStartSendingPacket : DIOStartStopSendingType :=
     (16#05#,
      16#05#,
      16#00#,
      16#04#,   -- 05 PacketNumber 00 Length
      16#00#,
      16#00#,
      16#27#,
      16#10#    -- 2710 = start
     );

   DIOStopSendingPacket : DIOStartStopSendingType :=
     (16#05#,
      16#05#,
      16#00#,
      16#04#,   -- 05 PacketNumber 00 Length
      16#00#,
      16#00#,
      16#00#,
      16#00#    -- 0000 = stop
     );

end Flex_Common;