static void dvdprobe(callout_t *co, void *aux) { disc_scanner_t *ds = aux; callout_arm(&ds->ds_timer, dvdprobe, ds, 1); if(ds->ds_disc_inserted == 0) { DI_Mount(); if(DI_GetStatus() == DVD_NO_DISC) return; TRACE(TRACE_INFO, "DVD", "DVD inserted"); ds->ds_disc_inserted = 1; ds->ds_disc_ready = 0; } else { uint32_t s = DI_GetStatus(); if(s == DVD_UNKNOWN) { ds->ds_disc_inserted = 0; notify_add(NOTIFY_ERROR, NULL, 5, "Unknown disc inserted, ejecting..."); DI_Eject(); return; } if(!(s & DVD_READY)) { TRACE(TRACE_DEBUG, "DVD", "Waiting for disc ready state = %x", s); return; } if(!ds->ds_disc_ready) check_disc_type(ds); if(DI_GetCoverRegister(&s) || !(s & DVD_COVER_DISC_INSERTED)) { ds->ds_disc_inserted = 0; TRACE(TRACE_INFO, "DVD", "DVD no longer present"); if(ds->ds_service != NULL) { service_destroy(ds->ds_service); ds->ds_service = NULL; } } } }
static void dvdprobe(callout_t *co, void *aux) { disc_scanner_t *ds = aux; int fd; callout_arm(&ds->ds_timer, dvdprobe, ds, 1); fd = open(ds->ds_dev, O_RDONLY | O_NONBLOCK); if(fd == -1) { set_status(ds, DISC_NO_DRIVE, NULL); } else { if(ioctl(fd, CDROM_DRIVE_STATUS, NULL) == CDS_DISC_OK) { if(ds->ds_svc == NULL) check_disc_type(ds, fd); } else { set_status(ds, DISC_NO_DISC, NULL); } close(fd); } }