Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.27;
Скачать: CL | DM;

Вниз

Подскажите, как можно проверить открыт ли CD-ROM   Найти похожие ветки 

 
СССР   (2008-08-26 19:47) [0]

Доброе время суток
Подскажите, как можно проверить открыт ли CD-ROM, желательно с примерам кода.


 
МистерТ   (2008-08-27 09:09) [1]

1) удостовериться, что к компьютеру подключена веб-камера
2) выдать пользователю окошко с просьбой навести камеру на CD-ROM
3) прогнать полученную с камеры картинку через модуль распознания изображения и сравнить с эталонной картинкой открытого CD-ROM
мелочами типа юстировки направления "взгляда" камеры можно принебречь, если составить хорошую базу фотографий открытого CD-ROM с разных ракурсов.


 
{RASkov} ©   (2008-08-27 11:12) [2]

http://yandex.ru/yandsearch?clid=9582&text=%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C+%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82+%D0%BB%D0%B8+CD-ROM
Но у меня способ из первых ссылок не сработал, поэтому я сразу не стал отвечать, но после [1].... толи присоединится к первому посту, толи... :)
Я не задавался таким вопросом, возможно есть способ "более менее 100-процентный", но так же нужно учитывать, что приводы могут и не иметь лотка для CD т.е. выдвигаться там нечему... Может еще какие нюансы есть, как например маленький нюансик - кол-во приводов в системе...


 
han_malign ©   (2008-08-29 16:10) [3]

номер раз http://www.rsdn.ru/article/baseserv/scsi.xml
номер три(глобальный) http://www.t10.org/
номер два(конкретный, но на Ц и для wnaspi32(NT/2000/9X))
int haid, target, lun;
DWORD dwResult;

haid = atoi(argv[1]);

if (argc < 3) target = 0;
   else target = atoi(argv[2]);

if (argc < 4) lun = 0;
   else lun = atoi(argv[3]);

dwResult = GetASPI32SupportInfo();
if (BYTE(dwResult >>8) != SS_COMP)
   {
    printf("Error: SCSI %Xh. Initializaton failed.\n", BYTE(dwResult >> 8));
    return 1;
    }

HANDLE hEvent;

hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hEvent == NULL)
   {
    printf("Error: System %Xh. Can not create event.\n", GetLastError());
    return 2;
    }

SRB_ExecSCSICmd esc;
BYTE buf[8];

ZeroMemory(buf, 8);

ZeroMemory(&esc, sizeof(SRB_ExecSCSICmd));
esc.SRB_Cmd  = SC_EXEC_SCSI_CMD;
esc.SRB_HaId = haid;
esc.SRB_Flags = SRB_EVENT_NOTIFY | SRB_DIR_IN;
esc.SRB_Target = target;
esc.SRB_Lun = lun;
esc.SRB_SenseLen = SENSE_LEN;
esc.SRB_BufLen = 0x8;
esc.SRB_BufPointer = buf;
esc.SRB_CDBLen = 10;
esc.SRB_PostProc = hEvent;
esc.CDBByte[0]  = 0x4A; // SCSI Command (Get Event/Status Notification)
esc.CDBByte[1]  = 0x1;  // IMMED is set
esc.CDBByte[2]  = 0x0;
esc.CDBByte[3]  = 0x0;
esc.CDBByte[4]  = 0x10; // Notification Class (Media Status Class Event)
esc.CDBByte[5]  = 0x0;
esc.CDBByte[6]  = 0x0;
esc.CDBByte[7]  = 0x0;  // Allocation Lenght MSB
esc.CDBByte[8]  = 0x8;  // Allocation Length LSB
esc.CDBByte[9]  = 0x0;  

dwResult = SendASPI32Command((LPSRB)&esc);
if (dwResult == SS_PENDING)
   {
    dwResult = WaitForSingleObject(hEvent, INFINITE);
    if (dwResult == WAIT_FAILED)
       {
        dwResult = GetLastError();
        CloseHandle(hEvent);
        printf("Error: System %Xh. Waiting failed.\n", dwResult);
        return 3;
        }
    dwResult = esc.SRB_Status;
    }

CloseHandle(hEvent);

if (dwResult != SS_COMP)
   {
    printf("Error: SCSI %Xh. SCSI command failed.\n", esc.SRB_Status);
    return 4;
    }

if ((buf[2] & 0x7) == 4) printf("Result: door %s\n", (buf[5] & 0x1) ? "open" : "closed");
   else printf("Result: door status unknown.\n");

- осталось срастить номер раз и номер два...


 
KilkennyCat ©   (2008-08-30 23:43) [4]

Мне способ с веб-камерой кажется наиболее достоверным, но я бы все-таки использовал старую мышь.
Мышь разобрать, и прикрепит одним из наиболее удобных способов напротив лотка сидирома так, чтобы при выдвижении он нажимал на кнопку или перекрывал фотодатчик. Если мышь с колесиком, то прикрепить так, чтобы лоток прокручивал колесико, это позволит анализировать не только состояния "открыт" "закрыт" но и собственно процесс.



Страницы: 1 вся ветка

Текущий архив: 2011.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1312707821
Gu
2011-08-07 13:03
2011.11.27
dcu


15-1312489794
Юрий
2011-08-05 00:29
2011.11.27
С днем рождения ! 5 августа 2011 пятница


15-1311859760
Дмитрий С
2011-07-28 17:29
2011.11.27
threadvar


15-1312199219
Григорьев Антон
2011-08-01 15:46
2011.11.27
Ищу программиста в Москве


2-1312739542
KLSA
2011-08-07 21:52
2011.11.27
Аля image editor