Installed status communications about closing session ("Fixating")
This commit is contained in:
parent
eed527c6d7
commit
500869fe96
@ -905,7 +905,7 @@ int Cdrtrack_get_size(struct CdrtracK *track, double *size, double *padding,
|
|||||||
*padding= track->padding;
|
*padding= track->padding;
|
||||||
#ifdef Cdrskin_allow_libburn_taO
|
#ifdef Cdrskin_allow_libburn_taO
|
||||||
if((flag&1) && track->libburn_track!=NULL) {
|
if((flag&1) && track->libburn_track!=NULL) {
|
||||||
off_t readcounter,writecounter;
|
off_t readcounter= 0,writecounter= 0;
|
||||||
|
|
||||||
burn_track_get_counters(track->libburn_track,&readcounter,&writecounter);
|
burn_track_get_counters(track->libburn_track,&readcounter,&writecounter);
|
||||||
*size= readcounter;
|
*size= readcounter;
|
||||||
@ -2315,7 +2315,8 @@ struct CdrskiN {
|
|||||||
|
|
||||||
/** Progress state info: wether libburn is actually processing payload data */
|
/** Progress state info: wether libburn is actually processing payload data */
|
||||||
int is_writing;
|
int is_writing;
|
||||||
|
/** Previously detected drive state */
|
||||||
|
enum burn_drive_status previous_drive_status;
|
||||||
|
|
||||||
/** abort parameters */
|
/** abort parameters */
|
||||||
int abort_max_wait;
|
int abort_max_wait;
|
||||||
@ -2398,6 +2399,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
|
|||||||
o->n_drives= 0;
|
o->n_drives= 0;
|
||||||
o->driveno= 0;
|
o->driveno= 0;
|
||||||
o->is_writing= 0;
|
o->is_writing= 0;
|
||||||
|
o->previous_drive_status = BURN_DRIVE_IDLE;
|
||||||
o->abort_max_wait= 74*60;
|
o->abort_max_wait= 74*60;
|
||||||
o->lib_is_initialized= (flag&1);
|
o->lib_is_initialized= (flag&1);
|
||||||
o->control_pid= getpid();
|
o->control_pid= getpid();
|
||||||
@ -3604,7 +3606,7 @@ int Cdrskin_wait_before_action(struct CdrskiN *skin, int flag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS)
|
if(skin->verbosity>=Cdrskin_verbose_progresS)
|
||||||
printf(" Operation starts.\n");
|
{printf(" Operation starts.\n");fflush(stdout);}
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3674,19 +3676,25 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
|
|||||||
start_time= Sfile_microtime(0);
|
start_time= Sfile_microtime(0);
|
||||||
while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) {
|
while(burn_drive_get_status(drive, &p) != BURN_DRIVE_IDLE) {
|
||||||
if(loop_counter>0)
|
if(loop_counter>0)
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS)
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
|
int percent= 50;
|
||||||
|
|
||||||
|
if(p.sectors>0) /* i want a display of 1 to 99 percent */
|
||||||
|
percent= 1.0+((double) p.sector+1.0)/((double) p.sectors)*98.0;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rcdrskin: blanking sector %d (%lu seconds elapsed) ",
|
"\rcdrskin: blanking ( done %2d%% , %lu seconds elapsed ) ",
|
||||||
p.sector,(unsigned long) (Sfile_microtime(0)-start_time));
|
percent,(unsigned long) (Sfile_microtime(0)-start_time));
|
||||||
sleep(2);
|
}
|
||||||
|
sleep(1);
|
||||||
loop_counter++;
|
loop_counter++;
|
||||||
}
|
}
|
||||||
blanking_done:;
|
blanking_done:;
|
||||||
skin->drive_is_busy= 0;
|
skin->drive_is_busy= 0;
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,
|
||||||
|
"\rcdrskin: blanking done \n");
|
||||||
printf("Blanking time: %.3fs\n",Sfile_microtime(0)-start_time);
|
printf("Blanking time: %.3fs\n",Sfile_microtime(0)-start_time);
|
||||||
fprintf(stderr,"cdrskin: blanking done\n");
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
Cdrskin_release_drive(skin,0);
|
Cdrskin_release_drive(skin,0);
|
||||||
return(1);
|
return(1);
|
||||||
@ -3733,30 +3741,50 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin,
|
|||||||
current_time= Sfile_microtime(0);
|
current_time= Sfile_microtime(0);
|
||||||
elapsed_total_time= current_time-start_time;
|
elapsed_total_time= current_time-start_time;
|
||||||
elapsed_time= current_time-*last_time;
|
elapsed_time= current_time-*last_time;
|
||||||
time_to_tell= (elapsed_time>=1.0);
|
time_to_tell= (elapsed_time>=1.0)&&(elapsed_total_time>=1.0);
|
||||||
|
|
||||||
if(drive_status==BURN_DRIVE_WRITING) {
|
if(drive_status==BURN_DRIVE_WRITING) {
|
||||||
;
|
;
|
||||||
} else if(drive_status==BURN_DRIVE_WRITING_LEADIN) {
|
} else if(drive_status==BURN_DRIVE_WRITING_LEADIN
|
||||||
|
|
||||||
|
#ifdef Cdrskin_allow_libburn_taO
|
||||||
|
|| drive_status==BURN_DRIVE_WRITING_PREGAP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) {
|
||||||
if(time_to_tell || skin->is_writing) {
|
if(time_to_tell || skin->is_writing) {
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
if(skin->is_writing)
|
if(skin->is_writing)
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rcdrskin: writing lead-in since %.f seconds ",
|
"\rcdrskin: working pre-track (burning since %.f seconds) ",
|
||||||
elapsed_total_time);
|
elapsed_total_time);
|
||||||
}
|
}
|
||||||
skin->is_writing= 0;
|
skin->is_writing= 0;
|
||||||
advance_interval= 1;
|
advance_interval= 1;
|
||||||
}
|
}
|
||||||
{ret= 2; goto ex;}
|
{ret= 2; goto ex;}
|
||||||
} else if(drive_status==BURN_DRIVE_WRITING_LEADOUT) {
|
} else if(drive_status==BURN_DRIVE_WRITING_LEADOUT
|
||||||
|
|
||||||
|
#ifdef Cdrskin_allow_libburn_taO
|
||||||
|
|| drive_status==BURN_DRIVE_CLOSING_TRACK
|
||||||
|
|| drive_status==BURN_DRIVE_CLOSING_SESSION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
) {
|
||||||
|
|
||||||
|
#ifdef Cdrskin_allow_libburn_taO
|
||||||
|
if(drive_status==BURN_DRIVE_CLOSING_SESSION &&
|
||||||
|
skin->previous_drive_status!=drive_status)
|
||||||
|
{printf("\nFixating...\n"); fflush(stdout);}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(time_to_tell || skin->is_writing) {
|
if(time_to_tell || skin->is_writing) {
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
if(skin->is_writing)
|
if(skin->is_writing)
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"\rcdrskin: writing lead-out after %.f seconds ",
|
"\rcdrskin: working post-track (burning since %.f seconds) ",
|
||||||
elapsed_total_time);
|
elapsed_total_time);
|
||||||
}
|
}
|
||||||
skin->is_writing= 0;
|
skin->is_writing= 0;
|
||||||
@ -3802,7 +3830,7 @@ int Cdrskin_burn_pacifier(struct CdrskiN *skin,
|
|||||||
|
|
||||||
if(written_total_bytes<1024*1024) {
|
if(written_total_bytes<1024*1024) {
|
||||||
thank_you_for_patience:;
|
thank_you_for_patience:;
|
||||||
if(time_to_tell || skin->is_writing) {
|
if(time_to_tell || (skin->is_writing && elapsed_total_time>=1.0)) {
|
||||||
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
if(skin->verbosity>=Cdrskin_verbose_progresS) {
|
||||||
if(skin->is_writing)
|
if(skin->is_writing)
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
@ -3810,9 +3838,9 @@ thank_you_for_patience:;
|
|||||||
"\rcdrskin: thank you for being patient since %.f seconds ",
|
"\rcdrskin: thank you for being patient since %.f seconds ",
|
||||||
elapsed_total_time);
|
elapsed_total_time);
|
||||||
}
|
}
|
||||||
skin->is_writing= 0;
|
|
||||||
advance_interval= 1;
|
advance_interval= 1;
|
||||||
}
|
}
|
||||||
|
skin->is_writing= 0;
|
||||||
{ret= 2; goto ex;}
|
{ret= 2; goto ex;}
|
||||||
}
|
}
|
||||||
new_mb= written_total_bytes/(1024*1024);
|
new_mb= written_total_bytes/(1024*1024);
|
||||||
@ -3967,6 +3995,7 @@ ex:;
|
|||||||
*total_count= *last_count;
|
*total_count= *last_count;
|
||||||
*last_time= current_time;
|
*last_time= current_time;
|
||||||
}
|
}
|
||||||
|
skin->previous_drive_status= drive_status;
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2006.11.01.172004"
|
#define Cdrskin_timestamP "2006.11.02.211816"
|
||||||
|
@ -217,7 +217,16 @@ enum burn_drive_status
|
|||||||
/** The drive is erasing a disc */
|
/** The drive is erasing a disc */
|
||||||
BURN_DRIVE_ERASING,
|
BURN_DRIVE_ERASING,
|
||||||
/** The drive is being grabbed */
|
/** The drive is being grabbed */
|
||||||
BURN_DRIVE_GRABBING
|
BURN_DRIVE_GRABBING,
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
/** The drive gets written zeroes before the track payload data */
|
||||||
|
BURN_DRIVE_WRITING_PREGAP,
|
||||||
|
/** The drive is told to close a track (TAO only) */
|
||||||
|
BURN_DRIVE_CLOSING_TRACK,
|
||||||
|
/** The drive is told to close a session (TAO only) */
|
||||||
|
BURN_DRIVE_CLOSING_SESSION
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Information about a track on a disc - this is from the q sub channel of the
|
/** Information about a track on a disc - this is from the q sub channel of the
|
||||||
|
@ -126,14 +126,21 @@ int burn_write_close_track(struct burn_write_opts *o, int tnum)
|
|||||||
{
|
{
|
||||||
char msg[81];
|
char msg[81];
|
||||||
|
|
||||||
sprintf(msg, "Closing track %2.2d\n", tnum+1);
|
sprintf(msg, "Closing track %2.2d", tnum+1);
|
||||||
libdax_msgs_submit(libdax_messenger, o->drive->global_index,0x00020119,
|
libdax_msgs_submit(libdax_messenger, o->drive->global_index,0x00020119,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg,0,0);
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH, msg,0,0);
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
o->drive->busy = BURN_DRIVE_CLOSING_TRACK;
|
||||||
|
|
||||||
/* MMC-1 mentions track number 0xFF for "the incomplete track",
|
/* MMC-1 mentions track number 0xFF for "the incomplete track",
|
||||||
MMC-3 does not. I tried both. 0xFF was in effect when other
|
MMC-3 does not. I tried both. 0xFF was in effect when other
|
||||||
bugs finally gave up and made way for readable tracks. */
|
bugs finally gave up and made way for readable tracks. */
|
||||||
o->drive->close_track_session(o->drive, 0, 0xff); /* tnum+1); */
|
o->drive->close_track_session(o->drive, 0, 0xff); /* tnum+1); */
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
o->drive->busy = BURN_DRIVE_WRITING;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +152,14 @@ int burn_write_close_session(struct burn_write_opts *o)
|
|||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Closing session", 0, 0);
|
"Closing session", 0, 0);
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
o->drive->busy = BURN_DRIVE_CLOSING_SESSION;
|
||||||
|
|
||||||
o->drive->close_track_session(o->drive, 1, 0);
|
o->drive->close_track_session(o->drive, 1, 0);
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
o->drive->busy = BURN_DRIVE_WRITING;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,6 +505,10 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
|
|
||||||
/* XXX for tao, we don't want the pregaps but still want post? */
|
/* XXX for tao, we don't want the pregaps but still want post? */
|
||||||
if (o->write_type != BURN_WRITE_TAO) {
|
if (o->write_type != BURN_WRITE_TAO) {
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
d->busy = BURN_DRIVE_WRITING_PREGAP;
|
||||||
|
|
||||||
if (t->pregap1)
|
if (t->pregap1)
|
||||||
d->rlba += 75;
|
d->rlba += 75;
|
||||||
if (t->pregap2)
|
if (t->pregap2)
|
||||||
@ -519,6 +537,10 @@ int burn_write_track(struct burn_write_opts *o, struct burn_session *s,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* user data */
|
/* user data */
|
||||||
|
|
||||||
|
/* ts A61102 */
|
||||||
|
d->busy = BURN_DRIVE_WRITING;
|
||||||
|
|
||||||
sectors = burn_track_get_sectors(t);
|
sectors = burn_track_get_sectors(t);
|
||||||
open_ended = burn_track_is_open_ended(t);
|
open_ended = burn_track_is_open_ended(t);
|
||||||
|
|
||||||
@ -660,7 +682,7 @@ return crap. so we send the command, then ignore the result.
|
|||||||
when and why it occurs. Multi-session will hardly
|
when and why it occurs. Multi-session will hardly
|
||||||
work on base of flat guessing.
|
work on base of flat guessing.
|
||||||
*/
|
*/
|
||||||
sprintf(msg, "Ignored nwa: %d\n", res);
|
sprintf(msg, "Ignored nwa: %d", res);
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002,
|
libdax_msgs_submit(libdax_messenger, d->global_index, 0x00000002,
|
||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user