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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

        __u8 point;     // POINT

        __u8 min;       // AMIN

        __u8 sec;       // ASEC

        __u8 frame;     // AFRAME

        __u8 zero;      // 0

        __u8 pmin;      // PMIN

        __u8 psec;      // PSEC

        __u8 pframe;    // PFRAME

} __attribute__ ((packed)) pma_t;

 

Обмен данными с sg-драйвером выполняет функция send_cmd(). Параметры функции:

n  cmd – указатель на командный пакет;

n  cmdlen – длина командного пакета;

n  direction – направление передачи данных;

n  data – указатель на блок памяти для данных, передаваемых устройству или принимаемых от устройства. Если обмен данными не предусмотрен, этот параметр содержит значение NULL;

n  datalen – размер блока данных, на который указывает data. Если data == NULL, то datalen == 0

n  timeout – значения time-out.

 

int send_cmd(__u8 *cmd, __u8 cmdlen, unsigned int direction, __u8 *data, __u32 datalen, unsigned int timeout)

{

    int k = 0;

    sg_io_hdr_t io_hdr;

/* В sense_buffer будет сохранена информация о состоянии устройства после выполнения команды */

    __u8 sense_buffer[32];

/* Формируем запрос к sg-драйверу – заполняем поля структуры sg_io_hdr_t необходимыми значениями */

    memset(&io_hdr, 0, sizeof(sg_io_hdr_t));

    io_hdr.interface_id = 'S';

    io_hdr.cmd_len = cmdlen; // длина команды

    io_hdr.mx_sb_len = sizeof(sense_buffer);

    io_hdr.dxfer_direction = direction; // направление передачи данных

    io_hdr.dxfer_len = datalen; // размер данных

    io_hdr.dxferp = data; // указатель на блок данных

    io_hdr.cmdp = cmd; // указатель на командный пакет

    io_hdr.sbp = sense_buffer;

    io_hdr.timeout = timeout;

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

    if(ioctl(sg_fd, SG_IO, &io_hdr) < 0) {

           perror("SG_IO ioctl");

           return -1;

    }

/* Отобразим содержимое sense_buffer, если при выполнении команды произошла ошибка. Это позволит установить причину ошибки */

    if((io_hdr.info & SG_INFO_OK_MASK) != SG_INFO_OK) {

           if (io_hdr.sb_len_wr > 0) {

                 printf("Sense data: ");

                 for (k = 0; k < io_hdr.sb_len_wr; ++k) {

                        if ((k > 0) && (0 == (k % 10))) printf("   ");

                        printf("0x%02x ", sense_buffer[k]);

                 }

                 printf(" ");

           }

           if(io_hdr.masked_status)

                 printf("SCSI status=0x%x ", io_hdr.status);

           if(io_hdr.host_status)

                 printf("Host_status=0x%x ", io_hdr.host_status);

           if(io_hdr.driver_status)

                 printf("Driver_status=0x%x ", io_hdr.driver_status);

           return -1;

    }

    return 0;

}

Проверку готовности устройства к приему команды выполняет функция test_unit_ready():

int test_unit_ready()

{

    __u8 testCmdBlk[6];

    /* Prepare TEST UNIT command */

    memset(testCmdBlk, 0, 6);

    if(send_cmd(testCmdBlk, 6, SG_DXFER_NONE, NULL, 0, 20000) < 0) {


Предыдущая страницаОглавлениеСледующая страница
 
[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]

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