Initial commit 5
This commit is contained in:
parent
e1b07a8e0f
commit
b8f8210e77
BIN
Docu/Hardware/Genesis/10129RPT10 Breeze Programmer's guide.pdf
Normal file
BIN
Docu/Hardware/Genesis/10129RPT10 Breeze Programmer's guide.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/10129RPT10 Programmer's guide_V0151.pdf
Normal file
BIN
Docu/Hardware/Genesis/10129RPT10 Programmer's guide_V0151.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/12748DOC11 - func spec ICOE472.pdf
Normal file
BIN
Docu/Hardware/Genesis/12748DOC11 - func spec ICOE472.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/17946RPT15 Data to Flow.pdf
Normal file
BIN
Docu/Hardware/Genesis/17946RPT15 Data to Flow.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/20170824 Genesis Test Spec CEM.docx
Normal file
BIN
Docu/Hardware/Genesis/20170824 Genesis Test Spec CEM.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/20170905_uwbr_Genesis-Processes.docx
Normal file
BIN
Docu/Hardware/Genesis/20170905_uwbr_Genesis-Processes.docx
Normal file
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/2018-05-20 Umbau Gensis Kopf TTL-RS232.PDF
Normal file
BIN
Docu/Hardware/Genesis/2018-05-20 Umbau Gensis Kopf TTL-RS232.PDF
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/20180604_jeli_json_file.docx
Normal file
BIN
Docu/Hardware/Genesis/20180604_jeli_json_file.docx
Normal file
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/Amplitude calibration example.xlsx
Normal file
BIN
Docu/Hardware/Genesis/Amplitude calibration example.xlsx
Normal file
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/Calibration procedure.docx
Normal file
BIN
Docu/Hardware/Genesis/Calibration procedure.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Configurations.xls
Normal file
BIN
Docu/Hardware/Genesis/Configurations.xls
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/D810036B.pdf
Normal file
BIN
Docu/Hardware/Genesis/D810036B.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/DB_GP30_Vol4_en.pdf
Normal file
BIN
Docu/Hardware/Genesis/DB_GP30_Vol4_en.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/GenPwdDB.zip
Normal file
BIN
Docu/Hardware/Genesis/GenPwdDB.zip
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Debug Serial Output-3.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Debug Serial Output-3.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Debug Serial Output.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Debug Serial Output.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification-1.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification-1.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification-2.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification-2.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Firmware Specification.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis MRD 05-31-2017 02-31-44.doc
Normal file
BIN
Docu/Hardware/Genesis/Genesis MRD 05-31-2017 02-31-44.doc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Meter Configuration.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Meter Configuration.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis PRD 05-31-2017 02-32-18.doc
Normal file
BIN
Docu/Hardware/Genesis/Genesis PRD 05-31-2017 02-32-18.doc
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis RFID Tool V1.00 Source.zip
Normal file
BIN
Docu/Hardware/Genesis/Genesis RFID Tool V1.00 Source.zip
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Registers.xlsx
Normal file
BIN
Docu/Hardware/Genesis/Genesis Registers.xlsx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis Registers.zip
Normal file
BIN
Docu/Hardware/Genesis/Genesis Registers.zip
Normal file
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis passwords.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis passwords.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis to PC HW connection.vsd
Normal file
BIN
Docu/Hardware/Genesis/Genesis to PC HW connection.vsd
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis-RFID-Test.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis-RFID-Test.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/GenesisPwdHandling.docx
Normal file
BIN
Docu/Hardware/Genesis/GenesisPwdHandling.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/GenesisPwdHandling.vsd
Normal file
BIN
Docu/Hardware/Genesis/GenesisPwdHandling.vsd
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Genesis_SISe.docx
Normal file
BIN
Docu/Hardware/Genesis/Genesis_SISe.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/LED modes.xlsx
Normal file
BIN
Docu/Hardware/Genesis/LED modes.xlsx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Metrology Value Checking.docx
Normal file
BIN
Docu/Hardware/Genesis/Metrology Value Checking.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Optoadapter_V2_1_Sch.pdf
Normal file
BIN
Docu/Hardware/Genesis/Optoadapter_V2_1_Sch.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Optoadapter_V2_1_pcb.pdf
Normal file
BIN
Docu/Hardware/Genesis/Optoadapter_V2_1_pcb.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Pressure measurement proposal.docx
Normal file
BIN
Docu/Hardware/Genesis/Pressure measurement proposal.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/RFID Tests.docx
Normal file
BIN
Docu/Hardware/Genesis/RFID Tests.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/RFID_MRD2_Module.pdf
Normal file
BIN
Docu/Hardware/Genesis/RFID_MRD2_Module.pdf
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/RS232_RS485.docm
Normal file
BIN
Docu/Hardware/Genesis/RS232_RS485.docm
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/RegistersForCalibrationAndCustomers.xlsx
Normal file
BIN
Docu/Hardware/Genesis/RegistersForCalibrationAndCustomers.xlsx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Software und Hardware Probleme.xlsx
Normal file
BIN
Docu/Hardware/Genesis/Software und Hardware Probleme.xlsx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Test Time.xlsx
Normal file
BIN
Docu/Hardware/Genesis/Test Time.xlsx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Threshold control.docx
Normal file
BIN
Docu/Hardware/Genesis/Threshold control.docx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Timing methods used for Temp from TOF.pptx
Normal file
BIN
Docu/Hardware/Genesis/Timing methods used for Temp from TOF.pptx
Normal file
Binary file not shown.
BIN
Docu/Hardware/Genesis/Xylem_Common_Solution-HowToStart.docx
Normal file
BIN
Docu/Hardware/Genesis/Xylem_Common_Solution-HowToStart.docx
Normal file
Binary file not shown.
Binary file not shown.
6000
Docu/Hardware/Genesis/configuration.json
Normal file
6000
Docu/Hardware/Genesis/configuration.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
BIN
Docu/Hardware/Genesis/na2w_irda_protocol_specification_v1_x.docx
Normal file
BIN
Docu/Hardware/Genesis/na2w_irda_protocol_specification_v1_x.docx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
394
Docu/Hardware/Genesis/opticalapp.py
Normal file
394
Docu/Hardware/Genesis/opticalapp.py
Normal file
@ -0,0 +1,394 @@
|
|||||||
|
import json
|
||||||
|
import opticalinterface.opticalcommands as opticalcommands
|
||||||
|
import opticalinterface.opticalexceptions as opticalexceptions
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
import math
|
||||||
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class BreezeOptical(object):
|
||||||
|
|
||||||
|
SEEK_SET = 0
|
||||||
|
SEEK_CUR = 1
|
||||||
|
SEEK_END = 2
|
||||||
|
|
||||||
|
# maximum number of attempts to login
|
||||||
|
LOGIN_ATTEMP_MAX = 5
|
||||||
|
|
||||||
|
def __init__(self, port, irda=False):
|
||||||
|
# import register definitions
|
||||||
|
DIRNAME = os.path.split(__file__)[0]
|
||||||
|
registers_file = os.path.join(DIRNAME, "registers.json")
|
||||||
|
skeleton_file = os.path.join(DIRNAME, "skeletonkeys.json")
|
||||||
|
|
||||||
|
with open(registers_file) as fp:
|
||||||
|
self.register_dict = json.load(fp)
|
||||||
|
with open(skeleton_file) as fp:
|
||||||
|
self.keys = json.load(fp)
|
||||||
|
|
||||||
|
# strip out comments at start and end
|
||||||
|
self.register_dict = {r: self.register_dict[r] for r in
|
||||||
|
self.register_dict if not r.startswith("_")}
|
||||||
|
|
||||||
|
# use the type field to select the data type class to use
|
||||||
|
for r in self.register_dict:
|
||||||
|
reg_type = self.register_dict[r]['type']
|
||||||
|
if reg_type == "int8_t":
|
||||||
|
reg_type_class = opticalcommands.Int8
|
||||||
|
elif reg_type == "int16_t":
|
||||||
|
reg_type_class = opticalcommands.Int16
|
||||||
|
elif reg_type == "int32_t":
|
||||||
|
reg_type_class = opticalcommands.Int32
|
||||||
|
elif reg_type == "int64_t":
|
||||||
|
reg_type_class = opticalcommands.Int64
|
||||||
|
elif reg_type == "uint8_t":
|
||||||
|
reg_type_class = opticalcommands.UInt8
|
||||||
|
elif reg_type == "uint16_t":
|
||||||
|
reg_type_class = opticalcommands.UInt16
|
||||||
|
elif reg_type == "uint32_t":
|
||||||
|
reg_type_class = opticalcommands.UInt32
|
||||||
|
elif reg_type == "uint64_t":
|
||||||
|
reg_type_class = opticalcommands.UInt64
|
||||||
|
elif reg_type == "uint96_t":
|
||||||
|
reg_type_class = opticalcommands.UInt96
|
||||||
|
elif reg_type == "bool_t":
|
||||||
|
reg_type_class = opticalcommands.Bool
|
||||||
|
elif reg_type == "enum8":
|
||||||
|
reg_type_class = opticalcommands.Enum8
|
||||||
|
elif reg_type == "bitmask8":
|
||||||
|
reg_type_class = opticalcommands.Bitmask8
|
||||||
|
elif reg_type == "string":
|
||||||
|
reg_type_class = opticalcommands.String
|
||||||
|
elif reg_type == "RPC":
|
||||||
|
reg_type_class = opticalcommands.RPC
|
||||||
|
elif reg_type == "status_t":
|
||||||
|
reg_type_class = opticalcommands.Status
|
||||||
|
elif reg_type == "time_t":
|
||||||
|
reg_type_class = opticalcommands.Time
|
||||||
|
else:
|
||||||
|
raise Exception("Unknown data type {}".format(reg_type))
|
||||||
|
self.register_dict[r]['type_class'] = reg_type_class
|
||||||
|
|
||||||
|
self.o = opticalcommands.OpticalCommands(port, irda=irda)
|
||||||
|
|
||||||
|
def list_registers(self):
|
||||||
|
registers = list(self.register_dict.keys())
|
||||||
|
registers.sort()
|
||||||
|
logging.info("\n".join(registers))
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
# use this so we can access registers as if they were
|
||||||
|
# members of OpticalApp
|
||||||
|
register = self.register_dict[name]
|
||||||
|
|
||||||
|
return self.o.read_reg(register['id'], register['type_class'])
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
if name != "register_dict" and name in self.register_dict:
|
||||||
|
# use this so we can access registers as if they were
|
||||||
|
# members of OpticalApp
|
||||||
|
register = self.register_dict[name]
|
||||||
|
return self.o.write_reg(register['id'],
|
||||||
|
register['type_class'], value)
|
||||||
|
else:
|
||||||
|
super(BreezeOptical, self).__setattr__(name, value)
|
||||||
|
|
||||||
|
def login(self, level, password=None):
|
||||||
|
# logout, this prevents cycling error on PCBSerialNumber when login
|
||||||
|
# is called repeatedly
|
||||||
|
self.CONFIGEXCHANGE_Privilege = 0
|
||||||
|
|
||||||
|
if level == 0:
|
||||||
|
logging.info("Logout succeeded")
|
||||||
|
else:
|
||||||
|
if not password:
|
||||||
|
# password hasn't been supplied,
|
||||||
|
# try to find it in the list of skeleton keys
|
||||||
|
|
||||||
|
logged_in = False
|
||||||
|
retry_count = 1
|
||||||
|
while not logged_in and retry_count <= self.LOGIN_ATTEMP_MAX:
|
||||||
|
if retry_count > 1:
|
||||||
|
logging.warn("login attempt (%d of %d)" % (retry_count, self.LOGIN_ATTEMP_MAX))
|
||||||
|
errstr = ""
|
||||||
|
try:
|
||||||
|
serial_number = self.CONFIGEXCHANGE_PCBSerialNumber
|
||||||
|
password = self.keys[serial_number]
|
||||||
|
logging.info("No password supplied, "
|
||||||
|
"found one in the list of skeleton keys")
|
||||||
|
logged_in = True
|
||||||
|
break
|
||||||
|
|
||||||
|
except KeyError:
|
||||||
|
errstr = "KeyError"
|
||||||
|
|
||||||
|
except opticalexceptions.ReadFailedException as e:
|
||||||
|
errstr = str(e)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
errstr = str(e)
|
||||||
|
|
||||||
|
retry_count += 1
|
||||||
|
logging.warn("Error Logging into device (%s)" % errstr)
|
||||||
|
self.CONFIGEXCHANGE_Privilege = 0
|
||||||
|
|
||||||
|
# couldn't log in, short delay to allow meter to
|
||||||
|
# finish any tasks.
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
if not logged_in:
|
||||||
|
logging.warn("login failed - raising exception")
|
||||||
|
raise opticalexceptions.LoginException()
|
||||||
|
|
||||||
|
self.CONFIGEXCHANGE_Privilege = level
|
||||||
|
self.CONFIGEXCHANGE_Password = password
|
||||||
|
# Check whether we successfully logged in
|
||||||
|
achieved_privilege = self.CONFIGEXCHANGE_Privilege
|
||||||
|
|
||||||
|
if achieved_privilege != level:
|
||||||
|
# Exception("Login Failed (check password)")
|
||||||
|
logging.warn("opticalapp.login failed. achieved_privilege %d, requested privilege: %d" % (achieved_privilege, level))
|
||||||
|
raise opticalexceptions.LoginException()
|
||||||
|
|
||||||
|
logging.info("Login succeeded")
|
||||||
|
|
||||||
|
def login_pcb(self, level, pcbsn):
|
||||||
|
"""
|
||||||
|
Login using a PCB serial number
|
||||||
|
Assume the skeleton key is in the list in CVS
|
||||||
|
(true for alpha2 and 2.1 boards)
|
||||||
|
"""
|
||||||
|
self.login(level, self.keys[pcbsn])
|
||||||
|
|
||||||
|
def changeBaudRate(self, newbaudrate):
|
||||||
|
# First query the capabilities
|
||||||
|
baud_cap, packet_cap, version = self.o.query_caps()
|
||||||
|
# Now enter training mode with desired baud rate
|
||||||
|
self.o.train(0x76, 5000, newbaudrate)
|
||||||
|
# After training baud goes back to base
|
||||||
|
self.o.BAUD_RATE = 9600
|
||||||
|
# Now attempt to change baud rate
|
||||||
|
try:
|
||||||
|
self.o.set_caps(newbaudrate, packet_cap)
|
||||||
|
self.o.BAUD_RATE = newbaudrate
|
||||||
|
except opticalexceptions.TrainingFailedException:
|
||||||
|
logging.info("Training failed, baud rate is now 9600")
|
||||||
|
raise opticalexceptions.BaudRateException
|
||||||
|
|
||||||
|
def fopen(self, filename, mode):
|
||||||
|
# make sure Null terminators go in
|
||||||
|
fn = filename.encode("utf=8")
|
||||||
|
if fn[-1] != '\0':
|
||||||
|
fn += '\0'
|
||||||
|
md = mode.encode("utf=8")
|
||||||
|
if md[-1] != '\0':
|
||||||
|
md += '\0'
|
||||||
|
# make sure each string is padded to 32bit words
|
||||||
|
padlen = 4 - len(fn) % 4
|
||||||
|
padlen = 0 if padlen == 4 else padlen
|
||||||
|
fn += '\0' * padlen
|
||||||
|
# concatenate the strings
|
||||||
|
rpc = fn + md
|
||||||
|
# write RPC to the FOpen register
|
||||||
|
self.CONFIGEXCHANGE_FOpen = (rpc)
|
||||||
|
# read FOpen register for the file handler and return it
|
||||||
|
return self.CONFIGEXCHANGE_FOpen
|
||||||
|
|
||||||
|
def fclose(self, handler):
|
||||||
|
# convert handler to a 16bit packed value
|
||||||
|
h = struct.pack('<I', handler)
|
||||||
|
# write the packed handler value to the FClose register
|
||||||
|
self.CONFIGEXCHANGE_FClose = h
|
||||||
|
# read the result from FClose register and return it
|
||||||
|
return self.CONFIGEXCHANGE_FClose
|
||||||
|
|
||||||
|
def fwrite(self, data, size, count, handle):
|
||||||
|
# pack the integer params
|
||||||
|
rpc = struct.pack('<III', size, count, handle)
|
||||||
|
# append the data to be written and then write to the FWrite register
|
||||||
|
self.CONFIGEXCHANGE_FWrite = rpc + data
|
||||||
|
# read FWrite for the number of elements written and return it
|
||||||
|
return self.CONFIGEXCHANGE_FWrite
|
||||||
|
|
||||||
|
def fread(self, size, count, handle):
|
||||||
|
total_read = 0
|
||||||
|
# pack our request into RPC params
|
||||||
|
rpc = struct.pack('<III', size, count, handle)
|
||||||
|
self.CONFIGEXCHANGE_FRead = rpc
|
||||||
|
# first read back the data length being returned
|
||||||
|
count_ret = self.CONFIGEXCHANGE_FRead
|
||||||
|
# read back data
|
||||||
|
data = ''
|
||||||
|
while (count_ret != 0): # The last word will be zero'd
|
||||||
|
register = self.register_dict['CONFIGEXCHANGE_FRead']
|
||||||
|
# calculate the length of the read back in words
|
||||||
|
reads = math.ceil((size*count_ret)/4.0)
|
||||||
|
data += self.o.read_reg_multiple(register['id'], reads)
|
||||||
|
total_read += count_ret
|
||||||
|
# Check if more data is comming
|
||||||
|
count_ret = self.CONFIGEXCHANGE_FRead
|
||||||
|
# return the number actually read and data
|
||||||
|
return total_read, data[:int(total_read * size)]
|
||||||
|
|
||||||
|
def ftell(self, handle):
|
||||||
|
# pack the handle into rpc and write to FTell register
|
||||||
|
self.CONFIGEXCHANGE_FTell = struct.pack('<I', handle)
|
||||||
|
# read and return the FTell register
|
||||||
|
return self.CONFIGEXCHANGE_FTell
|
||||||
|
|
||||||
|
def fseek(self, handle, offset, whence):
|
||||||
|
# pack the integer params into rpc
|
||||||
|
rpc = struct.pack('<Iii', handle, offset, whence)
|
||||||
|
# write rpc to FSeek register
|
||||||
|
self.CONFIGEXCHANGE_FSeek = rpc
|
||||||
|
# read and return the return code
|
||||||
|
return self.CONFIGEXCHANGE_FSeek
|
||||||
|
|
||||||
|
def fremove(self, filename):
|
||||||
|
# make sure Null terminators go in
|
||||||
|
rpc = filename.encode("utf=8")
|
||||||
|
if rpc[-1] != '\0':
|
||||||
|
rpc += '\0'
|
||||||
|
# write RPC to the Remove register
|
||||||
|
self.CONFIGEXCHANGE_Remove = rpc
|
||||||
|
# read FOpen register for the file handler and return it
|
||||||
|
return self.CONFIGEXCHANGE_Remove
|
||||||
|
|
||||||
|
def fflush(self, handle):
|
||||||
|
# pack the handle into rpc and write to FFlush register
|
||||||
|
self.CONFIGEXCHANGE_FFlush = struct.pack('<I', handle)
|
||||||
|
# read and return FFlush register
|
||||||
|
return self.CONFIGEXCHANGE_FFlush
|
||||||
|
|
||||||
|
def catalogue(self, wildcard, key=0):
|
||||||
|
# make sure Null terminators go in
|
||||||
|
wc = wildcard.encode("utf=8")
|
||||||
|
if wc[-1] != '\0':
|
||||||
|
wc += '\0'
|
||||||
|
ky = struct.pack('<I', key)
|
||||||
|
# make sure each string is padded to 32bit words
|
||||||
|
padlen = 4 - len(wc) % 4
|
||||||
|
padlen = 0 if padlen == 4 else padlen
|
||||||
|
wc += '\0' * padlen
|
||||||
|
# concatenate the strings
|
||||||
|
rpc = wc + ky
|
||||||
|
# write RPC to the FOpen register
|
||||||
|
self.CONFIGEXCHANGE_Catalogue = (rpc)
|
||||||
|
# read until a NULL terminator is encountered
|
||||||
|
data = ""
|
||||||
|
ret_key = None
|
||||||
|
while '\0' not in data:
|
||||||
|
data += struct.pack('<I', self.CONFIGEXCHANGE_Catalogue)
|
||||||
|
if data:
|
||||||
|
ret_key = self.CONFIGEXCHANGE_Catalogue
|
||||||
|
# garbage may be appended to the data string, lopp it off!
|
||||||
|
return data.split('\0')[0], ret_key
|
||||||
|
|
||||||
|
def feof(self, handle):
|
||||||
|
self.CONFIGEXCHANGE_FEOF = struct.pack('<I', handle)
|
||||||
|
return self.CONFIGEXCHANGE_FEOF
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import logging
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Poke a wired Genesis"
|
||||||
|
" 'optical' port")
|
||||||
|
parser.add_argument('serialport', help='what serial port to use')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Open the serial port
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
o = BreezeOptical(args.serialport, irda=True)
|
||||||
|
#o.list_registers()
|
||||||
|
|
||||||
|
|
||||||
|
o.login(8)
|
||||||
|
print("Pressure - {}".format(o.FUNCTEST_Pressure))
|
||||||
|
print("Monotonic seconds: {}".format(o.SYSTEM_MonotonicSeconds))
|
||||||
|
print("Serial number: {}".format(o.SYSTEM_PCBSerialNumber))
|
||||||
|
|
||||||
|
# o.FUNCTEST_Iloop = 25000
|
||||||
|
# print(o.FUNCTEST_Iloop)
|
||||||
|
|
||||||
|
print("Genesis flow sample rate = {}".format(o.GENESISFLOW_SampleRate))
|
||||||
|
print("Calendar seconds: {}".format(o.SYSTEM_CalendarSeconds))
|
||||||
|
print("Privilege {}".format(o.CONFIGEXCHANGE_Privilege))
|
||||||
|
o.SYSTEM_DriveCapacity = 0 # select drive
|
||||||
|
print("Drive Capacity: {}".format(o.SYSTEM_DriveCapacity))
|
||||||
|
|
||||||
|
# open a new file called test on drive 0 in write mode
|
||||||
|
handle = o.fopen("0\\test", "w")
|
||||||
|
if not handle:
|
||||||
|
print("Failed to open file")
|
||||||
|
|
||||||
|
# write soem data to said file
|
||||||
|
data = """This is a test file
|
||||||
|
Some data, blah, blah, blah,
|
||||||
|
filling some space up with absolute rubbish!!!,
|
||||||
|
woop woop!!!!!!!"""
|
||||||
|
print("data len: {}".format(len(data)))
|
||||||
|
write_ret = o.fwrite(data, 1, len(data), handle)
|
||||||
|
if not write_ret:
|
||||||
|
print("Failed to write file")
|
||||||
|
|
||||||
|
# close said file
|
||||||
|
close_ret = o.fclose(handle)
|
||||||
|
if close_ret:
|
||||||
|
print("Failed to close file")
|
||||||
|
|
||||||
|
# Look for a file with name starting with t on drive 0
|
||||||
|
name, key = o.catalogue("0\\t*")
|
||||||
|
|
||||||
|
# open said file in read mode
|
||||||
|
handle = o.fopen("0\\" + name, "r")
|
||||||
|
if not handle:
|
||||||
|
print("Failed to open file")
|
||||||
|
|
||||||
|
# read 32 bytes from said file
|
||||||
|
read_code, read_data = o.fread(1, 32, handle)
|
||||||
|
|
||||||
|
print("read code: {}".format(read_code))
|
||||||
|
print("read data: {}".format(read_data))
|
||||||
|
|
||||||
|
# move file pointer forwards 5 bytes
|
||||||
|
print("fseek code: {}".format(o.fseek(handle, 5, BreezeOptical.SEEK_CUR)))
|
||||||
|
|
||||||
|
# print the file pointer position
|
||||||
|
print("FTell: {}".format(o.ftell(handle)))
|
||||||
|
|
||||||
|
# read another 32 bytes
|
||||||
|
read_num, read_data = o.fread(1, 32, handle)
|
||||||
|
|
||||||
|
print("read number: {}".format(read_num))
|
||||||
|
print("read data: {}".format(read_data))
|
||||||
|
|
||||||
|
# Check if we have read past the end of the file
|
||||||
|
if o.feof(handle):
|
||||||
|
print("Read past end of file")
|
||||||
|
|
||||||
|
# close said file
|
||||||
|
close_ret = o.fclose(handle)
|
||||||
|
if close_ret:
|
||||||
|
print("Failed to close file")
|
||||||
|
|
||||||
|
# delete said file
|
||||||
|
remove_ret = o.remove("0\\" + name)
|
||||||
|
if remove_ret:
|
||||||
|
print("Failed to remove file")
|
||||||
|
|
||||||
|
# print the directory of drive 0
|
||||||
|
key = 0 # start with key 0
|
||||||
|
prev_key = None
|
||||||
|
directory = []
|
||||||
|
while key != prev_key: # keep looping until the keys match
|
||||||
|
prev_key = key
|
||||||
|
name, key = o.catalogue("0\\*", key)
|
||||||
|
# if the keys dont match it must be a new filename
|
||||||
|
if key != prev_key:
|
||||||
|
directory.append("0\\" + name)
|
||||||
|
print(directory)
|
||||||
2916
Docu/Hardware/Genesis/registers.json
Normal file
2916
Docu/Hardware/Genesis/registers.json
Normal file
File diff suppressed because it is too large
Load Diff
253
Docu/Hardware/Genesis/registers_20190320.json
Normal file
253
Docu/Hardware/Genesis/registers_20190320.json
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
{
|
||||||
|
"_comment": "Auto generated from 'Configuration.xls' - DO NOT MANUALLY EDIT THIS TABLE",
|
||||||
|
"SYSTEM_TriggerUpgrade": {"type": "bool_t", "id": 0, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "NA", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"SYSTEM_CheckPresence": {"type": "RPC", "id": 1, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_PCBSerialNumber": {"type": "string", "id": 2, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"SYSTEM_CustomerSerialNumber0": {"type": "string", "id": 3, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_CustomerSerialNumber1": {"type": "string", "id": 4, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_CustomerSerialNumber2": {"type": "string", "id": 5, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_CustomerSerialNumber3": {"type": "string", "id": 6, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_MonotonicSeconds": {"type": "uint32_t", "id": 7, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"SYSTEM_CalendarSeconds": {"type": "time_t", "id": 8, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_CoreRevision": {"type": "string", "id": 9, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"SYSTEM_DriveCapacity": {"type": "uint32_t", "id": 10, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_ExitReason": {"type": "status_t", "id": 11, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SYSTEM_CorePlatform": {"type": "uint16_t", "id": 12, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"SYSTEM_CRC": {"type": "uint16_t", "id": 13, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"LOGGER_Quota": {"type": "uint32_t", "id": 2048, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"LOGGER_Drive": {"type": "uint8_t", "id": 2049, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"LOGGER_TriggerLogFlush": {"type": "bool_t", "id": 2050, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "NA", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"CUSTOMER_AlarmStatus0": {"type": "uint32_t", "id": 2304, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus1": {"type": "uint32_t", "id": 2305, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_TriggerAlarmCancel": {"type": "uint32_t", "id": 2306, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_AlarmStatus2": {"type": "uint32_t", "id": 2307, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus3": {"type": "uint32_t", "id": 2308, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus4": {"type": "uint32_t", "id": 2309, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus5": {"type": "uint32_t", "id": 2310, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus6": {"type": "uint32_t", "id": 2311, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmStatus7": {"type": "uint32_t", "id": 2312, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_AlarmEnableMask": {"type": "uint32_t", "id": 2313, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_AlarmBroadcastMask": {"type": "uint32_t", "id": 2314, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_AlarmVisualMask": {"type": "uint32_t", "id": 2315, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_AlarmVisualAutoClearMask": {"type": "uint32_t", "id": 2316, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_ExcessFlowVolumeThreshold": {"type": "uint32_t", "id": 2317, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_LeakTimeThreshold": {"type": "uint32_t", "id": 2318, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_ReverseFlowTimeThreshold": {"type": "uint8_t", "id": 2319, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_Locale": {"type": "uint16_t", "id": 2322, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_RebootCount": {"type": "uint32_t", "id": 2324, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_ExcessFlowTimeThreshold": {"type": "uint32_t", "id": 2325, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_LeakFlowThreshold": {"type": "uint32_t", "id": 2326, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_MfgCharge": {"type": "uint32_t", "id": 2327, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CUSTOMER_TemperatureHighThreshold": {"type": "int32_t", "id": 2328, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_TemperatureHighDelay": {"type": "uint32_t", "id": 2329, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_TemperatureLowThreshold": {"type": "int32_t", "id": 2330, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_TemperatureLowDelay": {"type": "uint32_t", "id": 2331, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_PressureHighThreshold": {"type": "int32_t", "id": 2332, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_PressureHighDelay": {"type": "uint32_t", "id": 2333, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_PressureLowThreshold": {"type": "int32_t", "id": 2334, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_PressureLowDelay": {"type": "uint32_t", "id": 2335, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RW", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CUSTOMER_StoreConfiguration": {"type": "uint32_t", "id": 2336, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "RW", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"POWERMON_BatteryVoltage": {"type": "uint16_t", "id": 256, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatteryManufacturer": {"type": "string", "id": 257, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatterySize": {"type": "enum8", "id": 258, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatteryQuantity": {"type": "uint8_t", "id": 260, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatteryRatedVoltage": {"type": "uint8_t", "id": 261, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatteryVoltageMinThreshold": {"type": "uint8_t", "id": 263, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"POWERMON_BatterySelection": {"type": "uint8_t", "id": 264, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"POWERMON_TotalUsedCharge": {"type": "uint64_t", "id": 265, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"POWERMON_TotalUsedSeconds": {"type": "uint32_t", "id": 266, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"POWERMON_WarnFromClamp": {"type": "uint32_t", "id": 267, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"POWERMON_BatteryMilliAHrRating": {"type": "uint16_t", "id": 268, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CONFIGEXCHANGE_Privilege": {"type": "uint8_t", "id": 1024, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_Password": {"type": "uint96_t", "id": 1025, "privilege": {"lvl1": "WO", "lvl2": "WO", "lvl3": "WO", "lvl4": "WO", "lvl5": "WO", "lvl6": "WO", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"CONFIGEXCHANGE_FOpen": {"type": "RPC", "id": 1026, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FClose": {"type": "RPC", "id": 1027, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FRead": {"type": "RPC", "id": 1028, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FWrite": {"type": "RPC", "id": 1029, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FSeek": {"type": "RPC", "id": 1030, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FTell": {"type": "RPC", "id": 1031, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_Remove": {"type": "RPC", "id": 1032, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FEOF": {"type": "RPC", "id": 1033, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_Catalogue": {"type": "RPC", "id": 1034, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_PCBSerialNumber": {"type": "string", "id": 1036, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"CONFIGEXCHANGE_ConfigAccessRights": {"type": "uint16_t", "id": 1037, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"CONFIGEXCHANGE_FFlush": {"type": "RPC", "id": 1038, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_SampleRate": {"type": "uint8_t", "id": 3840, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlUp1": {"type": "int8_t", "id": 3841, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlUp2": {"type": "int8_t", "id": 3842, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlUp3": {"type": "int8_t", "id": 3843, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlDown1": {"type": "int8_t", "id": 3844, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlDown2": {"type": "int8_t", "id": 3845, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitLvlDown3": {"type": "int8_t", "id": 3846, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_StartHit": {"type": "uint8_t", "id": 3847, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_AmplitudePeakDetectEnd": {"type": "uint8_t", "id": 3848, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_NumFirePulses": {"type": "uint8_t", "id": 3849, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_DisplayPow10": {"type": "int8_t", "id": 3850, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_DisplayUnits": {"type": "enum8", "id": 3851, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MeterSize": {"type": "enum8", "id": 3852, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_CalFactor1": {"type": "uint16_t", "id": 3853, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_CalFactor2": {"type": "uint16_t", "id": 3854, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_CalFactor3": {"type": "uint16_t", "id": 3855, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ZeroOffset1": {"type": "int32_t", "id": 3856, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ZeroOffset2": {"type": "int32_t", "id": 3857, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ZeroOffset3": {"type": "int32_t", "id": 3858, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ScaledBilling": {"type": "int64_t", "id": 3859, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"GENESISFLOW_ResetAccumulators": {"type": "bool_t", "id": 3860, "privilege": {"lvl1": "WO", "lvl2": "WO", "lvl3": "WO", "lvl4": "WO", "lvl5": "WO", "lvl6": "WO", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"GENESISFLOW_ForwardArrow": {"type": "enum8", "id": 3861, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_LedMode": {"type": "enum8", "id": 3862, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_StoreCalibration": {"type": "uint32_t", "id": 3863, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "NA", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_UnscaledFwd": {"type": "uint64_t", "id": 3864, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_UnscaledRev": {"type": "uint64_t", "id": 3865, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_LowFlowThreshold": {"type": "uint32_t", "id": 3866, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_LowFlowMaxPeriod": {"type": "uint32_t", "id": 3867, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_UpdateThreshold": {"type": "uint32_t", "id": 3868, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ArrowThreshold": {"type": "uint32_t", "id": 3869, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FireBuffer1": {"type": "uint8_t", "id": 3870, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FireBuffer2": {"type": "uint8_t", "id": 3871, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FireBuffer3": {"type": "uint8_t", "id": 3872, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_TriggerActive": {"type": "bool_t", "id": 3873, "privilege": {"lvl1": "WO", "lvl2": "WO", "lvl3": "WO", "lvl4": "WO", "lvl5": "WO", "lvl6": "WO", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"GENESISFLOW_TriggerIdle": {"type": "uint16_t", "id": 3874, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MaxValidDeltaToF": {"type": "uint32_t", "id": 3875, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MaxValidToF": {"type": "uint32_t", "id": 3876, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MinValidToF": {"type": "uint32_t", "id": 3877, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitPercent1": {"type": "uint8_t", "id": 3878, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitPercent2": {"type": "uint8_t", "id": 3879, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitPercent3": {"type": "uint8_t", "id": 3880, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitShift": {"type": "uint8_t", "id": 3881, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitMinimum": {"type": "uint8_t", "id": 3882, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ToFErrorLimit": {"type": "uint32_t", "id": 3883, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_FirstHitUpdatePeriod": {"type": "uint8_t", "id": 3884, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_PipeFillingDelay": {"type": "uint8_t", "id": 3885, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ToFTempOffset1": {"type": "int32_t", "id": 3886, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ToFTempOffset2": {"type": "int32_t", "id": 3887, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ToFTempOffset3": {"type": "int32_t", "id": 3888, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_ToFTempCalibrate": {"type": "int32_t", "id": 3889, "privilege": {"lvl1": "WO", "lvl2": "WO", "lvl3": "WO", "lvl4": "WO", "lvl5": "WO", "lvl6": "WO", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"GENESISFLOW_StoreConfiguration": {"type": "uint32_t", "id": 3890, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "RW", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_SealDisplay": {"type": "bool_t", "id": 3891, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_TriggerTest": {"type": "bool_t", "id": 3892, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MaxValidAmplitude": {"type": "uint32_t", "id": 3893, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_MinValidAmplitude": {"type": "uint32_t", "id": 3894, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"GENESISFLOW_HardErrorLimit": {"type": "uint16_t", "id": 3895, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_GP30Test": {"type": "uint32_t", "id": 2560, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_LCDTest": {"type": "uint32_t", "id": 2561, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_Iloop": {"type": "uint32_t", "id": 2562, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_Pulse": {"type": "uint32_t", "id": 2563, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_Pressure": {"type": "uint32_t", "id": 2564, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_BatteryVoltage": {"type": "uint32_t", "id": 2565, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"FUNCTEST_SupplyVoltage": {"type": "uint32_t", "id": 2566, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"FUNCTEST_Temperature": {"type": "int16_t", "id": 2567, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"FUNCTEST_RFID": {"type": "uint32_t", "id": 2568, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_OpticalOutput": {"type": "uint32_t", "id": 2569, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_Radio": {"type": "uint32_t", "id": 2570, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_MultiTest": {"type": "uint16_t", "id": 2571, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_NFCUID": {"type": "uint64_t", "id": 2572, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"FUNCTEST_CPUTest": {"type": "uint32_t", "id": 2573, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"OPTICALPORT_BaudRateCapabilities": {"type": "uint32_t", "id": 1280, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"OPTICALPORT_PacketSizeCapabilities": {"type": "uint32_t", "id": 1281, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"OPTICALPORT_ProtocolVersion": {"type": "uint16_t", "id": 1282, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"OPTICALPORT_BaudRateSelected": {"type": "uint32_t", "id": 1283, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"OPTICALPORT_PacketSizeSelected": {"type": "uint32_t", "id": 1284, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RO"}},
|
||||||
|
"OPTICALPORT_ExternalUartControl": {"type": "uint8_t", "id": 1285, "privilege": {"lvl1": "WO", "lvl2": "WO", "lvl3": "WO", "lvl4": "WO", "lvl5": "WO", "lvl6": "WO", "lvl7": "WO", "lvl8": "WO"}},
|
||||||
|
"METROLOGYASST_ILoopMaxFlowRate": {"type": "uint32_t", "id": 4608, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_StoreConfiguration": {"type": "uint32_t", "id": 4609, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "RW", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PulseWeight": {"type": "uint32_t", "id": 4610, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PulseMode": {"type": "enum8", "id": 4611, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PulseLength": {"type": "enum8", "id": 4612, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_FlowUnits": {"type": "enum8", "id": 4613, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_FlowPoint": {"type": "enum8", "id": 4614, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_ILoopRate": {"type": "uint32_t", "id": 4615, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_TemperatureUnits": {"type": "enum8", "id": 4616, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PressureUnits": {"type": "enum8", "id": 4617, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PressureRate": {"type": "uint32_t", "id": 4618, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PressureOffset": {"type": "int32_t", "id": 4619, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PressurePresent": {"type": "bool_t", "id": 4620, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"METROLOGYASST_PressureMeasure": {"type": "int32_t", "id": 4621, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"NFC_EraseRMA": {"type": "bool_t", "id": 5376, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RO", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TxInterval": {"type": "uint16_t", "id": 4096, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_OmTxInterval": {"type": "uint16_t", "id": 4097, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_LatInterval": {"type": "uint8_t", "id": 4098, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_WakeupInterval": {"type": "uint8_t", "id": 4099, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_MbusState": {"type": "uint8_t", "id": 4100, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_FrequencyIndicator": {"type": "uint16_t", "id": 4101, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_FrequencyOffset": {"type": "int16_t", "id": 4102, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PowerLevel": {"type": "uint8_t", "id": 4103, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_SystemState": {"type": "uint8_t", "id": 4105, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_RadioAddress": {"type": "uint32_t", "id": 4106, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_UtcTimeOffset": {"type": "uint32_t", "id": 4107, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_SentBytesCounter": {"type": "uint16_t", "id": 4108, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ReceivedBytesCounter": {"type": "uint16_t", "id": 4109, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ResetCounter": {"type": "uint16_t", "id": 4110, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_BootLoaderState": {"type": "uint8_t", "id": 4111, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_LeakFlowThreshold": {"type": "uint16_t", "id": 4112, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_LeakFlowTimeThreshold": {"type": "uint16_t", "id": 4113, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_BrokenPipeFlowThreshold": {"type": "uint16_t", "id": 4114, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_BrokenPipeFlowTimeThreshold": {"type": "uint16_t", "id": 4115, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureMaxThreshold": {"type": "uint8_t", "id": 4116, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureMinThreshold": {"type": "uint8_t", "id": 4117, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureLimitTimeMaxThreshold": {"type": "uint16_t", "id": 4118, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureLimitTimeMinThreshold": {"type": "uint16_t", "id": 4119, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureMeasurePeriod": {"type": "uint16_t", "id": 4120, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureUnit": {"type": "uint8_t", "id": 4121, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PressureGaugeOffset": {"type": "uint16_t", "id": 4122, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureMaxThreshold": {"type": "uint8_t", "id": 4123, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureMinThreshold": {"type": "uint8_t", "id": 4124, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureTimeMaxThreshold": {"type": "uint16_t", "id": 4125, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureTimeMinThreshold": {"type": "uint16_t", "id": 4126, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureMeasurePeriod": {"type": "uint16_t", "id": 4127, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TemperatureUnit": {"type": "uint8_t", "id": 4128, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PulseOutWidth": {"type": "uint16_t", "id": 4129, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PulseOutDivisor": {"type": "uint16_t", "id": 4130, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PulseOutMode": {"type": "uint8_t", "id": 4131, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_CurrentLoopMax": {"type": "uint16_t", "id": 4132, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_CurrentLoopSource": {"type": "uint8_t", "id": 4133, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_MainAlarmMask": {"type": "uint8_t", "id": 4134, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ExtendedAlarmMask": {"type": "uint8_t", "id": 4135, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_HistoricalAlarmsDays": {"type": "uint8_t", "id": 4136, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_TestModeTime": {"type": "uint16_t", "id": 4139, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_EncryptionKey": {"type": "uint32_t", "id": 4140, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_Authentification": {"type": "uint32_t", "id": 4141, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_UpgFWVersion": {"type": "uint16_t", "id": 4142, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_CustomerText": {"type": "uint32_t", "id": 4143, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_RadioLastReadTime": {"type": "uint32_t", "id": 4144, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_LowBatDateTime": {"type": "uint32_t", "id": 4145, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_VeryLowBatDateTime": {"type": "uint32_t", "id": 4146, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_Unit": {"type": "uint8_t", "id": 4147, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ExtendedUnitFlags": {"type": "uint8_t", "id": 4148, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_OTAControlFlags": {"type": "uint8_t", "id": 4149, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_DataLogContents": {"type": "uint32_t", "id": 4152, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_DataLogPeriod": {"type": "uint16_t", "id": 4153, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_AverageFlowPeriod": {"type": "uint16_t", "id": 4154, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_FixedDateReadingContents": {"type": "uint32_t", "id": 4155, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_FixedDateDayOfMonth": {"type": "uint8_t", "id": 4156, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_MetroRadioLifeTimeCounter": {"type": "uint32_t", "id": 4157, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_PowerLevelOption": {"type": "uint8_t", "id": 4158, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ImpedanceCodeNew": {"type": "uint16_t", "id": 4159, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_ImpedanceCodeOption": {"type": "uint16_t", "id": 4160, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_IrDAModulePresent": {"type": "bool_t", "id": 4161, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_StoreConfiguration": {"type": "bool_t", "id": 4162, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"SENSUSRADIO_LifeTimeSeconds": {"type": "uint32_t", "id": 4163, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"TESTMANAGER_OutputFile": {"type": "string", "id": 25088, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"TESTMANAGER_TestNumber": {"type": "uint32_t", "id": 25089, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"TESTMANAGER_TestStatus": {"type": "enum8", "id": 25090, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"TESTMANAGER_TrapError": {"type": "uint32_t", "id": 25091, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"TESTMANAGER_TestParameter": {"type": "uint32_t", "id": 25092, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_DataLogContents": {"type": "uint32_t", "id": 4352, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_DataLogPeriod": {"type": "uint16_t", "id": 4353, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_AverageFlowPeriod": {"type": "uint16_t", "id": 4354, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_FixedDateReadingContents": {"type": "uint32_t", "id": 4355, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_FixedDateDayOfMonth": {"type": "uint8_t", "id": 4356, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_PeriodicLogLifeTimeCounter": {"type": "uint32_t", "id": 4357, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"PERIODICLOG_ResetCounter": {"type": "uint32_t", "id": 4358, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_PulseReportRate": {"type": "enum8", "id": 5120, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_AdapterPresenceLimit": {"type": "uint8_t", "id": 5121, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_PulseSequence": {"type": "uint8_t", "id": 5122, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_StoreConfiguration": {"type": "uint32_t", "id": 5123, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "RW", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_AMRDigits": {"type": "uint8_t", "id": 5124, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_AMROffset": {"type": "int8_t", "id": 5125, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_UI1203Fields": {"type": "uint16_t", "id": 5126, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_MfgDate": {"type": "uint32_t", "id": 5127, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"IRDA_DisplayAMRDigits": {"type": "bool_t", "id": 5128, "privilege": {"lvl1": "RW", "lvl2": "RW", "lvl3": "RW", "lvl4": "RW", "lvl5": "RW", "lvl6": "RW", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"NA2WALARMS_StoreConfiguration": {"type": "uint32_t", "id": 5888, "privilege": {"lvl1": "NA", "lvl2": "NA", "lvl3": "RW", "lvl4": "NA", "lvl5": "NA", "lvl6": "NA", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"NA2WALARMS_PredefEnable": {"type": "uint32_t", "id": 5889, "privilege": {"lvl1": "RO", "lvl2": "RO", "lvl3": "RO", "lvl4": "RO", "lvl5": "RO", "lvl6": "RO", "lvl7": "RW", "lvl8": "RW"}},
|
||||||
|
"_comment": "end of table"
|
||||||
|
}
|
||||||
BIN
Docu/Hardware/Genesis/rfid-dll-project.zip
Normal file
BIN
Docu/Hardware/Genesis/rfid-dll-project.zip
Normal file
Binary file not shown.
259
Docu/Hardware/Genesis/upgrade.py
Normal file
259
Docu/Hardware/Genesis/upgrade.py
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
from __future__ import print_function
|
||||||
|
import opticalinterface.opticalapp as oa
|
||||||
|
import opticalinterface.opticalexceptions as opticalexceptions
|
||||||
|
import struct
|
||||||
|
import time
|
||||||
|
|
||||||
|
class BinGen(object):
|
||||||
|
def __init__(self, hexfile):
|
||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
import crc16
|
||||||
|
import os
|
||||||
|
|
||||||
|
# convert hex file to binary data. Go via binary file to avoid shell expanding line endings
|
||||||
|
binary = subprocess.check_output(["srec_cat.exe", hexfile, "-Intel", "-o", "mybin.bin", "-Binary"], shell=True)
|
||||||
|
with open('mybin.bin', 'rb') as f:
|
||||||
|
binary = f.read()
|
||||||
|
os.remove("mybin.bin")
|
||||||
|
|
||||||
|
# split whole binary in the apps
|
||||||
|
apps = re.split(r'APP>', binary)
|
||||||
|
|
||||||
|
# keep trying until we're out of apps
|
||||||
|
while len(apps):
|
||||||
|
try:
|
||||||
|
# check we haven't overdone the splitting
|
||||||
|
appno = 0
|
||||||
|
good_apps = list()
|
||||||
|
while appno < len(apps):
|
||||||
|
# pop the APP> back on
|
||||||
|
a = 'APP>' + apps[appno]
|
||||||
|
appno += 1
|
||||||
|
|
||||||
|
# get the application length
|
||||||
|
header_format = "<IHHHBBIIIIIIIBBBB"
|
||||||
|
sig, crc, version, _, _, _, stack, rw_len, ro_len, zi_len, fn_table, ev_table, flags, appid, fn_table_len, _, _ = struct.unpack_from(header_format, a)
|
||||||
|
applen = rw_len + ro_len
|
||||||
|
|
||||||
|
# join bits back together until it is long enough
|
||||||
|
while (len(a) < applen):
|
||||||
|
a += 'APP>'
|
||||||
|
a += apps[appno]
|
||||||
|
appno += 1
|
||||||
|
|
||||||
|
# trim the padding
|
||||||
|
a = a[:applen]
|
||||||
|
|
||||||
|
# now check the crc
|
||||||
|
calc_crc = crc16.crc16xmodem(a[struct.calcsize("<IH"):], 0xffff)
|
||||||
|
if (calc_crc != crc):
|
||||||
|
raise Exception("Unpacking hex file failed, app CRC doesn't match")
|
||||||
|
good_apps.append(a)
|
||||||
|
# finished, exit the while loop nastily
|
||||||
|
apps = list()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Something went wrong. The beginning of the hex file has non-applications in it
|
||||||
|
if len(good_apps):
|
||||||
|
# we're not at the start, barf
|
||||||
|
raise(e)
|
||||||
|
# ditch the first chunk and try again
|
||||||
|
apps = apps[1:]
|
||||||
|
|
||||||
|
self.filelist = list()
|
||||||
|
for i, a in enumerate(good_apps):
|
||||||
|
filename = 'mybins{}.bin'.format(i)
|
||||||
|
with open(filename, 'wb') as f:
|
||||||
|
f.write(a)
|
||||||
|
self.filelist.append(filename)
|
||||||
|
|
||||||
|
def binfiles(self):
|
||||||
|
return self.filelist
|
||||||
|
|
||||||
|
def tidy(self):
|
||||||
|
for file in self.filelist:
|
||||||
|
os.remove(file)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Modify(object):
|
||||||
|
def __init__(self, appid, function):
|
||||||
|
self.function = function
|
||||||
|
self.appid = appid
|
||||||
|
|
||||||
|
def download(self, comms):
|
||||||
|
# move along, nothing to see here
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Upgrade(Modify):
|
||||||
|
def __init__(self, filename):
|
||||||
|
self.filename = filename
|
||||||
|
appid, self.version = self.parsebinary(self.filename)
|
||||||
|
super(Upgrade, self).__init__(appid, 'upgrade')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parsebinary(filename):
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
header_format = "<IHHHBBIIIIIIIBBBB"
|
||||||
|
header = f.read(struct.calcsize(header_format))
|
||||||
|
sig, crc, version, _, _, _, stack, rw_len, ro_len, zi_len, fn_table, ev_table, flags, appid, fn_table_len, _, _ = struct.unpack(header_format, header)
|
||||||
|
if (sig != struct.unpack("<I", "APP>")[0]):
|
||||||
|
raise Exception("Header format for file {} not valid".format(filename))
|
||||||
|
|
||||||
|
return appid, version
|
||||||
|
|
||||||
|
def download(self, comms):
|
||||||
|
chunksize = 100
|
||||||
|
with open(self.filename, 'rb') as f:
|
||||||
|
meter_file = "1\\upg{:02X}".format(self.appid)
|
||||||
|
mf = comms.fopen(meter_file, 'w')
|
||||||
|
if not mf:
|
||||||
|
raise Exception("upgrade application file {:02X} failed to open".format(self.appid))
|
||||||
|
written = 0
|
||||||
|
while (1):
|
||||||
|
# work in chunks
|
||||||
|
chunk = f.read(chunksize)
|
||||||
|
if chunk == '':
|
||||||
|
# end of file
|
||||||
|
break
|
||||||
|
comms.fwrite(chunk, 1, len(chunk), mf)
|
||||||
|
written += len(chunk)
|
||||||
|
print('{} bytes written\r'.format(written), end='')
|
||||||
|
comms.fclose(mf)
|
||||||
|
print('{} bytes written\r'.format(written))
|
||||||
|
print('Complete!')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "{:02X}:".format(self.appid)
|
||||||
|
|
||||||
|
class Remove(Modify):
|
||||||
|
def __init__(self, appid):
|
||||||
|
super(Remove, self).__init__(appid, 'remove')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "{:02X}*".format(self.appid)
|
||||||
|
|
||||||
|
def write_config(comms, upgrades):
|
||||||
|
mf = comms.fopen("1\\upgrade", "w")
|
||||||
|
if not mf:
|
||||||
|
raise Exception("upgrade file failed to open")
|
||||||
|
for u in upgrades:
|
||||||
|
comms.fwrite(repr(u), 3, 1, mf)
|
||||||
|
comms.fwrite("\r", 1, 1, mf)
|
||||||
|
comms.fclose(mf)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import logging
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Perform a firmware update")
|
||||||
|
parser.add_argument('serialport', help='what serial port to use')
|
||||||
|
parser.add_argument('binaries', nargs='+', help='list of application binaries to upgrade')
|
||||||
|
parser.add_argument('--irda', action='store_true', default=False, help='use IrDA rather than wired UART')
|
||||||
|
parser.add_argument('--fullupgrade', action='store_true', default=False, help='remove all existing applications and replace with binaries provided rather than just adding/upgrading the applications provided')
|
||||||
|
parser.add_argument('--hex', action='store_true', default=False, help='applications supplied as a single hex file, assumes --fullupgrade (note this requires srec_cat utility to be available on the path)')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.hex:
|
||||||
|
if len(args.binaries) > 1:
|
||||||
|
raise Exception("Expecting just one hex file")
|
||||||
|
|
||||||
|
bingen = BinGen(args.binaries[0])
|
||||||
|
args.binaries = bingen.binfiles()
|
||||||
|
args.fullupgrade = True
|
||||||
|
|
||||||
|
# Open the serial port
|
||||||
|
#logging.basicConfig(level=logging.DEBUG)
|
||||||
|
o = oa.BreezeOptical(args.serialport, irda=args.irda)
|
||||||
|
|
||||||
|
# Get the existing application list
|
||||||
|
before_apps = dict()
|
||||||
|
o.login(8)
|
||||||
|
print("Applications already on the meter")
|
||||||
|
MAX_APPLICATION_ID = 30 #todo this is a bit of a bodge
|
||||||
|
for appid in range(MAX_APPLICATION_ID):
|
||||||
|
o.SYSTEM_CheckPresence = struct.pack("<I", appid)
|
||||||
|
try:
|
||||||
|
v = o.SYSTEM_CheckPresence
|
||||||
|
print("Application {:02X}, version {:04X}".format(appid, v))
|
||||||
|
before_apps["{}".format(appid)] = v
|
||||||
|
except opticalexceptions.ReadFailedException:
|
||||||
|
# app not present but that's ok
|
||||||
|
pass
|
||||||
|
# and now the core revision
|
||||||
|
print ("Core: {}".format(o.SYSTEM_CoreRevision))
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# Loop through the binaries and find their details
|
||||||
|
upgrades = list()
|
||||||
|
dontbother = list()
|
||||||
|
print("Applications to upgrade")
|
||||||
|
for new_app in args.binaries:
|
||||||
|
u = Upgrade(new_app)
|
||||||
|
if ("{}".format(u.appid) not in before_apps) or (u.version != before_apps["{}".format(u.appid)]):
|
||||||
|
upgrades.append(u)
|
||||||
|
print("Application {:02X}, version {:04X}".format(u.appid, u.version))
|
||||||
|
else:
|
||||||
|
dontbother.append(u)
|
||||||
|
print("Skipping application {:02X}, this version is already there".format(u.appid))
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# If this ia a full upgrade then work out what to remove
|
||||||
|
if args.fullupgrade:
|
||||||
|
print("Applications to remove")
|
||||||
|
all_binaries = [x.appid for x in upgrades+dontbother]
|
||||||
|
for app in before_apps:
|
||||||
|
appid = int(app)
|
||||||
|
if appid not in all_binaries:
|
||||||
|
upgrades.append(Remove(appid))
|
||||||
|
print("Application {:02X}".format(appid))
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# Write config file to the meter
|
||||||
|
start = time.time()
|
||||||
|
print("Writing the config file")
|
||||||
|
write_config(o, upgrades)
|
||||||
|
|
||||||
|
# Write upgrades to the meter
|
||||||
|
print("Writing the application binaries")
|
||||||
|
for u in upgrades:
|
||||||
|
print("Write binary for application {:02X}".format(u.appid))
|
||||||
|
u.download(o)
|
||||||
|
|
||||||
|
# don't need any intermediate binaries any more
|
||||||
|
if args.hex:
|
||||||
|
bingen.tidy()
|
||||||
|
|
||||||
|
# Trigger upgrade
|
||||||
|
print("Triggering the upgrade")
|
||||||
|
try:
|
||||||
|
o.SYSTEM_TriggerUpgrade = 1
|
||||||
|
except Exception as e:
|
||||||
|
print("Upgrade rejected backtrace may provide a useful error code")
|
||||||
|
raise(e)
|
||||||
|
end = time.time()
|
||||||
|
|
||||||
|
print("Upgrade process took {:.0f} seconds".format(end - start))
|
||||||
|
|
||||||
|
# Now read and print the application list again
|
||||||
|
print("Now waiting for reboot and logging back in")
|
||||||
|
for i in range(15):
|
||||||
|
try:
|
||||||
|
o.login(8)
|
||||||
|
except:
|
||||||
|
# didn't work, wait a second and try again
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
print("Final applications on the meter")
|
||||||
|
for appid in range(MAX_APPLICATION_ID):
|
||||||
|
o.SYSTEM_CheckPresence = struct.pack("<I", appid)
|
||||||
|
try:
|
||||||
|
v = o.SYSTEM_CheckPresence
|
||||||
|
print("Application {:02X}, version {:04X}".format(appid, v))
|
||||||
|
except opticalexceptions.ReadFailedException:
|
||||||
|
# app not present but that's ok
|
||||||
|
pass
|
||||||
|
print ("Core: {}".format(o.SYSTEM_CoreRevision))
|
||||||
|
print("")
|
||||||
BIN
Docu/Sensus Logo.JPG
Normal file
BIN
Docu/Sensus Logo.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
BIN
Docu/Sensus Xylem Logo high res.jpg
Normal file
BIN
Docu/Sensus Xylem Logo high res.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
BIN
Docu/Sensus Xylem Logo.JPG
Normal file
BIN
Docu/Sensus Xylem Logo.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue
Block a user