akrip32.h
上传用户:xmgzy123
上传日期:2007-01-07
资源大小:373k
文件大小:12k
源码类别:

SCSI/ASPI

开发平台:

WINDOWS

  1. /*
  2.  * akrip32.h - Copyright (C) 1999 Jay A. Key
  3.  *
  4.  * API for akrip32.dll
  5.  *
  6.  **********************************************************************
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU Lesser General Public License as published
  10.  * by the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Lesser General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21.  *
  22.  **********************************************************************
  23.  *
  24.  * $Id: akrip32.h,v 1.2 2000/02/25 10:47:37 akey Exp $
  25.  * $Date: 2000/02/25 10:47:37 $
  26.  * $Locker:  $
  27.  * $Log: akrip32.h,v $
  28.  * Revision 1.2  2000/02/25 10:47:37  akey
  29.  * sync'ed with akrip32.dll v0.94
  30.  *
  31.  * Revision 1.5  2000/02/11 10:00:35  akey
  32.  * added access to cdplayer.ini
  33.  *
  34.  * Revision 1.4  2000/01/31 15:35:40  akey
  35.  * v0.93: added CDDBGetServerList and fixed problem with Win2000 scsi pass through code
  36.  *
  37.  * Revision 1.3  2000/01/06 16:38:35  akey
  38.  * Added missing CDDB_OPT_HTTPPORT
  39.  *
  40.  * Revision 1.2  2000/01/03 12:29:43  akey
  41.  * v0.91 release -- added CDDB and bug fixes
  42.  *
  43.  *
  44.  */
  45. #ifndef _AKRIP32_H_
  46. #define _AKRIP32_H_
  47. #include <windows.h>
  48. #include "myaspi32.h"
  49. #ifdef __cplusplus
  50. extern "C" {
  51. #endif
  52. #ifndef __GNUC__
  53. #define PACKED
  54. #endif
  55. #define TRACK_AUDIO   0x00
  56. #define TRACK_DATA    0x01
  57. #define  MAXIDLEN   64
  58. #define  MAXCDLIST  8
  59. /*
  60.  * TRACKBUF
  61.  *
  62.  * This structure should not be allocated directly.  If a buffer containing
  63.  * 27 * 2353 bytes is desired, a buffer should be allocated containing
  64.  * the desired amount + 24 bytes.  The allocated memory can then be
  65.  * typecast to a LPTRACKBUF.  It is the program's responsibility to guard
  66.  * against reading/writing past the end of allocated memory.
  67.  *
  68.  * The following must always apply:
  69.  *   (len + startOffset) <= (numFrames * 2352) <= maxLen
  70.  */
  71. typedef struct
  72. {
  73.   DWORD   startFrame;       /* 00: starting frame number          */
  74.   DWORD   numFrames;        /* 04: number of frames read          */
  75.   DWORD   maxLen;           /* 08: length of buffer itself        */
  76.   DWORD   len;              /* 0C: length of data actually in buf */
  77.   DWORD   status;           /* 10: status of last read operation  */
  78.   int     startOffset;      /* 14: offset of valid data in buf    */
  79.   BYTE    buf[1024*1024];     /* 18: the data itself                */
  80. } *PTRACKBUF, FAR *LPTRACKBUF;
  81. typedef struct
  82. {
  83.   DWORD   startFrame;       /* 00: starting frame number          */
  84.   DWORD   numFrames;        /* 04: number of frames read          */
  85.   DWORD   maxLen;           /* 08: length of buffer itself        */
  86.   DWORD   len;              /* 0C: length of data actually in buf */
  87.   DWORD   status;           /* 10: status of last read operation  */
  88.   int     startOffset;      /* 14: offset of valid data in buf    */
  89. } TRACKBUFDUMMY;
  90. #define TRACKBUFEXTRA   sizeof(TRACKBUFDUMMY)
  91. typedef struct
  92. {
  93.   char vendor[9];
  94.   char prodId[17];
  95.   char rev[5];
  96.   char vendSpec[21];
  97. } CDINFO, *PCDINFO, FAR *LPCDINFO;
  98. typedef struct
  99. {
  100.   BYTE      ha;
  101.   BYTE      tgt;
  102.   BYTE      lun;
  103.   BYTE      pad;
  104.   char      id[MAXIDLEN + 1];
  105.   CDINFO    info;
  106. } CDREC, *PCDREC, FAR *LPCDREC;
  107. typedef struct
  108. {
  109.   BYTE      max;
  110.   BYTE      num;
  111.   CDREC     cd[MAXCDLIST];
  112. } CDLIST, *PCDLIST, FAR *LPCDLIST;
  113. #ifndef __GNUC__
  114. #pragma pack(1)
  115. #endif
  116. /*
  117.  * TOCTRACK and TOC must be byte-aligned.  If you're not using Mingw32,
  118.  * CygWin, or some other compiler that understands the PACKED keyword,
  119.  * you need to ensure that these structures are byte aligned.  Usually,
  120.  * this is done using a
  121.  *  #pragma pack(1)
  122.  * See your compiler's documentation for details
  123.  */
  124. typedef struct
  125. {
  126.   BYTE      rsvd;
  127.   BYTE      ADR;
  128.   BYTE      trackNumber;
  129.   BYTE      rsvd2;
  130.   BYTE      addr[4];
  131. } PACKED TOCTRACK;
  132. typedef struct
  133. {
  134.   WORD      tocLen;
  135.   BYTE      firstTrack;
  136.   BYTE      lastTrack;
  137.   TOCTRACK tracks[100];
  138. } PACKED TOC, *PTOC, FAR *LPTOC;
  139. typedef struct
  140. {
  141.   int   trackNo;
  142.   DWORD startLBA;
  143.   DWORD trackLen;
  144.   BYTE  type;
  145.   BYTE  pad[3];
  146.   char  name[256];
  147. } PACKED TRACK, *PTRACK, FAR *LPTRACK;
  148. #ifndef __GNUC__
  149. #pragma pack()
  150. #endif
  151. typedef struct
  152. {
  153.   BYTE sm;
  154.   BYTE ss;
  155.   BYTE sf;
  156.   BYTE em;
  157.   BYTE es;
  158.   BYTE ef;
  159. } READMSF, *PREADMSF, FAR *LPREADMSF;
  160. /*
  161.  * Error codes set by functions in ASPILIB.C
  162.  */
  163. #define ALERR_NOERROR           0
  164. #define ALERR_NOWNASPI         -1
  165. #define ALERR_NOGETASPI32SUPP  -2
  166. #define ALERR_NOSENDASPICMD    -3
  167. #define ALERR_ASPI             -4
  168. #define ALERR_NOCDSELECTED     -5
  169. #define ALERR_BUFTOOSMALL      -6
  170. #define ALERR_INVHANDLE        -7
  171. #define ALERR_NOMOREHAND       -8
  172. #define ALERR_BUFPTR           -9
  173. #define ALERR_NOTACD           -10
  174. #define ALERR_LOCK             -11
  175. #define ALERR_DUPHAND          -12
  176. #define ALERR_INVPTR           -13
  177. #define ALERR_INVPARM          -14
  178. #define ALERR_JITTER           -15
  179. /*
  180.  * constants used for queryCDParms()
  181.  */
  182. #define CDP_READCDR      0x0001     // can read CD-R
  183. #define CDP_READCDE      0x0002     // can read CD-E
  184. #define CDP_METHOD2      0x0003     // can read CD-R wriiten via method 2
  185. #define CDP_WRITECDR     0x0004     // can write CD-R
  186. #define CDP_WRITECDE     0x0005     // can write CD-E
  187. #define CDP_AUDIOPLAY    0x0006     // can play audio
  188. #define CDP_COMPOSITE    0x0007     // composite audio/video stream
  189. #define CDP_DIGITAL1     0x0008     // digital output (IEC958) on port 1
  190. #define CDP_DIGITAL2     0x0009     // digital output (IEC958) on port 2
  191. #define CDP_M2FORM1      0x000A     // reads Mode 2 Form 1 (XA) format
  192. #define CDP_M2FORM2      0x000B     // reads Mode 2 Form 2 format
  193. #define CDP_MULTISES     0x000C     // reads multi-session or Photo-CD
  194. #define CDP_CDDA         0x000D     // supports cd-da
  195. #define CDP_STREAMACC    0x000E     // supports "stream is accurate"
  196. #define CDP_RW           0x000F     // can return R-W info
  197. #define CDP_RWCORR       0x0010     // returns R-W de-interleaved and err.
  198.                                     // corrected
  199. #define CDP_C2SUPP       0x0011     // C2 error pointers
  200. #define CDP_ISRC         0x0012     // can return the ISRC info
  201. #define CDP_UPC          0x0013     // can return the Media Catalog Number
  202. #define CDP_CANLOCK      0x0014     // prevent/allow cmd. can lock the media
  203. #define CDP_LOCKED       0x0015     // current lock state (TRUE = LOCKED)
  204. #define CDP_PREVJUMP     0x0016     // prevent/allow jumper state
  205. #define CDP_CANEJECT     0x0017     // drive can eject disk
  206. #define CDP_MECHTYPE     0x0018     // type of disk loading supported
  207. #define CDP_SEPVOL       0x0019     // independent audio level for channels
  208. #define CDP_SEPMUTE      0x001A     // independent mute for channels
  209. #define CDP_SDP          0x001B     // supports disk present (SDP)
  210. #define CDP_SSS          0x001C     // Software Slot Selection
  211. #define CDP_MAXSPEED     0x001D     // maximum supported speed of drive
  212. #define CDP_NUMVOL       0x001E     // number of volume levels
  213. #define CDP_BUFSIZE      0x001F     // size of output buffer
  214. #define CDP_CURRSPEED    0x0020     // current speed of drive
  215. #define CDP_SPM          0x0021     // "S" units per "M" (MSF format)
  216. #define CDP_FPS          0x0022     // "F" units per "S" (MSF format)
  217. #define CDP_INACTMULT    0x0023     // inactivity multiplier ( x 125 ms)
  218. #define CDP_MSF          0x0024     // use MSF format for READ TOC cmd
  219. #define CDP_OVERLAP      0x0025     // number of overlap frames for jitter
  220. #define CDP_JITTER       0x0026     // number of frames to check for jitter
  221. #define CDP_READMODE     0x0027     // mode to attempt jitter corr.
  222. /*
  223.  * defines for GETCDHAND  readType
  224.  *
  225.  */
  226. #define CDR_ANY          0x00       // unknown
  227. #define CDR_ATAPI1       0x01       // ATAPI per spec
  228. #define CDR_ATAPI2       0x02       // alternate ATAPI
  229. #define CDR_READ6        0x03       // using SCSI READ(6)
  230. #define CDR_READ10       0x04       // using SCSI READ(10)
  231. #define CDR_READ_D8      0x05       // using command 0xD8 (Plextor?)
  232. #define CDR_READ_D4      0x06       // using command 0xD4 (NEC?)
  233. #define CDR_READ_D4_1    0x07       // 0xD4 with a mode select
  234. #define CDR_READ10_2     0x08       // different mode select w/ READ(10)
  235. /*
  236.  * defines for the read mode (CDP_READMODE)
  237.  */
  238. #define CDRM_NOJITTER      0x00     // never jitter correct
  239. #define CDRM_JITTER        0x01     // always jitter correct
  240. #define CDRM_JITTERONERR   0x02     // jitter correct only after a read error
  241. #ifndef __GNUC__
  242. #pragma pack(1)
  243. #endif
  244. typedef HANDLE HCDROM;
  245. typedef struct _GETCDHAND {
  246.   BYTE size;             /* set to sizeof(GETCDHAND)            */
  247.   BYTE ver;              /* set to AKRIPVER                     */
  248.   BYTE ha;               /* host adapter                        */
  249.   BYTE tgt;              /* target id                           */
  250.   BYTE lun;              /* LUN                                 */
  251.   BYTE readType;         /* read function to use                */
  252.   BOOL jitterCorr;       /* use built-in jitter correction?     */
  253.   BYTE numJitter;        /* number of frames to try to match    */
  254.   BYTE numOverlap;       /* number of frames to overlap         */
  255. } PACKED GETCDHAND, *PGETCDHAND, FAR *LPGETCDHAND;
  256. #ifndef __GNUC__
  257. #pragma pack()
  258. #endif
  259. // Used by InsertCDCacheItem
  260. #define CDDB_NONE    0
  261. #define CDDB_QUERY   1
  262. #define CDDB_ENTRY   2
  263. #define CDDB_OPT_SERVER      0
  264. #define CDDB_OPT_PROXY       1
  265. #define CDDB_OPT_USEPROXY    2
  266. #define CDDB_OPT_AGENT       3
  267. #define CDDB_OPT_USER        4
  268. #define CDDB_OPT_PROXYPORT   5
  269. #define CDDB_OPT_CGI         6
  270. #define CDDB_OPT_HTTPPORT    7
  271. #define CDDB_OPT_USECDPLAYERINI 8
  272. int GetNumAdapters( void );
  273. int GetCDList( LPCDLIST cd );
  274. int GetAspiLibError( void );
  275. BYTE GetAspiLibAspiError( void );
  276. DWORD GetCDId( HCDROM hCD, char *buf, int maxBuf );
  277. DWORD GetDriveInfo( BYTE ha, BYTE tgt, BYTE lun, LPCDREC cdrec );
  278. DWORD ReadTOC( HCDROM hCD, LPTOC lpToc );
  279. DWORD ReadCDAudioLBA( HCDROM hCD, LPTRACKBUF );
  280. BOOL QueryCDParms( HCDROM hCD, int which, DWORD *pNum );
  281. BOOL ModifyCDParms( HCDROM hCD, int which, DWORD val );
  282. HCDROM GetCDHandle( LPGETCDHAND lpcd );
  283. BOOL CloseCDHandle( HCDROM );
  284. DWORD ReadCDAudioLBAEx( HCDROM hCD, LPTRACKBUF, LPTRACKBUF );
  285. DWORD GetAKRipDllVersion( void );
  286. /*
  287.  * CDDB support
  288.  */
  289. typedef struct {
  290.   char categ[12];
  291.   char cddbId[9];
  292.   BOOL bExact;
  293.   char artist[81];
  294.   char title[81];
  295. } CDDBQUERYITEM, FAR *LPCDDBQUERYITEM;
  296. typedef struct {
  297.   int num;
  298.   LPCDDBQUERYITEM q;
  299. } CDDBQUERY, FAR *LPCDDBQUERY;
  300. typedef struct {
  301.   char szServer[81];
  302.   BOOL bHTTP;
  303.   int  iPort;
  304.   char szCGI[81];
  305.   char szNorth[16];
  306.   char szSouth[16];
  307.   char szLocation[81];
  308. } CDDBSITE, FAR *LPCDDBSITE;
  309. typedef struct {
  310.   int num;
  311.   LPCDDBSITE s;
  312. } CDDBSITELIST, FAR *LPCDDBSITELIST;
  313. DWORD GetCDDBDiskID( HCDROM hCD, DWORD *pID, int numEntries );
  314. DWORD CDDBQuery( HCDROM hCD, LPCDDBQUERY lpq );
  315. DWORD CDDBGetDiskInfo( LPCDDBQUERYITEM lpq, char *szCDDBEntry, int maxLen );
  316. void CDDBSetOption( int what, char *szVal, int iVal );
  317. DWORD CDDBGetServerList( LPCDDBSITELIST lpSiteList );
  318. #ifdef __cplusplus
  319. }
  320. #endif
  321. #endif   /* _AKRIP32_H_ */