10 // |
10 // |
11 // Contributors: |
11 // Contributors: |
12 // |
12 // |
13 // Description: |
13 // Description: |
14 // scsiprimarycmds.cpp |
14 // scsiprimarycmds.cpp |
15 // |
15 // |
16 // |
16 // |
17 |
17 |
18 /** |
18 /** |
19 @file |
19 @file |
20 @internalTechnology |
20 @internalTechnology |
21 */ |
21 */ |
22 |
22 |
23 #include <e32base.h> |
23 #include <e32base.h> |
24 |
24 |
|
25 #include "OstTraceDefinitions.h" |
|
26 #ifdef OST_TRACE_COMPILER_IN_USE |
|
27 #include "tscsiprimarycmdsTraces.h" |
|
28 #endif |
|
29 |
|
30 |
25 #include "msctypes.h" |
31 #include "msctypes.h" |
26 #include "debug.h" |
|
27 #include "msdebug.h" |
|
28 |
|
29 #include "mtransport.h" |
32 #include "mtransport.h" |
30 #include "mprotocol.h" |
33 #include "mprotocol.h" |
31 |
34 |
32 #include "tscsiclientreq.h" |
35 #include "tscsiclientreq.h" |
33 #include "tscsiprimarycmds.h" |
36 #include "tscsiprimarycmds.h" |
34 |
37 |
35 |
38 |
36 // **** TEST UNIT READY **** |
39 // **** TEST UNIT READY **** |
37 TInt TScsiClientTestUnitReadyReq::EncodeRequestL(TDes8& aBuffer) const |
40 TInt TScsiClientTestUnitReadyReq::EncodeRequestL(TDes8& aBuffer) const |
38 { |
41 { |
39 __MSFNSLOG |
42 OstTrace0(TRACE_SHOSTMASSSTORAGE_SCSI, TSCSIPRIMARYCMDS_10, |
40 __SCSIPRINT(_L("<-- SCSI TEST UNIT READY")); |
43 "<-- SCSI TEST UNIT READY"); |
41 TInt length = TScsiClientReq::EncodeRequestL(aBuffer); |
44 TInt length = TScsiClientReq::EncodeRequestL(aBuffer); |
42 return length; |
45 return length; |
43 } |
46 } |
44 |
47 |
45 |
48 |
46 // **** REQUEST SENSE **** |
49 // **** REQUEST SENSE **** |
47 void TScsiClientRequestSenseResp::DecodeSenseInfo(const TDesC8& aPtr) |
50 void TScsiClientRequestSenseResp::DecodeSenseInfo(const TDesC8& aPtr) |
48 { |
51 { |
49 __MSFNSLOG |
|
50 iResponseCode = static_cast<TResponseCode>(aPtr[0]); |
52 iResponseCode = static_cast<TResponseCode>(aPtr[0]); |
51 iSenseInfo.iSenseCode = aPtr[02]; |
53 iSenseInfo.iSenseCode = aPtr[02]; |
52 iSenseInfo.iAdditional = aPtr[12]; |
54 iSenseInfo.iAdditional = aPtr[12]; |
53 iSenseInfo.iQualifier = aPtr[13]; |
55 iSenseInfo.iQualifier = aPtr[13]; |
54 } |
56 } |
55 |
57 |
56 |
58 |
57 void TScsiClientRequestSenseResp::DecodeL(const TDesC8& aPtr) |
59 void TScsiClientRequestSenseResp::DecodeL(const TDesC8& aPtr) |
58 { |
60 { |
59 __MSFNSLOG |
61 OstTrace0(TRACE_SHOSTMASSSTORAGE_SCSI, TSCSIPRIMARYCMDS_11, |
60 __SCSIPRINT(_L("--> SCSI REQUEST SENSE")); |
62 "--> SCSI REQUEST SENSE"); |
61 if (aPtr.Length() < KResponseLength) |
63 if (aPtr.Length() < KResponseLength) |
62 { |
64 { |
63 // Handle short data. |
65 // Handle short data. |
64 // The data not transferred is assumed to be zero. |
66 // The data not transferred is assumed to be zero. |
65 |
67 |
75 } |
77 } |
76 else |
78 else |
77 { |
79 { |
78 DecodeSenseInfo(aPtr); |
80 DecodeSenseInfo(aPtr); |
79 } |
81 } |
80 } |
82 } |
81 |
83 |
82 |
84 |
83 // **** INQUIRY **** |
85 // **** INQUIRY **** |
84 void TScsiClientInquiryResp::DecodeInquiry(const TDesC8& aPtr) |
86 void TScsiClientInquiryResp::DecodeInquiry(const TDesC8& aPtr) |
85 { |
87 { |
86 __MSFNSLOG |
|
87 iPeripheralInfo.iRemovable = (aPtr[1] & 0x80) ? ETrue : EFalse; |
88 iPeripheralInfo.iRemovable = (aPtr[1] & 0x80) ? ETrue : EFalse; |
88 |
89 |
89 iPeripheralInfo.iPeripheralQualifier = aPtr[0] >> 5; |
90 iPeripheralInfo.iPeripheralQualifier = aPtr[0] >> 5; |
90 iPeripheralInfo.iPeripheralDeviceType = aPtr[0] & 0x1F; |
91 iPeripheralInfo.iPeripheralDeviceType = aPtr[0] & 0x1F; |
91 iPeripheralInfo.iVersion = aPtr[2]; |
92 iPeripheralInfo.iVersion = aPtr[2]; |
101 iPeripheralInfo.iIdentification.iProductRev.Copy(productRev); |
102 iPeripheralInfo.iIdentification.iProductRev.Copy(productRev); |
102 } |
103 } |
103 |
104 |
104 |
105 |
105 void TScsiClientInquiryResp::DecodeL(const TDesC8& aPtr) |
106 void TScsiClientInquiryResp::DecodeL(const TDesC8& aPtr) |
106 { |
107 { |
107 __MSFNSLOG |
108 OstTrace0(TRACE_SHOSTMASSSTORAGE_SCSI, TSCSIPRIMARYCMDS_12, |
108 __SCSIPRINT(_L("--> SCSI INQUIRY")); |
109 "--> SCSI INQUIRY"); |
109 if (aPtr.Length() < KResponseLength) |
110 if (aPtr.Length() < KResponseLength) |
110 { |
111 { |
111 // Handle short data. |
112 // Handle short data. |
112 // The data not transferred is assumed to be zero. |
113 // The data not transferred is assumed to be zero. |
113 |
114 |
123 } |
124 } |
124 else |
125 else |
125 { |
126 { |
126 DecodeInquiry(aPtr); |
127 DecodeInquiry(aPtr); |
127 } |
128 } |
128 } |
129 } |
129 |
130 |
130 |
131 |
131 // **** PREVENT MEDIA REMOVAL **** |
132 // **** PREVENT MEDIA REMOVAL **** |
132 TInt TScsiClientPreventMediaRemovalReq::EncodeRequestL(TDes8& aBuffer) const |
133 TInt TScsiClientPreventMediaRemovalReq::EncodeRequestL(TDes8& aBuffer) const |
133 { |
134 { |
134 __MSFNSLOG |
135 OstTrace0(TRACE_SHOSTMASSSTORAGE_SCSI, TSCSIPRIMARYCMDS_13, |
135 __SCSIPRINT(_L("<-- SCSI PREVENT MEDIA REMOVAL")); |
136 "<-- SCSI PREVENT MEDIA REMOVAL"); |
136 TInt length = TScsiClientReq::EncodeRequestL(aBuffer); |
137 TInt length = TScsiClientReq::EncodeRequestL(aBuffer); |
137 if (iPrevent) |
138 if (iPrevent) |
138 aBuffer[4] |= 0x01; |
139 aBuffer[4] |= 0x01; |
139 return length; |
140 return length; |
140 } |
141 } |
141 |
142 |