Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

 

Рисунок 13. Формат данных TOC, Format Field = 10b

Здесь картина аналогичная – первым идёт заголовок размером 4 байта, а за ним расположены записи TOC.

Рассмотрим функцию read_toc(), выполняющую чтение TOC, при условии, что поле Format содержит 00b. Формат дескриптора трека TOC, представленный на рис. 12, описывает структура struct toc:

struct toc {

    __u8 res;

    __u8 adr_cntl;

    __u8 trk_num; // номер трека

    __u8 res1;

    __u32 lba; // адрес сектора

} __attribute__ ((packed)) *t;

 

int read_toc()

{

#define PACKET_LEN 12 // длина пакетной команды

#define READ_TOC 0x43 // код команды READ TOC

#define MAX_TOC_LEN 804 // максимальная длина данных TOC (Format = 00b)

 

    int i = 0;

    int total_tracks = 0;

    __u8 cmd_buff[PACKET_LEN];

    __u8 *data_buff;

    __u16 toc_length = 0, a;

 

/* Формируем пакетную команду. Поле Starting Track содержит 0, по команде READ TOC будет выдана информация

 * обо всех треках диска, начиная с первого

 */

    memset((void *)cmd_buff, 0, PACKET_LEN);

    cmd_buff[0] = READ_TOC;

    cmd_buff[6] = 0;

 

/* Размер области памяти, выделенной для данных TOC */

    a = MAX_TOC_LEN;

    a = __swab16(a);

    memcpy((void *)(cmd_buff + 7), (void *)&a, 2);

 

    data_buff = (__u8 *)malloc(MAX_TOC_LEN);

    memset(data_buff, 0, MAX_TOC_LEN);

 

/* Посылаем устройству пакетную команду */

    if(send_packet_data_command(MAX_TOC_LEN, cmd_buff) < 0)

           return -1;

 

/* Считываем результат */

    for(i = 0;;i += 2) {

           IN_P_W(a, 0x170);

           // размер данных TOC

           if(i == 0) toc_length = __swab16(a);

           if(i > toc_length) break;

           memcpy((void *)(data_buff + i), (void *)&a, 2);

    }

 

/* Число треков на диске */

    total_tracks = data_buff[3];

 

/* Отобразим результат */

    printf("TOC length - %d ", toc_length);

    printf("First: %d ", data_buff[2]);

    printf("Last: %d ", total_tracks);

 

/* Выделим память и скопируем туда дескрипторы треков */

    t = (struct toc *)malloc(toc_length);


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100