#include "config.h" #include "scsi_defs.h" #if SUPPORT_SASI /* * dtc510b_setDriveparameter */ #define PACKED __attribute__((packed)) typedef struct PACKED dtc500_cmd_c2_param_struct { uint8_t StepPlusWidth; // Default is 13.6usec (11) uint8_t StepPeriod; // Default is 3 msec.(60) uint8_t StepMode; // Default is Bufferd (0) uint8_t MaximumHeadAdress; // Default is 4 heads (3) uint8_t HighCylinderAddressuint8_t; // Default set to 0 (0) uint8_t LowCylinderAddressuint8_t; // Default is 153 cylinders (152) uint8_t ReduceWrietCurrent; // Default is above Cylinder 128 (127) uint8_t DriveType_SeekCompleteOption;// (0) uint8_t Reserved8; // (0) uint8_t Reserved9; // (0) } DTC510_CMD_C2_PARAM; static void logStrHex(const char *msg,uint32_t num) { LOG(msg); LOGHEX6N(num); } void DTCsetDriveParameterCommandHandler() { LOGN("[DTC510B setDriveParameter]"); DTC510_CMD_C2_PARAM DriveParameter; uint16_t maxCylinder; uint16_t numLAD; //uint32_t stepPulseUsec; int StepPeriodMsec; // receive paramter writeDataPhase(sizeof(DriveParameter),(uint8_t *)(&DriveParameter)); maxCylinder = (((uint16_t)DriveParameter.HighCylinderAddressuint8_t)<<8) | (DriveParameter.LowCylinderAddressuint8_t); numLAD = maxCylinder * (DriveParameter.MaximumHeadAdress+1); //stepPulseUsec = calcStepPulseUsec(DriveParameter.StepPlusWidth); StepPeriodMsec = DriveParameter.StepPeriod*50; logStrHex (" StepPlusWidth : ",DriveParameter.StepPlusWidth); logStrHex (" StepPeriod : ",DriveParameter.StepPeriod ); logStrHex (" StepMode : ",DriveParameter.StepMode ); logStrHex (" MaximumHeadAdress : ",DriveParameter.MaximumHeadAdress); logStrHex (" CylinderAddress : ",maxCylinder); logStrHex (" ReduceWrietCurrent : ",DriveParameter.ReduceWrietCurrent); logStrHex (" DriveType/SeekCompleteOption : ",DriveParameter.DriveType_SeekCompleteOption); logStrHex (" Maximum LAD : ",numLAD-1); m_sts = 0; m_phase = PHASE_STATUSIN; } #endif