#!/usr/bin/python# Python example of use pymlab with LIONCELL MLAB moduleimport timeimport sysfrom pymlab import configimport pandas as pd # data parsing libraryimport structfilename = './guage.csv'df = pd.read_csv(filename,delimiter=',')def ReadFlash(ID, offset, name, typ, units, default):flash = guage.ReadFlashBlock(ID, offset // 32)print ID, '\t', offset, '\t', '"', '{:32s}'.format(name), '"', '\t', typ, '\t',# if (offset // 32) > 0 :offset = offset - 32 * (offset // 32)if typ == 'U1':print '{:10d}'.format(flash[offset]),if typ == 'I1':if flash[offset] > 127:ble = (256-flash[offset]) * (-1)else:ble = flash[offset]print '{:10d}'.format(ble),if typ == 'I2':ble = (flash[offset]<<8)+flash[offset+1]if ble > 32767:ble = (65536-ble) * (-1)print '{:10d}'.format(ble),if typ == 'U2':print '{:10d}'.format(abs((flash[offset]<<8)+flash[offset+1])),if typ == 'F4':print '{:10s}'.format(hex(0x1000000*flash[offset]+0x10000*flash[(offset+1)]+0x100*flash[(offset+2)]+flash[(offset+3)])),#print '{:10f}'.format(struct.unpack('@f', chr(flash[offset])+chr(flash[offset+1])+chr(flash[offset+2])+chr(flash[offset+3]))[0]),if typ == 'H1':print '{:10s}'.format(hex(flash[(offset)])),if typ == 'H2':print '{:10s}'.format(hex(0x100*flash[(offset)]+flash[(offset+1)])),if typ == 'H4':print '{:10s}'.format(hex(0x1000000*flash[offset]+0x10000*flash[(offset+1)]+0x100*flash[(offset+2)]+flash[(offset+3)])),if typ == 'S9':string = ''for n in range(9):string = string + chr(flash[offset+n+1])print '{:12s}'.format(string+'\0'),if typ == 'S12':string = ''for n in range(9):string = string + chr(flash[offset+n+1])print '{:12s}'.format(string+'...\0'),if typ == 'S5':string = ''for n in range(5):string = string + chr(flash[offset+n+1])print '{:12s}'.format(string+'\0'),print '{:10s}'.format('['+units+']'), '\t', default, '{:10s}'.format('['+units+']')#### Sensor Configuration ###########################################cfg = config.Config(i2c = {"port": 0, # I2C bus number},bus = [{"type": "i2chub","address": 0x73,"children": [{"name": "guage", "type": "lioncell", "channel": 7, },],},],)cfg.initialize()guage = cfg.get_device("guage")print "Pack Configuration", hex(guage.PackConfiguration())#flash = guage.ReadFlashBlock(112, 0)#print "112 - ",#print " ".join([hex(i) for i in flash])#ReadFlash(2, 0, 'OT Chg', 'I2', '0.1 degC')#ReadFlash(112, 8, 'Authen Key3', 'H4', '-')for i in range(len(df)):ReadFlash(df['SubclassID'][i], df['Offset'][i], df['Name'][i], df['DataType'][i], df['Units'][i], df['DefaultValue'][i])while True:# Battery status readoutprint "NominalAvailableCapacity =", guage.NominalAvailableCapacity(), "mAh, FullAvailabeCapacity =", guage.FullAvailabeCapacity(), "mAh, AvailableEnergy =", guage.AvailableEnergy(), "* 10 mWh"print "Temp =", guage.getTemp(), "degC, RemainCapacity =", guage.getRemainingCapacity(), "mAh, cap =", guage.FullChargeCapacity(), "mAh, U =", guage.Voltage(), "mV, I =", guage.AverageCurrent(), "mA, charge =", guage.StateOfCharge(), "%"time.sleep(3)