Esempio n. 1
0
class AudioEventRx(object):
	def __init__(self, ip, cmd,src):
#		print "AudioEventRx::__init__"
		self.ip = ip
		self.eio = NetEventIO(ip)
		self.eio.addRXMask(cmd,src)
		self.eio.start()
		self.buffer = ""
		self.count = 0
	
	def getAudioBuffer(self, size):

		if len(self.buffer)<size:		
			self.getData()

		data = self.buffer[:size]
		self.buffer = self.buffer[size:]

		return data

	def getData(self):
		self.count +=1
		erx = self.eio.getEvents()
		if self.count%10==0:	print len(erx)
		if len(erx)>640:
			erx = erx[640:]
		
		for event in erx:
			self.buffer += struct.pack('<h', event.data[1])
			self.buffer += struct.pack('<h', event.data[2])
			self.buffer += struct.pack('<h', event.data[3])
			self.buffer += struct.pack('<h', event.data[4])
Esempio n. 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)
Esempio n. 3
0
    def __init__(self, somaIP, tgts):
        self.eio = NetEventIO(somaIP)
        self.pingtgts = set(tgts)

        for i in self.pingtgts:
            #self.eio.addRXMask(0x09, i)
            self.eio.addRXMask(PING_RESPONSE_CMD, i)
        self.eio.start()
Esempio n. 4
0
    def __init__(self, *args):

        dbus.service.Object.__init__(self, *args)
        # State Variables
        self.playing = False
        self.audioChan = 0x20;
        self.selectedAudioChan = self.audioChan
        self.subChan = 0;  #most likely will refere to a tetrode sub-channel
        self.selectedSubChan = self.subChan    

        self.eio = NetEventIO("10.0.0.2")
        
        # AudioControl Event Constants setup on 10/13/08
        self.AUDIO_EVENT_CMD = 0x12
        self.ENABLE_AUDIO_EVENTS = 1
        self.DISABLE_AUDIO_EVENTS = 0
        self.AUDIO_REQUEST = 0
        self.AUDIO_UPDATE = 1

        #Create GST elements - pipeline will not be created
        gobject.type_register(SomaAudioEventFilter)
        self.eventSource = gst.element_factory_make('somaeventsource', "SomaEventSource")
        self.audioEventFilter = SomaAudioEventFilter()
        self.AUDIO_SINK = "pulsesink"
        self.audioSink = gst.element_factory_make(self.AUDIO_SINK)
        self.audioConverter = gst.element_factory_make("audioconvert")
        self.audioResampler= gst.element_factory_make("audioresample")
        self.queue = gst.element_factory_make("queue")
        self.pipeline = None
Esempio n. 5
0
    def __init__(self, SOMAIP):
        self.eio = NetEventIO(SOMAIP)
        self.src = eaddr.NETWORK

        self.eio.addRXMask(xrange(256), eaddr.SYSCONTROL)

        self.eio.start()
Esempio n. 6
0
	def __init__(self, ip, cmd,src):
#		print "AudioEventRx::__init__"
		self.ip = ip
		self.eio = NetEventIO(ip)
		self.eio.addRXMask(cmd,src)
		self.eio.start()
		self.buffer = ""
		self.count = 0
Esempio n. 7
0
    def __init__(self, somaIP, tgts):
        self.eio = NetEventIO(somaIP)
        self.pingtgts = set(tgts)

        for i in self.pingtgts:
            # self.eio.addRXMask(0x09, i)
            self.eio.addRXMask(PING_RESPONSE_CMD, i)
        self.eio.start()
Esempio n. 8
0
def youare(devicenums):

    eio = NetEventIO("10.0.0.2")
    for d in devicenums:
        eio.addRXMask(xrange(256), int(d))

    eio.start()

    EVENTCMD_YOUARE = 0x01


    for i in devicenums:
        devicelinknum = int(i)

        for device in xrange(4):
            e = Event()
            e.cmd = EVENTCMD_YOUARE
            e.src = eaddr.NETWORK
            deviceid = 8  + devicelinknum * 4 + device
            e.data[0] = deviceid
            ea = eaddr.TXDest()
            ea[deviceid] = 1

            print "Sending youare for ", deviceid, e
            
            reallysend(eio, ea, e)
            

    eio.stop()
Esempio n. 9
0
class FPGAPing(object):
    def __init__(self, somaIP, tgts):
        self.eio = NetEventIO(somaIP)
        self.pingtgts = set(tgts)

        for i in self.pingtgts:
            # self.eio.addRXMask(0x09, i)
            self.eio.addRXMask(PING_RESPONSE_CMD, i)
        self.eio.start()

    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)

    def stop(self):
        self.eio.stop()
Esempio n. 10
0
class FPGAPing(object):
    def __init__(self, somaIP, tgts):
        self.eio = NetEventIO(somaIP)
        self.pingtgts = set(tgts)

        for i in self.pingtgts:
            #self.eio.addRXMask(0x09, i)
            self.eio.addRXMask(PING_RESPONSE_CMD, i)
        self.eio.start()

    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)

    def stop(self):
        self.eio.stop()
Esempio n. 11
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()
Esempio n. 12
0
def ping_digital_out(ip):


    addr = DIGITAL_OUT
    eio = NetEventIO(ip)
    eio.addRXMask(PING_RESPONSE_CMD, [addr])
    eio.start()

    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  0x08
    e.data[0] = 0x1234
    e.data[1] = 0x5678

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

    eio.sendEvent(ea, e)

    erx = eio.getEvents(blocking=True)
    for e in erx:
        print e

    eio.stop()
Esempio n. 13
0
"""
Uses the EchoProc on the DSP to measure our current RAM use

"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = int(sys.argv[1])

ECMD_ECHOPROC_MEMCHECK = 0xF8
ECMD_ECHOPROC_MEMCHECK_RESP = 0xF9
eio.addRXMask(ECMD_ECHOPROC_MEMCHECK_RESP, xrange(256))

eio.start()

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

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

eio.sendEvent(ea, e)
Esempio n. 14
0
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

stattgts = set()
for who in sys.argv[1:]:
    if '-' in who:
        # this is a range
        (startstr, endstr) = who.split("-")
        for r in range(int(startstr), int(endstr) + 1):
            stattgts.add(r)
    else:
        stattgts.add(int(who))

for i in stattgts:
    eio.addRXMask(xrange(256), i)

eio.start()

# Create event and set mask
e = Event()
e.src = eaddr.NETWORK
e.cmd = 0x40  # query link status status
e.data[0] = 0  # param 0 , link status
e.data[1] = 0
Esempio n. 15
0
"""
Monitor and print all acqdatasource events
"""

import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = int(sys.argv[1])

ACQDATASOURCE_CMDRESP = 0x42
eio.addRXMask(ACQDATASOURCE_CMDRESP, DSPBOARDADDR)

eio.start()
while True:
    erx = eio.getEvents()
    for q in erx:
        print q

eio.stop()
Esempio n. 16
0
from somapynet import eaddr 
from somapynet.neteventio import NetEventIO	

eio = NetEventIO("10.0.0.2")

timerid = 0
timecmd = 0x10

eio.addRXMask(timecmd, timerid)

eio.start()

erx = eio.getEvents()
for event in erx:
  print event

eio.stop()
Esempio n. 17
0
"""
Dump the DSPboard's echoproc counter information
(for benchmarking)


"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")
DSPBOARDADDR = int(sys.argv[1])

eio.addRXMask([0xF4], DSPBOARDADDR)

eio.start()

CMD = 0xF4
# Create event and set mask
N = 8
for i in xrange(4):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = CMD
    e.data[0] = i
    ea = eaddr.TXDest()
    ea[DSPBOARDADDR] = 1
Esempio n. 18
0
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

ECMD_ECHOPROC_MEMCHECK = 0xF8
ECMD_ECHOPROC_MEMCHECK_RESP = 0xF9

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
Esempio n. 19
0
import sys
sys.path.append("../")

from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

eio = NetEventIO("10.0.0.2")

ECMD_PINGREQ = 0x08
ECMD_PINGRESP = 0x09
eio.addRXMask(ECMD_PINGRESP, eaddr.SYSCONTROL)

eio.start()

e = Event()
e.src = eaddr.NETWORK
e.cmd = ECMD_PINGREQ
ea = eaddr.TXDest()
ea[eaddr.SYSCONTROL] = 1
print "sending request", e

eio.sendEvent(ea, e)
eio.sendEvent(ea, e)
eio.sendEvent(ea, e)
eio.sendEvent(ea, e)
rxevents = []
while len(rxevents) < 4:
    erx = eio.getEvents()
    rxevents += erx
Esempio n. 20
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)
Esempio n. 21
0
import sys
sys.path.append("../")

from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

eio = NetEventIO("10.0.0.2")

eio.addRXMask(xrange(256), eaddr.NETWORK)

eio.start()

e = Event()
for i in xrange(4):
    e.src = eaddr.NETWORK
    e.cmd = 0x20
    e.data[0] = 0x0123
    e.data[1] = 0x4564
    e.data[2] = 0x1122
    e.data[3] = 0x89AB
    e.data[4] = i 
    
    ea = eaddr.TXDest()
    ea[eaddr.NETWORK] = 1
    
    eio.sendEvent(ea, e)
    

events = []
Esempio n. 22
0
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

somaip = sys.argv[1]

eio = NetEventIO(somaip)

DSPBOARDADDR = int(sys.argv[2])

eio.addRXMask(xrange(256), DSPBOARDADDR)

eio.start()

# Create event and set mask
e = Event()
e.src = eaddr.NETWORK
e.cmd = 0x40  # query link status status
e.data[0] = 0  # param 0 , link status
e.data[1] = 0

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

eio.sendEvent(ea, e)
print "acq link status query sent, waiting for response"
Esempio n. 23
0
"""
Try and PING the DSPboard
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = 0x08
#eio.addRXMask(xrange(256), DSPBOARDADDR)
eio.addRXMask(xrange(256), 0xAB)

eio.start()

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

## ea = eaddr.TXDest()
## ea[DSPBOARDADDR] = 1
## eio.sendEvent(ea, e)

erx = eio.getEvents()
Esempio n. 24
0
"""
Dump the DSPboard's echoproc counter information
(for benchmarking)


"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")
DSPBOARDADDR = int(sys.argv[1])

eio.addRXMask([0xF4], DSPBOARDADDR)

eio.start()

CMD = 0xF4
# Create event and set mask
N = 8
for i in xrange(4):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  CMD
    e.data[0] = i
    ea = eaddr.TXDest()
    ea[DSPBOARDADDR] = 1
Esempio n. 25
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()
Esempio n. 26
0
    v = struct.unpack("L", s)[0]
    print "git sha-1 begins: %16.16x" % v


def print_build_time(evt):
    print evt

    x = evt.data[1] << 16 | evt.data[2]
    print "build time:", time.asctime(time.localtime(x))


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()
Esempio n. 27
0
def digital_out(ip):

    
    addr = ADDR_DIGITAL_OUT
    eio = NetEventIO(ip)
    eio.addRXMask(xrange(256), [addr])
    eio.start()

    vals = True
    
    while True:
        e = Event()
        e.src = eaddr.NETWORK
        e.cmd =  DIGITALOUT_WRITE
        e.data[0] = 0xFFFF
        e.data[1] = 0xFFFF
        if vals:
            e.data[2] = 0xFFFF
            e.data[3] = 0xFFFF
        else:
            e.data[2] = 0x0
            e.data[3] = 0x0

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

        eio.sendEvent(ea, e)


        # now read

        e = Event()
        e.src = eaddr.NETWORK
        e.cmd =  DIGITALOUT_READ

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

        eio.sendEvent(ea, e)

        erx = eio.getEvents(blocking=True)
        for e in erx:
            print e
        vals = not vals
        time.sleep(0.2)
        
    eio.stop()
Esempio n. 28
0
                  action="store_true",
                  dest="query",
                  default=False,
                  help="Query the status")
parser.add_option("-t",
                  "--set-threshold",
                  dest="threshold",
                  help="Set the threshold to this mV")

(options, args) = parser.parse_args()
# args are the non-captured arguments

devices = [int(x) for x in args]

if options.query:
    eio = NetEventIO("10.0.0.2")

    thresholds = {}

    for d in devices:
        eio.addRXMask(ECMD_RESPONSE, d)

    eio.start()
    for chan in range(4):
        e = Event()
        e.src = eaddr.NETWORK
        e.cmd = ECMD_QUERY
        e.data[0] = PARAM_THRESHOLD
        e.data[1] = chan

        ea = eaddr.TXDest()
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

somaIP = "127.0.0.1"

eio = NetEventIO(somaIP)
dev = 40

eio.addRXMask(xrange(256), dev)

eio.start()
        
e = Event()
e.src = eaddr.NETWORK
e.cmd =  0x30
e.data[0] = 1
e.data[1] = 1
e.data[2] = 1
e.data[3] = 0

ea = eaddr.TXDest()
ea[dev] = 1
eio.sendEvent(ea, e)

for i in range(100):
Esempio n. 30
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()
Esempio n. 31
0
"""
Try and flash the DSPboard FPGA EVENT leds
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

eio.start()

CMD = 0x31
# Create event and set mask
N = 8

    
def getiset(j):
    return [q for q in range(j * 4 + 8, j*4 + 12)]

def setLED(addrs, stateon):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  CMD
    if stateon:
        e.data[0] = 0xFFFF
    else:
        e.data[0] = 0x0000
Esempio n. 32
0
class DeviceLinkStatus(object):
    def __init__(self, SOMAIP):
        self.eio = NetEventIO(SOMAIP)
        self.src = eaddr.NETWORK

        self.eio.addRXMask(xrange(256), eaddr.SYSCONTROL)

        self.eio.start()
        
    def getLinkStatus(self, DEVN):

        # get the link status event 
        e = Event()
        e.src = self.src
        e.cmd = 0x20
        ea = eaddr.TXDest()
        ea[eaddr.SYSCONTROL] = 1

        self.eio.sendEvent(ea, e)

        erx = self.eio.getEvents()
        linkstatus_event = erx[0]

        # now parse the link status event
        status = []
            
        for i in range(DEVN):
            if (linkstatus_event.data[1] >> i) & 0x1 > 0:
                status.append(True)
            else:
                status.append(False)
        return status
    
    def getLinkCycleCount(self, DEVN):
        # now get all of the counter events        
        rx_set = {}
        for i in range(DEVN):
            e = Event()
            e.src = self.src
            e.cmd = 0x21
            e.data[0] = i

            ea = eaddr.TXDest()
            ea[eaddr.SYSCONTROL] = 1
            self.eio.sendEvent(ea, e)

            erx = self.eio.getEvents()

            rx_set[i] = erx
        cyclecnt = []
        for i in range(DEVN):
            cyclecnt.append(rx_set[i][0].data[2])
        return cyclecnt

##         print debug_event

##         for i in range(DEVN):
##             dly = (-1, -1)
##             if i in delays:
##                 dly = (delays[i] >> 8, delays[1] & 0xFF)

##             if (linkstatus_event.data[1] >> i) & 0x1 > 0:
##                 print "Device %2d : UP" % i, 
##             else:
##                 print "Device %2d :   " % i,
##             print "%d link cycles"  % (rx_set[i][0].data[2] )
    
    def getDLTiming(self):
        # now get the debug counters
        e = Event()
        e.src = self.src
        e.cmd = 0x22
        ea = eaddr.TXDest()
        ea[eaddr.SYSCONTROL] = 1
        self.eio.sendEvent(ea, e)
        
        erx = self.eio.getEvents()
        for e in erx:
            debug_event = erx[0]

        timings = []
        for ei in range(4):
            tpos = (debug_event.data[ei] >> 8 ) & 0xFF
            tlen = debug_event.data[ei] & 0xFF
            timings.append((tpos, tlen))
        
        return timings

    def stop(self):
        self.eio.stop()
Esempio n. 33
0
"""
Ping the DSP on the DSPboard

The first argument is the deviceID of the DSP

"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

pingtgts = set()
for who in sys.argv[1:]:
    if '-' in who:
        # this is a range
        (startstr, endstr) = who.split("-")
        for r in range(int(startstr), int(endstr) + 1):
            pingtgts.add(r)
    else:
        pingtgts.add(int(who))

for i in pingtgts:
    eio.addRXMask(xrange(256), i)
eio.addRXMask(xrange(256), xrange(1, 0x4c))

eio.start()
Esempio n. 34
0
This is a port from the jtag debug 'readpointers.py'

"""

import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO
sys.path.append("../../jtag")
import jtag

if len(sys.argv) > 1 and sys.argv[1] == "jtag":
    eio = jtag.JTAGEventIO()
    src = eaddr.JTAG
else:
    eio = NetEventIO("10.0.0.2")
    src = eaddr.NETWORK


eio.addRXMask(xrange(256), eaddr.NETCONTROL)

eio.start()

def readreg(val):
    e = Event()
    e.src = src
    e.cmd =  0x30
    
    e.data[0] = 0
    e.data[1] = val
    e.data[2] = 0
Esempio n. 35
0
"""
Set the UART ID of the DSPboard

Not necessary with newest dspboot.py

"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = int(sys.argv[1])

eio.addRXMask(xrange(256), DSPBOARDADDR)

eio.start()

# Create event and set mask
e = Event()
e.src = eaddr.NETWORK
e.cmd =  0x37
e.data[0] = DSPBOARDADDR
e.data[1] = DSPBOARDADDR
e.data[2] = DSPBOARDADDR
e.data[3] = DSPBOARDADDR
e.data[4] = DSPBOARDADDR
Esempio n. 36
0
from somapynet.neteventio import NetEventIO

import struct
import time

ECMD_ECHOPROC_MEMCHECK = 0xF8
ECMD_ECHOPROC_MEMCHECK_RESP = 0xF9


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
Esempio n. 37
0
class AcqBoardInterface(object):

    CMDFIBERCMD = 0x50
    CMDFIBERDATAA = 128
    CMDFIBERDATAB = 129
    CMDFIBERRESP = 0x82

    DESTSRCID = 76
    
    
    def __init__(self, IP="10.0.0.2", set = 'A'):
        self.eio = NetEventIO(IP)
        self.set = set
        

    def sendCommandAndBlock(self, acqboardcmd):
        """
        acqboardcmd is an AcqBoardCommand object whose state represents
        the most recent state change to the board;

        we retreive the encoded string with acqboardcmd.latestString
        and the most recent commandID with .

        """

        # setup rx
        self.eio.addRXMask(self.CMDFIBERRESP, xrange(256) )

        SRC = 3

        acmdstr = acqboardcmd.latestString
        # this is a total hack, we extract out the command byte
        bytes = struct.unpack("BBBBBB", acmdstr)
        
        cmdid = bytes[0] >> 4
        cmd = bytes[0] & 0xF
        assert cmdid == acqboardcmd.cmdid
        
        self.eio.start()
        ea = eaddr.TXDest()
        ea[:] = 1
        e = Event()
        e.cmd = self.CMDFIBERCMD
        e.src = SRC
        e.data[0] = (cmdid << 8) | cmd
        e.data[1] = bytes[4] << 8 | bytes[3]
        e.data[2] = bytes[2] << 8 | bytes[1]


        ## Substantial debugging
        
        #cmdtuple = (0x50, 4, (cmdid << 8) | (cmd & 0xF), 1, 0, 0, 0)
        #self.pne.sendEvent(addrtuple, cmdtuple)
        print "sending event", e
        self.eio.sendEvent(ea, e)
        

        success = False

        while success == False:
            erx = self.eio.getEvents()
            # extract out events
            for e in erx:
                #print e
                if e.cmd == self.CMDFIBERRESP: # and e.src == self.DESTSRCID:
                    # response; extract out bits
                    cmdid = e.data[0]
                    if cmdid == acqboardcmd.cmdid:
                        success = True

        self.eio.stop()
    def getSamples(self, N):
        """ Very simple interface to getting
        samples -- at the moment we just return N samples
        from either the A channels or the B channels"""

        data = n.zeros((5, N), dtype=n.int16)
        if self.set == "A":
            self.eio.addRXMask(self.CMDFIBERDATAA, xrange(256) )
        elif self.set == "B" :
            self.eio.addRXMask(self.CMDFIBERDATAB, xrange(256) )
        else:
            # both 
            self.eio.addRXMask(self.CMDFIBERDATAA, xrange(256) )
            self.eio.addRXMask(self.CMDFIBERDATAB, xrange(256) )

        self.eio.start()
        receivedN = 0
        while (receivedN < N):
            erx = self.eio.getEvents()
            for e in erx:
                if receivedN < N:
                    for i in xrange(5):
                        data[i][receivedN]  = e.data[i]
                receivedN += 1
        self.eio.stop()

        return data
    def getNormSamplesA(self, N):
        """
        Return 5xN "normal", that is not-raw-mode, samples, from
        the A tetrode set of channels
        """
        self.set = "A"
        return self.getSamples(N)

    def getNormSamplesB(self, N):
        """
        Return 5xN "normal", that is not-raw-mode, samples, from
        the B tetrode set of channels
        """

        self.set = "B"
        return self.getSamples(N)
        
    def getRawSamples(self, N):
        """
        return N sampes as if from "Raw"

        """
        raise "Not implemented" 
Esempio n. 38
0
import sys

sys.path.append("../")
sys.path.append("../../jtag")

import time
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO
import jtag

if sys.argv[1] == "jtag":
    eio = jtag.JTAGEventIO()
    src = eaddr.JTAG
else:
    eio = NetEventIO("10.0.0.2")
    src = eaddr.NETWORK

eio.addRXMask(xrange(256), eaddr.SYSCONTROL)

eio.start()

e = Event()
e.src = src
e.cmd = 0x20
ea = eaddr.TXDest()
ea[eaddr.SYSCONTROL] = 1

eio.sendEvent(ea, e)

erx = eio.getEvents()
Esempio n. 39
0
"""
Try and flash the DSPboard FPGA EVENT leds
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

eio.start()

CMD = 0x31
# Create event and set mask
N = 8


def getiset(j):
    return [q for q in range(j * 4 + 8, j * 4 + 12)]


def setLED(addrs, stateon):
    e = Event()
    e.src = eaddr.NETWORK
    e.cmd = CMD
    if stateon:
        e.data[0] = 0xFFFF
    else:
Esempio n. 40
0
"""
Try and PING the DSPboard
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = 0x08
#eio.addRXMask(xrange(256), DSPBOARDADDR)
eio.addRXMask(xrange(256), 0xAB)

eio.start()

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

## ea = eaddr.TXDest()
## ea[DSPBOARDADDR] = 1
## eio.sendEvent(ea, e)

Esempio n. 41
0
"""
Monitor and print all acqdatasource events
"""


import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = int(sys.argv[1])

ACQDATASOURCE_CMDRESP = 0x42
eio.addRXMask(ACQDATASOURCE_CMDRESP, DSPBOARDADDR)

eio.start()
while True:
    erx = eio.getEvents()
    for q in erx:
        print q

eio.stop()

    
    
Esempio n. 42
0
"""
Try and flash the DSPboard LED
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")
dspaddrs = set()
delay = float(sys.argv[1])
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.start()

CMD = 0xF2

# Create event and set mask
while (1):
Esempio n. 43
0
"""
Try and flash the DSPboard LED
"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")
dspaddrs = set()
delay = float(sys.argv[1])
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.start()

CMD = 0xF2

# Create event and set mask
Esempio n. 44
0
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

somaip = sys.argv[1]

eio = NetEventIO(somaip)

DSPBOARDADDR = int(sys.argv[2])

eio.addRXMask(xrange(256), DSPBOARDADDR)

eio.start()

# Create event and set mask
e = Event()
e.src = eaddr.NETWORK
e.cmd = 0x40  # query link status status
e.data[0] = 0  # param 0 , link status
e.data[1] = 0


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


eio.sendEvent(ea, e)
Esempio n. 45
0
"""
Uses the EchoProc on the DSP to measure our current RAM use

"""
import sys
from somapynet.event import Event
from somapynet import eaddr
from somapynet.neteventio import NetEventIO

import struct
import time

eio = NetEventIO("10.0.0.2")

DSPBOARDADDR = int(sys.argv[1])

ECMD_ECHOPROC_MEMCHECK = 0xF8
ECMD_ECHOPROC_MEMCHECK_RESP = 0xF9
eio.addRXMask(ECMD_ECHOPROC_MEMCHECK_RESP, xrange(256))

eio.start()

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

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

eio.sendEvent(ea, e)
Esempio n. 46
0
 def __init__(self, IP="10.0.0.2", set = 'A'):
     self.eio = NetEventIO(IP)
     self.set = set
Esempio n. 47
0
def manual_boot_device(filename, devicenums, youares):
    """
    Devicenums are the device link nums. Note that they do not
    map directly onto the configuration bit lines
    """

    eio = NetEventIO("10.0.0.2")

    eio.addRXMask(xrange(256), eaddr.SYSCONTROL)

    eio.start()

    MANBOOTSER_SETMASK = 0xA0
    MANBOOTSER_TOGPROG = 0xA1
    MANBOOTSER_WRITEBYTES = 0xA2
    MANBOOTSER_SENDBYTES = 0xA3

    EVENTCMD_YOUARE = 0x01
    EVENTCMD_LINKSTATUS = 0x20
    

    e = Event()
    e.src = eaddr.NETWORK
    e.cmd =  MANBOOTSER_SETMASK

    wrd = 0
    #int_devicenums = [int(x) for x in devicenums]
    for d in devicenums: # [device_to_config_mapping[x] for x in int_devicenums]:
        cfg_line = device_to_config_bits[d]
        wrd |= (1 << cfg_line)
    #print "word = %8.8X" % wrd

    # FIXME: 
    e.data[0] = wrd >> 16 
    e.data[1] = wrd & 0xFFFF

    ea = eaddr.TXDest()
    ea[eaddr.SYSCONTROL] = 1
    eio.sendEvent(ea, e)

    # toggle FPROG
    e.cmd =  MANBOOTSER_TOGPROG
    eio.sendEvent(ea, e)

    # send the actual data
    fid = file(filename)
    fid.seek(72)

    data = fid.read(8)
    pos = 0
    ecnt = 0

    while data:

        e.cmd = MANBOOTSER_WRITEBYTES
        e.src = eaddr.NETWORK
        ea = eaddr.TXDest()
        ea[eaddr.SYSCONTROL] = 1


        if len(data) < 8:
            #print "The end" 
            data = data + "       "
        for i in xrange(4):
            e.data[i] = struct.unpack(">H", data[(i*2):(i*2+2)])[0]

        reallysend(eio, ea, e)

        # now push the bytes to the client device
        e.cmd = MANBOOTSER_SENDBYTES
        e.src = eaddr.NETWORK
        ea = eaddr.TXDest()
        ea[eaddr.SYSCONTROL] = 1

        reallysend(eio, ea, e)

        erx = eio.getEvents()


        data =fid.read(8)
        pos += 8

        ecnt  += 1

    # loop and query the linkstatus register to see if our links
    # are up yet, and once they are, go.

    up_delay = False
    allup = False
    for i in range(20):
        e = Event()
        e.cmd = EVENTCMD_LINKSTATUS
        e.src = eaddr.NETWORK
        ea = eaddr.TXDest()
        ea[eaddr.SYSCONTROL] = 1

        reallysend(eio, ea, e)

        erx =  eio.getEvents(False)
        device_status_event = None
        
        if erx != None:
            for e in erx:
                if e.cmd == EVENTCMD_LINKSTATUS:
                    device_status_event = e

        if device_status_event:
            stat = parse_linkstatus(device_status_event)
            allup = True
            for i in devicenums:
                if not stat[i]:
                    allup = False
        if allup:
            break
        up_delay += 1
        time.sleep(1)
        
    if not allup:
        print "Was unable to bring up the requested links"
        sys.exit(1)
    else:
        print "links up after", up_delay, "secs"
    
    #now send the YOUARE so the device knows who it is
    for deviceid in youares:
             e = Event()
             e.cmd = EVENTCMD_YOUARE
             e.src = eaddr.NETWORK
             
             e.data[0] = deviceid
             ea = eaddr.TXDest()
             ea[deviceid] = 1
             print "Sending youare for ", deviceid, e
             
             reallysend(eio, ea, e)                        


    eio.stop()