Contiki-NG
spc2_struct.h
1#ifndef SPC2_STRUCT_H_6R1KTJP0NJ__
2#define SPC2_STRUCT_H_6R1KTJP0NJ__
3
4typedef uint8_t uint40_bytes[5];
5typedef uint8_t uint32_bytes[4];
6typedef uint8_t uint16_bytes[2];
7
8#ifndef CC_BYTE_ALIGNED
9#ifdef __GNUC__
10#define CC_BYTE_ALIGNED __attribute__ ((packed))
11#endif
12#endif
13
14#ifndef CC_BYTE_ALIGNED
15#define CC_BYTE_ALIGNED
16#endif
17
18#define HOST16_TO_BE_BYTES(x) {(((x) >> 8) & 0xff), ((x) & 0xff)}
19#define HOST32_TO_BE_BYTES(x) {(((x) >> 24) & 0xff), (((x) >> 16) & 0xff), \
20 (((x) >> 8) & 0xff), ((x) & 0xff)}
21#define HOST40_TO_BE_BYTES(x) {(((x) >> 32) & 0xff), (((x) >> 24) & 0xff), (((x) >> 16) & 0xff), \
22 (((x) >> 8) & 0xff), ((x) & 0xff)}
23
24inline unsigned long
25be16_to_host(uint16_bytes bytes)
26{
27 return bytes[0] << 8 | bytes[1];
28}
29
30inline unsigned long
31be32_to_host(uint32_bytes bytes)
32{
33 return (be16_to_host(bytes) << 16) | be16_to_host(bytes + 2);
34}
35
36
37#define BE16_TO_HOST(bytes) ((bytes)[0] << 8 | (bytes)[1])
38#define BE32_TO_HOST(bytes) \
39((BE16_TO_HOST(bytes) << 16) | BE16_TO_HOST((bytes)+2))
40struct spc2_inquiry_cmd
41{
42 uint8_t op_code;
43 uint8_t flags;
44 uint8_t page;
45 uint8_t reserved;
46 uint8_t allocation_length;
47 uint8_t control;
48} CC_BYTE_ALIGNED;
49
50struct spc2_std_inquiry_data
51{
52 uint8_t device;
53 uint8_t flags1;
54 uint8_t version;
55 uint8_t flags2;
56 uint8_t additional_length;
57 uint8_t flags3;
58 uint8_t flags4;
59 uint8_t flags5;
60 char vendor_id[8];
61 char product_id[16];
62 char product_rev[4];
63} CC_BYTE_ALIGNED;
64
65struct spc2_vital_product_data_head
66{
67 uint8_t device;
68 uint8_t page;
69 uint8_t reserved;
70 uint8_t page_length;
71} CC_BYTE_ALIGNED;
72
73struct spc2_identification_descriptor
74{
75 uint8_t code_set;
76 uint8_t identifier_type;
77 uint8_t reserved;
78 uint8_t identifier_length;
79};
80
81struct spc2_request_sense_cmd
82{
83 uint8_t op_code;
84 uint8_t reserved1;
85 uint8_t reserved2;
86 uint8_t reserved3;
87 uint8_t allocation_length;
88 uint8_t control;
89} CC_BYTE_ALIGNED;
90
91struct spc2_sense_data
92{
93 uint8_t response_code;
94 uint8_t obsolete;
95 uint8_t sense_key;
96 uint8_t information[4];
97 uint8_t additional_length;
98 uint8_t command_specific[4];
99 uint8_t asc;
100 uint8_t ascq;
101 uint8_t unit_code;
102 uint8_t sense_key_specific[3];
103} CC_BYTE_ALIGNED;
104
105struct spc2_mode_sence_6_cmd
106{
107 uint8_t op_code;
108 uint8_t flags;
109 uint8_t page_code;
110 uint8_t reserved;
111 uint8_t allocation_length;
112 uint8_t control;
113} CC_BYTE_ALIGNED;
114
115struct spc2_mode_select_6_cmd
116{
117 uint8_t op_code;
118 uint8_t flags;
119 uint8_t reserved1;
120 uint8_t reserved2;
121 uint8_t parameter_list_length;
122 uint8_t control;
123};
124
125struct spc2_mode_parameter_header_6
126{
127 uint8_t mode_data_length;
128 uint8_t medium_type;
129 uint8_t device_specific_parameter;
130 uint8_t block_descriptor_length;
131} CC_BYTE_ALIGNED;
132
133struct spc2_mode_page
134{
135 uint8_t page_code;
136 uint8_t page_length;
137} CC_BYTE_ALIGNED;
138
139#endif /* SPC2_STRUCT_H_6R1KTJP0NJ__ */