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/

Responder a