Commit aa15ee48 authored by Theodor-Adrian Stana's avatar Theodor-Adrian Stana

sw: Added support for commands in older ELMA f/w versions

The ELMA readreg/writereg commands changed some time ago from;

readreg slot reg-index
writereg slot reg-index hex-val-to-write

to

readreg slot reg-hex-addr
writereg slot reg-hex-addr hex-val-to-write

Previously, the ei2c.py script was quickly changed from one version to another
to validate that the hardware works. Now, I finally found the time to make the
addition to support the older versions as well.

The ei2c.py was changed to check (in the open()) function which f/w version we
have on the ELMA SysMon and applies the correct command based on version.
parent 7ce8b7a0
......@@ -35,6 +35,7 @@
# TODO: -
#===============================================================================
import sys
import socket
from ei2cexcept import *
import ei2cdefine
......@@ -77,6 +78,21 @@ class EI2C:
raise BadPasswordError
self.handle = s
# get crate firmware version, to apply proper address in readreg/writereg
self.handle.send("version\r\n")
ver = self.handle.recv(256)
pos = ver.find("Software version")
if (pos == -1):
print("Unexpected response from \"version\" command, exiting...")
self.close()
sys.exit(2)
ver = float(ver[pos+17:pos+21])
self.ver = ver
# Print connection information
print("Successfully connected to " + self.ip)
print("SysMon firmware v%1.2f" % self.ver)
def close(self):
self.handle.close()
if (ei2cdefine.DUMP):
......@@ -84,44 +100,54 @@ class EI2C:
def write(self, slot, addr, val):
self.write_cnt += 1
#reg = addr/4 + 1
cmd = "writereg %d %x %x\r\n" % (slot, addr, val)
if (self.ver < 2.27):
addr = addr/4 + 1
cmd = "writereg %d %d %x\r\n" % (slot, addr, val)
if (ei2cdefine.DUMP):
self.f.write(cmd);
self.f.write(cmd);
self.handle.send(cmd)
self._strip_resp(self.handle.recv(30))
def read(self, slot, addr):
self.read_cnt += 1
#reg = addr/4 + 1
cmd = "readreg %d %x\r\n" % (slot, addr)
if (self.ver < 2.27):
addr = addr/4 + 1
cmd = "readreg %d %d\r\n" % (slot, addr)
if (ei2cdefine.DUMP):
self.f.write(cmd);
self.f.write(cmd);
self.handle.send(cmd)
resp = self._strip_resp(self.handle.recv(30))
return resp
def writemregs(self, slot, addr, val):
self.write_cnt += 1
#reg = addr/4 + 1
#print '%02x' % sl
cmd = "writemregs %d %x %s\r\n" % (slot, addr, ' '.join(format(b,'x') for b in val))
if (self.ver < 2.27):
addr = addr/4 + 1
cmd = "writemregs %d %d %s\r\n" % (slot, addr, ' '.join(format(b,'x') for b in val))
if (ei2cdefine.DUMP):
self.f.write(cmd);
self.f.write(cmd);
#print cmd
self.handle.send(cmd)
self._strip_resp(self.handle.recv(30))
def readmregs(self, slot, addr, nrregs):
self.read_cnt += 1
#reg = addr/4 + 1
cmd = "readmregs %d %x %d\r\n" % (slot, addr, nrregs)
if (self.ver < 2.27):
addr = addr/4 + 1
cmd = "readmregs %d %d %d\r\n" % (slot, addr, nrregs)
if (ei2cdefine.DUMP):
self.f.write(cmd);
self.f.write(cmd);
self.handle.send(cmd)
resp = self._strip_resp(self.handle.recv(30))
return resp
def get_ver(self):
return self.ver
def _strip_resp(self, msg):
"""Strip useful message from SysMon response.
......@@ -133,7 +159,7 @@ class EI2C:
#print msg.splitlines()
msg = msg.splitlines()[1]
if (ei2cdefine.DUMP):
self.f.write(msg + "\n")
self.f.write(msg + "\n")
if "Not Ack" in msg:
raise NAckError
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment