116 lines
3.2 KiB
Python
116 lines
3.2 KiB
Python
from enum import Enum
|
|
import networktables
|
|
|
|
class LEDModes(Enum):
|
|
PIPELINE_MODE = 0
|
|
FORCE_OFF = 1
|
|
FORCE_BLINK = 2
|
|
FORCE_ON = 3
|
|
|
|
class CameraModes(Enum):
|
|
VISION_PROCESSOR = 0
|
|
DRIVER_CAMERA = 1 # THIS OPTION DISABLES VISION PROCESSING!
|
|
|
|
class Pipelines(Enum):
|
|
PIPELINE_0 = 0
|
|
PIPELINE_1 = 1
|
|
PIPELINE_2 = 2
|
|
PIPELINE_3 = 3
|
|
PIPELINE_4 = 4
|
|
PIPELINE_5 = 5
|
|
PIPELINE_6 = 6
|
|
PIPELINE_7 = 7
|
|
PIPELINE_8 = 8
|
|
PIPELINE_9 = 9
|
|
|
|
class Limelight():
|
|
def __init__(self):
|
|
self.limelightTable = networktables.NetworkTablesInstance.getDefault().getTable("limelight")
|
|
|
|
def hasTargets(self):
|
|
return self.limelightTable.getEntry("tv").getDouble(0) == 1
|
|
|
|
def getHorizontalOffset(self):
|
|
return self.limelightTable.getEntry("tx").getDouble(0)
|
|
|
|
def getVerticalOffset(self):
|
|
return self.limelightTable.getEntry("ty").getDouble(0)
|
|
|
|
def getTargetArea(self):
|
|
return self.limelightTable.getEntry("ta").getDouble(0)
|
|
|
|
def setLEDMode(self, mode):
|
|
if not isinstance(mode, LEDModes):
|
|
raise TypeError("setLEDMode must be passed an LEDModes enumeration value")
|
|
|
|
self.__setLEDMode(mode.value)
|
|
|
|
def setCameraMode(self, mode):
|
|
if not isinstance(mode, CameraModes):
|
|
raise TypeError("setCameraMode must be passed a CameraModes enumeration value")
|
|
|
|
self.__setCameraMode(mode.value)
|
|
|
|
def setCurrentPipeline(self, pipeline):
|
|
if not isinstance(pipeline, Pipelines):
|
|
raise TypeError("setCurrentPipeline must be passed a Pipelines enumeration value")
|
|
|
|
self.__setCurrentPipeline(pipeline.value)
|
|
|
|
def getLEDMode(self):
|
|
for mode in (LEDModes):
|
|
if mode.value == self.__getLEDModeRAW():
|
|
return mode
|
|
|
|
return None
|
|
|
|
def getCameraMode(self):
|
|
for mode in (CameraModes):
|
|
if mode.value == self.__getCameraModeRAW():
|
|
return mode
|
|
|
|
return None
|
|
|
|
def getCurrentPipeline(self):
|
|
for mode in (Pipelines):
|
|
if mode.value == self.__getCurrentPipelineRAW():
|
|
return mode
|
|
|
|
return None
|
|
|
|
def __getLEDModeRAW(self):
|
|
return self.limelightTable.getEntry("ledMode").getDouble(0)
|
|
|
|
def __getCameraModeRAW(self):
|
|
return self.limelightTable.getEntry("camMode").getDouble(0)
|
|
|
|
def __getCurrentPipelineRAW(self):
|
|
return self.limelightTable.getEntry("getpipe").getDouble(0)
|
|
|
|
def __setLEDMode(self, mode):
|
|
if mode > 3:
|
|
mode = 3
|
|
elif mode < 0:
|
|
mode = 0
|
|
|
|
self.limelightTable.getEntry("ledMode").setDouble(mode)
|
|
|
|
def __setCameraMode(self, mode):
|
|
if mode > 1:
|
|
mode = 1
|
|
elif mode < 0:
|
|
mode = 0
|
|
|
|
self.limelightTable.getEntry("camMode").setDouble(mode)
|
|
|
|
def __setCurrentPipeline(self, pipeline):
|
|
if pipeline > 9:
|
|
pipeline = 9
|
|
elif pipeline < 0:
|
|
pipeline = 0
|
|
|
|
self.limelightTable.getEntry("pipeline").setDouble(pipeline)
|
|
|
|
# The initSendable portion of the original training has been removed
|
|
# from this example for simplicity, it may be restored at a later
|
|
# time |