--                              -*- 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;