#! /usr/bin/python
#
# Query or set the RX/TX data inversion flags for a Vitesse PHY.

import os
import sys
import isi.hw.vitutil as vitutil

NAMES    = ("none", "rx", "tx", "both")
MASK     = 0x03

def getInvertFlags(unit, phy):
    return vitutil.phyRead(unit, phy, 0x04) & MASK

def setInvertFlags(unit, phy, flags):
    vitutil.phyWrite(unit, phy, 0x04, flags, MASK)

def usage(argv):
    print >>sys.stderr, "usage: %s unit phy [rx|tx|both|none]" % (
        os.path.basename(argv[0]))
    return 2

def main(argv = None):
    if argv is None:
        argv = sys.argv

    if len(argv) < 3 or len(argv) > 4:
        return usage(argv)
    unit = argv[1]
    phy = int(argv[2], 0)

    if len(argv) == 4:
        which = argv[3]
        flags = 0;
        for name in NAMES:
            if which == name:
                break
            flags = flags + 1
        else:
            return usage(argv)
        setInvertFlags(unit, phy, flags)
    else:
        flags = getInvertFlags(unit, phy)
        print NAMES[flags]

    return 0

if __name__ == "__main__":
    sys.exit(main())
