NORM-mirror/src/pynorm/node.py

79 lines
2.0 KiB
Python
Executable File

"""
pynorm - Python wrapper for NRL's libnorm
By: Tom Wambold <wambold@itd.nrl.navy.mil>
"""
from __future__ import absolute_import
import ctypes
import pynorm.constants as c
from pynorm.core import libnorm, NormError
class Node(object):
"""Represents a NORM node instance"""
## Public functions
def __init__(self, node):
libnorm.NormNodeRetain(node)
self._node = node
def getId(self):
id = libnorm.NormNodeGetId(self)
if id == c.NORM_NODE_ANY:
return None
return id
def getAddress(self):
try:
return self._address
except AttributeError:
port = ctypes.c_uint16()
buf = ctypes.create_string_buffer(50)
size = ctypes.c_uint(50)
if not libnorm.NormNodeGetAddress(self, buf, ctypes.byref(size),
ctypes.byref(port)):
raise NormError("Node getAddress failed")
self._address = (buf.value, port.value)
return self._address
def getCommand(self, buf):
return libnorm.NormNodeGetCommand(self, buf, len(buf))
def getGrtt(self):
grtt = libnorm.NormNodeGetGrtt(self)
if grtt == -1.0:
raise NormError("getGrtt failed")
return grtt
def setUnicastNack(self, mode):
libnorm.NormNodeSetUnicastNack(self, mode)
def setNackingMode(self, mode):
libnorm.NormNodeSetNackingMode(self, mode)
def setRepairBoundary(self, boundary):
libnorm.NormNodeSetRepairBoundary(self, boundary)
## Properties
id = property(getId)
address = property(getAddress)
grtt = property(getGrtt)
## Private Functions
def __del__(self):
libnorm.NormNodeRelease(self._node)
@property
def _as_parameter_(self):
return self._node
def __str__(self):
return "Node - Id=%i" % self.id
def __cmp__(self, other):
return cmp(self._as_parameter_, other._as_parameter_)
def __hash__(self):
return self._as_parameter_