Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
/* Записываем в регистр данных переданный 12-байтный командный пакет
* (отметим одну особенность – если записывать по одному байту, команда работать не будет)
*/
for(i = 0; i < 12; i += 2) {
memcpy((void *)&a, (cmd_buff + i), 2);
OUT_P_W(a, port);
}
port = 0x177;
/* Ждём сброса бита BSY и установки DRDY */
for(;;) {
do {
IN_P_B(status, port);
} while(status & BSY);
if(status & DRDY) break;
}
return;
}
Перед отправкой устройству команды START/STOP UNIT проверим его готовность. Проверка готовности выполняется путём посылки устройству команды TEST UNIT READY:
void wait_while_ready()
{
__u8 cmd_buff[12];
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x00;
send_packet_command(cmd_buff);
return;
}
Функция закрытия лотка CD-ROM:
void close_cdrom()
{
__u8 cmd_buff[12];
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x1B; // код команды START/STOP UNIT
cmd_buff[4] = 0x3; // LoEj = 1, Start = 1
send_packet_command(cmd_buff);
}
Функция открытия лотка CD-ROM:
void open_cdrom()
{
__u8 cmd_buff[12];
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x1B;
cmd_buff[4] = 0x2; // LoEj = 1, Start = 0
send_packet_command(cmd_buff);
}
Главная функция:
int main()
{
ioperm(0x170, 8, 1);
/* Ждём готовности устройства и открываем лоток */
wait_while_ready();
open_cdrom();
printf("CD-ROM открыт. Нажмите 'Enter' для закрытия.");
getchar();
/* Закрываем лоток */
close_cdrom();
wait_while_ready();
printf("OK. CD-ROM закрыт. ");
ioperm(0x170, 8, 0);
return 0;
}
Теперь вместо команды START/STOP UNIT пошлём устройству команду PLAY AUDIO. По этой команде устройство начнёт воспроизведение звукового фрагмента с Аудио-CD. Формат команды PLAY AUDIO представлен на рис. 2:
PLAY AUDIO Command
Bit Byte |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
|
Operation Code (45h) |
|
|||||
1 |
|
Reserved |
|
|||||
2 |
MSB
|
|
Starting Logical Block Address |
|
LSB |
|||
3 |
||||||||
4 |
||||||||
5 |
||||||||
6 |
|
Reserved |
|
|||||
7 |
MSB |
|
Transfer Length |
|
LSB |
|||
8 |
||||||||
9 |
|
Reserved |
|
|||||
10 |
|
Reserved |
|
|||||
11 |
|
Reserved |
|