78 lines
2.3 KiB
Python
Executable File
78 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""comment.py: Hog 4 comment macro interpreter and OSC bridge."""
|
|
|
|
__author__ = "Kevin Matz"
|
|
__copyright__ = "Copyright 2018, Company 235, LLC"
|
|
__credits__ = ["Kevin Matz"]
|
|
|
|
__license__ = "MIT"
|
|
__version__ = "3.9"
|
|
__maintainer__ = "Kevin Matz"
|
|
__email__ = "kevin@company235.com"
|
|
|
|
__status__ = "Prototype"
|
|
|
|
|
|
import antlr4
|
|
import configparser
|
|
import logging
|
|
import readline
|
|
import signal
|
|
import sys
|
|
|
|
from CommentMacroLexer import CommentMacroLexer
|
|
from CommentMacroParser import CommentMacroParser
|
|
from OscCommentMacroListener import OscCommentMacroListener
|
|
from pythonosc import udp_client
|
|
|
|
|
|
# setup logging
|
|
logger = logging.getLogger("CommentMacro")
|
|
logger.setLevel(logging.DEBUG)
|
|
ch = logging.StreamHandler() # create console handler and
|
|
ch.setLevel(logging.INFO) # set console log level to INFO
|
|
logger.addHandler(ch) # add console log handler
|
|
|
|
# TODO: refactor this to support multiple net#s
|
|
config = configparser.ConfigParser(allow_no_value=True)
|
|
config.read('server.cfg') # open config file
|
|
servers = {} # init an empty dictionary
|
|
server = config['hog4'] # section of config file
|
|
net = server.getint("net", 1) # default to net #1
|
|
logger.info("Adding Hog device at net# " + str(net))
|
|
# osc clients are added to the dictionary with the net # as the key
|
|
servers[net] = udp_client.SimpleUDPClient(server.get("ip", "10.0.0.1"),
|
|
server.getint("port", 6600))
|
|
|
|
|
|
def comment(text):
|
|
input_stream = antlr4.InputStream(text)
|
|
lexer = CommentMacroLexer(input_stream)
|
|
stream = antlr4.CommonTokenStream(lexer)
|
|
parser = CommentMacroParser(stream)
|
|
tree = parser.prog()
|
|
oscMacro = OscCommentMacroListener(servers)
|
|
walker = antlr4.ParseTreeWalker()
|
|
walker.walk(oscMacro, tree)
|
|
|
|
|
|
def orderly_exit():
|
|
logger.info('Goodbye.')
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
signal.signal(signal.SIGINT, orderly_exit)
|
|
if len(sys.argv) > 1:
|
|
logger.debug("found macro at argv[1]")
|
|
comment(sys.argv[1])
|
|
else:
|
|
while True:
|
|
text = input("comment# ")
|
|
if text == 'exit':
|
|
orderly_exit()
|
|
else:
|
|
comment(text)
|