Contiki 2.6

spc2_struct.h

00001 #ifndef __SPC2_STRUCT_H__6R1KTJP0NJ__
00002 #define __SPC2_STRUCT_H__6R1KTJP0NJ__
00003 
00004 typedef uint8_t uint40_bytes[5];
00005 typedef uint8_t uint32_bytes[4];
00006 typedef uint8_t uint16_bytes[2];
00007 
00008 #ifndef CC_BYTE_ALIGNED
00009 #ifdef __GNUC__
00010 #define CC_BYTE_ALIGNED __attribute__ ((packed))
00011 #endif
00012 #endif
00013 
00014 #ifndef CC_BYTE_ALIGNED
00015 #define CC_BYTE_ALIGNED
00016 #endif
00017 
00018 #define HOST16_TO_BE_BYTES(x) {(((x) >> 8) & 0xff), ((x) & 0xff)}
00019 #define HOST32_TO_BE_BYTES(x) {(((x) >> 24) & 0xff), (((x) >> 16) & 0xff), \
00020  (((x) >> 8) & 0xff), ((x) & 0xff)}
00021 #define HOST40_TO_BE_BYTES(x) {(((x) >> 32) & 0xff), (((x) >> 24) & 0xff), (((x) >> 16) & 0xff), \
00022  (((x) >> 8) & 0xff), ((x) & 0xff)}
00023 
00024 inline unsigned long
00025 be16_to_host(uint16_bytes bytes)
00026 {
00027   return bytes[0] << 8 | bytes[1];
00028 }
00029 
00030 inline unsigned long
00031 be32_to_host(uint32_bytes bytes)
00032 {
00033   return (be16_to_host(bytes) << 16) | be16_to_host(bytes + 2);
00034 }
00035 
00036 
00037 #define BE16_TO_HOST(bytes) ((bytes)[0] << 8 | (bytes)[1])
00038 #define BE32_TO_HOST(bytes) \
00039 ((BE16_TO_HOST(bytes) << 16) | BE16_TO_HOST((bytes)+2))
00040 struct spc2_inquiry_cmd
00041 {
00042   uint8_t op_code;
00043   uint8_t flags;
00044   uint8_t page;
00045   uint8_t reserved;
00046   uint8_t allocation_length;
00047   uint8_t control;
00048 } CC_BYTE_ALIGNED;
00049 
00050 struct spc2_std_inquiry_data
00051 {
00052   uint8_t device;
00053   uint8_t flags1;
00054   uint8_t version;
00055   uint8_t flags2;
00056   uint8_t additional_length;
00057   uint8_t flags3;
00058   uint8_t flags4;
00059   uint8_t flags5;
00060   char vendor_id[8];
00061   char product_id[16];
00062   char product_rev[4];
00063 } CC_BYTE_ALIGNED;
00064 
00065 struct spc2_vital_product_data_head
00066 {
00067   uint8_t device;
00068   uint8_t page;
00069   uint8_t reserved;
00070   uint8_t page_length;
00071 } CC_BYTE_ALIGNED;
00072 
00073 struct spc2_identification_descriptor
00074 {
00075   uint8_t code_set;
00076   uint8_t identifier_type;
00077   uint8_t reserved;
00078   uint8_t identifier_length;
00079 };
00080 
00081 struct spc2_request_sense_cmd
00082 {
00083   uint8_t op_code;
00084   uint8_t reserved1;
00085   uint8_t reserved2;
00086   uint8_t reserved3;
00087   uint8_t allocation_length;
00088   uint8_t control;
00089 } CC_BYTE_ALIGNED;
00090 
00091 struct spc2_sense_data
00092 {
00093   uint8_t response_code;
00094   uint8_t obsolete;
00095   uint8_t sense_key;
00096   uint8_t information[4];
00097   uint8_t additional_length;
00098   uint8_t command_specific[4];
00099   uint8_t asc;
00100   uint8_t ascq;
00101   uint8_t unit_code;
00102   uint8_t sense_key_specific[3];
00103 } CC_BYTE_ALIGNED;
00104 
00105 struct spc2_mode_sence_6_cmd
00106 {
00107   uint8_t op_code;
00108   uint8_t flags;
00109   uint8_t page_code;
00110   uint8_t reserved;
00111   uint8_t allocation_length;
00112   uint8_t control;
00113 } CC_BYTE_ALIGNED;
00114 
00115 struct spc2_mode_select_6_cmd
00116 {
00117   uint8_t op_code;
00118   uint8_t flags;
00119   uint8_t reserved1;
00120   uint8_t reserved2;
00121   uint8_t parameter_list_length;
00122   uint8_t control;
00123 };
00124 
00125 struct spc2_mode_parameter_header_6
00126 {
00127   uint8_t mode_data_length;
00128   uint8_t medium_type;
00129   uint8_t device_specific_parameter;
00130   uint8_t block_descriptor_length;
00131 } CC_BYTE_ALIGNED;
00132 
00133 struct spc2_mode_page
00134 {
00135   uint8_t page_code;
00136   uint8_t page_length;
00137 } CC_BYTE_ALIGNED;
00138 
00139 #endif /* __SPC2_STRUCT_H__6R1KTJP0NJ__ */