├── .gitignore
├── .project
├── CommandFusion
├── CIPv1.0.gui
├── CIPv1.0.js
├── CIPv1.1.js
├── bg_landscape.png
├── bg_landscape_blank.png
├── bg_portrait.png
├── btn_off.png
├── btn_on.png
├── btn_submit_off.png
├── btn_submit_on.png
├── gauge_h_off.png
├── gauge_h_on.png
├── gauge_v_off.png
└── gauge_v_on.png
├── README.txt
└── SIMPL
├── CIPv1.0.sig
├── CIPv1.0.smw
└── CIPv1.0.spz
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .svn
3 | SPIsWork
4 | .asv
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | CIP
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CommandFusion/CIPv1.0.gui:
--------------------------------------------------------------------------------
1 |
2 |
3 | CIPv1.0
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | 1
62 | 1
63 |
64 |
65 | 100
66 | 100
67 |
68 |
69 | 255
70 | 255
71 |
72 | s1
73 | s100
74 | s255
75 |
76 |
77 |
78 | Text
79 |
80 | OFFLINE
81 | ONLINE
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/CommandFusion/CIPv1.0.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | CIP
4 |
5 | Version:
6 | 1.0 - release
7 | Supports standard XPanel features, with addition of serial transmit to control system.
8 | Currently does not support Password protection, List protocol, and other custom messages such as Orientation.
9 | Use:
10 | Please visit http://www.github.com/CommandFusion/CIP for latest versions and help.
11 |
12 | */
13 |
14 |
15 |
16 | //userMain
17 | CF.userMain = function() {
18 |
19 | //Setup CIP instances in our Global Token Callback function for simplicity in passing those values to each system
20 | CF.getJoin(CF.GlobalTokensJoin, function(j, v, tokens) {
21 | var systems = tokens["CIP_System_Names"].split(",");
22 | for (var sys in systems) {
23 | CF.log("Initializing " + systems[sys] + "...");
24 | new CIP({
25 | IPID: tokens[systems[sys] + ":IP_ID"],
26 | systemName: systems[sys],
27 | systemFeedbackName: tokens[systems[sys] + ":Feedback_Name"],
28 | DJoin_connectedFB: tokens[systems[sys] + ":Online_Digital_Join"],
29 | DJoin_Low: tokens[systems[sys] + ":Digital_Low"],
30 | DJoin_High: tokens[systems[sys] + ":Digital_High"],
31 | AJoin_Low: tokens[systems[sys] + ":Analog_Low"],
32 | AJoin_High: tokens[systems[sys] + ":Analog_High"],
33 | SJoin_Low: tokens[systems[sys] + ":Serial_Low"],
34 | SJoin_High: tokens[systems[sys] + ":Serial_High"]
35 | });
36 | }
37 | });
38 | delete CF.userMain;
39 | };
40 |
41 |
42 |
43 |
44 | //CIP object
45 | var CIP = function(params){
46 |
47 | //Instance reference
48 | var self = this;
49 |
50 | //Version of this module = versionMajor.versionMinor
51 | self.versionMajor = 1;
52 | self.versionMinor = 0;
53 |
54 | // Prefix for logging
55 | self.CIP_LogPrefix = ["Success: ", "Notice: ", "Warning: ", "Error: "];
56 |
57 | //Parameters
58 | self.IPID = params["IPID"] || "03";
59 | self.systemName = params["systemName"] || "Crestron";
60 | self.systemFeedbackName = params["systemFeedbackName"] || "Incoming_Data";
61 | self.DJoin_connectedFB = parseInt(params["DJoin_connectedFB"]) || 5000;
62 | self.DJoin_Low = parseInt(params["DJoin_Low"]) || 1;
63 | self.DJoin_High = parseInt(params["DJoin_High"]) || 1000;
64 | self.AJoin_Low = parseInt(params["AJoin_Low"]) || 1;
65 | self.AJoin_High = parseInt(params["AJoin_High"]) || 500;
66 | self.SJoin_Low = parseInt(params["SJoin_Low"]) || 1;
67 | self.SJoin_High = parseInt(params["SJoin_High"]) || 500;
68 |
69 | //Timers/debouncing
70 | self.heartBeatRate = 5000; //1000 = 1s
71 | self.heartBeatTimer = null;
72 | self.updateRequestDebounce = 1000;
73 | self.updateRequestTimer = null;
74 | self.HoldJoins = []; //Array to hold joins that are being repeated
75 | self.HoldRepeatTimer = 500; //Repeat at least every .5 seconds or control system releases digital.
76 |
77 | //Data receive buffer
78 | self.ourData = "";
79 |
80 | //Arrays that represent our joins
81 | self.DJoins = [];
82 | self.AJoins = [];
83 | self.SJoins = [];
84 | self.ClearJoins = [];
85 |
86 | //Items related to pages
87 | self.PageJoins = [];
88 | self.PageJoinByName = [];
89 | self.CurrentPage = null;
90 |
91 | //String Join values
92 | self.SJValues = [];
93 |
94 | //Connection event handler
95 | self.onConnectionChange = function (system, connected, remote) {
96 | if (connected != false) {
97 | self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40",0); //Send IP ID connect request
98 | } else {
99 | self.ConnectState(0);
100 | }
101 | };
102 |
103 | //Converts a string to hex for log output
104 | self.toHex = function (string) {
105 | var hex = '';
106 | for (var i = 0; i < string.length; i++) {
107 | hex += "\\x" + string.charCodeAt(i).toString(16);
108 | }
109 | return hex;
110 | };
111 |
112 | //Custom log implementation:
113 | // errorLevel: 0 = success, 1 = notice, 2 = warning, 3 = error
114 | // printOption: 0 = normal, 1 = output to hex, 2 = output to hex with "Unrecognized" tag
115 | self.log = function (msg, errorLevel, printOption) {
116 | if (CF.debug) {
117 | var prefix = self.CIP_LogPrefix[errorLevel] || "Log: ";
118 |
119 | if (printOption === 0) { // Normal
120 | CF.log(prefix + msg);
121 | } else if (printOption === 1) { // Hex
122 | CF.log(prefix + self.toHex(msg));
123 | } else {
124 | CF.log(prefix + "Unrecognized:");
125 | CF.log(prefix + self.toHex(msg));
126 | }
127 | }
128 | };
129 |
130 | //Send TCP message with optional log
131 | self.sendMsg = function (command, option) {
132 | CF.send(self.systemName, command);
133 | if (option === 1) {
134 | self.log(command,0,1);
135 | }
136 | };
137 |
138 | //Transmits a heartbeat to the remote sytem
139 | self.sendHeartBeat = function () {
140 | clearTimeout(self.heartBeatTimer);
141 | self.sendMsg("\x0d\x00\x02\x00\x00",0);
142 | };
143 |
144 | //Transmits a update request to the remote sytem
145 | self.sendUpdateRequest = function () {
146 | clearTimeout(self.updateRequestTimer);
147 | self.sendMsg("\x05\x00\x05\x00\x00\x02\x03\00",0);
148 | };
149 |
150 | //Central method to handle all connection states and their feedback
151 | self.ConnectState = function (state) {
152 | switch (state) {
153 | case 0:
154 | CF.setJoin("d" + self.DJoin_connectedFB, false);
155 | self.log("Disconnected from IP ID: " + self.IPID,3,0);
156 | break;
157 | case 1:
158 | CF.setJoin("d" + self.DJoin_connectedFB, true);
159 | self.log("Connected to IP ID: " + self.IPID,0,0);
160 | self.heartBeatTimer = setTimeout(function(self){self.sendHeartBeat();},self.heartBeatRate, this);
161 | self.updateRequestTimer = setTimeout(function(self){self.sendUpdateRequest();},self.updateRequestDebounce, this);
162 | break;
163 | case 2:
164 | CF.setJoin("d" + self.DJoin_connectedFB, false);
165 | self.log("IP ID Register Request, Sending: " + self.IPID,2,0);
166 | self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40",0);
167 | break;
168 | case 3:
169 | CF.setJoin("d" + self.DJoin_connectedFB, false);
170 | self.log("IP ID Not Defined on Processor: " + self.IPID + ". Retrying...",3,0); //When program isn't fully booted on processor, it will reject
171 | self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40",0);
172 | break;
173 | }
174 | };
175 |
176 |
177 | //Clear our join ranges on the UI
178 | self.clearJoins = function () {
179 | self.log("Clearing Joins...",1,0);
180 | CF.setJoins(self.ClearJoins, false);
181 | self.log("Done Clearing Joins",0,0);
182 | };
183 |
184 | //Process gui elements to setup watch, clearing, and other functions
185 | self.processGui = function (gui) {
186 |
187 | //Setup join arrays of pages & joins
188 | for (var i=0, numPages=gui.pages.length; i < numPages; i++) {
189 | var joinVal = parseInt(gui.pages[i].join.substr(1))
190 | if (self.DJoin_Low <= joinVal && joinVal <= self.DJoin_High) {
191 | self.PageJoins[gui.pages[i].join] = true;
192 | self.PageJoinByName[gui.pages[i].name] = joinVal;
193 | }
194 | }
195 |
196 | //Setup join arrays for used joins monitoring and clearing
197 | for (var i=0, numJoins=gui.allJoins.length; i < numJoins; i++) {
198 | var theJoin = gui.allJoins[i];
199 | var type = theJoin.charAt(0);
200 | var num = parseInt(theJoin.substr(1));
201 | if (type === "d" && num >= self.DJoin_Low && num <= self.DJoin_High && num != self.DJoin_connectedFB && !self.PageJoins[theJoin]) {
202 | //digital
203 | self.DJoins.push(theJoin);
204 | self.ClearJoins.push({join:theJoin, value:0});
205 | } else if (type === "a" && num >= self.AJoin_Low && num <= self.AJoin_High) {
206 | //analog
207 | self.AJoins.push(theJoin);
208 | self.ClearJoins.push({join:theJoin, value:0});
209 |
210 | } else if (type === "s" && num >= self.SJoin_Low && num <= self.SJoin_High) {
211 | //serial
212 | self.SJoins.push(theJoin);
213 | self.ClearJoins.push({join:theJoin, value:""});
214 | }
215 | }
216 |
217 | //Watch pageflips
218 | CF.watch(CF.PageFlipEvent, self.pageFlipEvent, true);
219 |
220 | //Watch joins
221 | CF.watch(CF.ObjectPressedEvent, self.DJoins, self.userDigitalPush);
222 | CF.watch(CF.ObjectReleasedEvent, self.DJoins, self.userDigitalRelease);
223 | CF.watch(CF.ObjectPressedEvent, self.AJoins, self.userAnalogEvent);
224 | CF.watch(CF.ObjectDraggedEvent, self.AJoins, self.userAnalogEvent);
225 | CF.watch(CF.ObjectReleasedEvent, self.AJoins, self.userAnalogEvent);
226 | CF.watch(CF.JoinChangeEvent, self.SJoins, self.userSerialEvent);
227 | };
228 |
229 | self.pageFlipEvent = function (from, to, orientation) {
230 | self.CurrentPage = to;
231 | self.setPageJoin();
232 | };
233 |
234 | //Method to send page join feedback, clearing all other page joins
235 | self.setPageJoin = function () {
236 | //clear
237 | for (var i in self.PageJoinByName) {
238 | var rawJoin = self.PageJoinByName[i] - 1;
239 | var upperByte = String.fromCharCode(rawJoin & 0xff);
240 | var lowerByte = String.fromCharCode((rawJoin >> 8) | 0x0080);
241 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x00"+ upperByte + lowerByte, 0);
242 | }
243 |
244 | //set join if page has join
245 | if (self.PageJoinByName[self.CurrentPage] != undefined) {
246 | var rawJoin = self.PageJoinByName[self.CurrentPage] - 1;
247 | var upperByte = String.fromCharCode(rawJoin & 0xff);
248 | var lowerByte = String.fromCharCode(rawJoin >> 8);
249 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x00"+ upperByte + lowerByte, 0);
250 | }
251 | }
252 |
253 | self.userDigitalPush = function (join, value, tokens) {
254 | var type = join.charCodeAt(0);
255 | var rawJoin = parseInt(join.substr(1)) - 1;
256 | var rawValue = parseInt(value);
257 | var upperByte, lowerByte;
258 |
259 | upperByte = String.fromCharCode(rawJoin & 0xff);
260 | lowerByte = String.fromCharCode(rawJoin >> 8);
261 | var msg = "\x05\x00\x06\x00\x00\x03\x27"+ upperByte + lowerByte;
262 | self.sendMsg(msg,0);
263 | self.HoldJoins[join] = setInterval(function(){self.sendMsg(msg,0);}, self.HoldRepeatTimer); //repeat the held join command
264 | };
265 |
266 | self.userDigitalRelease = function (join, value, tokens) {
267 | var type = join.charCodeAt(0);
268 | var rawJoin = parseInt(join.substr(1)) - 1;
269 | var upperByte, lowerByte;
270 |
271 | upperByte = String.fromCharCode(rawJoin & 0xff);
272 | clearInterval(self.HoldJoins[join]);
273 | lowerByte = String.fromCharCode((rawJoin >> 8) | 0x0080);
274 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x27"+ upperByte + lowerByte,0);
275 | clearInterval(self.HoldJoins[join]);
276 | };
277 |
278 | self.userAnalogEvent = function (join, value, tokens) {
279 | var type = join.charCodeAt(0);
280 | var rawJoin = parseInt(join.substr(1)) - 1;
281 | var rawValue = parseInt(value);
282 | var joinUpper, joinLower, valUpper, valLower;
283 |
284 | joinUpper = String.fromCharCode(rawJoin >> 8);
285 | joinLower = String.fromCharCode(rawJoin & 0xff);
286 | valUpper = String.fromCharCode(rawValue >> 8);
287 | valLower = String.fromCharCode(rawValue & 0xff);
288 | self.sendMsg("\x05\x00\x08\x00\x00\x05\x14"+ joinUpper + joinLower + valUpper + valLower,0);
289 | };
290 |
291 | self.userSerialEvent = function (join, value, tokens) {
292 | var type = join.charCodeAt(0);
293 | var rawJoin = parseInt(join.substr(1)) - 1;
294 | var rawValue = parseInt(value);
295 | self.SJValues[join] = value;
296 |
297 | var payload = "\x00\x00" + String.fromCharCode(value.length + 2) + "\x12" + String.fromCharCode(rawJoin) + value;
298 | self.sendMsg("\x05\x00" + String.fromCharCode(payload.length) + payload,0);
299 | };
300 |
301 | //TCP receive event handler. Will process all packets even if multiple messages received for single data event
302 | self.receive = function (itemName, data) {
303 | var s = self.ourData + data;
304 | while (s.length >= 3) {
305 | var type = s.charCodeAt(0);
306 | var len = (s.charCodeAt(1) << 8) + s.charCodeAt(2);
307 | if (s.length < (3 + len)) { // sanity check: buffer doesn't contain all the data advertised in the packet
308 | break;
309 | }
310 | var payload = s.substr(3,len);
311 | s = s.substr(3 + len);
312 | self.dataChange(type, len, payload); // process payload
313 | }
314 | self.ourData = s;
315 | }
316 |
317 | // ---------------------------------------------------------
318 | // DATA PROCESSING
319 | // ---------------------------------------------------------
320 | self.processIPIDStatus = function(len, payload) {
321 | if (payload == '\xff\xff\x02') {
322 | // IP ID Does not Exist
323 | self.ConnectState(3);
324 | } else if (len == 4) {
325 | // IP ID registry Success
326 | self.ConnectState(1);
327 | } else {
328 | //not accounted for
329 | self.log(self.ourData,2,2);
330 | }
331 | };
332 |
333 | self.processData = function(len, payload) {
334 | var dataType = payload.charCodeAt(3);
335 | if (dataType == 0x00) {
336 | // digital feedback
337 | var joinData = (payload.charCodeAt(4) << 8) + payload.charCodeAt(5);
338 | var join = ((joinData >> 8) | ((joinData & 0x7F) << 8)) + 1;
339 | if (self.DJoin_Low <= join && join <= self.DJoin_High && join != self.DJoin_connectedFB) {
340 | CF.setJoin("d" + join, !(joinData & 0x0080), false);
341 | } else {
342 | self.log("Ignoring out of range Digital: " + join,2,0);
343 | }
344 | } else if (dataType == 0x01) {
345 | // analog feedback
346 | var join = 0, value = 0, type = payload.charCodeAt(2);
347 | if (type == 4) { // Join < 256
348 | join = payload.charCodeAt(4) + 1;
349 | value = (payload.charCodeAt(5) << 8) + payload.charCodeAt(6);
350 | } else if (type == 5) { // Join > 255
351 | join = (payload.charCodeAt(4) << 8) + payload.charCodeAt(5) + 1;
352 | value = (payload.charCodeAt(6) << 8) + payload.charCodeAt(7);
353 | }
354 | if (self.AJoin_Low <= join && join <= self.AJoin_High) {
355 | CF.setJoin("a" + join, value, false);
356 | } else {
357 | self.log("Ignoring out of range Analog: " + join,2,0);
358 | }
359 | } else if (dataType == 0x02) {
360 | // serial feedback
361 | var pkg = payload.substr(4);
362 | var msg = pkg.split("\r");
363 | var joinLength = msg[0].indexOf(",") - 1;
364 | var join = parseInt(msg[0].substring(1,joinLength + 1));
365 | var sJoin = "s" + join;
366 | var text = "";
367 |
368 | if (self.SJoin_Low > join || join > self.SJoin_High) {
369 | self.log("Ignoring out of range Serial: " + join,2,0);
370 | return;
371 | }
372 | if (self.SJValues[sJoin] == undefined) {self.SJValues[sJoin] = "";}
373 | for (var i = 0; i < msg.length - 1; i++) {
374 | text = msg[i].substr(joinLength + 2);
375 | if (i == 0) {
376 | if(msg[i].charAt(0) === "#") {
377 | if (text.length == 0) {
378 | self.SJValues[sJoin] = text;
379 | } else if (text.length > 0) {
380 | self.SJValues[sJoin] = self.SJValues[sJoin] + "\r" + text;
381 | }
382 | } else if (msg[i].charAt(0) === "@") {
383 | self.SJValues[sJoin] = self.SJValues[sJoin] + text;
384 | }
385 | } else if (i > 0) {
386 | if (text.length == 0 && !(i == (msg.length-1) && self.SJValues[sJoin].length == 0)) {
387 | self.SJValues[sJoin] = self.SJValues[sJoin] + "\r";
388 | } else if (text.length > 0) {
389 | self.SJValues[sJoin] = self.SJValues[sJoin] + text;
390 | }
391 | }
392 | }
393 |
394 | CF.setJoin(sJoin,self.SJValues[sJoin]);
395 |
396 | } else if (dataType == 0x03) {
397 | self.clearJoins();
398 | //update request confirmation, we receive this just before processor sends the UR data.
399 | } else if (dataType == 0x08) { //Date & Time - Only sent during update request, so driving a join would require a clock. Just for reference, for now.
400 | var hour = payload.charCodeAt(5).toString(16);
401 | var minute = payload.charCodeAt(6).toString(16);
402 | var second = payload.charCodeAt(7).toString(16);
403 | var month = payload.charCodeAt(8).toString(16);
404 | var day = payload.charCodeAt(9).toString(16);
405 | var year = payload.charCodeAt(10).toString(16);
406 | self.log("Remote System Time: " + hour + ":" + minute + ":" + second + " " + month + "-" + day + "-" + year,0,0);
407 | } else {
408 | //not accounted for...
409 | self.log(payload,2,2);
410 | }
411 | };
412 |
413 | //parse a single incoming message from remote system
414 | self.dataChange = function (type, len, payload) {
415 | if (type == 0x02) {
416 | // IP ID status
417 | self.processIPIDStatus(len, payload);
418 | } else if (type == 0x03) {
419 | //Program stopping/disconnecting. Noting for future use.
420 | } else if (type == 0x05) {
421 | // data
422 | self.processData(len, payload);
423 | } else if (type == 0x0D || type == 0x0E) {
424 | // 0x0D heartbeat timeout - Processor sends an initiator heartbeat if it doesn't receive one and times out
425 | // 0x0E heartbeat response - Response to our initiator heartbeat.
426 | self.heartBeatTimer = setTimeout(function(self){self.sendHeartBeat();}, self.heartBeatRate, this);
427 | } else if (type == 0x0F) {
428 | // processor response
429 | if (len == 1) {
430 | if (payload == '\x02') { //IP ID warning/error.
431 | self.ConnectState(2);
432 | }
433 | } else {
434 | self.log(payload,2,2);
435 | }
436 | } else {
437 | self.log(payload,2,2);
438 | }
439 | };
440 |
441 | //Initialization: General setup & Event monitors
442 |
443 | CF.watch(CF.ConnectionStatusChangeEvent, self.systemName, self.onConnectionChange, true);
444 | CF.watch(CF.FeedbackMatchedEvent, self.systemName, self.systemFeedbackName, self.receive);
445 | CF.getGuiDescription(self.processGui);
446 | //CF.watch(CF.GUIResumedEvent, self.onGUIResumed);
447 |
448 | self.log( "\r\x09" + "CIP Ready for System: " + self.systemName + "\r" +
449 | "\x09" + "Module Version: " + self.versionMajor + "." + self.versionMinor + "\r" +
450 | "\x09" + "IP ID: " + self.IPID + "\r" +
451 | "\x09" + "Online Feedback Join: " + self.DJoin_connectedFB + "\r" +
452 | "\x09" + "Digital Range: " + self.DJoin_Low + "-" + self.DJoin_High + "\r" +
453 | "\x09" + "Analog Range: " + self.AJoin_Low + "-" + self.AJoin_High + "\r" +
454 | "\x09" + "Serial Range: " + self.SJoin_Low + "-" + self.SJoin_High ,0,0);
455 | };
--------------------------------------------------------------------------------
/CommandFusion/CIPv1.1.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | CIP
4 |
5 | Version:
6 | 1.1 - Cleanup, fix connectivity issues, and serial echo issue
7 | 1.0 - release
8 | Supports standard XPanel features, with addition of serial transmit to control system.
9 | Currently does not support Password protection, List protocol, and other custom messages such as Orientation.
10 | Use:
11 | Please visit http://www.github.com/CommandFusion/CIP for latest versions and help.
12 |
13 | */
14 |
15 |
16 |
17 | //userMain
18 | CF.userMain = function() {
19 | //Setup CIP instances in our Global Token Callback function for simplicity in passing those values to each system
20 | CF.getJoin(CF.GlobalTokensJoin, function(j, v, tokens) {
21 | var systems = tokens["CIP_System_Names"].split(",");
22 | for (var sys in systems) {
23 | CF.log("Initializing " + systems[sys] + "...");
24 | new CIP({
25 | systemName: systems[sys],
26 | IPID: tokens[systems[sys] + ":IP_ID"],
27 | systemFeedbackName: tokens[systems[sys] + ":Feedback_Name"],
28 | DJoin_connectedFB: tokens[systems[sys] + ":Online_Digital_Join"],
29 | DJoin_Low: tokens[systems[sys] + ":Digital_Low"],
30 | DJoin_High: tokens[systems[sys] + ":Digital_High"],
31 | AJoin_Low: tokens[systems[sys] + ":Analog_Low"],
32 | AJoin_High: tokens[systems[sys] + ":Analog_High"],
33 | SJoin_Low: tokens[systems[sys] + ":Serial_Low"],
34 | SJoin_High: tokens[systems[sys] + ":Serial_High"]
35 | });
36 | }
37 | });
38 | };
39 |
40 |
41 | //CIP object
42 | var CIP = function(params){
43 |
44 | //Instance reference
45 | var self = this;
46 |
47 | //Version of this module = versionMajor.versionMinor
48 | self.version = "1.1";
49 |
50 | //Parameters
51 | self.IPID = params["IPID"] || "03";
52 | self.systemName = params["systemName"] || "Crestron";
53 | self.systemFeedbackName = params["systemFeedbackName"] || "Incoming_Data";
54 | self.DJoin_connectedFB = parseInt(params["DJoin_connectedFB"]) || 5000;
55 | self.DJoin_Low = parseInt(params["DJoin_Low"]) || 1;
56 | self.DJoin_High = parseInt(params["DJoin_High"]) || 1000;
57 | self.AJoin_Low = parseInt(params["AJoin_Low"]) || 1;
58 | self.AJoin_High = parseInt(params["AJoin_High"]) || 500;
59 | self.SJoin_Low = parseInt(params["SJoin_Low"]) || 1;
60 | self.SJoin_High = parseInt(params["SJoin_High"]) || 500;
61 |
62 | //Timers/debouncing
63 | self.heartBeatTimer = null;
64 | self.heartBeatRate = 5000; //1000 = 1s
65 | self.HoldJoins = []; //Array to hold joins that are being repeated
66 | self.HoldRepeatRate = 500; //Repeat at least every .5 seconds or control system releases digital.
67 | self.ConnectRepeatTimer = null;
68 | self.ConnectRepeatRate = 500;
69 | self.updateRequestTimer = null
70 | self.updateRequestDelay = 1000;
71 | self.monitorPageFlipTimer = null;
72 | self.monitorPageFlipDelay = 3000;
73 |
74 | //Data receive buffer
75 | self.ourData = "";
76 |
77 | //Arrays that represent our joins
78 | self.DJoins = [];
79 | self.AJoins = [];
80 | self.SJoins = [];
81 | self.ClearJoins = [];
82 |
83 | //Items related to pages
84 | self.PageJoins = [];
85 | self.PageJoinByName = [];
86 | self.CurrentPage = null;
87 |
88 | //String Join values
89 | self.SJValues = [];
90 |
91 | //Connection event handler
92 | self.onConnectionChange = function (system, connected, remote) {
93 | if (connected != false) {
94 | self.log("Socket Connected");
95 | self.ConnectState(0);
96 | } else {
97 | self.log("Socket Disconnected");
98 | self.ConnectState(0);
99 | }
100 | };
101 |
102 | //Converts a string to hex for log output
103 | self.toHex = function (string) {
104 | var hex = '';
105 | for (var i = 0; i < string.length; i++) {
106 | hex += "\\x" + string.charCodeAt(i).toString(16);
107 | }
108 | return hex;
109 | };
110 |
111 | //Custom log implementation:
112 | self.log = function (msg) {
113 | if (CF.debug) {
114 | CF.log("Log: " + msg);
115 | }
116 | };
117 |
118 | self.sendMsg = function(msg) {
119 | self.log("Sending: " + self.toHex(msg));
120 | CF.send(self.systemName, msg, CF.BINARY);
121 | };
122 |
123 | //TCP receive event handler. Will process all packets even if multiple messages received for single data event
124 | self.receive = function (itemName, data) {
125 | self.log("Receiving: " + self.toHex(data));
126 | self.ourData += data;
127 | while (self.ourData.length >= 3) {
128 | var type = self.ourData.charCodeAt(0);
129 | var len = (self.ourData.charCodeAt(1) << 8) + self.ourData.charCodeAt(2);
130 | if (self.ourData.length < (3 + len)) { // sanity check: buffer doesn't contain all the data advertised in the packet
131 | break;
132 | }
133 | var payload = self.ourData.substr(3,len);
134 | self.ourData = self.ourData.substr(3 + len);
135 | self.processMessage(type, len, payload); // process payload
136 | }
137 | };
138 |
139 | //parse a single incoming message from remote system
140 | self.processMessage = function (type, len, payload) {
141 | if (type == 0x05) { // data
142 | var dataType = payload.charCodeAt(3);
143 | if (dataType == 0x00) { // digital feedback
144 | var joinData = (payload.charCodeAt(4) << 8) + payload.charCodeAt(5);
145 | var join = ((joinData >> 8) | ((joinData & 0x7F) << 8)) + 1;
146 | if (self.DJoin_Low <= join && join <= self.DJoin_High && join != self.DJoin_connectedFB) {
147 | CF.setJoin("d" + join, !(joinData & 0x0080), false);
148 | } else {
149 | self.log("Ignoring out of range Digital: " + join);
150 | }
151 | } else if (dataType == 0x01) { // analog feedback
152 | var join = 0, value = 0, type = payload.charCodeAt(2);
153 | if (type == 4) { // Join < 256
154 | join = payload.charCodeAt(4) + 1;
155 | value = (payload.charCodeAt(5) << 8) + payload.charCodeAt(6);
156 | } else if (type == 5) { // Join > 255
157 | join = (payload.charCodeAt(4) << 8) + payload.charCodeAt(5) + 1;
158 | value = (payload.charCodeAt(6) << 8) + payload.charCodeAt(7);
159 | }
160 | if (self.AJoin_Low <= join && join <= self.AJoin_High) {
161 | CF.setJoin("a" + join, value, false);
162 | } else {
163 | self.log("Ignoring out of range Analog: " + join);
164 | }
165 | } else if (dataType == 0x02) { // serial feedback
166 | var pkg = payload.substr(4);
167 | var msg = pkg.split("\r");
168 | var joinLength = msg[0].indexOf(",") - 1;
169 | var join = parseInt(msg[0].substring(1,joinLength + 1));
170 | var sJoin = "s" + join;
171 | var text = "";
172 | if (self.SJoin_Low > join || join > self.SJoin_High) {
173 | self.log("Ignoring out of range Serial: " + join);
174 | return;
175 | }
176 | if (self.SJValues[sJoin] == undefined) {self.SJValues[sJoin] = "";}
177 | for (var i = 0; i < msg.length - 1; i++) {
178 | text = msg[i].substr(joinLength + 2);
179 | if (i == 0) {
180 | if(msg[i].charAt(0) === "#") {
181 | if (text.length == 0) {
182 | self.SJValues[sJoin] = text;
183 | } else if (text.length > 0) {
184 | self.SJValues[sJoin] = self.SJValues[sJoin] + "\r" + text;
185 | }
186 | } else if (msg[i].charAt(0) === "@") {
187 | self.SJValues[sJoin] = self.SJValues[sJoin] + text;
188 | }
189 | } else if (i > 0) {
190 | if (text.length == 0 && !(i == (msg.length-1) && self.SJValues[sJoin].length == 0)) {
191 | self.SJValues[sJoin] = self.SJValues[sJoin] + "\r";
192 | } else if (text.length > 0) {
193 | self.SJValues[sJoin] = self.SJValues[sJoin] + text;
194 | }
195 | }
196 | }
197 | CF.setJoin(sJoin,self.SJValues[sJoin], false);
198 | } else if (dataType == 0x03) {
199 | self.log("Update Request Incoming...")
200 | //update request confirmation, we receive this just before processor sends the UR data
201 | } else if (dataType == 0x08) {
202 | //Date & Time - Only sent during update request, so driving a join would require a clock. Just for reference, for now.
203 | } else {
204 | //not accounted for...
205 | self.log(payload);
206 | }
207 | } else if (type == 0x02) { //IP ID info
208 | if (payload == '\xff\xff\x02') {
209 | // IP ID Does not Exist, or booting, retry...
210 | self.ConnectState(0)
211 | self.log("IP ID Not Defined on Processor: " + self.IPID + ". Retrying..."); //When program isn't fully booted on processor, it will reject
212 | //self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40");
213 | } else if (len == 4) {
214 | // IP ID registry Success
215 | self.log("IP ID Registry Success")
216 | clearInterval(self.heartBeatTimer);
217 | self.heartBeatTimer = setInterval(function(){self.sendHeartBeat();}, self.heartBeatRate);
218 | self.ConnectState(1);
219 | } else {
220 | //not accounted for
221 | self.log(self.ourData);
222 | }
223 | } else if (type == 0x03) {
224 | //Program stopping/disconnecting. Noting for future use.
225 | } else if (type == 0x0D || type == 0x0E) {
226 | // 0x0D heartbeat timeout - Processor sends an initiator heartbeat if it doesn't receive one and times out
227 | // 0x0E heartbeat response - Response to our initiator heartbeat.
228 | clearInterval(self.heartBeatTimer);
229 | self.heartBeatTimer = setInterval(function(){self.sendHeartBeat();}, self.heartBeatRate);
230 | } else if (type == 0x0F) {
231 | // processor response
232 | if (len == 1) {
233 | if (payload == '\x02') { //IP ID Register request, send IPID
234 | self.ConnectState(0);
235 | self.log("IP ID Register Request, Sending: " + self.IPID);
236 | self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40");
237 | }
238 | } else {
239 | self.log(payload);
240 | }
241 | } else {
242 | self.log(payload);
243 | }
244 | };
245 |
246 | //Central method to handle all connection state feedback
247 | self.ConnectState = function (state) {
248 | switch (state) {
249 | case 0:
250 | CF.setJoin("d" + self.DJoin_connectedFB, false);
251 | self.log("Disconnected from IP ID: " + self.IPID);
252 | CF.unwatch(CF.PageFlipEvent);
253 | self.log("Clearing Joins...");
254 | CF.setJoins(self.ClearJoins, false);
255 | self.log("Done Clearing Joins");
256 | self.log("Starting Reconnect Procedure...")
257 | clearInterval(self.ConnectRepeatTimer)
258 | self.ConnectRepeatTimer = setInterval(function(){self.connectRepeat();}, self.ConnectRepeatRate);
259 | break;
260 | case 1:
261 | clearInterval(self.ConnectRepeatTimer);
262 | CF.setJoin("d" + self.DJoin_connectedFB, true);
263 | self.log("Connected to IP ID: " + self.IPID);
264 | self.updateRequestTimer = setTimeout(function(){self.sendUpdateRequest();}, self.updateRequestDelay); //Update Request Delay
265 | self.monitorPageFlipTimer = setTimeout(function(){self.monitorPageflips();}, self.monitorPageFlipDelay)
266 | break;
267 | }
268 | };
269 |
270 | self.sendHeartBeat = function(){
271 | self.sendMsg("\x0d\x00\x02\x00\x00")
272 | };
273 |
274 | self.connectRepeat = function() {
275 | self.log("Repeat Interval.")
276 | self.sendMsg("\x01\x00\x07\x7F\x00\x00\x01\x00" + String.fromCharCode("0x" + self.IPID) + "\x40");
277 | };
278 |
279 | self.sendUpdateRequest = function() {
280 | clearTimeout(self.updateRequestTimer);
281 | self.sendMsg("\x05\x00\x05\x00\x00\x02\x03\00"); //Send update request
282 | };
283 |
284 | self.monitorPageflips = function() {
285 | clearTimeout(self.monitorPageFlipTimer)
286 | CF.watch(CF.PageFlipEvent, self.pageFlipEvent, true); //Watch pageflips
287 | };
288 |
289 | //Process gui elements to setup watch, clearing, and other functions
290 | self.processGui = function (gui) {
291 | //Setup join arrays of pages & joins
292 | for (var i=0, numPages=gui.pages.length; i < numPages; i++) {
293 | var joinVal = parseInt(gui.pages[i].join.substr(1))
294 | if (self.DJoin_Low <= joinVal && joinVal <= self.DJoin_High) {
295 | self.PageJoins[gui.pages[i].join] = true;
296 | self.PageJoinByName[gui.pages[i].name] = joinVal;
297 | }
298 | }
299 |
300 | //Setup join arrays for used joins monitoring and clearing
301 | for (var i=0, numJoins=gui.allJoins.length; i < numJoins; i++) {
302 | var theJoin = gui.allJoins[i];
303 | var type = theJoin.charAt(0);
304 | var num = parseInt(theJoin.substr(1));
305 | if (type === "d" && num >= self.DJoin_Low && num <= self.DJoin_High && num != self.DJoin_connectedFB && !self.PageJoins[theJoin]) {
306 | //digital
307 | self.DJoins.push(theJoin);
308 | self.ClearJoins.push({join:theJoin, value:0});
309 | } else if (type === "a" && num >= self.AJoin_Low && num <= self.AJoin_High) {
310 | //analog
311 | self.AJoins.push(theJoin);
312 | self.ClearJoins.push({join:theJoin, value:0});
313 |
314 | } else if (type === "s" && num >= self.SJoin_Low && num <= self.SJoin_High) {
315 | //serial
316 | self.SJoins.push(theJoin);
317 | self.ClearJoins.push({join:theJoin, value:""});
318 | }
319 | }
320 |
321 | //Watch joins
322 | CF.watch(CF.ObjectPressedEvent, self.DJoins, self.userDigitalPush);
323 | CF.watch(CF.ObjectReleasedEvent, self.DJoins, self.userDigitalRelease);
324 | CF.watch(CF.ObjectPressedEvent, self.AJoins, self.userAnalogEvent);
325 | CF.watch(CF.ObjectDraggedEvent, self.AJoins, self.userAnalogEvent);
326 | CF.watch(CF.ObjectReleasedEvent, self.AJoins, self.userAnalogEvent);
327 | CF.watch(CF.JoinChangeEvent, self.SJoins, self.userSerialEvent);
328 | };
329 |
330 | self.pageFlipEvent = function (from, to, orientation) {
331 | self.CurrentPage = to;
332 |
333 | //clear page joins
334 | for (var i in self.PageJoinByName) {
335 | var rawJoin = self.PageJoinByName[i] - 1;
336 | var upperByte = String.fromCharCode(rawJoin & 0xff);
337 | var lowerByte = String.fromCharCode((rawJoin >> 8) | 0x0080);
338 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x00"+ upperByte + lowerByte);
339 | }
340 |
341 | //set join if page has join
342 | if (self.PageJoinByName[self.CurrentPage] != undefined) {
343 | var rawJoin = self.PageJoinByName[self.CurrentPage] - 1;
344 | var upperByte = String.fromCharCode(rawJoin & 0xff);
345 | var lowerByte = String.fromCharCode(rawJoin >> 8);
346 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x00"+ upperByte + lowerByte);
347 | }
348 | };
349 |
350 |
351 | self.userDigitalPush = function (join, value, tokens) {
352 | var type = join.charCodeAt(0);
353 | var rawJoin = parseInt(join.substr(1)) - 1;
354 | var rawValue = parseInt(value);
355 | var upperByte, lowerByte;
356 |
357 | upperByte = String.fromCharCode(rawJoin & 0xff);
358 | lowerByte = String.fromCharCode(rawJoin >> 8);
359 | var msg = "\x05\x00\x06\x00\x00\x03\x27"+ upperByte + lowerByte;
360 | self.sendMsg(msg);
361 | self.HoldJoins[join] = setInterval(function(){self.sendMsg(msg);}, self.HoldRepeatRate); //repeat the held join command
362 | };
363 |
364 | self.userDigitalRelease = function (join, value, tokens) {
365 | var type = join.charCodeAt(0);
366 | var rawJoin = parseInt(join.substr(1)) - 1;
367 | var upperByte, lowerByte;
368 |
369 | upperByte = String.fromCharCode(rawJoin & 0xff);
370 | clearInterval(self.HoldJoins[join]);
371 | lowerByte = String.fromCharCode((rawJoin >> 8) | 0x0080);
372 | self.sendMsg("\x05\x00\x06\x00\x00\x03\x27"+ upperByte + lowerByte);
373 | clearInterval(self.HoldJoins[join]);
374 | };
375 |
376 | self.userAnalogEvent = function (join, value, tokens) {
377 | var type = join.charCodeAt(0);
378 | var rawJoin = parseInt(join.substr(1)) - 1;
379 | var rawValue = parseInt(value);
380 | var joinUpper, joinLower, valUpper, valLower;
381 |
382 | joinUpper = String.fromCharCode(rawJoin >> 8);
383 | joinLower = String.fromCharCode(rawJoin & 0xff);
384 | valUpper = String.fromCharCode(rawValue >> 8);
385 | valLower = String.fromCharCode(rawValue & 0xff);
386 | self.sendMsg("\x05\x00\x08\x00\x00\x05\x14"+ joinUpper + joinLower + valUpper + valLower);
387 | };
388 |
389 | self.userSerialEvent = function (join, value, tokens) {
390 | var type = join.charCodeAt(0);
391 | var rawJoin = parseInt(join.substr(1)) - 1;
392 | var rawValue = parseInt(value);
393 | self.SJValues[join] = value;
394 |
395 | var payload = "\x00\x00" + String.fromCharCode(value.length + 2) + "\x12" + String.fromCharCode(rawJoin) + value;
396 | self.sendMsg("\x05\x00" + String.fromCharCode(payload.length) + payload);
397 | };
398 |
399 | self.onGUIResumed = function() {
400 | self.log("Gui Resumed...")
401 | };
402 |
403 | //Initialization: General setup & Event monitors
404 | CF.watch(CF.ConnectionStatusChangeEvent, self.systemName, self.onConnectionChange, true);
405 | CF.watch(CF.FeedbackMatchedEvent, self.systemName, self.systemFeedbackName, self.receive);
406 | CF.getGuiDescription(self.processGui);
407 | CF.watch(CF.GUIResumedEvent, self.onGUIResumed);
408 |
409 | self.log( "\r\x09" + "CIP Ready for System: " + self.systemName + "\r" +
410 | "\x09" + "Module Version: " + self.version + "\r" +
411 | "\x09" + "IP ID: " + self.IPID + "\r" +
412 | "\x09" + "Online Feedback Join: " + self.DJoin_connectedFB + "\r" +
413 | "\x09" + "Digital Range: " + self.DJoin_Low + "-" + self.DJoin_High + "\r" +
414 | "\x09" + "Analog Range: " + self.AJoin_Low + "-" + self.AJoin_High + "\r" +
415 | "\x09" + "Serial Range: " + self.SJoin_Low + "-" + self.SJoin_High);
416 |
417 | self.ConnectState(0); //Hack to get around iViewer not consistently triggering our events
418 | };
--------------------------------------------------------------------------------
/CommandFusion/bg_landscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/bg_landscape.png
--------------------------------------------------------------------------------
/CommandFusion/bg_landscape_blank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/bg_landscape_blank.png
--------------------------------------------------------------------------------
/CommandFusion/bg_portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/bg_portrait.png
--------------------------------------------------------------------------------
/CommandFusion/btn_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/btn_off.png
--------------------------------------------------------------------------------
/CommandFusion/btn_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/btn_on.png
--------------------------------------------------------------------------------
/CommandFusion/btn_submit_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/btn_submit_off.png
--------------------------------------------------------------------------------
/CommandFusion/btn_submit_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/btn_submit_on.png
--------------------------------------------------------------------------------
/CommandFusion/gauge_h_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/gauge_h_off.png
--------------------------------------------------------------------------------
/CommandFusion/gauge_h_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/gauge_h_on.png
--------------------------------------------------------------------------------
/CommandFusion/gauge_v_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/gauge_v_off.png
--------------------------------------------------------------------------------
/CommandFusion/gauge_v_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/CommandFusion/gauge_v_on.png
--------------------------------------------------------------------------------
/README.txt:
--------------------------------------------------------------------------------
1 | For help and information please visit:
2 |
3 | http://github.com/CommandFusion/CIP/wiki
--------------------------------------------------------------------------------
/SIMPL/CIPv1.0.sig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/SIMPL/CIPv1.0.sig
--------------------------------------------------------------------------------
/SIMPL/CIPv1.0.smw:
--------------------------------------------------------------------------------
1 | [
2 | Version=1
3 | ]
4 | [
5 | ObjTp=FSgntr
6 | Sgntr=SimplWindow
7 | RelVrs=3.02.04
8 | IntStrVrs=2
9 | MinSMWVrs=2.07.04
10 | MinTIOVrs=124
11 | SavedBy=SMW3.02.04
12 | ]
13 | [
14 | ObjTp=Hd
15 | CnC=362
16 | CnH=2
17 | S0Nd=1
18 | S1Nd=2
19 | SLNd=3
20 | PrNm=CIPv1.0.smw
21 | DbVr=26.05.021.00
22 | DvcDbVr=35.05.004.00
23 | DlrNm=Jetson Systems
24 | CltNm=CIP Demo
25 | SmVr=741
26 | DvVr=741
27 | TpN1=1
28 | TpN2=2
29 | TpN3=3
30 | TpN4=4
31 | TpN5=5
32 | APg=1
33 | FltTmp=1
34 | FpCS=0
35 | EnType=0
36 | ZeroOnIoOk=0
37 | PIT=
38 | ]
39 | [
40 | ObjTp=Dv
41 | Nm=PRO2
42 | H=2
43 | PrH=1
44 | DvC=362
45 | ObjVer=1
46 | Ad=00
47 | DbH=1
48 | mC=10
49 | C1=3
50 | C2=4
51 | C3=5
52 | C4=6
53 | C5=20
54 | C6=30
55 | C7=48
56 | C8=66
57 | C9=67
58 | C10=323
59 | ]
60 | [
61 | ObjTp=Dv
62 | Nm=C2Y Card Slot
63 | H=3.5
64 | PrH=2
65 | ObjVer=1
66 | SlC=93
67 | DvF=Sl
68 | Ad=01,02,03
69 | ]
70 | [
71 | ObjTp=Dv
72 | Nm=Fixed
73 | H=6
74 | PrH=2
75 | ObjVer=1
76 | SlC=2
77 | DvF=Sl
78 | Ad=04
79 | mC=1
80 | C1=7
81 | ]
82 | [
83 | ObjTp=Dv
84 | Nm=C2I-COM6
85 | H=7
86 | PrH=6
87 | DvC=365
88 | ObjVer=1
89 | SlC=2
90 | Ad=04
91 | SmH=6
92 | mC=6
93 | C1=8
94 | C2=10
95 | C3=12
96 | C4=14
97 | C5=16
98 | C6=18
99 | ]
100 | [
101 | ObjTp=Dv
102 | Nm=C2COMIAB_Port
103 | H=8
104 | PrH=7
105 | ObjVer=1
106 | SlC=120
107 | DvF=Sl
108 | Ad=A
109 | mC=1
110 | C1=9
111 | ]
112 | [
113 | ObjTp=Dv
114 | Nm=C2 COM Two-way serial driver
115 | H=9
116 | PrH=8
117 | DvC=369
118 | ObjVer=1
119 | SlC=120
120 | Ad=A
121 | SmH=7
122 | CmH=1
123 | ]
124 | [
125 | ObjTp=Dv
126 | Nm=C2COMIAB_Port
127 | H=10
128 | PrH=7
129 | ObjVer=1
130 | SlC=120
131 | DvF=Sl
132 | Ad=B
133 | mC=1
134 | C1=11
135 | ]
136 | [
137 | ObjTp=Dv
138 | Nm=C2 COM Two-way serial driver
139 | H=11
140 | PrH=10
141 | DvC=369
142 | ObjVer=1
143 | SlC=120
144 | Ad=B
145 | SmH=8
146 | CmH=2
147 | ]
148 | [
149 | ObjTp=Dv
150 | Nm=C2COM_Port
151 | H=12
152 | PrH=7
153 | ObjVer=1
154 | SlC=94
155 | DvF=Sl
156 | Ad=C
157 | mC=1
158 | C1=13
159 | ]
160 | [
161 | ObjTp=Dv
162 | Nm=C2 COM Two-way serial driver
163 | H=13
164 | PrH=12
165 | DvC=369
166 | ObjVer=1
167 | SlC=94
168 | Ad=C
169 | SmH=9
170 | CmH=3
171 | ]
172 | [
173 | ObjTp=Dv
174 | Nm=C2COM_Port
175 | H=14
176 | PrH=7
177 | ObjVer=1
178 | SlC=94
179 | DvF=Sl
180 | Ad=D
181 | mC=1
182 | C1=15
183 | ]
184 | [
185 | ObjTp=Dv
186 | Nm=C2 COM Two-way serial driver
187 | H=15
188 | PrH=14
189 | DvC=369
190 | ObjVer=1
191 | SlC=94
192 | Ad=D
193 | SmH=10
194 | CmH=4
195 | ]
196 | [
197 | ObjTp=Dv
198 | Nm=C2COM_Port
199 | H=16
200 | PrH=7
201 | ObjVer=1
202 | SlC=94
203 | DvF=Sl
204 | Ad=E
205 | mC=1
206 | C1=17
207 | ]
208 | [
209 | ObjTp=Dv
210 | Nm=C2 COM Two-way serial driver
211 | H=17
212 | PrH=16
213 | DvC=369
214 | ObjVer=1
215 | SlC=94
216 | Ad=E
217 | SmH=11
218 | CmH=5
219 | ]
220 | [
221 | ObjTp=Dv
222 | Nm=C2COM_Port
223 | H=18
224 | PrH=7
225 | ObjVer=1
226 | SlC=94
227 | DvF=Sl
228 | Ad=F
229 | mC=1
230 | C1=19
231 | ]
232 | [
233 | ObjTp=Dv
234 | Nm=C2 COM Two-way serial driver
235 | H=19
236 | PrH=18
237 | DvC=369
238 | ObjVer=1
239 | SlC=94
240 | Ad=F
241 | SmH=12
242 | CmH=6
243 | ]
244 | [
245 | ObjTp=Dv
246 | Nm=Fixed
247 | H=20
248 | PrH=2
249 | ObjVer=1
250 | SlC=2
251 | DvF=Sl
252 | Ad=05
253 | mC=1
254 | C1=21
255 | ]
256 | [
257 | ObjTp=Dv
258 | Nm=C2I-IR8
259 | H=21
260 | PrH=20
261 | DvC=366
262 | ObjVer=1
263 | SlC=2
264 | Ad=05
265 | SmH=13
266 | mC=8
267 | C1=22
268 | C2=23
269 | C3=24
270 | C4=25
271 | C5=26
272 | C6=27
273 | C7=28
274 | C8=29
275 | ]
276 | [
277 | ObjTp=Dv
278 | Nm=C2IR Port
279 | H=22.29
280 | PrH=21
281 | ObjVer=1
282 | SlC=95
283 | DvF=Sl
284 | SlF=Ex
285 | Ad=A,B,C,D,E,F,G,H
286 | ]
287 | [
288 | ObjTp=Dv
289 | Nm=Fixed
290 | H=30
291 | PrH=2
292 | ObjVer=1
293 | SlC=2
294 | DvF=Sl
295 | Ad=06
296 | mC=1
297 | C1=31
298 | ]
299 | [
300 | ObjTp=Dv
301 | Nm=C2I-IO8
302 | H=31
303 | PrH=30
304 | DvC=367
305 | ObjVer=1
306 | SlC=2
307 | Ad=06
308 | SmH=14
309 | mC=8
310 | C1=32
311 | C2=34
312 | C3=36
313 | C4=38
314 | C5=40
315 | C6=42
316 | C7=44
317 | C8=46
318 | ]
319 | [
320 | ObjTp=Dv
321 | Nm=Versiport
322 | H=32
323 | PrH=31
324 | ObjVer=1
325 | SlC=63
326 | DvF=Sl
327 | Ad=01
328 | mC=1
329 | C1=33
330 | ]
331 | [
332 | ObjTp=Dv
333 | Nm=DIO-Port
334 | H=33
335 | PrH=32
336 | DvC=125
337 | ObjVer=1
338 | SlC=63
339 | Ad=01
340 | ]
341 | [
342 | ObjTp=Dv
343 | Nm=Versiport
344 | H=34
345 | PrH=31
346 | ObjVer=1
347 | SlC=63
348 | DvF=Sl
349 | Ad=02
350 | mC=1
351 | C1=35
352 | ]
353 | [
354 | ObjTp=Dv
355 | Nm=DIO-Port
356 | H=35
357 | PrH=34
358 | DvC=125
359 | ObjVer=1
360 | SlC=63
361 | Ad=02
362 | ]
363 | [
364 | ObjTp=Dv
365 | Nm=Versiport
366 | H=36
367 | PrH=31
368 | ObjVer=1
369 | SlC=63
370 | DvF=Sl
371 | Ad=03
372 | mC=1
373 | C1=37
374 | ]
375 | [
376 | ObjTp=Dv
377 | Nm=DIO-Port
378 | H=37
379 | PrH=36
380 | DvC=125
381 | ObjVer=1
382 | SlC=63
383 | Ad=03
384 | ]
385 | [
386 | ObjTp=Dv
387 | Nm=Versiport
388 | H=38
389 | PrH=31
390 | ObjVer=1
391 | SlC=63
392 | DvF=Sl
393 | Ad=04
394 | mC=1
395 | C1=39
396 | ]
397 | [
398 | ObjTp=Dv
399 | Nm=DIO-Port
400 | H=39
401 | PrH=38
402 | DvC=125
403 | ObjVer=1
404 | SlC=63
405 | Ad=04
406 | ]
407 | [
408 | ObjTp=Dv
409 | Nm=Versiport
410 | H=40
411 | PrH=31
412 | ObjVer=1
413 | SlC=63
414 | DvF=Sl
415 | Ad=05
416 | mC=1
417 | C1=41
418 | ]
419 | [
420 | ObjTp=Dv
421 | Nm=DIO-Port
422 | H=41
423 | PrH=40
424 | DvC=125
425 | ObjVer=1
426 | SlC=63
427 | Ad=05
428 | ]
429 | [
430 | ObjTp=Dv
431 | Nm=Versiport
432 | H=42
433 | PrH=31
434 | ObjVer=1
435 | SlC=63
436 | DvF=Sl
437 | Ad=06
438 | mC=1
439 | C1=43
440 | ]
441 | [
442 | ObjTp=Dv
443 | Nm=DIO-Port
444 | H=43
445 | PrH=42
446 | DvC=125
447 | ObjVer=1
448 | SlC=63
449 | Ad=06
450 | ]
451 | [
452 | ObjTp=Dv
453 | Nm=Versiport
454 | H=44
455 | PrH=31
456 | ObjVer=1
457 | SlC=63
458 | DvF=Sl
459 | Ad=07
460 | mC=1
461 | C1=45
462 | ]
463 | [
464 | ObjTp=Dv
465 | Nm=DIO-Port
466 | H=45
467 | PrH=44
468 | DvC=125
469 | ObjVer=1
470 | SlC=63
471 | Ad=07
472 | ]
473 | [
474 | ObjTp=Dv
475 | Nm=Versiport
476 | H=46
477 | PrH=31
478 | ObjVer=1
479 | SlC=63
480 | DvF=Sl
481 | Ad=08
482 | mC=1
483 | C1=47
484 | ]
485 | [
486 | ObjTp=Dv
487 | Nm=DIO-Port
488 | H=47
489 | PrH=46
490 | DvC=125
491 | ObjVer=1
492 | SlC=63
493 | Ad=08
494 | ]
495 | [
496 | ObjTp=Dv
497 | Nm=Fixed
498 | H=48
499 | PrH=2
500 | ObjVer=1
501 | SlC=2
502 | DvF=Sl
503 | Ad=07
504 | mC=1
505 | C1=49
506 | ]
507 | [
508 | ObjTp=Dv
509 | Nm=C2I-RY8
510 | H=49
511 | PrH=48
512 | DvC=368
513 | ObjVer=1
514 | SlC=2
515 | Ad=07
516 | SmH=15
517 | mC=8
518 | C1=50
519 | C2=52
520 | C3=54
521 | C4=56
522 | C5=58
523 | C6=60
524 | C7=62
525 | C8=64
526 | ]
527 | [
528 | ObjTp=Dv
529 | Nm=LoPwrRlySlot
530 | H=50
531 | PrH=49
532 | ObjVer=1
533 | SlC=9
534 | DvF=Sl
535 | Ad=01
536 | mC=1
537 | C1=51
538 | ]
539 | [
540 | ObjTp=Dv
541 | Nm=Relay
542 | H=51
543 | PrH=50
544 | DvC=7
545 | ObjVer=1
546 | SlC=9
547 | Ad=01
548 | ]
549 | [
550 | ObjTp=Dv
551 | Nm=LoPwrRlySlot
552 | H=52
553 | PrH=49
554 | ObjVer=1
555 | SlC=9
556 | DvF=Sl
557 | Ad=02
558 | mC=1
559 | C1=53
560 | ]
561 | [
562 | ObjTp=Dv
563 | Nm=Relay
564 | H=53
565 | PrH=52
566 | DvC=7
567 | ObjVer=1
568 | SlC=9
569 | Ad=02
570 | ]
571 | [
572 | ObjTp=Dv
573 | Nm=LoPwrRlySlot
574 | H=54
575 | PrH=49
576 | ObjVer=1
577 | SlC=9
578 | DvF=Sl
579 | Ad=03
580 | mC=1
581 | C1=55
582 | ]
583 | [
584 | ObjTp=Dv
585 | Nm=Relay
586 | H=55
587 | PrH=54
588 | DvC=7
589 | ObjVer=1
590 | SlC=9
591 | Ad=03
592 | ]
593 | [
594 | ObjTp=Dv
595 | Nm=LoPwrRlySlot
596 | H=56
597 | PrH=49
598 | ObjVer=1
599 | SlC=9
600 | DvF=Sl
601 | Ad=04
602 | mC=1
603 | C1=57
604 | ]
605 | [
606 | ObjTp=Dv
607 | Nm=Relay
608 | H=57
609 | PrH=56
610 | DvC=7
611 | ObjVer=1
612 | SlC=9
613 | Ad=04
614 | ]
615 | [
616 | ObjTp=Dv
617 | Nm=LoPwrRlySlot
618 | H=58
619 | PrH=49
620 | ObjVer=1
621 | SlC=9
622 | DvF=Sl
623 | Ad=05
624 | mC=1
625 | C1=59
626 | ]
627 | [
628 | ObjTp=Dv
629 | Nm=Relay
630 | H=59
631 | PrH=58
632 | DvC=7
633 | ObjVer=1
634 | SlC=9
635 | Ad=05
636 | ]
637 | [
638 | ObjTp=Dv
639 | Nm=LoPwrRlySlot
640 | H=60
641 | PrH=49
642 | ObjVer=1
643 | SlC=9
644 | DvF=Sl
645 | Ad=06
646 | mC=1
647 | C1=61
648 | ]
649 | [
650 | ObjTp=Dv
651 | Nm=Relay
652 | H=61
653 | PrH=60
654 | DvC=7
655 | ObjVer=1
656 | SlC=9
657 | Ad=06
658 | ]
659 | [
660 | ObjTp=Dv
661 | Nm=LoPwrRlySlot
662 | H=62
663 | PrH=49
664 | ObjVer=1
665 | SlC=9
666 | DvF=Sl
667 | Ad=07
668 | mC=1
669 | C1=63
670 | ]
671 | [
672 | ObjTp=Dv
673 | Nm=Relay
674 | H=63
675 | PrH=62
676 | DvC=7
677 | ObjVer=1
678 | SlC=9
679 | Ad=07
680 | ]
681 | [
682 | ObjTp=Dv
683 | Nm=LoPwrRlySlot
684 | H=64
685 | PrH=49
686 | ObjVer=1
687 | SlC=9
688 | DvF=Sl
689 | Ad=08
690 | mC=1
691 | C1=65
692 | ]
693 | [
694 | ObjTp=Dv
695 | Nm=Relay
696 | H=65
697 | PrH=64
698 | DvC=7
699 | ObjVer=1
700 | SlC=9
701 | Ad=08
702 | ]
703 | [
704 | ObjTp=Dv
705 | Nm=C2Z Card Slot
706 | H=66
707 | PrH=2
708 | ObjVer=1
709 | SlC=97
710 | DvF=Sl
711 | Ad=08
712 | mC=1
713 | C1=325
714 | ]
715 | [
716 | ObjTp=Dv
717 | Nm=Fixed
718 | H=67
719 | PrH=2
720 | ObjVer=1
721 | SlC=2
722 | DvF=Sl
723 | Ad=09
724 | mC=1
725 | C1=68
726 | ]
727 | [
728 | ObjTp=Dv
729 | Nm=C2Net-Device
730 | H=68
731 | PrH=67
732 | DvC=371
733 | ObjVer=1
734 | SlC=2
735 | Ad=09
736 | SmH=16
737 | mC=254
738 | C1=69
739 | C2=70
740 | C3=71
741 | C4=72
742 | C5=73
743 | C6=74
744 | C7=75
745 | C8=76
746 | C9=77
747 | C10=78
748 | C11=79
749 | C12=80
750 | C13=81
751 | C14=82
752 | C15=83
753 | C16=84
754 | C17=85
755 | C18=86
756 | C19=87
757 | C20=88
758 | C21=89
759 | C22=90
760 | C23=91
761 | C24=92
762 | C25=93
763 | C26=94
764 | C27=95
765 | C28=96
766 | C29=97
767 | C30=98
768 | C31=99
769 | C32=100
770 | C33=101
771 | C34=102
772 | C35=103
773 | C36=104
774 | C37=105
775 | C38=106
776 | C39=107
777 | C40=108
778 | C41=109
779 | C42=110
780 | C43=111
781 | C44=112
782 | C45=113
783 | C46=114
784 | C47=115
785 | C48=116
786 | C49=117
787 | C50=118
788 | C51=119
789 | C52=120
790 | C53=121
791 | C54=122
792 | C55=123
793 | C56=124
794 | C57=125
795 | C58=126
796 | C59=127
797 | C60=128
798 | C61=129
799 | C62=130
800 | C63=131
801 | C64=132
802 | C65=133
803 | C66=134
804 | C67=135
805 | C68=136
806 | C69=137
807 | C70=138
808 | C71=139
809 | C72=140
810 | C73=141
811 | C74=142
812 | C75=143
813 | C76=144
814 | C77=145
815 | C78=146
816 | C79=147
817 | C80=148
818 | C81=149
819 | C82=150
820 | C83=151
821 | C84=152
822 | C85=153
823 | C86=154
824 | C87=155
825 | C88=156
826 | C89=157
827 | C90=158
828 | C91=159
829 | C92=160
830 | C93=161
831 | C94=162
832 | C95=163
833 | C96=164
834 | C97=165
835 | C98=166
836 | C99=167
837 | C100=168
838 | C101=169
839 | C102=170
840 | C103=171
841 | C104=172
842 | C105=173
843 | C106=174
844 | C107=175
845 | C108=176
846 | C109=177
847 | C110=178
848 | C111=179
849 | C112=180
850 | C113=181
851 | C114=182
852 | C115=183
853 | C116=184
854 | C117=185
855 | C118=186
856 | C119=187
857 | C120=188
858 | C121=189
859 | C122=190
860 | C123=191
861 | C124=192
862 | C125=193
863 | C126=194
864 | C127=195
865 | C128=196
866 | C129=197
867 | C130=198
868 | C131=199
869 | C132=200
870 | C133=201
871 | C134=202
872 | C135=203
873 | C136=204
874 | C137=205
875 | C138=206
876 | C139=207
877 | C140=208
878 | C141=209
879 | C142=210
880 | C143=211
881 | C144=212
882 | C145=213
883 | C146=214
884 | C147=215
885 | C148=216
886 | C149=217
887 | C150=218
888 | C151=219
889 | C152=220
890 | C153=221
891 | C154=222
892 | C155=223
893 | C156=224
894 | C157=225
895 | C158=226
896 | C159=227
897 | C160=228
898 | C161=229
899 | C162=230
900 | C163=231
901 | C164=232
902 | C165=233
903 | C166=234
904 | C167=235
905 | C168=236
906 | C169=237
907 | C170=238
908 | C171=239
909 | C172=240
910 | C173=241
911 | C174=242
912 | C175=243
913 | C176=244
914 | C177=245
915 | C178=246
916 | C179=247
917 | C180=248
918 | C181=249
919 | C182=250
920 | C183=251
921 | C184=252
922 | C185=253
923 | C186=254
924 | C187=255
925 | C188=256
926 | C189=257
927 | C190=258
928 | C191=259
929 | C192=260
930 | C193=261
931 | C194=262
932 | C195=263
933 | C196=264
934 | C197=265
935 | C198=266
936 | C199=267
937 | C200=268
938 | C201=269
939 | C202=270
940 | C203=271
941 | C204=272
942 | C205=273
943 | C206=274
944 | C207=275
945 | C208=276
946 | C209=277
947 | C210=278
948 | C211=279
949 | C212=280
950 | C213=281
951 | C214=282
952 | C215=283
953 | C216=284
954 | C217=285
955 | C218=286
956 | C219=287
957 | C220=288
958 | C221=289
959 | C222=290
960 | C223=291
961 | C224=292
962 | C225=293
963 | C226=294
964 | C227=295
965 | C228=296
966 | C229=297
967 | C230=298
968 | C231=299
969 | C232=300
970 | C233=301
971 | C234=302
972 | C235=303
973 | C236=304
974 | C237=305
975 | C238=306
976 | C239=307
977 | C240=308
978 | C241=309
979 | C242=310
980 | C243=311
981 | C244=312
982 | C245=313
983 | C246=314
984 | C247=315
985 | C248=316
986 | C249=317
987 | C250=318
988 | C251=319
989 | C252=320
990 | C253=321
991 | C254=322
992 | ]
993 | [
994 | ObjTp=Dv
995 | Nm=PowerSlot
996 | H=69
997 | PrH=68
998 | ObjVer=1
999 | SlC=30
1000 | DvF=Sl
1001 | SlF=Ex
1002 | Ad=None
1003 | ]
1004 | [
1005 | ObjTp=Dv
1006 | Nm=Not_Used
1007 | H=70
1008 | PrH=68
1009 | ObjVer=1
1010 | SlC=17
1011 | DvF=Sl
1012 | Ad=02
1013 | ]
1014 | [
1015 | ObjTp=Dv
1016 | Nm=C2Cresnet
1017 | H=71.322
1018 | PrH=68
1019 | ObjVer=1
1020 | SlC=96
1021 | DvF=Sl
1022 | Ad=03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F,30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F,40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F,50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F,60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F,70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D,8E,8F,90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF,D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,DB,DC,DD,DE,DF,E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,EA,EB,EC,ED,EE,EF,F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,FA,FB,FC,FD,FE
1023 | ]
1024 | [
1025 | ObjTp=Dv
1026 | Nm=Fixed
1027 | H=323
1028 | PrH=2
1029 | ObjVer=1
1030 | SlC=2
1031 | DvF=Sl
1032 | Ad=10
1033 | mC=1
1034 | C1=324
1035 | ]
1036 | [
1037 | ObjTp=Dv
1038 | Nm=C2I-PRO2-LCDPANEL
1039 | H=324
1040 | PrH=323
1041 | DvC=374
1042 | ObjVer=1
1043 | SlC=2
1044 | Ad=10
1045 | SmH=17
1046 | ]
1047 | [
1048 | ObjTp=Dv
1049 | Nm=C2ENET-1
1050 | H=325
1051 | PrH=66
1052 | DvC=372
1053 | ObjVer=1
1054 | Ad=08
1055 | SmH=18
1056 | DbH=2
1057 | mC=254
1058 | C1=326
1059 | C2=327
1060 | C3=328
1061 | C4=329
1062 | C5=330
1063 | C6=331
1064 | C7=332
1065 | C8=333
1066 | C9=334
1067 | C10=335
1068 | C11=336
1069 | C12=337
1070 | C13=338
1071 | C14=339
1072 | C15=340
1073 | C16=341
1074 | C17=342
1075 | C18=343
1076 | C19=344
1077 | C20=345
1078 | C21=346
1079 | C22=347
1080 | C23=348
1081 | C24=349
1082 | C25=350
1083 | C26=351
1084 | C27=352
1085 | C28=353
1086 | C29=354
1087 | C30=355
1088 | C31=356
1089 | C32=357
1090 | C33=358
1091 | C34=359
1092 | C35=360
1093 | C36=361
1094 | C37=362
1095 | C38=363
1096 | C39=364
1097 | C40=365
1098 | C41=366
1099 | C42=367
1100 | C43=368
1101 | C44=369
1102 | C45=370
1103 | C46=371
1104 | C47=372
1105 | C48=373
1106 | C49=374
1107 | C50=375
1108 | C51=376
1109 | C52=377
1110 | C53=378
1111 | C54=379
1112 | C55=380
1113 | C56=381
1114 | C57=382
1115 | C58=383
1116 | C59=384
1117 | C60=385
1118 | C61=386
1119 | C62=387
1120 | C63=388
1121 | C64=389
1122 | C65=390
1123 | C66=391
1124 | C67=392
1125 | C68=393
1126 | C69=394
1127 | C70=395
1128 | C71=396
1129 | C72=397
1130 | C73=398
1131 | C74=399
1132 | C75=400
1133 | C76=401
1134 | C77=402
1135 | C78=403
1136 | C79=404
1137 | C80=405
1138 | C81=406
1139 | C82=407
1140 | C83=408
1141 | C84=409
1142 | C85=410
1143 | C86=411
1144 | C87=412
1145 | C88=413
1146 | C89=414
1147 | C90=415
1148 | C91=416
1149 | C92=417
1150 | C93=418
1151 | C94=419
1152 | C95=420
1153 | C96=421
1154 | C97=422
1155 | C98=423
1156 | C99=424
1157 | C100=425
1158 | C101=426
1159 | C102=427
1160 | C103=428
1161 | C104=429
1162 | C105=430
1163 | C106=431
1164 | C107=432
1165 | C108=433
1166 | C109=434
1167 | C110=435
1168 | C111=436
1169 | C112=437
1170 | C113=438
1171 | C114=439
1172 | C115=440
1173 | C116=441
1174 | C117=442
1175 | C118=443
1176 | C119=444
1177 | C120=445
1178 | C121=446
1179 | C122=447
1180 | C123=448
1181 | C124=449
1182 | C125=450
1183 | C126=451
1184 | C127=452
1185 | C128=453
1186 | C129=454
1187 | C130=455
1188 | C131=456
1189 | C132=457
1190 | C133=458
1191 | C134=459
1192 | C135=460
1193 | C136=461
1194 | C137=462
1195 | C138=463
1196 | C139=464
1197 | C140=465
1198 | C141=466
1199 | C142=467
1200 | C143=468
1201 | C144=469
1202 | C145=470
1203 | C146=471
1204 | C147=472
1205 | C148=473
1206 | C149=474
1207 | C150=475
1208 | C151=476
1209 | C152=477
1210 | C153=478
1211 | C154=479
1212 | C155=480
1213 | C156=481
1214 | C157=482
1215 | C158=483
1216 | C159=484
1217 | C160=485
1218 | C161=486
1219 | C162=487
1220 | C163=488
1221 | C164=489
1222 | C165=490
1223 | C166=491
1224 | C167=492
1225 | C168=493
1226 | C169=494
1227 | C170=495
1228 | C171=496
1229 | C172=497
1230 | C173=498
1231 | C174=499
1232 | C175=500
1233 | C176=501
1234 | C177=502
1235 | C178=503
1236 | C179=504
1237 | C180=505
1238 | C181=506
1239 | C182=507
1240 | C183=508
1241 | C184=509
1242 | C185=510
1243 | C186=511
1244 | C187=512
1245 | C188=513
1246 | C189=514
1247 | C190=515
1248 | C191=516
1249 | C192=517
1250 | C193=518
1251 | C194=519
1252 | C195=520
1253 | C196=521
1254 | C197=522
1255 | C198=523
1256 | C199=524
1257 | C200=525
1258 | C201=526
1259 | C202=527
1260 | C203=528
1261 | C204=529
1262 | C205=530
1263 | C206=531
1264 | C207=532
1265 | C208=533
1266 | C209=534
1267 | C210=535
1268 | C211=536
1269 | C212=537
1270 | C213=538
1271 | C214=539
1272 | C215=540
1273 | C216=541
1274 | C217=542
1275 | C218=543
1276 | C219=544
1277 | C220=545
1278 | C221=546
1279 | C222=547
1280 | C223=548
1281 | C224=549
1282 | C225=550
1283 | C226=551
1284 | C227=552
1285 | C228=553
1286 | C229=554
1287 | C230=555
1288 | C231=556
1289 | C232=557
1290 | C233=558
1291 | C234=559
1292 | C235=560
1293 | C236=561
1294 | C237=562
1295 | C238=563
1296 | C239=564
1297 | C240=565
1298 | C241=566
1299 | C242=567
1300 | C243=568
1301 | C244=569
1302 | C245=570
1303 | C246=571
1304 | C247=572
1305 | C248=573
1306 | C249=574
1307 | C250=575
1308 | C251=576
1309 | C252=577
1310 | C253=578
1311 | C254=579
1312 | ]
1313 | [
1314 | ObjTp=Dv
1315 | Nm=Not_Used
1316 | H=326.327
1317 | PrH=325
1318 | ObjVer=1
1319 | SlC=17
1320 | DvF=Sl
1321 | Ad=01,02
1322 | ]
1323 | [
1324 | ObjTp=Dv
1325 | Nm=C2ZEthernet
1326 | H=328
1327 | PrH=325
1328 | ObjVer=1
1329 | SlC=98
1330 | DvF=Sl
1331 | Ad=03
1332 | mC=1
1333 | C1=580
1334 | ]
1335 | [
1336 | ObjTp=Dv
1337 | Nm=C2ZEthernet
1338 | H=329.579
1339 | PrH=325
1340 | ObjVer=1
1341 | SlC=98
1342 | DvF=Sl
1343 | Ad=04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20,21,22,23,24,25,26,27,28,29,2A,2B,2C,2D,2E,2F,30,31,32,33,34,35,36,37,38,39,3A,3B,3C,3D,3E,3F,40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F,50,51,52,53,54,55,56,57,58,59,5A,5B,5C,5D,5E,5F,60,61,62,63,64,65,66,67,68,69,6A,6B,6C,6D,6E,6F,70,71,72,73,74,75,76,77,78,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8B,8C,8D,8E,8F,90,91,92,93,94,95,96,97,98,99,9A,9B,9C,9D,9E,9F,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,CA,CB,CC,CD,CE,CF,D0,D1,D2,D3,D4,D5,D6,D7,D8,D9,DA,DB,DC,DD,DE,DF,E0,E1,E2,E3,E4,E5,E6,E7,E8,E9,EA,EB,EC,ED,EE,EF,F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,FA,FB,FC,FD,FE
1344 | ]
1345 | [
1346 | ObjTp=Dv
1347 | Nm=XPanel
1348 | H=580
1349 | PrH=328
1350 | DvC=602
1351 | ObjVer=1
1352 | Ad=03
1353 | SmH=19
1354 | DbH=3
1355 | EtH=1
1356 | ]
1357 | [
1358 | ObjTp=Cm
1359 | H=1
1360 | DvH=9
1361 | Ptl=(RS232)
1362 | Tis=1
1363 | BRt=9600
1364 | Pty=N
1365 | SBt=1
1366 | DBt=8
1367 | hHs=(None)
1368 | sHs=(None)
1369 | ]
1370 | [
1371 | ObjTp=Cm
1372 | H=2
1373 | DvH=11
1374 | Ptl=(RS232)
1375 | Tis=1
1376 | BRt=9600
1377 | Pty=N
1378 | SBt=1
1379 | DBt=8
1380 | hHs=(None)
1381 | sHs=(None)
1382 | ]
1383 | [
1384 | ObjTp=Cm
1385 | H=3
1386 | DvH=13
1387 | Ptl=(RS232)
1388 | Tis=1
1389 | BRt=9600
1390 | Pty=N
1391 | SBt=1
1392 | DBt=8
1393 | hHs=(None)
1394 | sHs=(None)
1395 | ]
1396 | [
1397 | ObjTp=Cm
1398 | H=4
1399 | DvH=15
1400 | Ptl=(RS232)
1401 | Tis=1
1402 | BRt=9600
1403 | Pty=N
1404 | SBt=1
1405 | DBt=8
1406 | hHs=(None)
1407 | sHs=(None)
1408 | ]
1409 | [
1410 | ObjTp=Cm
1411 | H=5
1412 | DvH=17
1413 | Ptl=(RS232)
1414 | Tis=1
1415 | BRt=9600
1416 | Pty=N
1417 | SBt=1
1418 | DBt=8
1419 | hHs=(None)
1420 | sHs=(None)
1421 | ]
1422 | [
1423 | ObjTp=Cm
1424 | H=6
1425 | DvH=19
1426 | Ptl=(RS232)
1427 | Tis=1
1428 | BRt=9600
1429 | Pty=N
1430 | SBt=1
1431 | DBt=8
1432 | hHs=(None)
1433 | sHs=(None)
1434 | ]
1435 | [
1436 | ObjTp=Db
1437 | H=1
1438 | DvH=2
1439 | Whc=3
1440 | Mnf=Crestron
1441 | Mdl=PRO2
1442 | Tpe=2-Series Control Processor
1443 | ]
1444 | [
1445 | ObjTp=Db
1446 | H=2
1447 | DvH=325
1448 | Whc=3
1449 | Mnf=Crestron
1450 | Mdl=C2ENET-1
1451 | ]
1452 | [
1453 | ObjTp=Db
1454 | H=3
1455 | DvH=580
1456 | Whc=3
1457 | Mnf=Crestron
1458 | Mdl=XPanel
1459 | ]
1460 | [
1461 | ObjTp=FP
1462 | ]
1463 | [
1464 | ObjTp=Bk
1465 | Nm1=\
1466 | Sx1=0
1467 | Sy1=0
1468 | Mx1=0
1469 | ]
1470 | [
1471 | ObjTp=Et
1472 | H=1
1473 | DvH=580
1474 | IPM=255.255.255.0
1475 | IPA=127.0.0.1
1476 | ]
1477 | [
1478 | ObjTp=Sm
1479 | H=1
1480 | SmC=157
1481 | Nm=Central Control Modules
1482 | ObjVer=1
1483 | CF=2
1484 | n1I=1
1485 | n1O=1
1486 | mC=7
1487 | C1=6
1488 | C2=13
1489 | C3=14
1490 | C4=15
1491 | C5=18
1492 | C6=16
1493 | C7=17
1494 | mI=1
1495 | mO=1
1496 | tO=1
1497 | mP=1
1498 | P1=
1499 | ]
1500 | [
1501 | ObjTp=Sm
1502 | H=2
1503 | SmC=157
1504 | Nm=Network Modules
1505 | ObjVer=1
1506 | CF=2
1507 | n1I=1
1508 | n1O=1
1509 | mI=1
1510 | mO=1
1511 | tO=1
1512 | mP=1
1513 | P1=
1514 | ]
1515 | [
1516 | ObjTp=Sm
1517 | H=3
1518 | SmC=157
1519 | Nm=Ethernet
1520 | ObjVer=1
1521 | CF=2
1522 | n1I=1
1523 | n1O=1
1524 | mI=1
1525 | mO=1
1526 | tO=1
1527 | mP=1
1528 | P1=
1529 | ]
1530 | [
1531 | ObjTp=Sm
1532 | H=4
1533 | SmC=156
1534 | Nm=Logic
1535 | ObjVer=1
1536 | CF=2
1537 | mC=4
1538 | C1=24
1539 | C2=21
1540 | C3=22
1541 | C4=23
1542 | ]
1543 | [
1544 | ObjTp=Sm
1545 | H=5
1546 | SmC=157
1547 | Nm=DefineArguments
1548 | ObjVer=1
1549 | CF=2
1550 | n1I=1
1551 | n1O=1
1552 | mI=1
1553 | mO=1
1554 | tO=1
1555 | mP=1
1556 | P1=
1557 | ]
1558 | [
1559 | ObjTp=Sm
1560 | H=6
1561 | SmC=407
1562 | Nm=C2I-COM6
1563 | ObjVer=1
1564 | DvH=7
1565 | PrH=1
1566 | CF=2
1567 | Cmn1=C2I-COM6
1568 | mC=6
1569 | C1=7
1570 | C2=8
1571 | C3=9
1572 | C4=10
1573 | C5=11
1574 | C6=12
1575 | ]
1576 | [
1577 | ObjTp=Sm
1578 | H=7
1579 | SmC=402
1580 | Nm=C2 COM Two-way serial driver
1581 | ObjVer=1
1582 | DvH=9
1583 | PrH=6
1584 | CF=2
1585 | n1I=5
1586 | n1O=3
1587 | Cmn1=C2 COM Two-way serial driver
1588 | mI=5
1589 | mO=3
1590 | tO=3
1591 | mP=3
1592 | P1=
1593 | P2=
1594 | P3=
1595 | ]
1596 | [
1597 | ObjTp=Sm
1598 | H=8
1599 | SmC=402
1600 | Nm=C2 COM Two-way serial driver
1601 | ObjVer=1
1602 | DvH=11
1603 | PrH=6
1604 | CF=2
1605 | n1I=5
1606 | n1O=3
1607 | Cmn1=C2 COM Two-way serial driver
1608 | mI=5
1609 | mO=3
1610 | tO=3
1611 | mP=3
1612 | P1=
1613 | P2=
1614 | P3=
1615 | ]
1616 | [
1617 | ObjTp=Sm
1618 | H=9
1619 | SmC=402
1620 | Nm=C2 COM Two-way serial driver
1621 | ObjVer=1
1622 | DvH=13
1623 | PrH=6
1624 | CF=2
1625 | n1I=5
1626 | n1O=3
1627 | Cmn1=C2 COM Two-way serial driver
1628 | mI=5
1629 | mO=3
1630 | tO=3
1631 | mP=3
1632 | P1=
1633 | P2=
1634 | P3=
1635 | ]
1636 | [
1637 | ObjTp=Sm
1638 | H=10
1639 | SmC=402
1640 | Nm=C2 COM Two-way serial driver
1641 | ObjVer=1
1642 | DvH=15
1643 | PrH=6
1644 | CF=2
1645 | n1I=5
1646 | n1O=3
1647 | Cmn1=C2 COM Two-way serial driver
1648 | mI=5
1649 | mO=3
1650 | tO=3
1651 | mP=3
1652 | P1=
1653 | P2=
1654 | P3=
1655 | ]
1656 | [
1657 | ObjTp=Sm
1658 | H=11
1659 | SmC=402
1660 | Nm=C2 COM Two-way serial driver
1661 | ObjVer=1
1662 | DvH=17
1663 | PrH=6
1664 | CF=2
1665 | n1I=5
1666 | n1O=3
1667 | Cmn1=C2 COM Two-way serial driver
1668 | mI=5
1669 | mO=3
1670 | tO=3
1671 | mP=3
1672 | P1=
1673 | P2=
1674 | P3=
1675 | ]
1676 | [
1677 | ObjTp=Sm
1678 | H=12
1679 | SmC=402
1680 | Nm=C2 COM Two-way serial driver
1681 | ObjVer=1
1682 | DvH=19
1683 | PrH=6
1684 | CF=2
1685 | n1I=5
1686 | n1O=3
1687 | Cmn1=C2 COM Two-way serial driver
1688 | mI=5
1689 | mO=3
1690 | tO=3
1691 | mP=3
1692 | P1=
1693 | P2=
1694 | P3=
1695 | ]
1696 | [
1697 | ObjTp=Sm
1698 | H=13
1699 | SmC=403
1700 | Nm=C2I-IR8
1701 | ObjVer=1
1702 | DvH=21
1703 | PrH=1
1704 | CF=2
1705 | Cmn1=C2I-IR8
1706 | ]
1707 | [
1708 | ObjTp=Sm
1709 | H=14
1710 | SmC=405
1711 | Nm=C2I-IO8
1712 | ObjVer=1
1713 | DvH=31
1714 | PrH=1
1715 | CF=2
1716 | n1I=42
1717 | n1O=8
1718 | Cmn1=C2I-IO8
1719 | mI=42
1720 | mO=8
1721 | tO=8
1722 | ]
1723 | [
1724 | ObjTp=Sm
1725 | H=15
1726 | SmC=406
1727 | Nm=C2I-RY8
1728 | ObjVer=1
1729 | DvH=49
1730 | PrH=1
1731 | CF=2
1732 | n1I=8
1733 | Cmn1=C2I-RY8
1734 | mI=8
1735 | ]
1736 | [
1737 | ObjTp=Sm
1738 | H=16
1739 | SmC=414
1740 | Nm=C2Net-Device
1741 | ObjVer=1
1742 | DvH=68
1743 | PrH=1
1744 | CF=2
1745 | Cmn1=C2Net-Device
1746 | ]
1747 | [
1748 | ObjTp=Sm
1749 | H=17
1750 | SmC=420
1751 | Nm=C2I-PRO2-LCDPANEL
1752 | ObjVer=1
1753 | DvH=324
1754 | PrH=1
1755 | CF=2
1756 | n1I=32
1757 | n2I=32
1758 | n1O=32
1759 | Cmn1=C2I-PRO2-LCDPANEL
1760 | mI=96
1761 | mO=32
1762 | tO=32
1763 | ]
1764 | [
1765 | ObjTp=Sm
1766 | H=18
1767 | SmC=435
1768 | Nm=C2ENET-1
1769 | ObjVer=1
1770 | DvH=325
1771 | PrH=1
1772 | CF=2
1773 | Cmn1=C2ENET-1
1774 | mC=1
1775 | C1=19
1776 | ]
1777 | [
1778 | ObjTp=Sm
1779 | H=19
1780 | SmC=611
1781 | Nm=XPanel
1782 | ObjVer=1
1783 | DvH=580
1784 | PrH=18
1785 | CF=2
1786 | n1I=256
1787 | n2I=256
1788 | n1O=256
1789 | Cmn1=XPanel
1790 | mC=1
1791 | C1=20
1792 | mI=768
1793 | I1=4
1794 | I100=8
1795 | I255=7
1796 | I257=10
1797 | I356=14
1798 | I511=13
1799 | I513=19
1800 | I612=6
1801 | I767=24
1802 | mO=512
1803 | tO=544
1804 | O1=5
1805 | O100=9
1806 | O255=23
1807 | O257=11
1808 | O356=15
1809 | O511=12
1810 | O514=18
1811 | ]
1812 | [
1813 | ObjTp=Sm
1814 | H=20
1815 | SmC=633
1816 | ObjVer=1
1817 | PrH=19
1818 | CF=2
1819 | n1I=2
1820 | n1O=1
1821 | mI=2
1822 | I2=20
1823 | mO=1
1824 | tO=1
1825 | O1=21
1826 | ]
1827 | [
1828 | ObjTp=Sm
1829 | H=21
1830 | SmC=20
1831 | ObjVer=1
1832 | PrH=4
1833 | CF=2
1834 | n1I=5
1835 | n1O=4
1836 | mI=5
1837 | I1=2
1838 | I2=21
1839 | I3=5
1840 | I4=9
1841 | I5=23
1842 | mO=4
1843 | tO=4
1844 | O1=1
1845 | O2=4
1846 | O3=8
1847 | O4=7
1848 | ]
1849 | [
1850 | ObjTp=Sm
1851 | H=22
1852 | SmC=46
1853 | ObjVer=1
1854 | PrH=4
1855 | CF=2
1856 | n1I=8
1857 | n1O=7
1858 | mI=8
1859 | I1=2
1860 | I2=11
1861 | I3=15
1862 | I4=12
1863 | I5=1
1864 | I6=1
1865 | I7=1
1866 | I8=18
1867 | mO=7
1868 | tO=7
1869 | O1=10
1870 | O2=14
1871 | O3=13
1872 | O4=19
1873 | O5=6
1874 | O6=24
1875 | O7=19
1876 | ]
1877 | [
1878 | ObjTp=Sm
1879 | H=23
1880 | SmC=858
1881 | ObjVer=1
1882 | PrH=4
1883 | CF=2
1884 | n1I=4
1885 | mI=4
1886 | I1=18
1887 | I2=19
1888 | I3=6
1889 | I4=24
1890 | mP=1
1891 | P1=255d
1892 | ]
1893 | [
1894 | ObjTp=Sm
1895 | H=24
1896 | SmC=43
1897 | ObjVer=1
1898 | PrH=4
1899 | CF=2
1900 | n1O=1
1901 | mO=1
1902 | tO=1
1903 | mP=1
1904 | P1=1d
1905 | ]
1906 | [
1907 | ObjTp=Sg
1908 | H=4
1909 | Nm=fb1
1910 | ]
1911 | [
1912 | ObjTp=Sg
1913 | H=5
1914 | Nm=press1
1915 | ]
1916 | [
1917 | ObjTp=Sg
1918 | H=6
1919 | Nm=text-o100
1920 | SgTp=4
1921 | ]
1922 | [
1923 | ObjTp=Sg
1924 | H=7
1925 | Nm=fb255
1926 | ]
1927 | [
1928 | ObjTp=Sg
1929 | H=8
1930 | Nm=fb100
1931 | ]
1932 | [
1933 | ObjTp=Sg
1934 | H=9
1935 | Nm=press100
1936 | ]
1937 | [
1938 | ObjTp=Sg
1939 | H=10
1940 | Nm=an_fb1
1941 | SgTp=2
1942 | ]
1943 | [
1944 | ObjTp=Sg
1945 | H=11
1946 | Nm=an_act1
1947 | SgTp=2
1948 | ]
1949 | [
1950 | ObjTp=Sg
1951 | H=12
1952 | Nm=an_act255
1953 | SgTp=2
1954 | ]
1955 | [
1956 | ObjTp=Sg
1957 | H=13
1958 | Nm=an_fb255
1959 | SgTp=2
1960 | ]
1961 | [
1962 | ObjTp=Sg
1963 | H=14
1964 | Nm=an_fb100
1965 | SgTp=2
1966 | ]
1967 | [
1968 | ObjTp=Sg
1969 | H=15
1970 | Nm=an_act100
1971 | SgTp=2
1972 | ]
1973 | [
1974 | ObjTp=Sg
1975 | H=18
1976 | Nm=text-i2
1977 | SgTp=4
1978 | ]
1979 | [
1980 | ObjTp=Sg
1981 | H=19
1982 | Nm=text-o1
1983 | SgTp=4
1984 | ]
1985 | [
1986 | ObjTp=Sg
1987 | H=20
1988 | Nm=//__digital_reserved__
1989 | ]
1990 | [
1991 | ObjTp=Sg
1992 | H=21
1993 | Nm=iPad_Offline_fb
1994 | ]
1995 | [
1996 | ObjTp=Sg
1997 | H=23
1998 | Nm=press255
1999 | ]
2000 | [
2001 | ObjTp=Sg
2002 | H=24
2003 | Nm=text-o255
2004 | SgTp=4
2005 | ]
2006 |
--------------------------------------------------------------------------------
/SIMPL/CIPv1.0.spz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CommandFusion/CIP/9b8048dd9bc5d17f88f8a243b8f80d4fbea1fcd1/SIMPL/CIPv1.0.spz
--------------------------------------------------------------------------------