Split automatic drive start function from mmc_function_spy()

This commit is contained in:
Thomas Schmitt 2009-11-18 12:25:57 +00:00
parent 504677de4f
commit acb2f3b173
5 changed files with 56 additions and 23 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.11.17.093602" #define Cdrskin_timestamP "2009.11.18.122713"

View File

@ -424,10 +424,6 @@ struct burn_drive *burn_drive_finish_enum(struct burn_drive *d)
char msg[BURN_DRIVE_ADR_LEN + 160]; char msg[BURN_DRIVE_ADR_LEN + 160];
int ret; int ret;
/* ts A60821
<<< debug: for tracing calls which might use open drive fds */
int mmc_function_spy(struct burn_drive *d, char * text);
d->drive_role = 1; /* MMC drive */ d->drive_role = 1; /* MMC drive */
t = burn_drive_register(d); t = burn_drive_register(d);

View File

@ -245,18 +245,6 @@ int mmc_function_spy(struct burn_drive *d, char * text)
d->cancel = 1; d->cancel = 1;
return 0; return 0;
} }
/* >>> should one rather have a positve list ? */
if (d->is_stopped && strcmp(text, "stop_unit") != 0 &&
strcmp(text, "eject") != 0 &&
strcmp(text, "start_unit") != 0 &&
strcmp(text, "load") != 0 &&
strncmp(text, "enumerate", 9) != 0 &&
strncmp(text, "sg_", 3) != 0) {
d->start_unit(d);
d->is_stopped = 0;
}
return 1; return 1;
} }
@ -285,12 +273,29 @@ int mmc_int_to_four_char(unsigned char *data, int num)
} }
static int mmc_start_for_bit0 = 0;
/* @param flag bit0= the calling function should need no START UNIT.
(Handling depends on mmc_start_for_bit0)
*/
int mmc_start_if_needed(struct burn_drive *d, int flag)
{
if (!d->is_stopped)
return 2;
if ((flag & 1) && !mmc_start_for_bit0)
return 2;
d->start_unit(d);
d->is_stopped = 0;
return 1;
}
void mmc_send_cue_sheet(struct burn_drive *d, struct cue_sheet *s) void mmc_send_cue_sheet(struct burn_drive *d, struct cue_sheet *s)
{ {
struct buffer buf; struct buffer buf;
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_send_cue_sheet") <= 0) if (mmc_function_spy(d, "mmc_send_cue_sheet") <= 0)
return; return;
@ -322,6 +327,7 @@ int mmc_reserve_track(struct burn_drive *d, off_t size)
int lba; int lba;
char msg[80]; char msg[80];
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_reserve_track") <= 0) if (mmc_function_spy(d, "mmc_reserve_track") <= 0)
return 0; return 0;
@ -356,6 +362,7 @@ int mmc_read_track_info(struct burn_drive *d, int trackno, struct buffer *buf,
{ {
struct command c; struct command c;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_track_info") <= 0) if (mmc_function_spy(d, "mmc_read_track_info") <= 0)
return 0; return 0;
@ -408,6 +415,7 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa)
int ret, num, alloc_len = 20; int ret, num, alloc_len = 20;
unsigned char *data; unsigned char *data;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_get_nwa") <= 0) if (mmc_function_spy(d, "mmc_get_nwa") <= 0)
return -1; return -1;
@ -758,6 +766,7 @@ void mmc_write_12(struct burn_drive *d, int start, struct buffer *buf)
struct command c; struct command c;
int len; int len;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_write_12") <= 0) if (mmc_function_spy(d, "mmc_write_12") <= 0)
return; return;
@ -800,6 +809,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf)
O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR); O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
#endif /* Libburn_log_in_and_out_streaM */ #endif /* Libburn_log_in_and_out_streaM */
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_write") <= 0) if (mmc_function_spy(d, "mmc_write") <= 0)
return BE_CANCELLED; return BE_CANCELLED;
@ -1093,6 +1103,7 @@ static int mmc_read_toc_fmt0(struct burn_drive *d)
{ {
int alloc_len = 4, ret; int alloc_len = 4, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_toc_fmt0") <= 0) if (mmc_function_spy(d, "mmc_read_toc_fmt0") <= 0)
return -1; return -1;
ret = mmc_read_toc_fmt0_al(d, &alloc_len); ret = mmc_read_toc_fmt0_al(d, &alloc_len);
@ -1475,6 +1486,7 @@ void mmc_read_toc(struct burn_drive *d)
{ {
int alloc_len = 4, ret; int alloc_len = 4, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_toc") <= 0) if (mmc_function_spy(d, "mmc_read_toc") <= 0)
return; return;
@ -1505,6 +1517,7 @@ int mmc_read_multi_session_c1(struct burn_drive *d, int *trackno, int *start)
struct burn_track **tracks; struct burn_track **tracks;
struct burn_toc_entry toc_entry; struct burn_toc_entry toc_entry;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_multi_session_c1") <= 0) if (mmc_function_spy(d, "mmc_read_multi_session_c1") <= 0)
return 0; return 0;
@ -1894,6 +1907,7 @@ void mmc_read_disc_info(struct burn_drive *d)
{ {
int alloc_len = 34, ret; int alloc_len = 34, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_disc_info") <= 0) if (mmc_function_spy(d, "mmc_read_disc_info") <= 0)
return; return;
@ -1925,6 +1939,7 @@ void mmc_read_atip(struct burn_drive *d)
4234, 5646, 7056, 8468, -12, -13, -14, -15}; 4234, 5646, 7056, 8468, -12, -13, -14, -15};
/* 24, 32, 40, 48, -, -, -, - */ /* 24, 32, 40, 48, -, -, -, - */
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_atip") <= 0) if (mmc_function_spy(d, "mmc_read_atip") <= 0)
return; return;
@ -2082,6 +2097,7 @@ void mmc_read_sectors(struct burn_drive *d,
int errorblock, req; int errorblock, req;
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_read_sectors") <= 0) if (mmc_function_spy(d, "mmc_read_sectors") <= 0)
return; return;
@ -2152,6 +2168,7 @@ void mmc_erase(struct burn_drive *d, int fast)
{ {
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_erase") <= 0) if (mmc_function_spy(d, "mmc_erase") <= 0)
return; return;
@ -2173,6 +2190,7 @@ void mmc_read_lead_in(struct burn_drive *d, struct buffer *buf)
int len; int len;
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_read_lead_in") <= 0) if (mmc_function_spy(d, "mmc_read_lead_in") <= 0)
return; return;
@ -2201,6 +2219,7 @@ void mmc_perform_opc(struct burn_drive *d)
{ {
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_perform_opc") <= 0) if (mmc_function_spy(d, "mmc_perform_opc") <= 0)
return; return;
@ -2233,6 +2252,7 @@ int mmc_set_streaming(struct burn_drive *d,
unsigned char *pd; unsigned char *pd;
int key, asc, ascq; int key, asc, ascq;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_set_streaming") <= 0) if (mmc_function_spy(d, "mmc_set_streaming") <= 0)
return 0; return 0;
@ -2323,6 +2343,7 @@ void mmc_set_speed(struct burn_drive *d, int r, int w)
int ret, end_lba = 0; int ret, end_lba = 0;
struct burn_speed_descriptor *best_sd = NULL; struct burn_speed_descriptor *best_sd = NULL;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_set_speed") <= 0) if (mmc_function_spy(d, "mmc_set_speed") <= 0)
return; return;
@ -2663,6 +2684,7 @@ void mmc_get_configuration(struct burn_drive *d)
{ {
int alloc_len = 8, ret; int alloc_len = 8, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_get_configuration") <= 0) if (mmc_function_spy(d, "mmc_get_configuration") <= 0)
return; return;
@ -2866,6 +2888,7 @@ int mmc_read_format_capacities(struct burn_drive *d, int top_wanted)
{ {
int alloc_len = 4, ret; int alloc_len = 4, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_format_capacities") <= 0) if (mmc_function_spy(d, "mmc_read_format_capacities") <= 0)
return 0; return 0;
@ -3012,6 +3035,7 @@ int mmc_format_unit(struct burn_drive *d, off_t size, int flag)
int key, asc, ascq; int key, asc, ascq;
int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */ int full_format_type = 0x00; /* Full Format (or 0x10 for DVD-RW ?) */
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_format_unit") <= 0) if (mmc_function_spy(d, "mmc_format_unit") <= 0)
return 0; return 0;
size_mode = (flag >> 1) & 3; size_mode = (flag >> 1) & 3;
@ -3753,6 +3777,7 @@ int mmc_get_write_performance(struct burn_drive *d)
{ {
int alloc_len = 8, max_descr = 0, ret; int alloc_len = 8, max_descr = 0, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_get_write_performance") <= 0) if (mmc_function_spy(d, "mmc_get_write_performance") <= 0)
return 0; return 0;
@ -3893,6 +3918,7 @@ int mmc_read_10(struct burn_drive *d, int start,int amount, struct buffer *buf)
{ {
struct command c; struct command c;
mmc_start_if_needed(d, 0);
if (mmc_function_spy(d, "mmc_read_10") <= 0) if (mmc_function_spy(d, "mmc_read_10") <= 0)
return -1; return -1;
; ;
@ -3951,6 +3977,7 @@ int mmc_read_capacity(struct burn_drive *d)
int alloc_len= 8; int alloc_len= 8;
d->media_read_capacity = 0x7fffffff; d->media_read_capacity = 0x7fffffff;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_capacity") <= 0) if (mmc_function_spy(d, "mmc_read_capacity") <= 0)
return 0; return 0;
@ -4035,6 +4062,7 @@ int mmc_read_disc_structure(struct burn_drive *d,
{ {
int alloc_len = 4, ret; int alloc_len = 4, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "mmc_read_disc_structure") <= 0) if (mmc_function_spy(d, "mmc_read_disc_structure") <= 0)
return 0; return 0;

View File

@ -93,4 +93,12 @@ int mmc_get_media_product_id(struct burn_drive *d,
char **product_id, char **media_code1, char **media_code2, char **product_id, char **media_code1, char **media_code2,
char **book_type, int flag); char **book_type, int flag);
/* ts A60910 (estimated) */
int mmc_function_spy(struct burn_drive *d, char * text);
/* ts A91118 */
int mmc_start_if_needed(struct burn_drive *d, int flag);
#endif /*__MMC*/ #endif /*__MMC*/

View File

@ -27,11 +27,6 @@
#include "libdax_msgs.h" #include "libdax_msgs.h"
extern struct libdax_msgs *libdax_messenger; extern struct libdax_msgs *libdax_messenger;
/* ts A70910
debug: for tracing calls which might use open drive fds
or for catching SCSI usage of emulated drives. */
int mmc_function_spy(struct burn_drive *d, char * text);
/* spc command set */ /* spc command set */
/* ts A70519 : allocation length byte 3+4 was 0,255 */ /* ts A70519 : allocation length byte 3+4 was 0,255 */
@ -477,6 +472,7 @@ void spc_sense_caps(struct burn_drive *d)
{ {
int alloc_len, start_len = 30, ret; int alloc_len, start_len = 30, ret;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "sense_caps") <= 0) if (mmc_function_spy(d, "sense_caps") <= 0)
return; return;
@ -501,6 +497,7 @@ void spc_sense_error_params(struct burn_drive *d)
unsigned char *page; unsigned char *page;
struct command c; struct command c;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "sense_error_params") <= 0) if (mmc_function_spy(d, "sense_error_params") <= 0)
return; return;
@ -534,6 +531,7 @@ void spc_select_error_params(struct burn_drive *d,
struct buffer buf; struct buffer buf;
struct command c; struct command c;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "select_error_params") <= 0) if (mmc_function_spy(d, "select_error_params") <= 0)
return; return;
@ -575,6 +573,7 @@ void spc_sense_write_params(struct burn_drive *d)
unsigned char *page; unsigned char *page;
struct command c; struct command c;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "sense_write_params") <= 0) if (mmc_function_spy(d, "sense_write_params") <= 0)
return; return;
@ -640,6 +639,7 @@ void spc_select_write_params(struct burn_drive *d,
struct command c; struct command c;
int alloc_len; int alloc_len;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "select_write_params") <= 0) if (mmc_function_spy(d, "select_write_params") <= 0)
return; return;
@ -724,6 +724,7 @@ void spc_probe_write_modes(struct burn_drive *d)
int last_try = 0; int last_try = 0;
struct command c; struct command c;
mmc_start_if_needed(d, 1);
if (mmc_function_spy(d, "spc_probe_write_modes") <= 0) if (mmc_function_spy(d, "spc_probe_write_modes") <= 0)
return; return;