import os import library import time class ABSServer: def __init__(self,ipSource="localhost", ipDestino="192.168.1.117", portDestino=7000, ipDestino2="192.168.1.255", portDestino2=5500, ftpPortDestino=None): self.ipSource = ipSource self.ipDestino = ipDestino self.portDestino = portDestino self.ipDestino2 = ipDestino2 self.portDestino2 = portDestino2 self.ftpPortDestino = ftpPortDestino self.experiment_name = "default" self.tx_buffer = "default" self.createObjects() def createObjects(self): asServer = True self.commServerObj = library.UDPComm(self.ipSource, self.ipDestino, self.portDestino, asServer) self.commClientObj = library.UDPComm(self.ipSource, self.ipDestino2, self.portDestino2) #self.ftpCommObj = library.FTPComm(self.ipSource, self.ipDestino, self.ftpPortDestino) def waitRequest(self): ipSource, ipDestino, cmd, self.datarx = self.commServerObj.waitData() datarpta = "OK" if cmd == "SNDF": self.sendFile2Modules() pass if cmd == "CHGB": self.changeBeam() if cmd == "ANST": self.getStatus(mode=3) datarpta = self.tx_buffer self.commServerObj.sendData(cmd=cmd, data=datarpta) def checkModule(self, address): cmd = "ping -c 1 -w 1 192.168.1."+ str(address) + " >> /dev/null" status = os.system(cmd) if status == 256: return False return True def __writeReport(self, enaModules): status_array = ["Status of modules\n"] status_array.append("----------------\n") for address in range(1,65): if address in enaModules: # status_array.append("192.168.1." + str(base + i + 1) + " [1 1]\n") status_array.append("192.168.1." + str(address) + " [1 1]\n") else: status_array.append("192.168.1." + str(address) + " [0 0]\n") f = open("module_status.txt","w") f.writelines(status_array) f.close() def checkAntenna(self): """ Direccion de los modulos de las antenas: Norte : 01-16 Este : 17-32 Oeste: : 33-48 Sur : 49-64 """ enaModules = [] for address in range(1,65): if self.checkModule(address): enaModules.append(address) self.__writeReport(enaModules) return enaModules def sendFile2Modules(self): #Needed for the loop rx_frame_list = self.datarx.split('\n',2) self.experiment_name = rx_frame_list[0] experiment_number = rx_frame_list[1] str_control_modules = rx_frame_list[2] lst_control_modules = str_control_modules.split("------\n") enaModules = self.checkAntenna() for address in range(1,65): if address not in enaModules: continue self.__writeModuleFile(self.experiment_name, lst_control_modules[address-1]) cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c put " + self.experiment_name print cmd os.system(cmd) self.__loadFile() def __writeModuleFile(self, filename, str): fobj = open(filename,"w") fobj.write(filename + "\n") fobj.write("------\n") fobj.write(str) fobj.write("------\n") fobj.close() def __readModuleFile(self, filename): fobj1 = open(filename,"r") file_list_1 = fobj1.readlines() fobj1.close() content_str = ''.join(file_list_1[2:-1]) return content_str def __loadFile(self): #Working with the UDP socket self.commClientObj.sendData("none", "CARGA:" + self.experiment_name + ":") self.commClientObj.sendData("none", "CAMBIA:0:") def changeBeam(self): #rpta = self.commClientObj.sendTxRxCommand(cmd='CAMBIA', data="0") self.commClientObj.sendData("none", "CAMBIA:" + self.datarx + ":") def getStatus(self,mode): if mode == 1: self.__getStsMode1() elif mode == 2: self.__getStsMode2() else: self.__getStsMode3() def __getStsMode1(self): #rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") self.commClientObj.sendData("CHEQUEO:" + self.datarx + ":") seconds = int (self.datarx) # Give 5 seconds to the control modules time.sleep(seconds) # Checking the module connection module_list = self.connection_status(10) #Generating the complete report module = 1 number_of_modules = 16 filename1 = "Verificacion" filename2 = "report.txt" fobj2 = open(filename2,"w") fobj2.write("Verification_file\n") fobj2.write("-----------------\n") fobj2.close() while module <= number_of_modules: if module_list[module -1] == "1": #Preparing and doing the tftp command cmd = "tftp -m binary 192.168.1."+ str(base + module) +" 69 -c get " + filename1 print cmd os.system(cmd) # Getting data from the control module file fobj1 = open(filename1,"r") file_list_1 = fobj1.readlines() fobj1.close() content = file_list_1[2:-1] # fobj2 = open(filename2,"a") if base == 10: fobj2.write("S" + str(module) + "\n") else: fobj2.write("N" + str(module) + "\n") fobj2.writelines(content) fobj2.write("------\n") fobj2.close() module = module + 1 def __getStsMode2(self): #rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") self.commClientObj.sendData("CHEQUEO:" + self.datarx + ":") seconds = int (self.datarx) # Give 5 seconds to the control modules time.sleep(seconds) # Checking the module connection enaModules = self.checkAntenna() #Generating the complete report filename1 = "Verificacion" line1 = "Verification_file\n" line2 = "-----------------\n" report_list = [line1, line2] for address in range(1,65): if address not in enaModules: continue #Preparing and doing the tftp command cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename1 print cmd os.system(cmd) #Sub_header report_list.append("ABS_" + str(address) + "\n") # Content fobj1 = open(filename1,"r") file_list_1 = fobj1.readlines() fobj1.close() content = ''.join(file_list_1[2:-1]) report_list.append(content) #Ending report_list.append("------\n") #print "\nFinalizado" self.tx_buffer = ''.join(report_list) def __AddingHeader(self,content_list, title): line1 = title + "\n" line2 = "-----------------\n" header_list = [line1, line2] verification_list = header_list + content_list # Arming the frame self.tx_buffer = ''.join(verification_list) def __getModuleFile(self, filename): enaModules = self.checkAntenna() content_list = [] for address in range(1,65): if address not in enaModules: continue #Preparing and doing the tftp command cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename print cmd os.system(cmd) #Sub_header content_list.append("ABS_" + str(address) + "\n") # From module file to list content_str = self.__readModuleFile(filename) content_list.append(content_str) content_list.append("------\n") self.__AddingHeader(content_list, title = "Verification_file") def __getStsMode3(self): self.commClientObj.sendData("none", "CHEQUEO:" + self.datarx + ":") seconds = int (self.datarx) # Give 5 seconds to the control modules time.sleep(seconds) self.__getModuleFile(filename = "Verificacion") if __name__ == '__main__': absObj = ABSServer() while 1: absObj.waitRequest()