aboutsummaryrefslogtreecommitdiff
path: root/xbee
diff options
context:
space:
mode:
authorMartin Peach <mrpeach@users.sourceforge.net>2013-03-04 16:47:18 +0000
committerMartin Peach <mrpeach@users.sourceforge.net>2013-03-04 16:47:18 +0000
commit04c540114e8bca1ba04c2ca5f284a4cd8872fc5e (patch)
treea6e8b5be0775cf4327954315428456c7f15d2169 /xbee
parentc52893992c436435f21fa6e2abe269c974f491dc (diff)
AT and RAT messages can have parameters greater than 255.
svn path=/trunk/externals/mrpeach/; revision=17058
Diffstat (limited to 'xbee')
-rw-r--r--xbee/packxbee.c50
-rw-r--r--xbee/xbeeio.pd236
2 files changed, 162 insertions, 124 deletions
diff --git a/xbee/packxbee.c b/xbee/packxbee.c
index 33a0201..23c0343 100644
--- a/xbee/packxbee.c
+++ b/xbee/packxbee.c
@@ -445,9 +445,26 @@ static void packxbee_pack_remote_frame(t_packxbee *x, t_symbol *s, int argc, t_a
if (argv[4].a_type == A_SYMBOL)
{
if (x->x_verbosity > 0) post("packxbee_pack_remote_frame symbol parameter %s", argv[4].a_w.w_symbol->s_name);
+
if (('0' == argv[4].a_w.w_symbol->s_name[0])&&(('x' == argv[4].a_w.w_symbol->s_name[1])))
- { /* this is a hexadecimal number: strip the "0x" and copy the rest to the buffer as ascii digits */
- i += sprintf((char *)&floatstring[i], "%s", &argv[4].a_w.w_symbol->s_name[2]);
+ { /* this is a hexadecimal number: copy to the buffer as raw binary */
+ result = sscanf(argv[4].a_w.w_symbol->s_name, "0x%X", &d);
+ if (result == 0)
+ {
+ post("packxbee_pack_remote_frame: argument 4 is not a hex string");
+ }
+ else
+ {
+ // put the significant part of the raw value into floatstring in big endian order
+ if (0 != ((d>>24) & 0x0FF)) digits = 4;
+ else if (0 != ((d>>16) & 0x0FF)) digits = 3;
+ else if (0 != ((d>>8) & 0x0FF)) digits = 2;
+ else digits = 1;
+ if (4 == digits) floatstring[i++] = (d>>24) & 0x0FF;
+ if (3 <= digits) floatstring[i++] = (d>>16) & 0x0FF;
+ if (2 <= digits) floatstring[i++] = (d>>8) & 0x0FF;
+ floatstring[i++] = d & 0x0FF;
+ }
}
else // if ((0 == strncmp("NI", argv[0].a_w.w_symbol->s_name, 2))||(0 == strncmp("DN", argv[0].a_w.w_symbol->s_name, 2)))
{ /* we hope it's just an ascii string for the NI command */
@@ -455,7 +472,6 @@ static void packxbee_pack_remote_frame(t_packxbee *x, t_symbol *s, int argc, t_a
{
c = argv[4].a_w.w_symbol->s_name[k];
if (0 == c) break;
- //checksum -= c;
floatstring[i++] = c;
}
}
@@ -464,10 +480,10 @@ static void packxbee_pack_remote_frame(t_packxbee *x, t_symbol *s, int argc, t_a
{
f = argv[4].a_w.w_float;
if (x->x_verbosity > 0) post("packxbee_pack_remote_frame float parameter %f", f);
- d = ((unsigned int)f)&0x0FF;
+ d = (unsigned int)f;
if (f != d)
{
- post ("packxbee_pack_remote_frame parameter not a positive integer from 0 to 255");
+ post ("packxbee_pack_remote_frame parameter not an integer");
}
else
{
@@ -528,6 +544,7 @@ static void packxbee_pack_frame(t_packxbee *x, t_symbol *s, int argc, t_atom *ar
unsigned char floatstring[256]; /* longer than the longest hex number with each character escaped plus the header and checksum overhead */
int length = 0;
unsigned char c, digits;
+ int result;
t_float f;
if (x->x_verbosity > 0) post("packxbee_AT s is %s, argc is %d", s->s_name, argc);
@@ -574,7 +591,23 @@ static void packxbee_pack_frame(t_packxbee *x, t_symbol *s, int argc, t_atom *ar
if (x->x_verbosity > 0) post("packxbee_AT symbol parameter %s", argv[1].a_w.w_symbol->s_name);
if (('0' == argv[1].a_w.w_symbol->s_name[0])&&(('x' == argv[1].a_w.w_symbol->s_name[1])))
{ /* this is a hexadecimal number: strip the "0x" and copy the rest to the buffer as ascii digits */
- i += sprintf((char *)&floatstring[i], "%s", &argv[1].a_w.w_symbol->s_name[2]);
+ result = sscanf(argv[1].a_w.w_symbol->s_name, "0x%X", &d);
+ if (result == 0)
+ {
+ post("packxbee_pack_remote_frame: argument 1 is not a hex string");
+ }
+ else
+ {
+ // put the significant part of the raw value into floatstring in big endian order
+ if (0 != ((d>>24) & 0x0FF)) digits = 4;
+ else if (0 != ((d>>16) & 0x0FF)) digits = 3;
+ else if (0 != ((d>>8) & 0x0FF)) digits = 2;
+ else digits = 1;
+ if (4 == digits) floatstring[i++] = (d>>24) & 0x0FF;
+ if (3 <= digits) floatstring[i++] = (d>>16) & 0x0FF;
+ if (2 <= digits) floatstring[i++] = (d>>8) & 0x0FF;
+ floatstring[i++] = d & 0x0FF;
+ }
}
else // if ((0 == strncmp("NI", argv[0].a_w.w_symbol->s_name, 2))||(0 == strncmp("DN", argv[0].a_w.w_symbol->s_name, 2)))
{ /* we hope it's just an ascii string for the NI command */
@@ -582,7 +615,6 @@ static void packxbee_pack_frame(t_packxbee *x, t_symbol *s, int argc, t_atom *ar
{
c = argv[1].a_w.w_symbol->s_name[k];
if (0 == c) break;
-// checksum -= c;
floatstring[i++] = c;
}
}
@@ -591,10 +623,10 @@ static void packxbee_pack_frame(t_packxbee *x, t_symbol *s, int argc, t_atom *ar
{
f = argv[1].a_w.w_float;
if (x->x_verbosity > 0) post("packxbee_AT float parameter %f", f);
- d = ((unsigned int)f)&0x0FF;
+ d = (unsigned int)f;
if (f != d)
{
- post ("packxbee_AT parameter not a positive integer from 0 to 255");
+ post ("packxbee_AT parameter not an integer");
}
else
{
diff --git a/xbee/xbeeio.pd b/xbee/xbeeio.pd
index 381bd1d..d8eacac 100644
--- a/xbee/xbeeio.pd
+++ b/xbee/xbeeio.pd
@@ -1,8 +1,8 @@
-#N canvas 260 333 984 636 10;
+#N canvas 262 331 984 636 10;
#X obj -4 -46 cnv 15 220 380 empty empty Get_Current_IO_Parameters
20 12 0 14 -204800 -13330 0;
-#X text 216 33 remote AT command: 64-bit address \, 16-bit address
-\, options \, command \, parameters;
+#X text 2 457 remote AT command: 64-bit address \, 16-bit address \,
+options \, command \, parameters;
#X msg 292 136 RAT 0x0013A200406BFE6C 0x9A17 2 D0 4;
#X obj 383 244 packxbee 2;
#X msg 355 306 devices;
@@ -149,7 +149,7 @@ get and set the I/O pins of a remote xbee;
#X obj 191 682 +;
#X obj 191 705 * 1.17188;
#X obj 191 729 nbx 7 14 -1e+37 1e+37 0 0 empty empty mV 56 8 0 10 -4034
--258113 -1 298.829 256;
+-258113 -1 0 256;
#X text -40 56 Associate LED blink time:;
#X text 85 77 RSSI PWM time:;
#X text 60 602 supply voltage:;
@@ -158,23 +158,23 @@ get and set the I/O pins of a remote xbee;
#X obj 211 289 +;
#X text 281 292 Pull-up Resistor bitmap:;
#X obj 230 134 vradio 15 1 0 6 P0Val empty P0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 250 134 vradio 15 1 0 6 P1Val empty P1 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 270 134 vradio 15 1 0 6 P2Val empty P2 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 310 134 vradio 15 1 0 6 D1Val empty D1 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 330 134 vradio 15 1 0 6 D2Val empty D2 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 350 134 vradio 15 1 0 6 D3Val empty D3 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 370 134 vradio 15 1 0 6 D4Val empty D4 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 390 134 vradio 15 1 0 6 D5Val empty D5 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 290 134 vradio 15 1 0 6 empty D0Val D0 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 617 3 print other;
#X obj 112 37 * 10;
#X obj 112 59 nbx 7 14 -1e+37 1e+37 0 0 empty empty ms 56 8 0 10 -4034
@@ -184,31 +184,31 @@ get and set the I/O pins of a remote xbee;
#X obj 251 369 vradio 15 1 0 2 empty empty D7 0 -8 0 10 -4034 -260097
-1 0;
#X obj 271 369 vradio 15 1 0 2 empty empty P1 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 291 369 vradio 15 1 0 2 empty empty P0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 311 369 vradio 15 1 0 2 empty empty P2 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 331 369 vradio 15 1 0 2 empty empty D9 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 351 369 vradio 15 1 0 2 empty empty D5 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 371 369 vradio 15 1 0 2 empty empty DI 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 391 369 vradio 15 1 0 2 empty empty D8 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 411 369 vradio 15 1 0 2 empty empty D6 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 431 369 vradio 15 1 0 2 empty empty D0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 451 369 vradio 15 1 0 2 empty empty D1 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 491 369 vradio 15 1 0 2 empty empty D3 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 511 369 vradio 15 1 0 2 empty empty D4 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 471 369 vradio 15 1 0 2 empty empty D2 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 211 311 bits xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;
#X obj 133 465 vradio 15 1 0 2 empty empty D7 0 -8 0 10 -4034 -260097
@@ -306,25 +306,25 @@ get and set the I/O pins of a remote xbee;
#X obj 1000 79 cnv 15 140 160 empty empty IO_Samples 20 12 0 14 -261682
-66577 0;
#X obj 1016 111 nbx 5 14 -1e+37 1e+37 0 0 empty empty 1st 60 8 0 10
--260097 -86853 -86853 7184 256;
+-260097 -86853 -86853 0 256;
#X obj 1016 131 nbx 5 14 -1e+37 1e+37 0 0 empty empty 2nd 60 8 0 10
--260097 -86853 -86853 526 256;
+-260097 -86853 -86853 0 256;
#X obj 1016 151 nbx 5 14 -1e+37 1e+37 0 0 empty empty 3rd 60 8 0 10
--260097 -86853 -86853 526 256;
+-260097 -86853 -86853 0 256;
#X obj 1016 171 nbx 5 14 -1e+37 1e+37 0 0 empty empty 4th 60 8 0 10
--260097 -86853 -86853 525 256;
+-260097 -86853 -86853 0 256;
#X obj 1016 191 nbx 5 14 -1e+37 1e+37 0 0 empty empty 5th 60 8 0 10
--260097 -86853 -86853 525 256;
+-260097 -86853 -86853 0 256;
#X obj 1016 211 nbx 5 14 -1e+37 1e+37 0 0 empty empty 6th 60 8 0 10
-260097 -86853 -86853 0 256;
#X obj 933 375 vradio 15 1 0 2 empty empty A0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 912 375 vradio 15 1 0 2 empty empty A1 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 892 375 vradio 15 1 0 2 empty empty A2 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 872 375 vradio 15 1 0 2 empty empty A3 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 791 375 vradio 15 1 0 2 empty empty V+ 0 -8 0 10 -4034 -260097
-1 0;
#X obj 890 300 vradio 15 1 0 2 empty empty D0 0 -8 0 10 -4034 -260097
@@ -336,19 +336,19 @@ get and set the I/O pins of a remote xbee;
#X obj 829 300 vradio 15 1 0 2 empty empty D3 0 -8 0 10 -4034 -260097
-1 0;
#X obj 809 300 vradio 15 1 0 2 empty empty D4 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 789 300 vradio 15 1 0 2 empty empty D5 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 768 300 vradio 15 1 0 2 empty empty D6 0 -8 0 10 -4034 -260097
-1 0;
#X obj 748 300 vradio 15 1 0 2 empty empty D7 0 -8 0 10 -4034 -260097
-1 0;
#X obj 687 300 vradio 15 1 0 2 empty empty P0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 667 300 vradio 15 1 0 2 empty empty P1 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 647 300 vradio 15 1 0 2 empty empty P2 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X text 905 313 -ON;
#X text 905 297 -OFF;
#X text 947 388 -ON;
@@ -362,7 +362,7 @@ get and set the I/O pins of a remote xbee;
#X obj 893 204 vradio 15 1 0 2 empty empty D3 0 -8 0 10 -4034 -260097
-1 0;
#X obj 873 204 vradio 15 1 0 2 empty empty D4 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 853 204 vradio 15 1 0 2 empty empty D5 0 -8 0 10 -4034 -260097
-1 0;
#X obj 832 204 vradio 15 1 0 2 empty empty D6 0 -8 0 10 -4034 -260097
@@ -370,11 +370,11 @@ get and set the I/O pins of a remote xbee;
#X obj 812 204 vradio 15 1 0 2 empty empty D7 0 -8 0 10 -4034 -260097
-1 0;
#X obj 751 204 vradio 15 1 0 2 empty empty P0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 731 204 vradio 15 1 0 2 empty empty P1 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 711 204 vradio 15 1 0 2 empty empty P2 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X text 969 217 -ON;
#X text 969 201 -OFF;
#X obj 93 15 route IC LT IR %V RP V+ PR P0 P1 P2 D0 D1 D2 D3 D4 D5
@@ -805,23 +805,23 @@ IS;
#X restore 718 227 pd set_pin_functions XXXXXXXXXXXXXXXXXXXXXXXXXX
;
#X obj 718 79 vradio 15 1 0 6 empty empty P0 0 -8 0 10 -4034 -260097
--1 1;
+-1 0;
#X obj 752 79 vradio 15 1 0 6 empty empty P1 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 787 79 vradio 15 1 0 6 empty empty P2 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 857 79 vradio 15 1 0 6 empty empty D1 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 892 79 vradio 15 1 0 6 empty empty D2 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 927 79 vradio 15 1 0 6 empty empty D3 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X obj 962 79 vradio 15 1 0 6 empty empty D4 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 997 79 vradio 15 1 0 6 empty empty D5 0 -8 0 10 -4034 -260097
--1 3;
+-1 0;
#X obj 822 79 vradio 15 1 0 6 empty empty D0 0 -8 0 10 -4034 -260097
--1 2;
+-1 0;
#X text 1009 77 -Disabled;
#X text 1009 107 -Analog Input;
#X text 1009 122 -Digital Input;
@@ -857,18 +857,17 @@ IS;
#X text 27 -2 Associate LED blink time;
#X obj 1379 36 r D0Val;
#X obj 1320 478 route ZigBee_IO_Data_Sample_Rx_Indicator;
-#X text 248 72 set sample rate;
-#X floatatom 393 46 5 0 0 0 - - -;
-#X obj 378 69 f;
-#X msg 248 92 RAT 0x0013A200406BFE6C 0x9A17 2 IR \$1;
-#X obj 377 16 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+#X text 275 60 set sample rate;
+#X floatatom 388 52 5 0 0 0 - - -;
+#X obj 373 75 f;
+#X obj 373 30 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 1344 519 SAMPLE_FRAME;
#X floatatom 1320 563 5 0 0 0 - - -;
#X floatatom 1343 583 5 0 0 0 - - -;
#X symbolatom 1366 603 20 0 0 0 - - -;
#X floatatom 1412 645 5 0 0 0 - - -;
-#X msg 342 10 0;
+#X msg 248 60 0;
#X symbolatom 1389 623 10 0 0 0 - - -;
#X text 1220 562 frame_type (146);
#X obj 1320 541 unpack 0 0 s s 0;
@@ -885,13 +884,13 @@ IS;
#X obj 866 347 cnv 15 400 90 empty empty Analog_Inputs 20 12 0 14 -232576
-45076 0;
#X obj 869 380 nbx 5 14 -1e+37 1e+37 0 0 empty empty A0 40 8 0 10 -204800
--13330 -159808 526 256;
+-13330 -159808 0 256;
#X obj 929 380 nbx 5 14 -1e+37 1e+37 0 0 empty empty A1 40 8 0 10 -204800
--13330 -159808 526 256;
+-13330 -159808 0 256;
#X obj 989 380 nbx 5 14 -1e+37 1e+37 0 0 empty empty A2 40 8 0 10 -204800
--13330 -159808 525 256;
+-13330 -159808 0 256;
#X obj 1049 380 nbx 5 14 -1e+37 1e+37 0 0 empty empty A3 40 8 0 10
--204800 -13330 -159808 525 256;
+-204800 -13330 -159808 0 256;
#X obj 1109 380 nbx 5 14 -1e+37 1e+37 0 0 empty empty V+ 40 8 0 10
-204800 -13330 -159808 0 256;
#X obj 872 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty D0 8 20 0 10 -4034
@@ -903,33 +902,38 @@ IS;
#X obj 972 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty D3 8 20 0 10 -4034
-1 -258113 0 256;
#X obj 1002 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty D4 8 20 0 10
--4034 -1 -258113 1 256;
+-4034 -1 -258113 0 256;
#X obj 1032 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty D5 8 20 0 10
-4034 -1 -258113 0 256;
#X obj 1062 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty P0 8 20 0 10
--4034 -1 -258113 1 256;
+-4034 -1 -258113 0 256;
#X obj 1092 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty P1 8 20 0 10
--4034 -1 -258113 1 256;
+-4034 -1 -258113 0 256;
#X obj 1122 322 nbx 2 14 -1e+37 1e+37 0 0 empty empty P2 8 20 0 10
--4034 -1 -258113 1 256;
-#X msg 236 114 RAT 0x0013A200406BFE6C 0x9A17 2 V+ \$1;
-#X obj 515 99 nbx 5 14 -1e+37 1e+37 0 0 empty empty Supply_Voltage_Threshold
-0 -8 0 10 -4034 -13381 -1 259 256;
+-4034 -1 -258113 0 256;
+#X msg 270 114 RAT 0x0013A200406BFE6C 0x9A17 2 V+ \$1;
+#X obj 521 78 nbx 5 14 -1e+37 1e+37 0 0 empty empty Supply_Voltage_Threshold
+0 -8 0 10 -4034 -13381 -1 0 256;
#X obj 869 419 nbx 5 14 -1e+37 1e+37 0 0 empty empty A0_mV 40 8 0 10
--204800 -13330 -159808 617.009 256;
+-204800 -13330 -159808 0 256;
#X obj 869 399 * 1.17302;
#X obj 949 419 nbx 5 14 -1e+37 1e+37 0 0 empty empty A1_mV 40 8 0 10
--204800 -13330 -159808 617.009 256;
+-204800 -13330 -159808 0 256;
#X obj 949 399 * 1.17302;
#X obj 1029 419 nbx 5 14 -1e+37 1e+37 0 0 empty empty A2_mV 40 8 0
-10 -204800 -13330 -159808 615.836 256;
+10 -204800 -13330 -159808 0 256;
#X obj 1029 399 * 1.17302;
#X obj 1109 419 nbx 5 14 -1e+37 1e+37 0 0 empty empty A3_mV 40 8 0
-10 -204800 -13330 -159808 615.836 256;
+10 -204800 -13330 -159808 0 256;
#X obj 1109 399 * 1.17302;
#X obj 1189 419 nbx 5 14 -1e+37 1e+37 0 0 empty empty V+_mV 40 8 0
10 -204800 -13330 -159808 0 256;
#X obj 1189 399 * 1.17302;
+#X msg 248 92 RAT 0x0013A200406BFE6C 0x9A17 2 IR \$1;
+#X text 424 51 ms;
+#X obj 506 97 f;
+#X obj 506 48 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
@@ -938,7 +942,7 @@ IS;
#X connect 6 0 5 0;
#X connect 7 0 5 0;
#X connect 9 0 121 0;
-#X connect 9 1 210 0;
+#X connect 9 1 209 0;
#X connect 9 2 58 0;
#X connect 22 0 11 0;
#X connect 22 1 12 0;
@@ -1064,45 +1068,47 @@ IS;
#X connect 185 0 179 0;
#X connect 186 0 180 0;
#X connect 188 0 175 0;
-#X connect 189 0 195 0;
-#X connect 189 0 203 0;
+#X connect 189 0 194 0;
+#X connect 189 0 202 0;
#X connect 189 1 16 0;
#X connect 191 0 192 1;
-#X connect 192 0 193 0;
-#X connect 193 0 3 0;
-#X connect 194 0 192 0;
-#X connect 195 0 121 1;
-#X connect 200 0 193 0;
-#X connect 203 0 196 0;
-#X connect 203 1 197 0;
-#X connect 203 2 198 0;
-#X connect 203 3 201 0;
-#X connect 203 4 199 0;
-#X connect 210 0 211 0;
-#X connect 211 0 219 0;
-#X connect 211 1 220 0;
-#X connect 211 2 221 0;
-#X connect 211 3 222 0;
-#X connect 211 4 223 0;
-#X connect 211 5 224 0;
-#X connect 211 6 225 0;
-#X connect 211 7 226 0;
-#X connect 211 8 227 0;
-#X connect 211 9 214 0;
-#X connect 211 9 231 0;
-#X connect 211 10 215 0;
-#X connect 211 10 233 0;
-#X connect 211 11 216 0;
-#X connect 211 11 235 0;
-#X connect 211 12 217 0;
-#X connect 211 12 237 0;
-#X connect 211 13 218 0;
-#X connect 211 13 239 0;
-#X connect 211 14 208 0;
-#X connect 228 0 3 0;
-#X connect 229 0 228 0;
-#X connect 231 0 230 0;
-#X connect 233 0 232 0;
-#X connect 235 0 234 0;
-#X connect 237 0 236 0;
-#X connect 239 0 238 0;
+#X connect 192 0 239 0;
+#X connect 193 0 192 0;
+#X connect 194 0 121 1;
+#X connect 199 0 239 0;
+#X connect 202 0 195 0;
+#X connect 202 1 196 0;
+#X connect 202 2 197 0;
+#X connect 202 3 200 0;
+#X connect 202 4 198 0;
+#X connect 209 0 210 0;
+#X connect 210 0 218 0;
+#X connect 210 1 219 0;
+#X connect 210 2 220 0;
+#X connect 210 3 221 0;
+#X connect 210 4 222 0;
+#X connect 210 5 223 0;
+#X connect 210 6 224 0;
+#X connect 210 7 225 0;
+#X connect 210 8 226 0;
+#X connect 210 9 213 0;
+#X connect 210 9 230 0;
+#X connect 210 10 214 0;
+#X connect 210 10 232 0;
+#X connect 210 11 215 0;
+#X connect 210 11 234 0;
+#X connect 210 12 216 0;
+#X connect 210 12 236 0;
+#X connect 210 13 217 0;
+#X connect 210 13 238 0;
+#X connect 210 14 207 0;
+#X connect 227 0 3 0;
+#X connect 228 0 241 1;
+#X connect 230 0 229 0;
+#X connect 232 0 231 0;
+#X connect 234 0 233 0;
+#X connect 236 0 235 0;
+#X connect 238 0 237 0;
+#X connect 239 0 3 0;
+#X connect 241 0 227 0;
+#X connect 242 0 241 0;