Add SCSICodes.h to the Class Driver Common folder, and automatically include it in both the Host and Device Mass Storage Class drivers. Delete existing version from the ClassDriver MassStorage device demo's /Lib/ folder.

pull/1469/head
Dean Camera 15 years ago
parent 31d8ebebc0
commit a765f71727

@ -46,7 +46,6 @@
#include "MassStorage.h"
#include "Descriptors.h"
#include "DataflashManager.h"
#include "SCSI_Codes.h"
/* Macros: */
/** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This

@ -139,7 +139,7 @@ int main(void)
}
SCSI_Inquiry_Response_t InquiryData;
if (MS_Host_GetInquiryData(&FlashDisk_MS_Interface, &InquiryData))
if (MS_Host_GetInquiryData(&FlashDisk_MS_Interface, 0, &InquiryData))
{
printf("Error retreiving device Inquiry data.\r\n");
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);

File diff suppressed because one or more lines are too long

@ -47,7 +47,8 @@
/* Includes: */
#include "../../USB.h"
#include "../Common/MassStorage.h"
#include "../Common/SCSICodes.h"
#include <string.h>
/* Enable C linkage for C++ Compilers: */

@ -310,11 +310,53 @@ uint8_t MS_Host_GetMaxLUN(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t* Max
return ErrorCode;
}
uint8_t MS_Host_GetInquiryData(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, SCSI_Inquiry_Response_t* InquiryData)
uint8_t MS_Host_GetInquiryData(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t LUNIndex, SCSI_Inquiry_Response_t* InquiryData)
{
if ((USB_HostState != HOST_STATE_Configured) || !(MSInterfaceInfo->State.Active))
return HOST_SENDCONTROL_DeviceDisconnect;
uint8_t ErrorCode = PIPE_RWSTREAM_NoError;
MS_CommandBlockWrapper_t SCSICommandBlock = (MS_CommandBlockWrapper_t)
{
.Signature = CBW_SIGNATURE,
.Tag = MSInterfaceInfo->State.TransactionTag,
.DataTransferLength = sizeof(SCSI_Inquiry_Response_t),
.Flags = COMMAND_DIRECTION_DATA_IN,
.LUN = LUNIndex,
.SCSICommandLength = 6,
.SCSICommandData =
{
SCSI_CMD_INQUIRY,
0x00, // Reserved
0x00, // Reserved
0x00, // Reserved
sizeof(SCSI_Inquiry_Response_t), // Allocation Length
0x00 // Unused (control)
}
};
MassStore_SendCommand(MSInterfaceInfo, &SCSICommandBlock);
if ((ErrorCode = MassStore_WaitForDataReceived()) != PIPE_RWSTREAM_NoError)
{
Pipe_Freeze();
return ErrorCode;
}
if ((ErrorCode = MassStore_SendReceiveData(MSInterfaceInfo, (uint8_t*)InquiryPtr)) != PIPE_RWSTREAM_NoError)
{
Pipe_Freeze();
return ErrorCode;
}
if ((ErrorCode = MassStore_GetReturnedStatus(MSInterfaceInfo)) != PIPE_RWSTREAM_NoError)
{
Pipe_Freeze();
return ErrorCode;
}
return ErrorCode;
}
uint8_t MS_Host_TestUnitReady(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t LUNIndex, bool* DeviceReady);

@ -47,6 +47,7 @@
/* Includes: */
#include "../../USB.h"
#include "../Common/MassStorage.h"
#include "../Common/SCSICodes.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
@ -210,8 +211,8 @@
*/
uint8_t MS_Host_GetMaxLUN(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t* MaxLUNIndex) ATTR_NON_NULL_PTR_ARG(1, 2);
uint8_t MS_Host_GetInquiryData(USB_ClassInfo_MS_Host_t* MSInterfaceInfo,
SCSI_Inquiry_Response_t* InquiryData) ATTR_NON_NULL_PTR_ARG(1, 2);
uint8_t MS_Host_GetInquiryData(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t LUNIndex,
SCSI_Inquiry_Response_t* InquiryData) ATTR_NON_NULL_PTR_ARG(1, 3);
uint8_t MS_Host_TestUnitReady(USB_ClassInfo_MS_Host_t* MSInterfaceInfo, uint8_t LUNIndex,
bool* DeviceReady) ATTR_NON_NULL_PTR_ARG(1, 3);

Loading…
Cancel
Save