mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-04-30 06:34:38 +02:00
109 lines
4.6 KiB
Python
109 lines
4.6 KiB
Python
#!/usr/bin/python
|
|
'''
|
|
Copyright (C) 2017 Hugh Eaves
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
'''
|
|
|
|
import argparse
|
|
import sys
|
|
from SoloLED import SoloLED
|
|
|
|
class AppendAction(argparse.Action):
|
|
def __call__(self, parser, namespace, values, option_string=None):
|
|
if not namespace.commands:
|
|
namespace.commands = [];
|
|
optionName = option_string.lstrip(parser.prefix_chars)
|
|
valueList = getattr(namespace, self.dest)
|
|
if not valueList:
|
|
valueList = []
|
|
setattr(namespace, self.dest, valueList)
|
|
if not self.const:
|
|
valueList.append((optionName , values))
|
|
else:
|
|
valueList.append((optionName , values))
|
|
return
|
|
|
|
def toLED(led):
|
|
return getattr(SoloLED, "LED_" + led.upper())
|
|
|
|
def toPattern(pattern):
|
|
return getattr(SoloLED, "PATTERN_" + pattern.upper())
|
|
|
|
ledChoices = choices=["all", "front_left", "front_right", "back_left", "back_right"]
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--reset", action=AppendAction, dest="commands", choices=ledChoices, help="Reset to default color and pattern.")
|
|
parser.add_argument("--pattern", action=AppendAction, dest="commands", choices=["sine", "solid", "siren", "strobe", "fadein", "fadeout"], help="Set LED flash pattern.")
|
|
parser.add_argument("--phase_offset", action=AppendAction, dest="commands", metavar="degrees", type = int, help="Set phase offset in degrees (range 0-360).")
|
|
parser.add_argument("--period", action=AppendAction, dest="commands", metavar="milliseconds", type = int, help="Set period in milliseconds (range 0-4000).")
|
|
parser.add_argument("--repeat", action=AppendAction, dest="commands", metavar="count", type = int, help="Set repeat count (0-255).")
|
|
parser.add_argument("--color", action=AppendAction, dest="commands", nargs=3, metavar=("red", "green", "blue"), type=int, choices=range(0, 256), help="Set LED red, green, and blue brightness values. (range 0 - 255)")
|
|
parser.add_argument("--amplitude", action=AppendAction, dest="commands", nargs=3, metavar=("red", "green", "blue"), type=int, choices=range(0, 256), help="Set LED red, green, and blue amplitude values. (range 0 - 255)")
|
|
parser.add_argument("--applyto", action=AppendAction, dest="commands", choices=ledChoices, help="Apply settings to LED(s)")
|
|
parser.add_argument("--ip", metavar = "protocol:ipAddress:port", default="udpout:127.0.0.1:14560", help = "Protocol / IP address / Port number for connction")
|
|
|
|
parsedArgs = parser.parse_args()
|
|
|
|
color = [255, 255, 255]
|
|
pattern = SoloLED.PATTERN_SOLID
|
|
phaseOffset = None
|
|
repeat = None
|
|
period = None
|
|
amplitude = None
|
|
|
|
if parsedArgs.commands is None:
|
|
parser.print_help()
|
|
sys.exit()
|
|
|
|
soloLED = SoloLED(ip = parsedArgs.ip, wait_ready = False)
|
|
|
|
for command in parsedArgs.commands:
|
|
commandName = command[0]
|
|
commandArgs = command[1]
|
|
if (commandName == "applyto"):
|
|
if (phaseOffset is None and repeat is None and amplitude is None and period is None):
|
|
soloLED.rgb(toLED(commandArgs), pattern, color[0], color[1], color[2])
|
|
else:
|
|
# default values that weren't already set
|
|
if (amplitude is None):
|
|
amplitude = [0, 0, 0];
|
|
if (repeat is None):
|
|
repeat = 0;
|
|
if (phaseOffset is None):
|
|
phaseOffset = 0;
|
|
if (period is None):
|
|
period = 2000;
|
|
soloLED.rgbExtended(toLED(commandArgs), pattern, color[0], color[1], color[2], amplitude[0], amplitude[1], amplitude[2], period, phaseOffset)
|
|
elif (commandName == "pattern"):
|
|
pattern = toPattern(commandArgs)
|
|
elif (commandName == "color"):
|
|
color = commandArgs
|
|
elif (commandName == "amplitude"):
|
|
amplitude = commandArgs
|
|
elif (commandName == "phase_offset"):
|
|
phaseOffset = commandArgs
|
|
elif (commandName == "period"):
|
|
period = commandArgs
|
|
elif (commandName == "repeat"):
|
|
repeat = commandArgs
|
|
elif (commandName == "reset"):
|
|
soloLED.reset(toLED(commandArgs))
|
|
else:
|
|
raise ValueError, "Unrecognized command name " + commandName
|
|
|
|
#sleep(10)
|
|
|
|
soloLED.close()
|
|
print "Done."
|