Source code for wpilib.sendablebase

# validated: 2017-12-07 EN f9bece2ffbf7 edu/wpi/first/wpilibj/SendableBase.java
#----------------------------------------------------------------------------
# Copyright (c) 2017 FIRST. All Rights Reserved.                             
# Open Source Software - may be modified and shared by FRC teams. The code   
# must be accompanied by the FIRST BSD license file in the root directory of 
# the project.                                                               
#----------------------------------------------------------------------------
import threading
from .sendable import Sendable
from .livewindow import LiveWindow
from ._impl.utils import match_arglist


__all__ = ['SendableBase']


[docs]class SendableBase(Sendable): """ Base class for all sensors. Stores most recent status information as well as containing utility functions for checking channels and error processing. """ def __init__(self, addLiveWindow=True): """ Creates an instance of the sensor base. :param addLiveWindow: if true, add this Sendable to LiveWindow """ self.name = "" self.subsystem = "Ungrouped" self.mutex = threading.RLock() if addLiveWindow: LiveWindow.add(self)
[docs] def free(self): """ Free the resources used by this object. """ LiveWindow.remove(self)
[docs] def getName(self): with self.mutex: return self.name
def _setName(self, name): with self.mutex: self.name = name
[docs] def setName(self, *args, **kwargs): """ Sets the name of this Sendable object. Arguments can be structured as follows: - name - subsystem, name - moduleType, channel - moduleType, moduleNumber, channel :param name: name :type name: str :param subsystem: subsystem name :type subsystem: str :param moduleType: A string that defines the module name in the label for the value :type moduleType: str :param channel: The channel number the device is plugged into :type channel: int :param moduleNumber: The number of the particular module type :type moduleNumber: int """ name_arg = ("name", [str]) subsystem_arg = ("subsystem", [str]) moduleType_arg = ("moduleType", [str]) channel_arg = ("channel", [int]) moduleNumber_arg = ("moduleNumber", [int]) templates = [[name_arg], [subsystem_arg, name_arg], [moduleType_arg, channel_arg], [moduleType_arg, moduleNumber_arg, channel_arg]] index, results = match_arglist( 'SendableBase.setName', args, kwargs, templates) if index == 0: self._setName(results["name"]) elif index == 1: self._setNameAndSubsystem(results["subsystem"], results["name"]) elif index == 2: self._setName("{moduleType}[{channel}]".format_map(results)) elif index == 3: self._setName("{moduleType}[{moduleNumber},{channel}]".format_map(results))
[docs] def getSubsystem(self): with self.mutex: return self.subsystem
[docs] def setSubsystem(self, subsystem): with self.mutex: self.subsystem = subsystem
[docs] def addChild(self, child): """ Add a child component :param child: child component """ LiveWindow.addChild(self, child)