This is cd_commands.h in view mode; [Download] [Up]
/*
* cd_commands.h: header file for cd_commands.c
*
* This is based on the file that NeXT included in
* /NextDeveloper/Examples/UNIX/SCSI_CD,
* done by James C. Lee at NeXT, Sep 1991.
* It has been changed "just a bit" by Garance Alistair Drosehn/March 1994.
*
*/
#ifndef CD_COMMANDS
#define CD_COMMANDS
#import <sys/types.h>
#import <libc.h>
#import <sys/time.h>
#import "cd_toc.h" /* declares struct cd_toc */
/* I use a copy of the NS-3.1 version of bsd/dev/scsireg.h, because
* at some point I think I want to split it apart into "field values"
* (such as #define DEVTYPE_DISK), and actual structure definitions.
* Garance Drosehn/Mar 94
*/
/* #import <bsd/dev/scsireg.h> */
#import "scsireg_31.h" /* garance... */
int
do_eject_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
int
do_spinup_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
int
do_stopunit_1b(int fd, struct timeval * tvp, struct esense_reply * erp);
int
do_pauseaudio_4b(int fd, int pause, struct esense_reply * erp);
int
do_pauseaudio_c5(int fd, int pause, struct esense_reply * erp);
int
do_preventremoval_1e(int fd, int prevent, struct esense_reply * erp);
int
do_rezerounit_01(int fd, struct esense_reply * erp);
int
do_readtoc_43(int fd, struct cd_toc * toc_all, struct esense_reply * erp);
int
do_playaudio_c8(int fd, int lba, int length, struct esense_reply * erp);
struct pa_msf {
u_int min:8,
sec:8,
frame:8;
};
int
do_playaudio_msf_47(int fd, struct pa_msf startmsf, struct pa_msf endmsf,
struct esense_reply * erp);
struct pb_status_reply { /* playback status */
u_char pbs_audio_status;
u_int pbs_logical_block; /* LBA format of abs time */
u_short pbs_hour, /* MSF format of abs time */
pbs_min,
pbs_sec,
pbs_frame;
u_char pbs_ch0_sel, /* volume-of-play settings */
pbs_ch0_vol;
u_char pbs_ch1_sel,
pbs_ch1_vol;
u_char pbs_ch2_sel,
pbs_ch2_vol;
u_char pbs_ch3_sel,
pbs_ch3_vol;
};
/* values returned for pbs_audio_status: */
#define PBS_ASTAT_PLAYING 0x00
#define PBS_ASTAT_PAUSED 0x01
#define PBS_ASTAT_MUTED 0x02 /* audio muting on */
#define PBS_ASTAT_PLAYCOMPLETE 0x03 /* previous play command just
* completed */
#define PBS_ASTAT_PLAYABORTED 0x04 /* previous play command just aborted */
#define PBS_ASTAT_NOREQ 0x05 /* audio play not requested (yet?) */
int
do_playbackstatus_c4(int fd, struct pb_status_reply * pbstatus,
struct esense_reply * erp);
int
do_playbackvolume_c9(int fd, int leftVolume, int rightVolume,
struct esense_reply * erp);
/* instead of having a do_readsubchannel_42 routine, there are routines to
* return specific information from that (C10OP_READSUBCHANNEL = 42h) SCSI
* command. These fill in a few fields, and mainly isolate calling programs
* from byte-endian issues in getting a "page of sub-q channel data". Any
* program which wants a do_readsubchannel_42 routine should include the
* cd_cmdsint.h definitions directly.
*/
struct rsc_cur_pos_reply {
u_int track:8,
index:8;
u_int rsc_control:8,
rsc_audio_status:8;
/*
* "absolute time" is position on disk, "relative time" is position in the
* current track
*/
u_int abs_logical_block; /* LBA format of abs time */
u_int rel_logical_block; /* LBA format of rel time */
u_short abs_hour,
abs_min,
abs_sec,
abs_frame;
u_short rel_hour,
rel_min,
rel_sec,
rel_frame;
};
/* values for rsc_audio_status:
* Note the CD-ROM that NeXT used to sell is all too eager to return
* "Paused" in situations where the drive isn't really pausing in the
* middle of a play request. This makes audio_status much less useful.
*/
#define RSC_ASTAT_NOTSUPPORTED 0x00
#define RSC_ASTAT_PLAYING 0x11
#define RSC_ASTAT_PAUSED 0x12
#define RSC_ASTAT_PLAYCOMPLETE 0x13 /* previous play command just
* completed */
#define RSC_ASTAT_PLAYABORTED 0x14 /* previous play command was just
* aborted */
#define RSC_ASTAT_NONE 0x15 /* no audio status (nothing is
* happening) */
int
do_readcurrentposition_42(int fd, struct rsc_cur_pos_reply * curpos,
struct esense_reply * erp);
#define MEDIA_CATNUM_LENGTH 15
struct rsc_media_catnum_reply {
u_char catnum_isSet;
u_char media_catnum[MEDIA_CATNUM_LENGTH];
};
int
do_readmediacatnum_42(int fd, struct rsc_media_catnum_reply * catnum,
struct esense_reply * erp);
/* not done yet:
int
do_readtrackISRC_42(int fd, int track, struct rsc_track_isrc_reply *isrc,
struct esense_reply *erp);
*/
struct cd_volset_reply { /* volume-of-play settings */
u_char ch0_sel,
ch0_vol;
u_char ch1_sel,
ch1_vol;
u_char ch2_sel,
ch2_vol;
u_char ch3_sel,
ch3_vol;
};
int
do_modesense_pc_E(int fd, struct cd_volset_reply * volset, struct esense_reply * erp);
int
do_modeselect_pc_E(int fd, int leftVolume, int rightVolume, struct esense_reply * erp);
#endif CD_COMMANDS
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.