File : motor.adb


--                              -*- Mode: Ada -*-
-- Filename        : motor.adb
-- Description     : All you need to operate the motor
-- Author          : Christfried Webers
-- Created On      : Mon Nov  1 15:26:16 1999
-- Last Modified By: .
-- Last Modified On: .
-- Update Count    : 0
-- Status          : Unknown, Use with caution!
----------------------------------------------------------------------
with Flex_Driver;
with Motor_Handler;
-- with Ada.Real_Time;

-- testing only
with Text_IO; use Text_IO;

package body Motor is

      procedure Init is
      begin
         Flex_Driver.SerialPort.Init;
         Motor_Handler.Commander.StartReading;
      end Init;


      procedure Shutdown is
      begin
         Motor_Handler.Commander.StopReading;
         -- Put_Line("Motor_Handler.Commander.StopReading finished");
         Motor_Handler.Reader.NonBlocking;

         SetLinearVelocity(0.0);
         Flex_Driver.WriteTask.WaitForLinMotorCommandAck;
         SetLinearAcceleration(10.0);
         Flex_Driver.WriteTask.WaitForLinMotorCommandAck;
         -- Put_Line("Shutdown: Linear Velocity finished");

         SetAngularVelocity(0.0);
         Flex_Driver.WriteTask.WaitForAngMotorCommandAck;
         SetAngularAcceleration(10.0);
         Flex_Driver.WriteTask.WaitForAngMotorCommandAck;
         -- Put_Line("Shutdown: Angular Velocity finished");

         Flex_Driver.SerialPort.Shutdown;
         -- Put_Line("Flex_Driver.SerialPort.Shutdown finished");
      end Shutdown;


      procedure GetCurrentStatus (MotorStatus: out Status) is
      begin
         Motor_Handler.Reader.GetCurrentStatus(MotorStatus);
      end GetCurrentStatus;

      procedure WaitForNewData is
      begin
         Motor_Handler.Reader.WaitForNewData;
      end WaitForNewData;

      procedure SetLinearVelocity (Velocity: LinVel) is
      begin
         Motor_Handler.Commander.SetLinearVelocity(Velocity);
      end SetLinearVelocity;

      procedure SetAngularVelocity (Velocity: AngVel) is
      begin
         Motor_Handler.Commander.SetAngularVelocity(Velocity);
      end SetAngularVelocity;

      procedure SetLinearAcceleration (Acceleration: LinAcc) is
      begin
         Motor_Handler.Commander.SetLinearAcceleration(Acceleration);
      end SetLinearAcceleration;

      procedure SetAngularAcceleration (Acceleration: AngAcc)  is
      begin
         Motor_Handler.Commander.SetAngularAcceleration(Acceleration);
      end SetAngularAcceleration;


      procedure SetLinearTorque (Torque: LinTorque)  is
      begin
         Motor_Handler.Commander.SetLinearTorque(Torque);
      end SetLinearTorque;

      procedure SetAngularTorque (Torque: AngTorque)  is
      begin
         Motor_Handler.Commander.SetAngularTorque(Torque);
      end SetAngularTorque;


      procedure WaitForLinearCommandAck is
      begin
         Flex_Driver.WriteTask.WaitForLinMotorCommandAck;
      end WaitForLinearCommandAck;

      procedure WaitForAngularCommandAck is
      begin
         Flex_Driver.WriteTask.WaitForAngMotorCommandAck;
      end WaitForAngularCommandAck;

end Motor;