aboutsummaryrefslogtreecommitdiff
path: root/archive/sg_simple_andre.c
blob: d163022454ff8b685aa748d0635bee710b23a8ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <scsi/sg.h>


#define READ10_REPLY_LEN 512
#define READ10_CMD_LEN 10

// read 0x102 blocks from block # 0x3040506
//     [just to to you where the fields are]
..............

    unsigned char r10CmdBlk [READ10_CMD_LEN] =
		{0x28, 0, 3, 4, 5, 6, 0, 1, 2, 0};
    sg_io_hdr_t io_hdr;
    unsigned char inBuff[READ10_REPLY_LEN];
    unsigned char sense_buffer[32];

    /* Prepare READ_10 command */
    memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
    io_hdr.interface_id = 'S';
    io_hdr.cmd_len = sizeof(r10CmdBlk);
    io_hdr.mx_sb_len = sizeof(sense_buffer);
    io_hdr.dxfer_direction = SG_DXFER_FROM_DEV;
    io_hdr.dxfer_len = READ10_REPLY_LEN;
    io_hdr.dxferp = inBuff;
    io_hdr.cmdp = r10CmdBlk;
    io_hdr.sbp = sense_buffer;
    io_hdr.timeout = 20000;     /* 20000 millisecs == 20 seconds */

    if (ioctl(sg_fd, SG_IO, &io_hdr) < 0) {
        perror("READ_10 SG_IO ioctl error");
        .....
    }
    // block should now be in 'inBuff'