/packages/libogcfpc/src/ogc/dvd.inc

https://github.com/slibre/freepascal · Pascal · 178 lines · 119 code · 55 blank · 4 comment · 0 complexity · 96b75d88bf32c566456c208045b339d1 MD5 · raw file

  1. {$IFDEF OGC_INTERFACE}
  2. const
  3. DVD_STATE_FATAL_ERROR = - 1;
  4. DVD_STATE_END = 0;
  5. DVD_STATE_BUSY = 1;
  6. DVD_STATE_WAITING = 2;
  7. DVD_STATE_COVER_CLOSED = 3;
  8. DVD_STATE_NO_DISK = 4;
  9. DVD_STATE_COVER_OPEN = 5;
  10. DVD_STATE_WRONG_DISK = 6;
  11. DVD_STATE_MOTOR_STOPPED = 7;
  12. DVD_STATE_IGNORED = 8;
  13. DVD_STATE_CANCELED = 10;
  14. DVD_STATE_RETRY = 11;
  15. DVD_ERROR_OK = 0;
  16. DVD_ERROR_FATAL = - 1;
  17. DVD_ERROR_IGNORED = - 2;
  18. DVD_ERROR_CANCELED = - 3;
  19. DVD_ERROR_COVER_CLOSED = - 4;
  20. DVD_RESETHARD = 0; (*!< Performs a hard reset. Complete new boot of FW. *)
  21. DVD_RESETSOFT = 1; (*!< Performs a soft reset. FW restart and drive spinup *)
  22. DVD_RESETNONE = 2; (*!< Only initiate DI registers *)
  23. DVD_SPINMOTOR_DOWN = $00000000; (*!< Stop DVD drive *)
  24. DVD_SPINMOTOR_UP = $00000100; (*!< Start DVD drive *)
  25. DVD_SPINMOTOR_ACCEPT = $00004000; (*!< Force DVD to accept the disk *)
  26. DVD_SPINMOTOR_CHECKDISK = $00008000; (*!< Force DVD to perform a disc check *)
  27. type
  28. _dvddiskid = record
  29. gamename : array [0..3] of cint8;
  30. company : array [0..1] of cint8;
  31. disknum : cuint8;
  32. gamever : cuint8;
  33. streaming : cuint8;
  34. streambufsize : cuint8;
  35. pad : array [0..21] of cuint8;
  36. end;
  37. dvddiskid = _dvddiskid;
  38. pdvddiskid = ^dvddiskid;
  39. dvdcbcallback = procedure(result: cint32; block: pointer); cdecl;
  40. _dvdcmdblk = record
  41. node : lwp_node;
  42. cmd : cuint32;
  43. state : cint32;
  44. offset : cint64;
  45. len : cuint32;
  46. buf : pointer;
  47. currtxsize : cuint32;
  48. txdsize : cuint32;
  49. id : Pdvddiskid;
  50. cb : dvdcbcallback;
  51. usrdata : pointer;
  52. end;
  53. dvdcmdblk = _dvdcmdblk;
  54. Pdvdcmdblk = ^dvdcmdblk;
  55. _dvddrvinfo = record
  56. rev_level : cuint16;
  57. dev_code : cuint16;
  58. rel_date : cuint32;
  59. pad : array [0..23] of cuint8;
  60. end;
  61. dvddrvinfo = _dvddrvinfo;
  62. Pdvddrvinfo = ^dvddrvinfo;
  63. dvdcallback = procedure(result: cint32; info: pointer); cdecl;
  64. _dvdfileinfo = record
  65. block : dvdcmdblk;
  66. addr : cuint32;
  67. len : cuint32;
  68. cb : dvdcallback;
  69. end;
  70. dvdfileinfo = _dvdfileinfo;
  71. Pdvdfileinfo = ^dvdfileinfo;
  72. procedure DVD_Init; cdecl; external;
  73. procedure DVD_Pause; cdecl; external;
  74. procedure DVD_Reset(reset_mode: cuint32); cdecl; external;
  75. function DVD_Mount: cint32; cdecl; external;
  76. function DVD_GetDriveStatus: cint32; cdecl; external;
  77. function DVD_MountAsync(block: Pdvdcmdblk; cb: dvdcbcallback): cint32; cdecl; external;
  78. function DVD_ControlDrive(block: Pdvdcmdblk; cmd: cuint32): cint32; cdecl; external;
  79. function DVD_ControlDriveAsync(block: Pdvdcmdblk; cmd: cuint32;
  80. cb: dvdcbcallback): cint32; cdecl; external;
  81. function DVD_SetGCMOffset(block: Pdvdcmdblk; offset: cint64): cint32; cdecl; external;
  82. function DVD_SetGCMOffsetAsync(block: Pdvdcmdblk; offset: cint64;
  83. cb: dvdcbcallback): cint32; cdecl; external;
  84. function DVD_GetCmdBlockStatus(block: Pdvdcmdblk): cint32; cdecl; external;
  85. function DVD_SpinUpDrive(block: Pdvdcmdblk): cint32; cdecl; external;
  86. function DVD_SpinUpDriveAsync(block: Pdvdcmdblk; cb: dvdcbcallback): cint32; cdecl; external;
  87. function DVD_Inquiry(block: Pdvdcmdblk; info: Pdvddrvinfo): cint32; cdecl; external;
  88. function DVD_InquiryAsync(block: Pdvdcmdblk; info: Pdvddrvinfo;
  89. cb: dvdcbcallback): cint32; cdecl; external;
  90. function DVD_ReadPrio(block: Pdvdcmdblk; buf: pointer; len: cuint32;
  91. offset: cint64; prio: cint32): cint32; cdecl; external;
  92. function DVD_ReadAbsAsyncPrio(block: Pdvdcmdblk; buf: pointer; len: cuint32;
  93. offset: cint64; cb: dvdcbcallback; prio: cint32): cint32; cdecl; external;
  94. function DVD_ReadAbsAsyncForBS(block: Pdvdcmdblk; buf: pointer; len: cuint32;
  95. offset: cint64; cb: dvdcbcallback): cint32; cdecl; external;
  96. function DVD_SeekPrio(block: Pdvdcmdblk; offset: cint64; prio: cint32): cint32; cdecl; external;
  97. function DVD_SeekAbsAsyncPrio(block: Pdvdcmdblk; offset: cint64;
  98. cb: dvdcbcallback; prio: cint32): cint32; cdecl; external;
  99. function DVD_CancelAllAsync(cb: dvdcbcallback): cint32; cdecl; external;
  100. function DVD_StopStreamAtEndAsync(block: Pdvdcmdblk; cb: dvdcbcallback): cint32; cdecl; external;
  101. function DVD_StopStreamAtEnd(block: Pdvdcmdblk): cint32; cdecl; external;
  102. function DVD_ReadDiskID(block: Pdvdcmdblk; id: Pdvddiskid; cb: dvdcbcallback)
  103. : cint32; cdecl; external;
  104. function DVD_SetAutoInvalidation(auto_inv: cuint32): cuint32; cdecl; external;
  105. function DVD_GetCurrentDiskID: Pdvddiskid; cdecl; external;
  106. function DVD_GetDriveInfo: Pdvddrvinfo; cdecl; external;
  107. procedure DVD_SetUserData(block: _dvdcmdblk; data: pointer); inline;
  108. function DVD_GetUserData(block: _dvdcmdblk): pointer; inline;
  109. const
  110. DEVICE_TYPE_GAMECUBE_DVD = ((Ord('G') shl 24) or (Ord('D') shl 16) or (Ord('V') shl 8) or Ord('D'));
  111. var
  112. __io_gcdvd : DISC_INTERFACE; cvar; external;
  113. {$ENDIF}
  114. {$IFDEF OGC_IMPLEMENTATION}
  115. procedure DVD_SetUserData(block: _dvdcmdblk; data: pointer); inline;
  116. begin
  117. block.usrdata := data;
  118. end;
  119. function DVD_GetUserData(block: _dvdcmdblk): pointer; inline;
  120. begin
  121. DVD_GetUserData := block.usrdata;
  122. end;
  123. {$ENDIF}