def inquiry_target(cdb):
	write_log("INQUIRY","STARTED")
	fileNo = int(cdb["LUN"][0])
	fp = open("sense.dat","w")
	resp=None
	write_log("INQUIRY","WORKING ON LUN "+ str(fileNo))
	if(fileNo > 5): # 5- no of files(LU) on target
		fp.write("INQUIRY FAIL 11")
		
		resp = "INVALID LUN"
	else:	
		evpd = int(cdb["EVPD"][0])
		pageCode = int(cdb["pageCode"][0])
		if(evpd == 1):
			fp.write("INQUIRY FAIL 5")
			write_log("INQUIRY","FAILED")
		
			resp = "EVPD=1 NOT SUPPORTED"

		elif(evpd == 0 and  pageCode != 0): 
			fp.write("INQUIRY FAIL 5")
			write_log("INQUIRY","FAILED")
		
			resp = "INVALID PAGE CODE"
		else:
			resp = create_inq_res_cdb()
			write_log("INQUIRY","SUCCESSFUL")

	fp.close()
	return resp
	def create_request_sense(self):
		write_log("REQUEST SENSE","STARTED")
		self.send_cdb["operationCode"]=[0x03,0,7,8]
		self.send_cdb["reserved_1"]=["reserved",1,7,7]
		
		self.send_cdb["desc"]=[str(self.ui.lineEdit.text()),1,0,1]
		self.send_cdb["reserved_2"]=["reserved",2,7,16]
		
		self.send_cdb["alllength"]=[18,4,7,8]
		self.send_cdb["control"]=["control",5,7,8]
		self.close()
def target_response(cdb):
	
	fs = open("sense.dat","w")
	if int(cdb["pmi"][0]) > 1: 
		fs.write("READ_CAPACITY FAIL 11") 
		fs.close()
		write_log("READ_CAPACITY","FAILED")
		return "INVALID PMI"
	
	elif int(cdb["pmi"][0]) == 0 and int(cdb["LBA"][0]) == 0: 
		read_cap_res={}
		read_cap_res["returnedLBA"]=["400",0,7,32]
		read_cap_res["block_length"]=["100",4,7,32]
		write_log("READ CAPACITY","SUCCESSFUL")
		return read_cap_res;
		
	elif int(cdb["pmi"][0]) == 0 and int(cdb["LBA"][0]) != 0: 
		fs.write("READ_CAPACITY FAIL 5") 
		fs.close()
		write_log("READ_CAPACITY","FAILED")
		return "INVALID LBA"
	
	
	elif int(cdb["pmi"][0]) == 1:
		read_cap_res={}
		read_cap_res["returnedLBA"]=["400",0,7,32]
		read_cap_res["block_length"]=["100",4,7,32]
		write_log("READ CAPACITY","SUCCESSFUL")
		return read_cap_res;
예제 #4
0
def main_work():
    y.reset_home()
    y.calibrate_grippers()
    y.open_grippers()

    while (True):
        choose_speed()  # 3
        choose_object()  # 3
        choose_catching_direction()  # 3
        choose_giving_position()  # 2

        write_log()

        catch()
        give()
        y.reset_home()
        y.open_grippers()
def receive_mode_select(s):
	write_log("MODE SELECT","STARTED")
        st='Mode Select successful'
        if(s["lun"][0]=='1' or s["lun"][0]=='2' or s["lun"][0]=='3' or s["lun"][0]=='4' or s["lun"][0]=='5'):
        	myfile="lun"+s["lun"][0]+".dat"
                fo=open(myfile,"w+")
        else:
		fs = open("sense.dat","w")
		fs.write("MODE_SELECT FAIL 11") 
		fs.close()
		st='UNSUCCESSFUL: Invalid lun number'
                write_log("MODE SELECT",st)
                return st
	if(s["pf"][0]=='0'):
		fo.write("The page format is vendor specific\n");
	elif(s["pf"][0]=='1'):
		fo.write("The header and block descriptors are set by standard\n");
        else:
		fs = open("sense.dat","w")
		fs.write("MODE_SELECT FAIL 5") 
		fs.close()
		st='UNSUCCESSFUL:Invalid pf bit value'
                write_log("MODE SELECT",st)
                return st
        fo.write("Parameter List Length:"+str(s["paramlength"][0])+"\n");
	if(s["sp"][0]=='0'):
		print 'The mode page shall not be saved.The command terminated with CHECK CONDITION status'
                fo.write("Termination status:Check Condition\nSense Key:Illegal Request\nAdditional Sense Code:Invalid");
	elif(s["sp"][0]=='1') : 
		fp=open("controlModePage.dat","r")
                ps=fp.read(1);
                fp.close()
                if(ps=='1'):
			 print 'The mode page shall be saveable'
		else:
			 fo.write("Termination status:Check Condition\nSense Key:Illegal Request\nAdditional Sense Code:Invalid");
	else:
		fs = open("sense.dat","w")
		fs.write("MODE_SELECT FAIL 5") 
		fs.close()
		st='UNSUCCESSFUL:Invalid sp bit value'
		write_log("MODE SELECT",st)
                return st
        fo.close()
	write_log("MODE SELECT","SUCCESSFUL")
	return st
def mode_sense_server(mode_sense):
	write_log("MODE SENSE","STARTED")	
	fp = open("sense.dat","w")	
	PC=mode_sense["PC"][0]
	if not(PC=="00b"or PC=="01b" or PC=="10b" or PC=="11b"):
		fp.write("MODE_SENSE FAIL 5")	   
		return "invalid Page Control"

	LUN=mode_sense["LUN"][0]
	if not(int(LUN)>=1 and int(LUN)<6):
	    fp.write("MODE_SENSE FAIL 11")	   
	    return "LUN not present"

	sub=mode_sense["subPage"][0]
	if (int(sub)<0):
	    fp.write("MODE_SENSE FAIL 11")	   
	    return "SubPage not present"

	
	AL=mode_sense["AL"][0]
	pageCode=mode_sense['pageCode'][0]
	if not(pageCode=="00h" or pageCode=="0Ah"):
		fp.write("MODE_SENSE FAIL 11")	   
		return "PAGES NOT IMPLEMENTED"
	
	
	cdb={}
	if(mode_sense["pageCode"][0]=='00h'):
		#print "Vendor Specific Page"
		create_header(cdb,False)
		if(mode_sense["DBD"][0]==0):
			create_discript(cdb)
		
	else:
		#print "Control Mode Page"
		create_header(cdb,True)
		create_page(cdb)
		if(mode_sense["DBD"][0]==0):
			create_discript(cdb)
	if(int(AL)>int(cdb["MODE DATA LENGTH"][0], 16)):
		write_log("MODE SENSE","SUCCESSFUL")
		return str(cdb)
	else:
		fp.write("MODE_SENSE FAIL 11")	   
		return "SIZE OF BUFFER INSUFFICIENT"
def reportLunsServer(cdb):
	write_log("REPORT LUNS","STARTED")
	rep_luns = {}
	rep_luns["reserved"] = ["reserved", 4, 7,32]
	rep_luns["lun1"] = []
	i, count = 0, 0
	update_inventory()
	luns = read_inventory()
	for lun in luns:
			i += 1
			rep_luns["lun" + str(i)] = [int(lun), 8+count, 7, 16]
			count += 2
	if rep_luns["lun1"] == []:
		rep_luns["lun1"] = ["empty", 8, 7, 8]
	rep_luns["length"] = [i*8,0 ,7 ,32]
	write_log("REPORT LUNS","SUCCESSFUL")

	return rep_luns
def logsense_response(logsense_cdb): 
	write_log("LOGSENSE","STARTED")
	savelogs = logsense_cdb["sp"][0]
	pcode = logsense_cdb["pageCode"][0]
	valid = 1
	data = ""
	resp = {}
	if pcode!=0x31:
		valid = 0
		resp["pageCodeValidity"] = valid
		
	else:	
		lfile = open("log.dat","r")
		data = lfile.read()
		resp["saveLogs"] = savelogs
		resp["logData"] = data
		resp["pageCodeValidity"] = valid
		
	write_log("LOGSENSE","SUCCESSFUL")
	return str(resp)
def format_unit_function(cdb):
	# since we are having 5 files
	write_log("FORMAT_UNIT","STARTED")
	luns = [1,2,3,4,5]

	filenames = []
	lba_size = 100
	no_of_lbas = 5

	for i in range(0,5):
		filename = "file"+str(luns[i])+".txt"
		filenames.append(filename)
	
	for eachFilename in filenames:
		fileHandler = open(eachFilename,'w')
		fileHandler.write(lba_size*no_of_lbas*'\0')
		fileHandler.close()

	format_unit_summary = "no of lbas formatted is: " + str(no_of_lbas) + " lba size: " + str(lba_size)
	write_log("FORMAT_UNIT","SUCCESSFUL")
	return format_unit_summary
예제 #10
0
def TurServer(cdb):
	write_log("TEST_UNIT_READY","STARTED")
	if(cdb["LUN"][0]>5):
		fs = open("sense.dat","w")
		fs.write("TEST_UNIT_READY FAIL 5") 
		fs.close()
		write_log("TEST_UNIT_READY","FAILED")
		return "Check Unit. LUN does not exist" 
	no=(random.randrange(1,10000))
	if (no%2!=0):
		write_log("TEST_UNIT_READY","SUCCESSFUL")
		return "SUCCESSFUL : UNIT IS RUNNING"
	else:
		fs = open("sense.dat","w")
		fs.write("TEST_UNIT_READY FAIL 5") 
		fs.close()
		write_log("TEST_UNIT_READY","FAILED")
		return "Check Unit. LUN is not functional"
def startStop(startStop):
    write_log("START/STOP", "STARTED")
    lunNumber = int(startStop["LUN"][0])
    write_log("START/STOP", "WORKING ON LUN " + str(lunNumber))
    start = int(startStop["start"][0])
    loej = int(startStop["LOEJ"][0])
    immed = int(startStop["IMMED"][0])
    fp = open("sense.dat", "w")
    if lunNumber > 5 or lunNumber < 1:
        fp.write("START/STOP FAIL 11")
        fp.close()
        write_log("START/STOP", "FAILED")
        return "LUN does not exist"
    try:
        i = activeLun.index(lunNumber)
    except ValueError:
        i = -1
    if (activeLun == [] or i == -1) and start != 1:
        fp.write("START/STOP FAIL 2")
        fp.close()
        write_log("START/STOP", "FAILED")
        return "Lun not started"  # lun not started error
    if start == 0 and loej == 0:
        activeLun.remove(lunNumber)
        write_log("START/STOP", "stoping LUN")
    if start == 1 and loej == 0:
        activeLun.append(lunNumber)
        write_log("START/STOP", "staring LUN")
    if start == 0 and loej == 1:
        write_log("START/STOP", "ejecting media")
    if start == 1 and loej == 1:
        write_log("START/STOP", "loading media")
    if immed == 1:
        write_log("START/STOP", "Before operation")
        return "StartStopUnit Successful before operation"  # success status
    if immed == 0:
        write_log("START/STOP", "After operation")
        return "StartStopUnit Successful After operation"  # success status
def receive_request_sense(s):
	write_log("REQUEST SENSE","STARTED")
	f=open("sense.dat","r")
	line = f.readline()
	line = line.strip()
	line = line.split()
	if(len(line) == 0):
		return "ALL_CMDS_SUCCESSFUL"

	command_name=line[0]
	status=line[1]
	sense_key=line[2]
	desc=s["desc"][0]
	if(desc=='0'):	
		send1={}
		send1["valid"]=[1,0,7,1]
		res_code=0x71   #current error , fixed format
		send1["response_code"]=[res_code,0,6,7]
		send1["reserved_1"]=["reserved",1,7,8] #segment number (obsolete)
		send1["reserved_2"]=["reserved",2,7,2]
#ILI - incorrect length indicator - 1 = requested logical block length did not match the logical block length of the data on the medium
		ili=0
		send1["ili"]=[ili,2,5,1]
		send1["reserved_3"]=["reserved",2,4,1]
          # 2 5 11
		asc=00	
		ascq=00
		if(sense_key=='2'):
                        emsg = 'ERROR MESSAGE: NOT READY'
			asc=04  #cause not reportable
			ascq=00
		elif(sense_key=='5'):
			emsg =  'ERROR MESSAGE: ILLEGAL REQUEST'
                      	asc=20 #invalid/unsupported command
			ascq=00
		elif(sense_key=='11'):
			emsg = 'ERROR MESSAGE: ABORTED COMMAND'
                      
			asc=00   #no additional sense code
			ascq=00
        	send1["sensekey"]=[sense_key,2,3,4]
		send1["information"]=[status,3,7,32]
		#additional sense length
		send1["additional_sense_length"]=[0,7,7,8]
		send1["command_sp_info"]=[command_name,8,7,32]
		send1["asc"]=[asc,12,7,8]
		send1["ascq"]=[ascq,13,7,8]
		send1["field replaceable unit code"]=["unit_code",14,7,8] #optional
		#    0 - sense key specific data are not SCSI compliant
		#   1 - sense key specific data are SCSI compliant
		send1["sksv"]=[1,15,7,1]
		send1["sense key specific 1"]=[emsg,15,6,7]
		send1["sense key specific 2"]=[emsg,16,7,16]
		#additional sense bytes
		send1["asb"]=["vendor specific",18,7,8]
		write_log("REQUEST SENSE","SUCCESSFUL")
		return str(send1)

	elif(desc=='1'):
		send2={}
		send2["reserved"]=["reserved",0,7,1]
		res_code=0x73 #current error , descriptor format
		send2["response_code"]=[res_code,0,6,7]
		send2["reserved1"]=["reserved",1,7,4]
		asc=00	
		ascq=00
		if(sense_key=='2'):
                        emsg = 'ERROR MESSAGE: NOT READY'
			asc=04  #cause not reportable
			ascq=00
		elif(sense_key=='5'):
			emsg =  'ERROR MESSAGE: ILLEGAL REQUEST'
                       
			asc=20 #invalid/unsupported command
			ascq=00
		elif(sense_key=='11'):
			emsg = 'ERROR MESSAGE: ABORTED COMMAND'
                        
			asc=00   #no additional sense code
			ascq=00
		send2["sensekey"]=[sense_key,1,3,4]
		send2["asc"]=[asc,2,7,8]
		send2["ascq"]=[ascq,3,7,8]
		send2["reserved2"]=["reserved",4,7,24]
		send2["additional_sense_length"]=[0,7,7,8] 
		send2["sense_data_descriptor"]=[emsg,8,7,8]#not sure
		write_log("REQUEST SENSE","SUCCESSFUL")
		return str(send2)
예제 #13
0
'''
Create PVT data as a csv file from cyclic motion
'''

import numpy as np
import write_log

# configs
DURATION = 20 #[sec]
FREQ = 240 #[Hz]
AMP = 1 #[rad]
PERIOD = np.array([2,2,2]) #[sec]
PHASE = np.array([2*np.pi/3, 0, -2*np.pi/3])

# create log file
filename = './pvt_data/rotation_inverse.csv'
header = ['time', 'pos_0', 'pos_1', 'pos_2', 'vel_0', 'vel_1', 'vel_2']
write_log = write_log.WriteLog(filename, header)

time = 0
for i in range(DURATION*FREQ):
    target_pos = AMP*np.sin(2*np.pi*time/PERIOD+ PHASE)
    target_vel = AMP*np.cos(2*np.pi*time/PERIOD+ PHASE)
    log_data = np.concatenate((np.array([time]), target_pos, target_vel))
    write_log(log_data)
    time += 1/FREQ
def sendDiag_server(cdb):
	write_log("SEND_DIAGNOSTIC","STARTED")	
	fp = open("sense.dat","w")
	print cdb["Self Test Code"][0]
	
	no=(random.randrange(1,10000))
	write_log("SEND_DIAGNOSTIC","TEST_CODE "+str(cdb["Self Test Code"][0]))
	if (cdb["Self Test"][0]==0):
		if (cdb["Self Test Code"][0]==1):
			write_log("SEND_DIAGNOSTIC","Background short self-test performed")
			SelfTest = "Background short self-test" 
		elif (cdb["Self Test Code"][0]==2):
			write_log("SEND_DIAGNOSTIC","Background extended self-test performed")
			SelfTest = "Background extended self-test" 
		elif (cdb["Self Test Code"][0]==3):
			write_log("SEND_DIAGNOSTIC","Reserved test performed")
			SelfTest = "Reserved Test" 
		elif (cdb["Self Test Code"][0]==4):
			write_log("SEND_DIAGNOSTIC","Abort background self-test performed")
			SelfTest = "Abort background self-test" 
		elif (cdb["Self Test Code"][0]==5):
			write_log("SEND_DIAGNOSTIC","Foreground short self-test performed")
			SelfTest = "Foreground short self-test" 
		elif (cdb["Self Test Code"][0]==6):
			write_log("SEND_DIAGNOSTIC","Foreground extended self-test performed")
			SelfTest = "Foreground extended self-test" 
		elif (cdb["Self Test Code"][0]==7):
			write_log("SEND_DIAGNOSTIC","Reserved test performed")
			SelfTest = "Reserved Test"
		else: 
			fp.write("SEND_DIAGNOSTIC FAIL 11\n")
			SelfTest = "Invalid Self Test Code"
	elif(cdb["Self Test"][0]==1):
		if(cdb["Self Test Code"][0]==0):
			SelfTest= "Default Self Test"
		else: 
			SelfTest = "Invalid Self Test Code"
			
			

	if (cdb["DevOffl"][0]!=0 and cdb["DevOffl"][0]!=1):
			fp.write("SEND_DIAGNOSTIC FAIL 11\n")
			fp.close()			
			SelfTest = "Invalid Device offline bit value. Enter 0 or 1. "
			return SelfTest + "Please execute the command again !"
	
	if (cdb["UnitOffl"][0]!=0 and cdb["UnitOffl"][0]!=1):
			fp.write("SEND_DIAGNOSTIC FAIL 11\n")
			fp.close()			
			SelfTest = "Invalid Unit offline bit value. Enter 0 or 1. "
			return SelfTest + "Please execute the command again !"
			


	if (no%2!=0):
		if (SelfTest!="Invalid Self Test Code"):
			write_log("SEND_DIAGNOSTIC","SUCCESSFUL")
			return SelfTest + " Successful"
		else:
			fp.write("SEND_DIAGNOSTIC FAIL 11")
		        fp.close()
			write_log("SEND_DIAGNOSTIC","FAILED")
			return SelfTest + ".Please execute the command again !"
	else:
		if (SelfTest!="Invalid Self Test Code"):
			fp.write("SEND_DIAGNOSTIC FAIL 11")
			write_log("SEND_DIAGNOSTIC","FAILED")
			fp.close()
			return SelfTest + " Failed." + "Please execute the command again till success !"
		else:
			fp.write("SEND_DIAGNOSTIC FAIL 11")
		        fp.close()
			write_log("SEND_DIAGNOSTIC","FAILED")
			return SelfTest + ".Please execute the command again !"