Esempio n. 1
0
static inline int InitializeSCSIDevice(struct SBP2Device *dev) {
    inquiry_data id;
    sense_data sd;
    read_capacity_data rcd;
    int stat;

    XPRINTF("IEEE1394_disk: InitializeSCSIDevice.\n");

    memset(&id, 0, sizeof(inquiry_data));
    if ((stat = scsiInquiry(dev, &id, sizeof(inquiry_data))) < 0) {
        XPRINTF("IEEE1394_disk: Error - scsiInquiry returned %d.\n", stat);
        return -1;
    }

    printf("IEEE1394_disk: Vendor: %.8s\n", id.vendor);
    printf("IEEE1394_disk: Product: %.16s\n", id.product);
    printf("IEEE1394_disk: Revision: %.4s\n", id.revision);

    if((stat = scsiReadCapacity(dev, &rcd, sizeof(read_capacity_data))) != 0) {
        XPRINTF("IEEE1394_disk: Error - scsiReadCapacity %d\n", stat);
        return -1;
    }

    dev->sectorSize = rcd.block_length;
    dev->maxLBA     = rcd.last_lba;

    printf("IEEE1394_disk: sectorSize %lu maxLBA %lu\n", dev->sectorSize, dev->maxLBA);

    while((stat = scsiTestUnitReady(dev)) != 0)
    {
        XPRINTF("IEEE1394_disk: Error - scsiTestUnitReady %d\n", stat);

        stat = scsiRequestSense(dev, &sd, sizeof(sense_data));
        if (stat != 0)
            XPRINTF("IEEE1394_disk: Error - scsiRequestSense %d\n", stat);

        if ((sd.error_code == 0x70) && (sd.sense_key != 0x00))
        {
            XPRINTF("IEEE1394_disk: Sense Data key: %02X code: %02X qual: %02X\n", sd.sense_key, sd.add_sense_code, sd.add_sense_qual);

            if ((sd.sense_key == 0x02) && (sd.add_sense_code == 0x04) && (sd.add_sense_qual == 0x02))
            {
                XPRINTF("IEEE1394_disk: Error - Additional initalization is required for this device!\n");
                if ((stat = scsiStartStopUnit(dev)) != 0) {
                    XPRINTF("IEEE1394_disk: Error - scsiStartStopUnit %d\n", stat);
                    return -1;
                }
            }
        }
    }

    return 0;
}
Esempio n. 2
0
File: jni.c Progetto: uw-dims/tupelo
/*
 * Class:     edu_uw_apl_tupelo_model_physical_PhysicalDisk
 * Method:    productID
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_edu_uw_apl_tupelo_model_physical_PhysicalDisk_productID
(JNIEnv *env, jobject thiz, jstring path ) {

  char* pathC = (char*)(*env)->GetStringUTFChars( env, path, NULL );
  if( pathC == NULL ) {
	/* out of memory */
	return NULL; 
  }

  char vendorID[32] = { 0 };
  char productID[32] = { 0 };
  char serialNumber[32] = { 0 };
  int sc = scsiInquiry( pathC, vendorID, productID, serialNumber );
  (*env)->ReleaseStringUTFChars( env, path, pathC );
  if( sc )
	return NULL;
  return (*env)->NewStringUTF( env, productID );
}