[FLUG] CDROM state ... spunto argomenti cena

Ciao,

alla cena si e' parlato di come fare per sapere se c'e' un CD inserito nel CDROM ...

Eccolo qua.


Ciao, Thomas.


#include <stream.h>
#include <fcntl.h>
//#include <errno.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
 
#include <linux/cdrom.h>

void main () {
                
        char    *type, *answer;
        int drive = open ("/dev/cdrom",O_RDONLY | O_NONBLOCK);
        int driveval, discval;
        struct cdrom_generic_command gen_cmd;
        
        if (drive != -1) {
                discval = ioctl (drive, CDROM_DRIVE_STATUS, &gen_cmd);
                        switch (discval){
                                case CDS_NO_INFO :
                                        answer = "Query non supported by 
device";
                                        break;
                                case CDS_NO_DISC :
                                        answer = "No Disk";
                                        break;
                                case CDS_TRAY_OPEN:
                                        answer = "Tray Open";
                                        break;
                                case CDS_DRIVE_NOT_READY:
                                        answer = "Drive not Ready";
                                        break;
                                case CDS_DISC_OK:
                                        answer = "Disk Inside";
                                        break;
                                default:
                                        answer = "Unknown";
                        }
                cout << "Drive status : "<< answer << "\n";
                if (driveval == CDS_DISC_OK) {
                        discval = ioctl (drive, CDROM_DISC_STATUS, &gen_cmd);
                        switch (discval){
                                case CDS_NO_INFO :
                                        type = "Query non supported by device";
                                        break;
                                case CDS_AUDIO :
                                        type = "audio";
                                        break;
                                case CDS_DATA_1:
                                        type = "data_1";
                                        break;
                                case CDS_DATA_2:
                                        type = "data_2";
                                        break;
                                case CDS_XA_2_1:
                                        type = "XA_2_1";
                                        break;
                                case CDS_XA_2_2:
                                        type = "XA_2_2";
                                        break;
                                case CDS_MIXED:
                                        type = "MIXED";
                                        break;
                                default:
                                        type = "Unknown";
                        }
                        cout << "Disc type : " << type << "\n";
                }
                close (drive);
        } else cout << "Failed to open device\n";
}

Other related posts: