示例#1
0
    def ping(self):

        # Create event and set mask
        e = Event()
        e.src = eaddr.NETWORK
        e.cmd = 0x08
        e.data[0] = 0x1234
        e.data[1] = 0x5678

        ea = eaddr.TXDest()
        for i in self.pingtgts:
            ea[i] = 1

        self.eio.sendEvent(ea, e)

        starttime = time.time()
        PINGWAIT = 1.0
        eventsrxed = []
        while len(eventsrxed) < len(self.pingtgts):
            erx = self.eio.getEvents(blocking=False)
            if erx != None:
                for eias in erx:
                    print eias
                eventsrxed += erx
            if time.time() > starttime + PINGWAIT:
                break

        rxset = set()
        for e in eventsrxed:
            rxset.add(e.src)

        missing = self.pingtgts.difference(rxset)
        return (rxset, missing)
示例#2
0
def pingset(dspboardaddrs):
    eio = NetEventIO("10.0.0.2")

    eio.addRXMask(0xF1, xrange(256))

    eio.start()

    # Create event and set mask
    N = 40
    x = n.zeros(N)
    for i in range(N):
        e = Event()
        e.src = eaddr.NETWORK
        e.cmd = 0xF0
        e.data[0] = 0x1234

        ea = eaddr.TXDest()
        for d in dspboardaddrs:
            ea[d] = 1

        eio.sendEvent(ea, e)
        erx = eio.getEvents()
        x[i] = len(erx)
    eio.stop()
    pylab.figure()
    pylab.hist(x)
示例#3
0
def setLED(addrs, stateon):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = CMD
    if stateon:
        e.data[0] = 0xFFFF
    else:
        e.data[0] = 0x0000

    ea = eaddr.TXDest()
    for i in addrs:
        ea[i] = 1
    eio.sendEvent(ea, e)
示例#4
0
def debug(dspboardaddrs):
    eio = NetEventIO("10.0.0.2")

    eio.addRXMask(0x38, dspboardaddrs)

    eio.start()
    print "Sending to ", dspboardaddrs

    # Create event and set mask
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = 0x38

    for d in dspboardaddrs:
        ea = eaddr.TXDest()
        ea[d] = 1
        eio.sendEvent(ea, e)
        print "sending", e
        erx = eio.getEvents()
        print erx[0]
    eio.stop()
示例#5
0
        # this is a range
        (startstr, endstr) = who.split("-")
        for r in range(int(startstr), int(endstr) + 1):
            dspaddrs.add(r)
    else:
        dspaddrs.add(int(who))
if len(dspaddrs) == 0:
    raise Exception("Must specify at least one dsp board target")

eio.start()

CMD = 0xF2

# Create event and set mask
while (1):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = CMD
    e.data[0] = 0xFFFF

    ea = eaddr.TXDest()
    for i in dspaddrs:
        ea[i] = 1
    eio.sendEvent(ea, e)

    #rint "on"
    time.sleep(delay)

    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = CMD
示例#6
0
funcs = {8: print_name, 9: print_version, 10: print_hash, 11: print_build_time}

somaip = sys.argv[1]

eio = NetEventIO(somaip)

DSPBOARDADDR = int(sys.argv[2])

ECMD_VERSION_QUERY = 0x04
eio.addRXMask(ECMD_VERSION_QUERY, DSPBOARDADDR)

eio.start()
for field in range(0, 4):
    # Create event and set mask
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = ECMD_VERSION_QUERY
    e.data[0] = (1 << 15) | field

    ea = eaddr.TXDest()
    ea[DSPBOARDADDR] = 1

    eio.sendEvent(ea, e)

    erx = eio.getEvents()
    for q in erx:
        print q
        #funcs[field](q)

eio.stop()
示例#7
0
def main():

    dspaddrs = set()
    for who in sys.argv[2:]:
        if '-' in who:
            # this is a range
            (startstr, endstr) = who.split("-")
            for r in range(int(startstr), int(endstr)+1):
                dspaddrs.add(r)
        else:
            dspaddrs.add(int(who))
    if len(dspaddrs) == 0:
        raise Exception("Must specify at least one dsp board target")
    eio = NetEventIO("10.0.0.2")

    #DSPBOARDADDR = tgt
    for d in dspaddrs:
        eio.addRXMask(xrange(256), d)

    eio.start()

    ea = eaddr.TXDest()

    for d in dspaddrs:
        ea[d] = 1

    print "Asserting DSP reset" 
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPRESET
    e.data[0] = 0x0000
    reallysend(eio, ea, e)

    print "Deasserting DSP reset" 
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPRESET
    e.data[0] = 0xFFFF
    reallysend(eio, ea, e)

    print "Acquiring DSP SPI interface for FPGA" 
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPSPIEN
    e.data[0] = 0xFFFF
    reallysend(eio, ea, e)

    print "Deasserting SPISS"
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPSPISS
    e.data[0] = 0xFFFF
    reallysend(eio, ea, e)


    print "Reasserting SPISS"
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPSPISS
    e.data[0] = 0x0000
    reallysend(eio, ea, e)

    time.sleep(1)

    # load up the blocks and send

    blocks = loadfiles()
    blockpos = 0

    for byteblock in blocks:
        MAXLEN = 1024
        chunks = chunk(byteblock, MAXLEN)
        print "byteblock, len = ", len(byteblock), len(chunks), "chunks"
        cpos = 0
        for b in chunks:
            pos = 0
            while pos < len(b):
                bytes = b[pos:pos+2]

                words = struct.unpack(">H", bytes)

                e = Event()
                e.src = eaddr.NETWORK
                e.cmd =  EVENTRXCMD_DATABUF
                e.data[0] = words[0]
                e.data[1] = pos / 2

                ea = eaddr.TXDest()
                for d in dspaddrs:
                    ea[d] = 1

                reallysend(eio, ea, e) # idempotent 
                pos += 2
            e = Event()
            e.src = eaddr.NETWORK
            e.cmd =  EVENTRXCMD_DATABUFTX
            # this is the length 
            e.data[0] = pos/2
            # now the nonce
            e.data[1] = cpos * 256 + pos 
            ea = eaddr.TXDest()
            for d in dspaddrs:
                ea[d] = 1

            reallysend(eio, ea, e)
            print "sent databuftx event, blockpos =%d,  block len = %d, chunk number %d" % (blockpos, len(b), cpos)

            # we need to get events from everyone
            ecnt = 0
            while ecnt < len(dspaddrs):
                erx = eio.getEvents()
                for q in erx:
                    ecnt += 1
		    print "Heard back from ", q.src, q
            

            cpos += 1
        blockpos += 1
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPSPISS
    e.data[0] = 0xFFFF

    ea = eaddr.TXDest()
    for d in dspaddrs:
        ea[d] = 1
    reallysend(eio, ea, e)


    # Give DSP control of SPI interface
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  EVENTRXCMD_DSPSPIEN
    e.data[0] = 0x0000

    ea = eaddr.TXDest()

    for d in dspaddrs:
        ea[d] = 1

    reallysend(eio, ea, e)

    time.sleep(1)
    # now send all of the UART settings
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  0x37
    for d in dspaddrs:
        e.data[0] = d
        e.data[1] = d
        e.data[2] = d
        e.data[3] = d
        e.data[4] = d
        ea = eaddr.TXDest()
        ea[d] = 1

        reallysend(eio, ea, e)
        
    
    eio.stop()
示例#8
0
ECMD_ECHOPROC_BENCHMARK = 0xF4
ECMD_ECHOPROC_BENCHMARK_RESP = 0xF4

dspboardaddrs = [int(x) for x in sys.argv[1:]]

eio = NetEventIO("10.0.0.2")

eio.addRXMask(ECMD_ECHOPROC_MEMCHECK_RESP, dspboardaddrs)
eio.addRXMask(ECMD_ECHOPROC_BENCHMARK_RESP, dspboardaddrs)

eio.start()

for d in dspboardaddrs:
    print "Device %02x ----------------------------------------" % (d, )
    # Create event and set mask
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = ECMD_ECHOPROC_MEMCHECK
    ea = eaddr.TXDest()
    ea[d] = 1

    eio.sendEvent(ea, e)

    erx = eio.getEvents()
    memsize = erx[0].data[1]
    print "heap use: %2.2fk" % (memsize / 1000.0)

    # get the benchmarks:
    for i in range(3):
        eb = Event()
        eb.src = eaddr.NETWORK