1
0
Fork 0
baconscript/bacon/hog4.py

55 lines
1.9 KiB
Python
Raw Normal View History

2020-11-23 12:31:44 -05:00
"""hog4.py: Class methods for Hog 4 representation."""
2019-11-18 21:49:11 -05:00
import logging
from time import sleep
2020-11-25 09:38:24 -05:00
from typing import Any, Dict, Union
from pythonosc import udp_client, osc_message_builder, osc_bundle, osc_message
from antlr4 import ParserRuleContext
2019-11-18 21:49:11 -05:00
2019-11-18 22:23:51 -05:00
class HogNet:
2020-11-23 12:31:44 -05:00
"""Class definition of a hognet participant."""
2019-11-18 21:49:11 -05:00
# button state constants
buttonDOWN = 1
buttonUP = 0
2020-11-25 09:38:24 -05:00
def __init__(self, servers: Dict[int, object]) -> None:
2020-11-23 12:31:44 -05:00
"""Init method."""
2019-11-18 21:49:11 -05:00
self.servers = servers
2020-11-25 09:38:24 -05:00
def button_press(self, device: ParserRuleContext,
path: str, delay: float = 0.05) -> None:
2020-11-23 12:31:44 -05:00
"""Button presses are a pair of up/down OSC."""
2019-11-18 21:49:11 -05:00
self.send_message(device, path, self.buttonDOWN)
sleep(delay)
self.send_message(device, path, self.buttonUP)
2020-11-25 09:38:24 -05:00
def send_message(self, device: ParserRuleContext,
path: str, arg: Any) -> None:
2020-11-23 12:31:44 -05:00
"""Send a simple OSC message with one argument."""
2019-11-18 21:49:11 -05:00
msg = osc_message_builder.OscMessageBuilder(address=path)
msg.add_arg(arg)
self.send(device, msg.build())
2020-11-25 09:38:24 -05:00
def send(self, device: ParserRuleContext,
msg: Union[osc_message.OscMessage, osc_bundle.OscBundle]) -> None:
2020-11-23 12:31:44 -05:00
"""Send python-osc messages."""
2019-11-18 21:49:11 -05:00
if device is None:
2020-11-25 09:38:24 -05:00
# first configured server
osc: udp_client = list(self.servers.values())[0]
2019-11-18 21:49:11 -05:00
else:
2020-11-23 12:31:44 -05:00
if device.nodeType().getText().lower() != 'h':
2019-11-18 21:49:11 -05:00
logging.error("ERROR: Only Hog type devices are supported.")
return
2020-11-23 12:31:44 -05:00
try:
osc = self.servers[device.number().value]
except KeyError:
logging.error("ERROR: Net# %d not found.",
device.number().value)
return
2019-11-18 21:49:11 -05:00
try:
osc.send(msg)
2020-11-23 12:31:44 -05:00
except OSError as exception:
logging.error(exception)