321def readSFPStatus(aEEProm, aDiag, aLabel):
322
323 def asciidecode( v ):
324 return (''.join([chr(c) for c in v])).rstrip()
325
326 def tempdecode( v ):
327 lSign = -1 if ((v[0]>>7) & 0x1) else 1
328 x = lSign*((v[0] & 0x7f) + v[1]/float(0xff))
329 return '{:.3f} C'.format(x)
330
331 def vccdecode( v ):
332 return '{:.4f} V'.format(((v[0] << 8) + v[1])/float(10000))
333
334 def biascurdecode( v ):
335 return '{:.3f} mA'.format(((v[0] << 8) + v[1])*2e-3)
336
337 def powerdecode( v ):
338 return '{:.3f} mW'.format(((v[0] << 8) + v[1])*1e-3)
339
340
341 echo()
342 lVenInfoEnc = collections.OrderedDict()
343 lVenInfoEnc['Name'] = asciidecode(aEEProm.read_i2cArray(20,16))
344 lVenInfoEnc['OUI'] = '{}.{}.{}'.format(*(aEEProm.read_i2cArray(37,3)))
345 lVenInfoEnc['Part Number'] = asciidecode(aEEProm.read_i2cArray(40,16))
346 lVenInfoEnc['Revision'] = asciidecode(aEEProm.read_i2cArray(56,4))
347 lVenInfoEnc['Serial Number'] = asciidecode(aEEProm.read_i2cArray(68,16))
348 lVenInfoEnc['Day'] = asciidecode(aEEProm.read_i2cArray(88,2))
349 lVenInfoEnc['Month'] = asciidecode(aEEProm.read_i2cArray(86,2))
350 lVenInfoEnc['Year'] = asciidecode(aEEProm.read_i2cArray(84,2))
351
352 secho("{} Vendor info".format(aLabel), fg='cyan')
353
354
355
356 echo(toolbox.formatDictTable(lVenInfoEnc, aHdr=False, aSort=False))
357 echo()
358 lLaserWl = aEEProm.read_i2cArray(60,2)
359 lLaserWl = (lLaserWl[0] << 8) + lLaserWl[1]
360 echo('Laser Wavelength: '+style(str(lLaserWl)+'nm', fg='cyan'))
361
362 lRegs = collections.OrderedDict()
363
364 lRegs['Identifier'] = aEEProm.read_i2c(0)
365 lRegs['Ext Identifier'] = aEEProm.read_i2c(1)
366 lRegs['Connector'] = aEEProm.read_i2c(2)
367
368
369 lTransComp = aEEProm.read_i2cArray(3, 8)
370
371 lRegs['Encoding'] = aEEProm.read_i2c(11)
372 lRegs['BR, Nominal'] = aEEProm.read_i2c(12)
373 lRegs['Rate ID'] = aEEProm.read_i2c(13)
374
375 toolbox.printRegTable(lRegs, aHeader=False, sort=False)
376
377 echo()
378 secho("{} Diagnostic info".format(aLabel), fg='cyan')
379
380 lReadings = collections.OrderedDict()
381
382 lReadings['Temp'] = tempdecode(aDiag.read_i2cArray(96, 2))
383 lReadings['Vcc'] = vccdecode(aDiag.read_i2cArray(98, 2))
384 lReadings['TX bias'] = biascurdecode(aDiag.read_i2cArray(100, 2))
385 lReadings['TX power'] = powerdecode(aDiag.read_i2cArray(102, 2))
386 lReadings['RX power'] = powerdecode(aDiag.read_i2cArray(104, 2))
387 lMiscStatus = aDiag.read_i2c(110)
388 lReadings['TX disable'] = (lMiscStatus >> 7) & 0x1
389
390
391
392
393 echo(toolbox.formatDictTable(lReadings, aHdr=False, aSort=False))
394
395
396
397@debug.command('lm75-temp-read', short_help="Read temp data from a LM75.")
398@click.pass_obj