290def readSFPStatus(aEEProm, aDiag, aLabel):
291
292 def asciidecode( v ):
293 return (''.join([chr(c) for c in v])).rstrip()
294
295 def tempdecode( v ):
296 lSign = -1 if ((v[0]>>7) & 0x1) else 1
297 x = lSign*((v[0] & 0x7f) + v[1]/float(0xff))
298 return '{:.3f} C'.format(x)
299
300 def vccdecode( v ):
301 return '{:.4f} V'.format(((v[0] << 8) + v[1])/float(10000))
302
303 def biascurdecode( v ):
304 return '{:.3f} mA'.format(((v[0] << 8) + v[1])*2e-3)
305
306 def powerdecode( v ):
307 return '{:.3f} mW'.format(((v[0] << 8) + v[1])*1e-3)
308
309
310 echo()
311 lVenInfoEnc = collections.OrderedDict()
312 lVenInfoEnc['Name'] = asciidecode(aEEProm.read_i2cArray(20,16))
313 lVenInfoEnc['OUI'] = '{}.{}.{}'.format(*(aEEProm.read_i2cArray(37,3)))
314 lVenInfoEnc['Part Number'] = asciidecode(aEEProm.read_i2cArray(40,16))
315 lVenInfoEnc['Revision'] = asciidecode(aEEProm.read_i2cArray(56,4))
316 lVenInfoEnc['Serial Number'] = asciidecode(aEEProm.read_i2cArray(68,16))
317 lVenInfoEnc['Day'] = asciidecode(aEEProm.read_i2cArray(88,2))
318 lVenInfoEnc['Month'] = asciidecode(aEEProm.read_i2cArray(86,2))
319 lVenInfoEnc['Year'] = asciidecode(aEEProm.read_i2cArray(84,2))
320
321 secho("{} Vendor info".format(aLabel), fg='cyan')
322
323
324
325 echo(toolbox.formatDictTable(lVenInfoEnc, aHdr=False, aSort=False))
326 echo()
327 lLaserWl = aEEProm.read_i2cArray(60,2)
328 lLaserWl = (lLaserWl[0] << 8) + lLaserWl[1]
329 echo('Laser Wavelength: '+style(str(lLaserWl)+'nm', fg='cyan'))
330
331 lRegs = collections.OrderedDict()
332
333 lRegs['Identifier'] = aEEProm.read_i2c(0)
334 lRegs['Ext Identifier'] = aEEProm.read_i2c(1)
335 lRegs['Connector'] = aEEProm.read_i2c(2)
336
337
338 lTransComp = aEEProm.read_i2cArray(3, 8)
339
340 lRegs['Encoding'] = aEEProm.read_i2c(11)
341 lRegs['BR, Nominal'] = aEEProm.read_i2c(12)
342 lRegs['Rate ID'] = aEEProm.read_i2c(13)
343
344 toolbox.printRegTable(lRegs, aHeader=False, sort=False)
345
346 echo()
347 secho("{} Diagnostic info".format(aLabel), fg='cyan')
348
349 lReadings = collections.OrderedDict()
350
351 lReadings['Temp'] = tempdecode(aDiag.read_i2cArray(96, 2))
352 lReadings['Vcc'] = vccdecode(aDiag.read_i2cArray(98, 2))
353 lReadings['TX bias'] = biascurdecode(aDiag.read_i2cArray(100, 2))
354 lReadings['TX power'] = powerdecode(aDiag.read_i2cArray(102, 2))
355 lReadings['RX power'] = powerdecode(aDiag.read_i2cArray(104, 2))
356 lMiscStatus = aDiag.read_i2c(110)
357 lReadings['TX disable'] = (lMiscStatus >> 7) & 0x1
358
359
360
361
362 echo(toolbox.formatDictTable(lReadings, aHdr=False, aSort=False))
363