Skip to content
Snippets Groups Projects
Commit 3e37a12d authored by Patrick Robbe's avatar Patrick Robbe
Browse files

Test FTSW connection

parent d818b65e
No related branches found
No related tags found
No related merge requests found
......@@ -2,116 +2,58 @@ from lli import mem_multi as mem
nErr = 0
import os
import subprocess, random
CRC16_XMODEM_TABLE = [
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
]
def resetCounter():
mem.write( 0 , 0x00050100 , 0 )
mem.write( 0 , 0x00050100 , 2 )
mem.write( 0 , 0x00050100 , 0 )
def readCounter():
status, val = mem.read( 0 , 0x00050120 )
return ( val & 0x1FFE0000 ) >> 17
def _crc16(data, crc, table):
"""Calculate CRC16 using the given table.
`data` - data for calculating CRC, must be a string
`crc` - initial value
`table` - table for caclulating CRC (list of 256 integers)
Return calculated value of CRC
"""
for byte in data:
byte1 = byte & 0xFF
byte2 = ( byte & 0xFF00 ) >> 8
crc = ((crc<<8)&0xff00) ^ table[((crc>>8)&0xff)^byte2]
crc = ((crc<<8)&0xff00) ^ table[((crc>>8)&0xff)^byte1]
return crc & 0xffff
def readRunNumber():
status, val = mem.read( 0 , 0x00050180 )
return ( val & 0xFF00 ) >> 8 | ( val & 0x00FF ) << 8
import socket
hname = socket.gethostname()
for nev in range( 10 ):
for nev in range( 100 ):
ntrig = random.randint(1,1000)
resetCounter()
outputString = ''
# Send trigger (adapt this line to your system)
if ( hname == 'belle2daq.local' ):
os.system( "ssh vme \"trigft -80 pulse 1 1\"" ) ### ADD this to suppress output >/dev/null 2>&1" )
outputString = subprocess.check_output( "ssh vme \"trigft -80 pulse 1000 {0}\"".format(ntrig) , shell=True) ### ADD this to suppress output >/dev/null 2>&1" )
else: ### KEK
os.system( "ssh ttd3 \"trigft -23 pulse 1 1\"" )
outputString = subprocess.check_output( "ssh ttd3 \"trigft -23 pulse 1000 {0}\"".format(ntrig) , shell=True)
if not 'run' in outputString:
print "Bad FTSW command"
nErr = nErr + 1
continue
runnumber = int( outputString.partition('run')[2].lstrip().split()[0] )
# wait for data to arrive
size = 0
## temporisation of 2s
import time
time.sleep( 2 )
status, val = mem.read( 0 , 0x00050080)
size = val
print "Number of words received = {0}".format( size )
if size == 0:
print 'Not enough data read, exit'
exit( 0 )
count = readCounter()
if count != ntrig:
print 'Error: {0} trigger received, {1} sent'.format( count , ntrig )
nErr = nErr + 1
# read data
runn = readRunNumber()
if runn != runnumber:
print 'Error: {0} run number received, {1} expected'.format( runn , runnumber )
nErr = nErr + 1
data = []
data_crc = []
for i in range( size / 2 + 1 ):
status, val = mem.read( 0 , 0x00050060 )
data.append( ( ( val & 0xFFFF ) << 16 ) | ( ( val & 0xFFFF0000 ) >> 16 ) )
if ( i <= size / 2 - 3) :
data_crc.append( ( val & 0xFFFF ) )
data_crc.append( ( val & 0xFFFF0000 ) >> 16 )
print 'Event number = {0}, run number = {1}, number of triggers sent = {2}, number of triggers received = {3}'.format(nev,runn,ntrig,count)
# Display data:
print '==================================='
print 'B2L: {0:08x}'.format(data[0])
print 'B2L: {0:08x}'.format(data[1])
print 'B2L: {0:08x}'.format(data[2])
print 'B2L: {0:08x}'.format(data[3])
print 'B2L: {0:08x}'.format(data[4])
print '-----------------------------------'
print 'FEE: data #0 {0:08x}'.format(data[5])
print 'FEE: data #1 {0:08x}'.format(data[6])
print 'FEE: ..........'
print 'FEE: data #{0} {1:08x}'.format(size/2-7,data[size/2-3])
print '-----------------------------------'
print 'B2L: {0:08x}'.format(data[size/2-2])
print 'B2L: {0:08x}'.format(data[size/2-1])
print '==================================='
print ''
print 'CRC = {0:04x}'.format(data[size/2]&0xFFFF)
print 'Computed CRC {0:04x}'.format(_crc16( data_crc, 0xffff , CRC16_XMODEM_TABLE ) )
if ( data[size/2-1]&0xFFFF ) != ( _crc16( data_crc, 0xffff , CRC16_XMODEM_TABLE ) ):
print 'Error in CRC comparison'
nErr = nErr + 1
print 'number of errors = {0}'.format( nErr )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment