Hola nuevamente a todos. Pueden darme sugerencias sobre cómo puedo modificar el script adjunto que utiliza el puerto serial para comunciarse y cambiarlo para usar el puerto ethernet?
Especificamente yo necesito obtener datos por UDP. Estaré muy agradecido por cualquier sugerencia, pues ya hice varios intentos y no lo logro :-) Estoy seguro que debo usar lo siguiente: HOST = '169.254.128.32' PORT = 6969 #set up receiver using UDP sockets socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) socket.connect((HOST, PORT)) resp = socket.recv(4096) Pero no logro integrar estas lineas en el script ibob_serial.py Saludos Rolando
''' This Class provides a Python interface to TinySH over an RS232 link Requires PySerial. Author: Jason Manley Date: 2008/11/20 Version: 0.0.1 ''' recv_buffer=4096*4 num_retries=10 bin_mode = chr(128) import time, numpy, os, struct, serial class IbobClient: def __init__(self,port): self.port = port self.cmds = [] self.devs={} self.ser = serial.Serial(port=port,baudrate=115200,parity='N',stopbits=1,timeout=1,xonxoff=0,rtscts=0) self.flush_text_buffers() self._listdev() def flush_text_buffers(self): self.ser.write('\n') time.sleep(1) self.ser.flushInput() #self.ser.flushOutput() self.ser.write('\n') line = self.ser.read(9) if line != '\n\rIBOB % ': raise Exception("Bad Reply: '%s'"%line) def _listdev(self): """ List all the devices (registers, brams etc) available on the device and figure out their memory addresses. """ self.ser.write('listdev\n') time.sleep(1) for i in range(3): line=self.ser.readline() #print line #time.sleep(5) while line != '\rIBOB % ' and line != '': #print line if line[2:11] !='<NO ADDR>' and line !='\n' and line != '\r': name = line[16:-1] #print 'Trying to decode address of \n%s'%line, #for i in line: # print ord(i), #print '' addr = int(line[2:12],16) self.devs[name]=addr line = self.ser.readline() def _binary_read(self,size,addr,offset=0): """ Reads data from the IBOB in binary mode. Offset and size are measured in 32 bit words. ie Requesting size of 1 will return 4 bytes. The IBOB addresses bytes, but the size is 32bit delimited.""" num_pkts = int(numpy.ceil(size/(127.))) output = '' for i in range(num_pkts): st_offset = (i*127)+offset request_size = numpy.min([size-(i*127),127]) cmd = chr((0<<7) + request_size) request_addr = struct.pack('>L',addr+(st_offset*4)) self.ser.write(bin_mode + cmd + request_addr) output+=self.ser.read(request_size*4) return output #return struct.unpack('>L',ser.read(4)) def _binary_write(self,size,addr,data): assert(size<128) assert(type(data)==str) cmd = chr((1<<7) + size) addr = struct.pack('>L',addr) self.ser.write(bin_mode + cmd + addr + data) def read_uint(self, register, size=1): out=struct.unpack('>%iL'%size,self._binary_read(size=size,addr=self.devs[register])) if size==1: return out[0] else: return out def read_int(self, register, size=1): out=struct.unpack('>%il'%size,self._binary_read(size=size,addr=self.devs[register])) if size==1: return out[0] else: return out def write_uint(self, register, data): self._binary_write(size=1,addr=self.devs[register],data=struct.pack('>L',data))
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/