Newsgroup: it.comp.os.linux.development
Titolo: Apertura del cd-rom

Ho gia' postato questa domanda in giro per il mondo... ma ancora
nessuno e' riuscito a darmi una risposta (anche minima). Pero' non
dispero!
Ho la necessita' di rilevare quando il pulsante di apetura del cd-rom
venga pigiato; ma non ho la minima idea di come fare.
Ho gia' guardato il kernel nella parte del cd-rom, ma non sono
riuscito a ricavare nulla di rilevante. Sono anche disposto ad
apportare delle modifiche al kernel per far funzionare il mio sw.
Mi serve questa fiunzionalita' perche il SW che scrivo e' quello per
una postazione embedded con una ridottissima interfaccia utente.
Grazie a tutti!
NetNoice

venga pigiato; ma non ho la minima idea di come fare.
Non mi risulta che l'hardware lo permetta.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

venga pigiato; ma non ho la minima idea di come fare.
Provato a guardare il sorgente eject serve per smontare ed Estrarre il
cassetto del cd magari trovi il codice che ti serve.
So anche che nel kernel 2.2.14 (la mandrake 7 lo implementera')
vi sara' la possibilita' di smontare e montare in automatico i device
come in win. Anche l'ultima versione di kde 1.1.2 monta e smonta
i cd in automatico come win, se premo il pulsante del cd-rom
questo mi si smonta al volo ed esce per cui il codice per monitorare
il tasto del cdrom deve per forza di cose essere contenuto nei 
sorgenti di kde.
p.s su linux&c trovi i sorgenti di kde magari facendo un greep e cercando
qualche funzione con nome appropriato...
buona ricerca e facci sapere.
Bye 
NamkoTech

Ciao Netnoice,
 > Ho la necessita' di rilevare quando il pulsante di apetura del cd-rom
 > venga pigiato; ma non ho la minima idea di come fare.
non credo che l'hardware sia predisposto per inviare questo dato.
Pero' si puo' sempre aggirare il problema.
Tenta di leggere il CD, e se da' errore allora puoi dedurre (?) che e'
aperto (o vuoto).
Al limite fallo periodicamente, e metti lo stato del CD in un file, cosi'
sai quando cambia...
Se vuoi sapere se il CD e' stato cambiato, allora leggi qualche traccia, e
usala come firma.
Funziona per i tuoi scopi?
-- 
Pa.Ped, Como
paolo.p...@flashnet.it

 Non mi risulta che l'hardware lo permetta.
Forse si puo` scrivere una applicazioncina che controlli l'estrazione del
medium. C'e` un programma che fa cose del genere per i floppy (non ricordo
il nome, forse floppyd?).
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

come in win.
Non e` certo una novita`, basta usa l'automounter.


Non e` certo una novita`, basta usa l'automounter.
e' una novita' che venga implementato di serie in una
distribuzione ;-)
bye
NamkoTech

il nome, forse floppyd?).
L'hardare e l'API non sono nemmeno un po' simili.


una postazione embedded con una ridottissima interfaccia utente.
AFAIK: la cosa si può fare ma é un poco macchinosa :-)
prendi le specifiche SCSI-3 MMC-2 working draft:
comando MECHANISM STATUS
c'è un bit della tabella ritornata che si chiama Door Open.
Controlli quindi quando cambia da Door Open a !Door Open.
Peccato che la gestione va fatta a controllo di programma :-(
Magari si può fare a interruzione ma sono ignorante e non lo so.
Oppure anche gli ultimi neuroni se ne sono andati durante i gozzovigliamenti
Natalizi eh eh eh ...
-- 
		Giuseppe Corbelli
    -=< A Metal Heart Is Hard To Tear Apart >=-
ANTI-SPAM: E-Mail address is fake. Substitute cowo with IHATESPAM.

Natalizi eh eh eh ...
Risposta v1.1
C'é un metodo migliore. Sempre dalle specifiche mmc usa il comando
GET EVENT / STATUS NOTIFICATION. 
nella sezione Media Event c'é un codice EjectRequest che penso identifichi
correttamente la tua esigenza.


Se il tuo hardware supporta questa funzionalita' da un' occhiata a cdrom.h !
esempio preso da un mio lettore cd molto primordiale:
void eject(void)
{
   if (ejected==TRUE)
   {
      rc=ioctl(drive,CDROMCLOSETRAY);
      ejected=FALSE;
   }
   else
   {
      rc=ioctl(drive,CDROMEJECT);
      ejected=TRUE;
   }
   if (rc<0) printw("Non posso espellere il Cd.\n",rc);
}

Giovanni ha scritto nel messaggio ...

Ma in caso di errore ejected avrebbe un valore sbagliato. Dovresti fare
if (rc < 0) {
    printw("blabla");
    ejected = !ejected;
}
Saluti,
    Mardy

NamkoTech