Blame example/mmc3.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2006, 2008, 2009, 2011, 2017 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/* Another simple program to show use of SCSI MMC interface. Is
Packit dd8086
   basically the the libdio scsi_mmc_get_hwinfo() routine.
Packit dd8086
*/
Packit dd8086
#ifdef HAVE_CONFIG_H
Packit dd8086
#include "config.h"
Packit dd8086
#define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_TYPES_H
Packit dd8086
#include <sys/types.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include <cdio/mmc.h>
Packit dd8086
Packit dd8086
/* Set how long to wait for MMC commands to complete */
Packit dd8086
#define DEFAULT_TIMEOUT_MS 10000
Packit dd8086
Packit dd8086
int
Packit dd8086
main(int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
  CdIo_t *p_cdio;
Packit dd8086
  driver_return_code_t ret;
Packit dd8086
  driver_id_t driver_id = DRIVER_DEVICE;
Packit dd8086
  char *psz_drive = NULL;
Packit dd8086
  bool do_eject = false;
Packit dd8086
  bool do_close = false;
Packit dd8086
Packit dd8086
  if (argc > 1)
Packit dd8086
    psz_drive = strdup(argv[1]);
Packit dd8086
Packit dd8086
  if (!psz_drive) {
Packit dd8086
    psz_drive = cdio_get_default_device_driver(&driver_id);
Packit dd8086
    if (!psz_drive) {
Packit dd8086
      printf("-- Can't find a CD-ROM\n");
Packit dd8086
     exit(77);
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  p_cdio = cdio_open (psz_drive, driver_id);
Packit dd8086
  if (!p_cdio) {
Packit dd8086
    printf("-- Can't open %s\n", psz_drive);
Packit dd8086
    exit(77);
Packit dd8086
  }
Packit dd8086
Packit dd8086
  ret = mmc_get_tray_status(p_cdio);
Packit dd8086
  switch((int) ret) {
Packit dd8086
  case 0:
Packit dd8086
    printf("-- CD-ROM drive %s is closed.\n", psz_drive);
Packit dd8086
    do_eject = true;
Packit dd8086
    do_close = true;
Packit dd8086
    break;
Packit dd8086
  case 1:
Packit dd8086
    printf("-- CD-ROM drive %s is open.\n", psz_drive);
Packit dd8086
    break;
Packit dd8086
  default:
Packit dd8086
    printf("-- Error status for drive %s: %s.\n", psz_drive,
Packit dd8086
	   cdio_driver_errmsg(ret));
Packit dd8086
    free(psz_drive);
Packit dd8086
    return 77;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  ret = mmc_get_media_changed(p_cdio);
Packit dd8086
  switch((int) ret) {
Packit dd8086
  case 0:
Packit dd8086
    printf("-- CD-ROM drive %s media not changed since last test.\n",
Packit dd8086
	   psz_drive);
Packit dd8086
    break;
Packit dd8086
  case 1:
Packit dd8086
    printf("-- CD-ROM drive %s media changed since last test.\n", psz_drive);
Packit dd8086
    break;
Packit dd8086
  default:
Packit dd8086
    printf("-- Error status for drive %s: %s.\n", psz_drive,
Packit dd8086
	   cdio_driver_errmsg(ret));
Packit dd8086
    free(psz_drive);
Packit dd8086
    return 77;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (do_eject && argc > 2)
Packit dd8086
    cdio_eject_media_drive(psz_drive);
Packit dd8086
  else
Packit dd8086
    cdio_close_tray(psz_drive, &driver_id);
Packit dd8086
Packit dd8086
  ret = mmc_get_tray_status(p_cdio);
Packit dd8086
  switch((int) ret) {
Packit dd8086
  case 0:
Packit dd8086
    printf("-- CD-ROM drive %s is closed.\n", psz_drive);
Packit dd8086
    break;
Packit dd8086
  case 1:
Packit dd8086
    printf("-- CD-ROM drive %s is open.\n", psz_drive);
Packit dd8086
    break;
Packit dd8086
  default:
Packit dd8086
    printf("Error status for drive %s: %s.\n", psz_drive,
Packit dd8086
	   cdio_driver_errmsg(ret));
Packit dd8086
    free(psz_drive);
Packit dd8086
    return 77;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  ret = mmc_get_media_changed(p_cdio);
Packit dd8086
  switch((int) ret) {
Packit dd8086
  case 0:
Packit dd8086
    printf("-- CD-ROM drive %s media not changed since last test.\n",
Packit dd8086
	   psz_drive);
Packit dd8086
    break;
Packit dd8086
  case 1:
Packit dd8086
    printf("-- CD-ROM drive %s media changed since last test.\n", psz_drive);
Packit dd8086
    break;
Packit dd8086
  default:
Packit dd8086
    printf("-- Error status for drive %s: %s.\n", psz_drive,
Packit dd8086
	   cdio_driver_errmsg(ret));
Packit dd8086
    free(psz_drive);
Packit dd8086
    return 77;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (do_close)
Packit dd8086
    cdio_close_tray(psz_drive, &driver_id);
Packit dd8086
Packit dd8086
  free(psz_drive);
Packit dd8086
  cdio_destroy(p_cdio);
Packit dd8086
Packit dd8086
  return 0;
Packit dd8086
}