Esempio n. 1
0
    //
    // Claim
    //
    // Claim a redbook driver
    //
    Bool Claim()
    {   
      if (initialized)
      {
        int drive;

        // Release any current driver
        Release();
  
        // First, try and find the specified volume
        if (*volumeLabel && Drive::FindDriveByVolume(Drive::CDROM, volumeLabel, drive))
        {
          if ((driver = AIL_redbook_open_drive(char(drive + 'A'))) != NULL)
          {
            LOG_DIAG(("Redbook::Claim - Success by volume [%s]", volumeLabel));
          }
        }

        // Second, try and find an audio cd (for custom cd in second drive)
        if (!driver && Drive::FindDriveByVolume(Drive::CDROM, "Audio CD", drive))
        {
          if ((driver = AIL_redbook_open_drive(char(drive + 'A'))) != NULL)
          {
            LOG_DIAG(("Redbook::Claim - Success on Audio CD"));
          }
        }

        // Third, just grab the first device
        if (!driver)
        {
          for (S32 i = 0; i < MAX_DEVICES; i++)
          {
            if ((driver = AIL_redbook_open(i)) != NULL)
            {
              LOG_DIAG(("Redbook::Claim - Success on first available [%d]", i));
              break;
            }
          }
        }

        if (driver)
        {
          // Stop the cd playing anything
          Stop();
          return (TRUE);
        }

        LOG_DIAG(("Redbook::Claim - Failed"));
      }

      return (FALSE);
    }
Esempio n. 2
0
void SoundManager::InitRedbook()
{
#if defined(USE_SDL)
    if (!m_cdrom) {
        int errcode = SDL_Init(SDL_INIT_CDROM | m_SDLInitFlags);

        Assert(0 == errcode);
        if (errcode < 0) {
            return;
        }

        int numDrives = SDL_CDNumDrives();
        Assert(numDrives >= 0);

        int drive = -1;
        int i = 0;
        // Hack: We don't have the num of the SDL drive stored,
        //       so we search for the drive with the drive letter stored
        MBCHAR driveLetter = toupper(c3files_GetCtpCdId());
        while ((i < numDrives) && (-1 == drive)) {
            const char *cd_name = SDL_CDName(i);
            if (cd_name) {
                if (toupper(cd_name[0]) == driveLetter) {
                    drive = i;
                }
            }
            i++;
        }

        // No drive match?!
        if (drive < 0) {
            return;
        }
        m_cdrom = SDL_CDOpen(drive);
        Assert(m_cdrom != 0);
        // No control structur?
        if (m_cdrom) 
        {
            CDstatus status = SDL_CDStatus(m_cdrom);
        }
    }
#else // !USE_SDL
	if (!m_redbook) 
	{
		m_redbook = AIL_redbook_open_drive(c3files_GetCtpCdId());
	}
#endif // USE_SDL
}