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;