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;
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
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)
''' 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 !"