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;