---------------------------------------------------------------------------
--
--                              -*- Mode: Ada -*-
-- Filename        : laser_driver.ads
-- Description     : low level routines, including interrupt handler
--
----------------------------------------------------------------------------

with Ada.Real_Time;       use Ada.Real_Time;

with Laser;               use Laser;


package Laser_driver is


----------------------------------------------------------------------------
--
-- LaserDriverInterface
--
----------------------------------------------------------------------------

   protected LaserDriverInterface is

      entry InitLaserDriver;
      entry ShutdownLaserDriver;

      entry SuspendLaserDriver;
      entry ResumeLaserDriver;

      entry GetMostRecentLaserScan    (LaserScan: out LaserStatus);
      entry GetMostRecentLaserTimeStamp (LaserTimeStamp: out Time);

      entry GetAllAvailableLaserScans (LaserScans: out LaserStatusArray);

   end LaserDriverInterface;

----------------------------------------------------------------------------
--
-- Syncronization Monitor
--
----------------------------------------------------------------------------

   protected LaserMonitor is

      entry BlockTask;
      entry BlockedTasksQueue;
      procedure FreeTasks;

   private

      NewScanArrived      : Boolean := False;
      TasksWaitingForData : Natural := 0;

   end LaserMonitor;


end Laser_driver;