Stefan Schuermans commited on 2017-06-04 20:17:29
Showing 3 changed files, with 41 additions and 28 deletions.
... | ... |
@@ -68,25 +68,6 @@ class Display(object): |
68 | 68 |
for distri in self._distris.values(): |
69 | 69 |
distri.send(self._socket) |
70 | 70 |
|
71 |
- def _proc_config_file(self, config_file): |
|
72 |
- """process config file |
|
73 |
- config_file: name of config file to read |
|
74 |
- returns True on success, False on error""" |
|
75 |
- self._msg.msg(Msg.INFO, "using config file \"%s\"" % config_file) |
|
76 |
- # process all lines in config file |
|
77 |
- okay = True |
|
78 |
- try: |
|
79 |
- with open(config_file, "r") as cfile: |
|
80 |
- lineno = 1 |
|
81 |
- for line in cfile: |
|
82 |
- if not self._proc_config_line(line, lineno): |
|
83 |
- okay = False |
|
84 |
- lineno += 1 |
|
85 |
- except (IOError, OSError) as e: |
|
86 |
- self._msg.msg(Msg.ERR, str(e)) |
|
87 |
- okay = False |
|
88 |
- return okay |
|
89 |
- |
|
90 | 71 |
def _proc_config_distri(self, setting, value, lineno): |
91 | 72 |
"""process distributor line from config file""" |
92 | 73 |
# distributor number |
... | ... |
@@ -115,6 +96,28 @@ class Display(object): |
115 | 96 |
self._distris[distri_no] = Distributor(distri_no, outputs, pixels) |
116 | 97 |
return True |
117 | 98 |
|
99 |
+ def _proc_config_file(self, config_file): |
|
100 |
+ """process config file |
|
101 |
+ config_file: name of config file to read |
|
102 |
+ returns True on success, False on error""" |
|
103 |
+ self._msg.msg(Msg.INFO, "using config file \"%s\"" % config_file) |
|
104 |
+ # process all lines in config file |
|
105 |
+ okay = True |
|
106 |
+ try: |
|
107 |
+ with open(config_file, "r") as cfile: |
|
108 |
+ lineno = 1 |
|
109 |
+ for line in cfile: |
|
110 |
+ if not self._proc_config_line(line, lineno): |
|
111 |
+ okay = False |
|
112 |
+ lineno += 1 |
|
113 |
+ except (IOError, OSError) as e: |
|
114 |
+ self._msg.msg(Msg.ERR, str(e)) |
|
115 |
+ okay = False |
|
116 |
+ # set default address of all distributors without address |
|
117 |
+ for distri in self._distris.values(): |
|
118 |
+ distri.def_addr() |
|
119 |
+ return okay |
|
120 |
+ |
|
118 | 121 |
def _proc_config_distri_addr(self, setting, value, lineno): |
119 | 122 |
"""process distributor address line from config file""" |
120 | 123 |
# distributor number |
... | ... |
@@ -138,8 +141,8 @@ class Display(object): |
138 | 141 |
" in line %u of config file" % |
139 | 142 |
(distri_no, lineno)) |
140 | 143 |
return False |
141 |
- # set address |
|
142 |
- self._distris[distri_no].set_addr(addr) |
|
144 |
+ # add address to distributor |
|
145 |
+ self._distris[distri_no].add_addr(addr) |
|
143 | 146 |
return True |
144 | 147 |
|
145 | 148 |
def _proc_config_line(self, line, lineno): |
... | ... |
@@ -33,8 +33,8 @@ class Distributor(object): |
33 | 33 |
self._distri_no = distri_no |
34 | 34 |
self._outputs = outputs |
35 | 35 |
self._pixels = pixels |
36 |
- # default address |
|
37 |
- self._addr = ("10.70.80.%u" % distri_no, 2323) |
|
36 |
+ # no address(es) yet |
|
37 |
+ self._addrs = [] |
|
38 | 38 |
# default color mapping |
39 | 39 |
self._mappings = [] |
40 | 40 |
for c in range(Mapping.CHANNELS): |
... | ... |
@@ -59,9 +59,17 @@ class Distributor(object): |
59 | 59 |
"""get number of pixels per output""" |
60 | 60 |
return self._pixels |
61 | 61 |
|
62 |
- def set_addr(self, addr): |
|
63 |
- """set distributor address""" |
|
64 |
- self._addr = addr |
|
62 |
+ def add_addr(self, addr): |
|
63 |
+ """add distributor address""" |
|
64 |
+ self._addrs.append(addr) |
|
65 |
+ |
|
66 |
+ def def_addr(self): |
|
67 |
+ """set distributor address to default if no address configured""" |
|
68 |
+ if len(self._addrs) == 0: |
|
69 |
+ high = (self._distri_no >> 8) & 0x0F |
|
70 |
+ low = self._distri_no & 0xFF |
|
71 |
+ addr = ("10.70.%u.%u" % (80 + high, low), 2323) |
|
72 |
+ self._addrs.append(addr) |
|
65 | 73 |
|
66 | 74 |
def data_clear(self): |
67 | 75 |
"""clear image data, i.e. set entire image to black""" |
... | ... |
@@ -98,8 +106,10 @@ class Distributor(object): |
98 | 106 |
|
99 | 107 |
def send(self, socket): |
100 | 108 |
"""send image data to actual distributor module using UDP""" |
109 |
+ # send to each address |
|
110 |
+ for addr in self._addrs: |
|
101 | 111 |
try: |
102 |
- socket.sendto(self._buffer, self._addr) |
|
112 |
+ socket.sendto(self._buffer, addr) |
|
103 | 113 |
except: |
104 | 114 |
pass |
105 | 115 |
|