added multicast reception in the udp effect (#675)
* Removed -HUP so the default -TERM signal is sent instead.
- hyperiond only listens for TERM and INT. HUP is often used to get an exe to reread its config
Changed pgrep to add '-x' so it wont partial match on the exe name.
- I have multiple instances with multiple hyperiond-instance1 names
- this ensures the service script only kills the right process
* reversing errant change to hyperion.systemd.sh
* cleaned up a couple of compiler warnings
* moved bitpair_to_byte initialiser to (hopefully) work with older GCC
* compiler warning in udp driver
removed some tabs in ws2812b.cpp
* formatting - spaces to tabs
* moved rpi_281x to tag sk6812-v1.0
* moving to my fork of rpi_281x
* removed dos line endings
* Found some more "dos" line ending files
* Added multicast support to the udp listener "effect"
* the default udp.json will listen to unicast on port 2391 (as it used to)
the new udp-mcast.json will listen on multicast 239.255.28.01:2801
Former-commit-id: 5c76fabd3d
This commit is contained in:
parent
f2e9193987
commit
bab27964f2
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"name" : "UDP multicast listener",
|
||||
"script" : "udp.py",
|
||||
"args" :
|
||||
{
|
||||
"ListenPort" : 2801,
|
||||
"ListenIP" : "239.255.28.01"
|
||||
}
|
||||
}
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"name" : "UDP listener",
|
||||
"script" : "udp.py",
|
||||
"args" :
|
||||
{
|
||||
"udpPort" : 2391
|
||||
}
|
||||
}
|
||||
{
|
||||
"name" : "UDP listener",
|
||||
"script" : "udp.py",
|
||||
"args" :
|
||||
{
|
||||
"ListenPort" : 2391
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,17 +3,33 @@ import time
|
|||
import colorsys
|
||||
import socket
|
||||
import errno
|
||||
import struct
|
||||
|
||||
# Get the parameters
|
||||
udpPort = int(hyperion.args.get('udpPort', 2812))
|
||||
ListenPort = int(hyperion.args.get('ListenPort', 2801))
|
||||
ListenIP = hyperion.args.get('ListenIP', "")
|
||||
octets = ListenIP.split('.');
|
||||
|
||||
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
||||
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||
UDPSock.setblocking(False)
|
||||
|
||||
listen_addr = ("",udpPort)
|
||||
print "udp.py: bind socket port:",udpPort
|
||||
listen_addr = (ListenIP,ListenPort)
|
||||
UDPSock.bind(listen_addr)
|
||||
|
||||
if ListenIP == "":
|
||||
print "udp.py: Listening on *.*.*.*:"+str(ListenPort)
|
||||
else:
|
||||
print "udp.py: Listening on "+ListenIP+":"+str(ListenPort)
|
||||
|
||||
if len(octets) == 4 and int(octets[0]) >= 224 and int(octets[0]) < 240:
|
||||
print "ListenIP is a multicast address\n"
|
||||
# Multicast handling
|
||||
try:
|
||||
mreq = struct.pack("4sl", socket.inet_aton(ListenIP), socket.INADDR_ANY)
|
||||
UDPSock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
|
||||
except socket.error:
|
||||
print "ERROR enabling multicast\n"
|
||||
|
||||
hyperion.setColor(hyperion.ledCount * bytearray((int(0), int(0), int(0))) )
|
||||
|
||||
# Start the write data loop
|
||||
|
|
Loading…
Reference in New Issue