#ifndef __cdswi__H
#define __cdswi__H

#include "kernel.h"
#include <stdbool.h>

typedef struct
{
	int	r[5];
} sCDControlBlock;

typedef union sCDDiscTrackRange
{
	struct
	{
		char	min;
		char	max;
	} range;
	struct
	{
		int	addr;
		int	flags;
	} track;
} sCDDiscTrackRange;

typedef struct
{
	int	size;
	int	blocks;
} sCDDiscSize;

const _kernel_oserror* FCDFS_GetNumberOfDrives(int* drives);
const _kernel_oserror* FCDFS_ConvertDriveToDevice(unsigned int drive, sCDControlBlock* pCDBlock);
const _kernel_oserror* FCD_OpenDrawer(sCDControlBlock* pCDBlock);
const _kernel_oserror* FCD_EjectButton(sCDControlBlock* pCDBlock, bool enable);
const _kernel_oserror* FCD_EnquireAddress(sCDControlBlock* pCDBlock, int mode, unsigned int* phead);
const _kernel_oserror* FCD_PlayAudio(sCDControlBlock* pCDBlock, int mode, unsigned int from, unsigned int tod);
const _kernel_oserror* FCD_PlayTrack(sCDControlBlock* pCDBlock, int first, int last);
const _kernel_oserror* FCD_AudioPause(sCDControlBlock* pCDBlock, bool on);
const _kernel_oserror* FCD_EnquireTrack(sCDControlBlock* pCDBlock, int track, sCDDiscTrackRange* prange);
const _kernel_oserror* FCD_StopDisc(sCDControlBlock* pCDBlock);
const _kernel_oserror* FCD_DiscUsed(sCDControlBlock* pCDBlock, int mode, sCDDiscSize* psize);
const _kernel_oserror* FCD_AudioStatus(sCDControlBlock* pCDBlock, int* pstatus);
const _kernel_oserror* FCD_GetIdentifier(sCDControlBlock* pCDBlock, unsigned long* id, bool bHasData);
const _kernel_oserror* FCD_GetAudioParams(sCDControlBlock* pCDBlock, int* volumes);
const _kernel_oserror* FCD_SetAudioParams(sCDControlBlock* pCDBlock, int* volumes);

#endif
