Stefan Schuermans commited on 2016-11-22 20:41:16
Showing 3 changed files, with 72 additions and 15 deletions.
... | ... |
@@ -101,6 +101,45 @@ class Config |
101 | 101 |
m_display.m_distriCnt++; |
102 | 102 |
} |
103 | 103 |
|
104 |
+ /** |
|
105 |
+ * @brief process distributor address from config file |
|
106 |
+ * |
|
107 |
+ * @param[in] settingPart2 second half of setting to process |
|
108 |
+ * @param[in] value value of setting |
|
109 |
+ */ |
|
110 |
+ void procDistriAddr(String settingPart2, String value) |
|
111 |
+ throws Exception |
|
112 |
+ { |
|
113 |
+ int dist; |
|
114 |
+ Distri distri; |
|
115 |
+ InetSocketAddress addr; |
|
116 |
+ |
|
117 |
+ // get distributor number |
|
118 |
+ try { |
|
119 |
+ dist = Integer.parseInt(settingPart2); |
|
120 |
+ } catch (NumberFormatException e) { |
|
121 |
+ dist = Constants.distriMaxCnt; // force error in next line |
|
122 |
+ } |
|
123 |
+ if (dist >= Constants.distriMaxCnt) |
|
124 |
+ errorExc(String.format("invalid distributor number \"%d\"" + |
|
125 |
+ " in line %d of config file", dist, m_lineNo)); |
|
126 |
+ |
|
127 |
+ // get distributor |
|
128 |
+ distri = m_display.m_distris[dist]; |
|
129 |
+ if (distri == null) |
|
130 |
+ errorExc(String.format("no distributor with number \"%d\"" + |
|
131 |
+ " in line %d of config file", dist, m_lineNo)); |
|
132 |
+ |
|
133 |
+ // get address |
|
134 |
+ addr = AddrParser.parseAddr(value); |
|
135 |
+ if (addr == null) { |
|
136 |
+ errorExc("invalid addess \"" + value + |
|
137 |
+ "\" for distributor with number \"%u\"" + |
|
138 |
+ String.format(" in line %d of config file", m_lineNo)); |
|
139 |
+ } |
|
140 |
+ distri.m_addr = addr; |
|
141 |
+ } |
|
142 |
+ |
|
104 | 143 |
/** |
105 | 144 |
* @brief process mapping from config file |
106 | 145 |
* |
... | ... |
@@ -331,6 +370,12 @@ class Config |
331 | 370 |
return; |
332 | 371 |
} |
333 | 372 |
|
373 |
+ // distributor address |
|
374 |
+ if (setting.startsWith("distributorAddr ")) { |
|
375 |
+ procDistriAddr(setting.substring(16), value); |
|
376 |
+ return; |
|
377 |
+ } |
|
378 |
+ |
|
334 | 379 |
// mapping |
335 | 380 |
if (setting.startsWith("mapping ")) { |
336 | 381 |
procMapping(setting.substring(8), value); |
... | ... |
@@ -168,26 +168,16 @@ public class Display |
168 | 168 |
distri = m_distris[dist]; |
169 | 169 |
if (distri != null) { |
170 | 170 |
|
171 |
+ if (distri.m_addr != null) { |
|
171 | 172 |
try { |
172 |
- // assemble destination address of distributor |
|
173 |
- int intIp = Constants.destIpBase + |
|
174 |
- distri.m_distri * Constants.destIpStep; |
|
175 |
- byte [] byteIp = { |
|
176 |
- (byte)(intIp >> 24), |
|
177 |
- (byte)(intIp >> 16), |
|
178 |
- (byte)(intIp >> 8), |
|
179 |
- (byte)intIp |
|
180 |
- }; |
|
181 |
- InetAddress ip = InetAddress.getByAddress(byteIp); |
|
182 |
- |
|
183 | 173 |
// send message as UDP packet |
184 | 174 |
DatagramPacket pack = new DatagramPacket(distri.m_msgBuf, |
185 | 175 |
distri.m_msgBuf.length, |
186 |
- ip, Constants.destPort); |
|
176 |
+ distri.m_addr); |
|
187 | 177 |
m_sock.send(pack); |
188 |
- } catch (java.net.UnknownHostException e) { |
|
189 | 178 |
} catch (java.io.IOException e) { |
190 | 179 |
} |
180 |
+ } |
|
191 | 181 |
|
192 | 182 |
} // if distri |
193 | 183 |
} // for distri |
... | ... |
@@ -18,6 +18,7 @@ |
18 | 18 |
|
19 | 19 |
package org.blinkenarea.JFlexiPix; |
20 | 20 |
|
21 |
+import java.net.*; |
|
21 | 22 |
import java.util.Arrays; |
22 | 23 |
|
23 | 24 |
/// FlexiPix distributor |
... | ... |
@@ -36,6 +37,24 @@ class Distri |
36 | 37 |
m_outputCnt = outputCnt; |
37 | 38 |
m_pixelCnt = pixelCnt; |
38 | 39 |
|
40 |
+ // initialize address to default |
|
41 |
+ try { |
|
42 |
+ int intIp = Constants.destIpBase + |
|
43 |
+ m_distri * Constants.destIpStep; |
|
44 |
+ byte [] byteIp = { |
|
45 |
+ (byte)(intIp >> 24), |
|
46 |
+ (byte)(intIp >> 16), |
|
47 |
+ (byte)(intIp >> 8), |
|
48 |
+ (byte)intIp |
|
49 |
+ }; |
|
50 |
+ m_addr = new InetSocketAddress(InetAddress.getByAddress(byteIp), |
|
51 |
+ Constants.destPort); |
|
52 |
+ } catch (java.net.UnknownHostException e) { |
|
53 |
+ m_addr = null; |
|
54 |
+ } catch (java.io.IOException e) { |
|
55 |
+ m_addr = null; |
|
56 |
+ } |
|
57 |
+ |
|
39 | 58 |
// allocate default mappings |
40 | 59 |
m_mapRed = new Mapping(); |
41 | 60 |
m_mapGreen = new Mapping(); |
... | ... |
@@ -55,11 +74,14 @@ class Distri |
55 | 74 |
int m_distri; ///< number of this distributor |
56 | 75 |
int m_outputCnt; ///< number of outputs |
57 | 76 |
int m_pixelCnt; ///< number pixels connected to every output |
77 |
+ InetSocketAddress m_addr; ///< network address of distributor |
|
58 | 78 |
Mapping m_mapRed; ///< mapping information for red channel |
59 | 79 |
Mapping m_mapGreen; ///< mapping information for Green channel |
60 | 80 |
Mapping m_mapBlue; ///< mapping information for blue channel |
61 |
- Pixel [] m_pixels; /**< information about pixels of this distributor, |
|
81 |
+ Pixel [] m_pixels; /**< information about pixels of this |
|
82 |
+ distributor, |
|
62 | 83 |
index = output * m_pixelCnt + pixel */ |
63 |
- byte [] m_msgBuf; ///< buffer for current message to send to distributor |
|
84 |
+ byte [] m_msgBuf; /**< buffer for current message to send to |
|
85 |
+ distributor */ |
|
64 | 86 |
} |
65 | 87 |
|
66 | 88 |