|
|
|
|
|
|
|
|
if (descriptors[6] != 6) return false; // bInterfaceSubClass, 6 = SCSI transparent command set (SCSI Standards) |
|
|
if (descriptors[6] != 6) return false; // bInterfaceSubClass, 6 = SCSI transparent command set (SCSI Standards) |
|
|
if (descriptors[7] != 80) return false; // bInterfaceProtocol, 80 = BULK-ONLY TRANSPORT |
|
|
if (descriptors[7] != 80) return false; // bInterfaceProtocol, 80 = BULK-ONLY TRANSPORT |
|
|
|
|
|
|
|
|
|
|
|
bInterfaceNumber = descriptors[2]; |
|
|
|
|
|
|
|
|
uint8_t desc_index = 9; |
|
|
uint8_t desc_index = 9; |
|
|
uint8_t in_index = 0xff, out_index = 0xff; |
|
|
uint8_t in_index = 0xff, out_index = 0xff; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yield(); |
|
|
yield(); |
|
|
} while(!available()); |
|
|
} while(!available()); |
|
|
|
|
|
|
|
|
msReset(0); // Assume bNumInterfaces = 1 for now. |
|
|
|
|
|
|
|
|
msReset(); |
|
|
delay(500); |
|
|
delay(500); |
|
|
maxLUN = msGetMaxLun(0); // Assume bNumInterfaces = 1 for now |
|
|
|
|
|
|
|
|
maxLUN = msGetMaxLun(); |
|
|
|
|
|
|
|
|
// msResult = msReportLUNs(&maxLUN); |
|
|
// msResult = msReportLUNs(&maxLUN); |
|
|
//Serial.printf("maxLUN = %d\n",maxLUN); |
|
|
//Serial.printf("maxLUN = %d\n",maxLUN); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
|
//--------------------------------------------------------------------------- |
|
|
// Perform Mass Storage Reset |
|
|
// Perform Mass Storage Reset |
|
|
void msController::msReset(uint32_t interfaceNumber) { |
|
|
|
|
|
|
|
|
void msController::msReset(void) { |
|
|
#ifdef DBGprint |
|
|
#ifdef DBGprint |
|
|
Serial.printf("msReset()\n"); |
|
|
Serial.printf("msReset()\n"); |
|
|
#endif |
|
|
#endif |
|
|
mk_setup(setup, 0x21, 0xff, 0, interfaceNumber, 0); |
|
|
|
|
|
|
|
|
mk_setup(setup, 0x21, 0xff, 0, bInterfaceNumber, 0); |
|
|
queue_Control_Transfer(device, &setup, NULL, this); |
|
|
queue_Control_Transfer(device, &setup, NULL, this); |
|
|
while (!msControlCompleted) yield(); |
|
|
while (!msControlCompleted) yield(); |
|
|
msControlCompleted = false; |
|
|
msControlCompleted = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
|
//--------------------------------------------------------------------------- |
|
|
// Get MAX LUN |
|
|
// Get MAX LUN |
|
|
uint8_t msController::msGetMaxLun(uint32_t interfaceNumber) { |
|
|
|
|
|
|
|
|
uint8_t msController::msGetMaxLun(void) { |
|
|
#ifdef DBGprint |
|
|
#ifdef DBGprint |
|
|
Serial.printf("msGetMaxLun()\n"); |
|
|
Serial.printf("msGetMaxLun()\n"); |
|
|
#endif |
|
|
#endif |
|
|
report[0] = 0; |
|
|
report[0] = 0; |
|
|
mk_setup(setup, 0xa1, 0xfe, 0, interfaceNumber, 1); |
|
|
|
|
|
|
|
|
mk_setup(setup, 0xa1, 0xfe, 0, bInterfaceNumber, 1); |
|
|
queue_Control_Transfer(device, &setup, report, this); |
|
|
queue_Control_Transfer(device, &setup, report, this); |
|
|
while (!msControlCompleted) yield(); |
|
|
while (!msControlCompleted) yield(); |
|
|
msControlCompleted = false; |
|
|
msControlCompleted = false; |