Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
port = 0x170;
/* В регистр данных записываем 12-байтный командный пакет */
for(i = 0; i < 12; i += 2) {
memcpy((void *)&a, (cmd_buff + i), 2);
OUT_P_W(a, port);
}
/* Ждём завершения команды - установленного бита DRQ. Если произошла ошибка - фиксируем этот факт */
port = 0x177;
for(;;) {
do {
IN_P_B(status, port);
} while(status & BSY);
// ошибка выполнения команды!
if(status & ERR) return -1;
if(status & DRQ) break;
}
return 0;
}
В качестве примеров пакетных команд, требующих передачи данных от устройства к хосту, рассмотрим следующий список:
n INQUIRY
n READ CD
n REQUEST SENSE
n READ TOC
n SEEK
n READ SUB-CHANNEL
По команде INQUIRY устройство выдаёт блок информации о своих параметрах. Формат команды INQUIRY следующий:
n байт 0 – код команды INQUIRY, значение 0x12;
n байт 4 – размер выделенной области для считываемых данных.
Формат стандартной справки, выдаваемой по команде INQUIRY, приведен на рис. 3 (INF-8020i, п. 10.8.1.1, стр. 94.).
Функция read_inquiry() считывает идентификатор изготовителя (Vendor Identification), идентификатор изделия (Product Identification) и версию изделия (Product Revision Level):
int read_inquiry()
{
int i = 0;
__u8 cmd_buff[12];
__u16 inquiry_buff[20]; // буфер для считываемых данных
__u8 data_len = 40; // размер запрашиваемых данных
memset(inquiry_buff, 0, 40);
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x12; // код команды INQUIRY
cmd_buff[4] = data_len;
/* Посылаем устройству пакетную команду */
if(send_packet_data_command(data_len, cmd_buff) < 0) {
printf("INQUIRY command error ");
return -1;
}
/* Считываем результат и отображаем его */
for(i = 0; i < 20; i++) IN_P_W(inquiry_buff[i], 0x170);
printf("%s ", inquiry_buff + 4);
return 0;
}
Полный листинг программы чтения идентификационной информации устройства находится в файле RAW/inquiry_cd.c.
INQUIRY Data Format
Bit Byte |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
Reserved |
Peripheral Device Type |
||||||
1 |
RMB |
Reserved |
||||||
2 |
ISO Version |
ECMA Version |
ANSI Version (00) |
|||||
3 |
ATAPI Version |
Response Data Format |
||||||
4 |
Additional Length (Number of bytes following this one) |
|||||||
5 |
Reserved |
|||||||
6 |
Reserved |
|||||||
7 |
Reserved |
|||||||
8 |
Vendor Identification |
|||||||
15 |
||||||||
16 |
Product Identification |
|||||||
31 |
||||||||
32 |
Product Revision Level |
|||||||
35 |
||||||||
36 |
Vendor-specific |
|||||||
55 |
||||||||
..... |