File : motor_handler.ads


--                              -*- Mode: Ada -*-
-- Filename        : motor_handler.ads
-- Description     : synchronization for the motor
-- Author          : Christfried Webers
-- Created On      : Mon Nov  8 10:49:07 1999
-- Last Modified By: .
-- Last Modified On: .
-- Update Count    : 0
-- Status          : Experimental
-------------------------------------------------------------------
with Ada.Real_Time;

with Metrics;     use Metrics;
with Flex_Common; use Flex_Common;
with Flex_Driver;
with Motor;

package Motor_Handler is
   ----------------------------------------------------------------------------
   ----
   --
   -- Reader
   --
   ----------------------------------------------------------------------------
   ----
   protected Reader is
      procedure RecordPacket (PacketNumber : Raw_8Bit; Data : ByteArray);
      entry GetCurrentStatus (MotorStatus : out Motor.Status);
      entry WaitForNewData;
      procedure NonBlocking;
   private
      LastStatus        : Motor.Status;
      NewStatus         : Motor.Status;
      NewDataArrived    : Boolean := False;
      FirstDataArrived  : Boolean := False;
      NonBlockingActive : Boolean := False;
   end Reader;

   ----------------------------------------------------------------------------
   ----
   --
   -- Commander
   --
   ----------------------------------------------------------------------------
   ----
   protected Commander is
      procedure StartReading;
      procedure StopReading;
      procedure SetLinearVelocity (Velocity : LinVel);
      procedure SetAngularVelocity (Velocity : AngVel);
      procedure SetLinearAcceleration (Acceleration : LinAcc);
      procedure SetAngularAcceleration (Acceleration : AngAcc);
      procedure SetLinearTorque (Torque : LinTorque);
      procedure SetAngularTorque (Torque : AngTorque);

   private
      LinearVelocity      : LinVel    := 0.0;
      AngularVelocity     : AngVel    := 0.0;
      LinearAcceleration  : LinAcc    := 1.0;
      AngularAcceleration : AngAcc    := 1.0;
      LinearTorque        : LinTorque := 1.0;
      AngularTorque       : AngTorque := 1.0;

   end Commander;

end Motor_Handler;