1 #ifndef LIBRARIES_REALTIME_H
    2 #define LIBRARIES_REALTIME_H
    3 
    4 /*
    5 	realtime.library include
    6 
    7 	Copyright © 2002 The MorphOS Development Team, All Rights Reserved.
    8 */
    9 
   10 #ifndef EXEC_TYPES_H
   11 # include <exec/types.h>
   12 #endif
   13 
   14 #ifndef EXEC_LISTS_H
   15 # include <exec/lists.h>
   16 #endif
   17 
   18 #ifndef EXEC_LIBRARIES_H
   19 # include <exec/libraries.h>
   20 #endif
   21 
   22 #ifndef UTILITY_TAGITEM_H
   23 # include <utility/tagitem.h>
   24 #endif
   25 
   26 #ifndef UTILITY_HOOKS_H
   27 # include <utility/hooks.h>
   28 #endif
   29 
   30 #pragma pack(2)
   31 
   32 
   33 #define TICK_FREQ  1200
   34 
   35 
   36 struct Conductor
   37 {
   38 	struct Node    cdt_Link;
   39 	UWORD          cdt_Reserved0;
   40 	struct MinList cdt_Players;
   41 	ULONG          cdt_ClockTime;
   42 	ULONG          cdt_StartTime;
   43 	ULONG          cdt_ExternalTime;
   44 	ULONG          cdt_MaxExternalTime;
   45 	ULONG          cdt_Metronome;
   46 	UWORD          cdt_Reserved1;
   47 	UWORD          cdt_Flags;
   48 	UBYTE          cdt_State;
   49 };
   50 
   51 
   52 #define CONDUCTB_EXTERNAL  0
   53 #define CONDUCTB_GOTTICK   1
   54 #define CONDUCTB_METROSET  2
   55 #define CONDUCTB_PRIVATE   3
   56 
   57 #define CONDUCTF_EXTERNAL  (1<<CONDUCTB_EXTERNAL)
   58 #define CONDUCTF_GOTTICK   (1<<CONDUCTB_GOTTICK)
   59 #define CONDUCTF_METROSET  (1<<CONDUCTB_METROSET)
   60 #define CONDUCTF_PRIVATE   (1<<CONDUCTB_PRIVATE)
   61 
   62 
   63 #define CONDSTATE_STOPPED      0
   64 #define CONDSTATE_PAUSED       1
   65 #define CONDSTATE_LOCATE       2
   66 #define CONDSTATE_RUNNING      3
   67 
   68 #define CONDSTATE_METRIC      -1
   69 #define CONDSTATE_SHUTTLE     -2
   70 #define CONDSTATE_LOCATE_SET  -3
   71 
   72 
   73 struct Player
   74 {
   75 	struct Node       pl_Link;
   76 	BYTE              pl_Reserved0;
   77 	BYTE              pl_Reserved1;
   78 	struct Hook      *pl_Hook;
   79 	struct Conductor *pl_Source;
   80 	struct Task      *pl_Task;
   81 	LONG              pl_MetricTime;
   82 	LONG              pl_AlarmTime;
   83 	APTR              pl_UserData;
   84 	UWORD             pl_PlayerID;
   85 	UWORD             pl_Flags;
   86 };
   87 
   88 
   89 #define PLAYERB_READY      0
   90 #define PLAYERB_ALARMSET   1
   91 #define PLAYERB_QUIET      2
   92 #define PLAYERB_CONDUCTED  3
   93 #define PLAYERB_EXTSYNC    4
   94 
   95 #define PLAYERF_READY      (1<<PLAYERB_READY)
   96 #define PLAYERF_ALARMSET   (1<<PLAYERB_ALARMSET)
   97 #define PLAYERF_QUIET      (1<<PLAYERB_QUIET)
   98 #define PLAYERF_CONDUCTED  (1<<PLAYERB_CONDUCTED)
   99 #define PLAYERF_EXTSYNC    (1<<PLAYERB_EXTSYNC)
  100 
  101 
  102 #define PLAYER_Base          (TAG_USER + 64)
  103 #define PLAYER_Hook          (PLAYER_Base + 1)
  104 #define PLAYER_Name          (PLAYER_Base + 2)
  105 #define PLAYER_Priority      (PLAYER_Base + 3)
  106 #define PLAYER_Conductor     (PLAYER_Base + 4)
  107 #define PLAYER_Ready         (PLAYER_Base + 5)
  108 
  109 #define PLAYER_AlarmSigTask  (PLAYER_Base + 6)
  110 
  111 #define PLAYER_Conducted     (PLAYER_Base + 7)
  112 
  113 #define PLAYER_AlarmSigBit   (PLAYER_Base + 8)
  114 
  115 #define PLAYER_Quiet         (PLAYER_Base + 9)
  116 
  117 #define PLAYER_UserData      (PLAYER_Base + 10)
  118 #define PLAYER_ID            (PLAYER_Base + 11)
  119 
  120 #define PLAYER_AlarmTime     (PLAYER_Base + 12)
  121 #define PLAYER_Alarm         (PLAYER_Base + 13)
  122 
  123 #define PLAYER_ExtSync       (PLAYER_Base + 14)
  124 #define PLAYER_ErrorCode     (PLAYER_Base + 15)
  125 
  126 
  127 #define PM_TICK      0
  128 #define PM_STATE     1
  129 #define PM_POSITION  2
  130 #define PM_SHUTTLE   3
  131 
  132 
  133 struct pmTime
  134 {
  135 	ULONG pmt_Method;
  136 	ULONG pmt_Time;
  137 };
  138 
  139 struct pmState
  140 {
  141 	ULONG pms_Method;
  142 	ULONG pms_OldState;
  143 };
  144 
  145 
  146 #define RT_CONDUCTORS  0
  147 
  148 
  149 #define RTE_NOMEMORY     801
  150 #define RTE_NOCONDUCTOR  802
  151 #define RTE_NOTIMER      803
  152 #define RTE_PLAYING      804
  153 
  154 
  155 struct RealTimeBase
  156 {
  157 	struct Library rtb_LibNode;
  158 	UBYTE          rtb_Reserved0[2];
  159 
  160 	ULONG          rtb_Time;
  161 	ULONG          rtb_TimeFrac;
  162 	UWORD          rtb_Reserved1;
  163 	WORD           rtb_TickErr;
  164 };
  165 
  166 
  167 #define RealTime_TickErr_Min  -705
  168 #define RealTime_TickErr_Max   705
  169 
  170 
  171 #pragma pack()
  172 
  173 #endif /* LIBRARIES_REALTIME_H */